安装k3s

K3s 是轻量级的 Kubernetes。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。

k3s 文档:https://docs.rancher.cn/docs/k3s/_index

K3s介绍

什么是 K3s?

K3s 是一个完全兼容的 Kubernetes 发行版,具有以下增强功能:

为什么叫 K3s?

我们希望安装的 Kubernetes 只占用一半的内存。Kubernetes 是一个 10 个字母的单词,简写为 K8s。Kubernetes 的一半就是一个 5 个字母的单词,因此简写为 K3s。K3s 没有全称,也没有官方的发音。

适用场景

K3s 适用于以下场景:

由于运行 K3s 所需的资源相对较少,所以 K3s 也适用于开发和测试场景。在这些场景中,如果开发或测试人员需要对某些功能进行验证,或对某些问题进行重现,那么使用 K3s 不仅能够缩短启动集群的时间,还能够减少集群需要消耗的资源。与此同时,Rancher 中国团队推出了一款针对 K3s 的效率提升工具:AutoK3s。只需要输入一行命令,即可快速创建 K3s 集群并添加指定数量的 master 节点和 worker 节点。如需详细了解 AutoK3s,请参考AutoK3s 功能介绍

安装Docker

使用 docker 官方安装脚本:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
usermod -aG docker `whoami`

另一种方式是使用 Rancher 的 Docker 安装脚本,该脚本可用于较新的 Docker 版本。

curl https://releases.rancher.com/install-docker/<version-number>.sh | sh

version-number 可以在查看:https://github.com/rancher/install-docker/blob/master/dist/ ,比如:

curl https://releases.rancher.com/install-docker/25.0.sh | sh

请注意,必须应用以下 /etc/sysctl.conf 设置:

net.bridge.bridge-nf-call-iptables=1

启动 docker

systemctl enable docker && systemctl start docker

在线安装

K3s 提供了一个安装脚本,可以方便地将其作为服务安装在基于 systemd 或 openrc 的系统上。该脚本可在 https://get.k3s.io 获得。要使用这种方法安装 K3s,只需运行:

curl -sfL https://get.k3s.io | sh - --docker

备注:

中国用户,可以使用以下方法加速安装:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

运行此安装后:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.28.7+k3s1 sh -s - --docker

稍等片刻,查看 docker 容器:

sudo docker ps

查看安装k3s可以配置的参数:

k3s server -h

当k3s安装成功之后,我们也可以修改 /etc/systemd/system/k3s.service 中的启动参数

