k3s 简介
K3s 是一个轻量级的 Kubernetes 发行版,它针对边缘计算、物联网等场景进行了高度优化。K3s 有以下增强功能:
- 打包为单个二进制文件。
- 使用基于 sqlite3 的轻量级存储后端作为默认存储机制。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。
- 封装在简单的启动程序中,通过该启动程序处理很多复杂的 TLS 和选项。
- 默认情况下是安全的,对轻量级环境有合理的默认值。
- 添加了简单但功能强大的batteries-included功能,例如:本地存储提供程序,服务负载均衡器,Helm controller 和 Traefik Ingress controller。
- 所有 Kubernetes control-plane 组件的操作都封装在单个二进制文件和进程中,使 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
- 最大程度减轻了外部依赖性,K3s 仅需要 kernel 和 cgroup 挂载。 K3s 软件包需要的依赖项包括:
- containerd
- Flannel
- CoreDNS
- CNI
- 主机实用程序(iptables、socat 等)
- Ingress controller(Traefik)
- 嵌入式服务负载均衡器(service load balancer)
- 嵌入式网络策略控制器(network policy controller)
适用场景
K3s 适用于以下场景:
- 边缘计算-Edge
- 物联网-IoT
- CI
- Development
- ARM
- 嵌入 K8s
由于运行 K3s 所需的资源相对较少,所以 K3s 也适用于开发和测试场景。
Red Hat/CentOS Enterprise Linux 的额外准备工作
建议关闭 firewalld:
systemctl disable firewalld --now
安装
安装过程极其简单,不需要提前安装 runtime,安装 k3s 的时候会自动安装默认的 containerd。也不需要提前安装数据库,默认使用 sqlite3 做后端数据库,当然也可以手动指定使用其他数据库。国内也有相应的镜像加速,只需要通过指定INSTALL_K3S_MIRROR=cn
即可,比如:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_CHANNEL=v1.31 K3S_KUBECONFIG_OUTPUT=/root/.kube/config sh -s - \
--node-name=k3s-master \
--cluster-cidr=10.3.0.0/16 \
--service-cidr=172.16.0.0/16 \
--service-node-port-range=30000-40000 \
--default-local-storage-path=/data/k3s-storage \
--system-default-registry=registry.cn-hangzhou.aliyuncs.com
INSTALL_K3S_CHANNEL=v1.31
:国内镜像指定安装 1.31 版本。INSTALL_K3S_MIRROR=cn
:指定 K3s 的二进制文件从国内的阿里云对象存储上去拉取。--node-name
: 手动设定节点名称--cluster-cidr
:用于 Pod IP 的网络 CIDR--service-cidr
:用于 service IP 的网络 CIDR--service-node-port-range
:为具有 NodePort 可见性的服务保留的端口范围--default-local-storage-path
:本地存储类的默认存储路径--system-default-registry
:指定 K3s 的系统镜像从国内的阿里云镜像仓库
更多安装参数参考:https://docs.rancher.cn/docs/k3s/installation/install-options/server-config/_index
最后如出现以下提示则安装成功:
Complete!
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
初步使用
设定补全:
source <(kubectl completion bash) # 在 bash 中设置当前 shell 的自动补全,要先安装 bash-completion 包
echo "source <(kubectl completion bash)" >> ~/.bashrc # 在你的 bash shell 中永久地添加自动补全
查看节点信息:
# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s-master Ready control-plane,master 14m v1.31.10+k3s1 192.168.4.6 <none> Rocky Linux 8.7 (Green Obsidian) 4.18.0-425.3.1.el8.x86_64 containerd://2.0.5-k3s1.32
#
# kubectl get pods -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-69b4d6d85c-dcf79 1/1 Running 0 16m 10.3.0.4 k3s-master <none> <none>
kube-system helm-install-traefik-crd-9lpls 0/1 Completed 0 16m 10.3.0.5 k3s-master <none> <none>
kube-system helm-install-traefik-z9frf 0/1 Completed 1 16m 10.3.0.6 k3s-master <none> <none>
kube-system local-path-provisioner-864d7dff5d-kwwfb 1/1 Running 0 16m 10.3.0.2 k3s-master <none> <none>
kube-system metrics-server-69969b57cb-grgm7 1/1 Running 0 16m 10.3.0.3 k3s-master <none> <none>
kube-system svclb-traefik-321df4cf-9qvmh 2/2 Running 0 10m 10.3.0.7 k3s-master <none> <none>
kube-system traefik-5755fb5747-trfwm 1/1 Running 0 10m 10.3.0.8 k3s-master <none> <none>
#
# kubectl get svc -A -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 172.16.0.1 <none> 443/TCP 17m <none>
kube-system kube-dns ClusterIP 172.16.0.10 <none> 53/UDP,53/TCP,9153/TCP 17m k8s-app=kube-dns
kube-system metrics-server ClusterIP 172.16.156.146 <none> 443/TCP 17m k8s-app=metrics-server
kube-system traefik LoadBalancer 172.16.173.64 192.168.4.6 80:37204/TCP,443:36021/TCP 10m app.kubernetes.io/instance=traefik-kube-system,app.kubernetes.io/name=traefik
k3s 维护
如果想停止 k3s,只需执行systemctl stop k3s
即可。
删除 k3s
在 server 节点执行:
/usr/local/bin/k3s-killall.sh
/usr/local/bin/k3s-uninstall.sh
更多 k3s 文档查看:https://docs.rancher.cn/docs/k3s/_index
评论