[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
Type=notify
EnvironmentFile=/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s \
server \
'--docker' \

根据需要,可以调整下 K3s 的服务配置文件,以将 K3s 的默认容器引擎从 Containerd 切换到 Docker,或者不部署 traefik

ExecStart=/usr/local/bin/k3s server --docker --no-deploy traefik

之后保存退出,执行命令重新加载新的服务配置文件:

systemctl daemon-reload
systemctl restart k3s

集群访问

/etc/rancher/k3s/k3s.yaml 中存储的 kubeconfig 文件用于配置对 Kubernetes 集群的访问。如果你已经安装了上游的 Kubernetes 命令行工具(如 kubectl 或 helm),你需要用正确的 kubeconfig 路径配置它们。这可以通过导出 KUBECONFIG 环境变量或调用 --kubeconfig 命令行标志来完成。有关详细信息,请参阅以下示例。

使用 KUBECONFIG 环境变量:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get pods --all-namespaces
helm ls --all-namespaces

或者在命令中指定 kubeconfig 文件的位置:

kubectl --kubeconfig /etc/rancher/k3s/k3s.yaml get pods --all-namespaces
helm --kubeconfig /etc/rancher/k3s/k3s.yaml ls --all-namespaces

使用 kubectl 从外部访问集群

/etc/rancher/k3s/k3s.yaml 复制到位于集群外部的主机上的 ~/.kube/config。然后,将 server 字段的值替换为你 K3s Server 的 IP 或名称。现在,你可以使用 kubectl 来管理 K3s 集群。

cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config

检查状态

查看kubectl是否安装:

$ which kubectl
$ kubectl version
Client Version: v1.29.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.29.4+k3s1

查看k3s版本和服务运行状态:

$ k3s --version
k3s version v1.29.4+k3s1 (94e29e2e)
go version go1.21.9
$ systemctl status k3s

查看节点状态:

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
doris-01 Ready control-plane,master 91m v1.29.4+k3s1
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
doris-01 Ready control-plane,master 92m v1.29.4+k3s1 192.168.1.107 <none> CentOS Linux 7 (Core) 3.10.0-1160.71.1.el7.x86_64 containerd://1.7.15-k3s1

查看命名空间:

$ kubectl get ns
NAME STATUS AGE
kube-system Active 92m
kube-public Active 92m
kube-node-lease Active 92m
default Active 92m

查看运行状态:

$ kubectl get all -n kube-system
NAME READY STATUS RESTARTS AGE
pod/coredns-6799fbcd5-gjl6m 1/1 Running 0 92m
pod/local-path-provisioner-6c86858495-l29k2 1/1 Running 0 92m
pod/helm-install-traefik-crd-4gsfn 0/1 Completed 0 92m
pod/helm-install-traefik-6j2ch 0/1 Completed 1 92m
pod/metrics-server-54fd9b65b-98rld 1/1 Running 0 92m
pod/svclb-traefik-231ab742-j2qfs 2/2 Running 0 91m
pod/traefik-7d5f6474df-s6srn 1/1 Running 0 91m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 92m
service/metrics-server ClusterIP 10.43.120.4 <none> 443/TCP 92m
service/traefik LoadBalancer 10.43.104.97 192.168.1.107 80:30484/TCP,443:32566/TCP 91m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/svclb-traefik-231ab742 1 1 1 1 1 <none> 91m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/coredns 1/1 1 1 92m
deployment.apps/local-path-provisioner 1/1 1 1 92m
deployment.apps/metrics-server 1/1 1 1 92m
deployment.apps/traefik 1/1 1 1 91m
NAME DESIRED CURRENT READY AGE
replicaset.apps/coredns-6799fbcd5 1 1 1 92m
replicaset.apps/local-path-provisioner-6c86858495 1 1 1 92m
replicaset.apps/metrics-server-54fd9b65b 1 1 1 92m
replicaset.apps/traefik-7d5f6474df 1 1 1 91m
NAME COMPLETIONS DURATION AGE
job.batch/helm-install-traefik-crd 1/1 32s 92m
job.batch/helm-install-traefik 1/1 34s 92m

配置集群

添加 worker 节点

在master节点查看_K3S_TOKEN_:

$ cat /var/lib/rancher/k3s/server/node-token
K1069e97c40ac7433f5e4ca318e3945d2684fcc58813588305743a9bc17582f160e::server:ca28a1e542ce5030bcf6031d0c4c8ef4

在worker节点安装,这里使用 192.168.1.109 节点安装:

注意:192.168.1.109 节点 需要先安装好 docker。

k3s_url="https://192.168.1.107:6443"
k3s_token="K1069e97c40ac7433f5e4ca318e3945d2684fcc58813588305743a9bc17582f160e::server:ca28a1e542ce5030bcf6031d0c4c8ef4"
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=${k3s_url} K3S_TOKEN=${k3s_token} sh -s - --docker

在 master 节点(192.168.1.107)查看节点:

$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
doris-01 Ready control-plane,master 50m v1.29.4+k3s1
doris-03 Ready <none> 67s v1.29.4+k3s1

卸载

卸载 k3s:

/usr/local/bin/k3s-uninstall.sh
/usr/local/bin/k3s-agent-uninstall.sh

清理 docker 容器:

docker rm -f $(docker ps -aq)
K8s安装Cert Manager
通过k3sup安装k3s