RKE 是 Rancher 公司推出的 Kubernetes 发行版,迭代速度要慢于官方一些,其中 RKE2 相比于 RKE1 的容器运行时换为 containerd。
同时 RKE2 的最大优点就是与上游保持了高度一致,没有像 k3s 一样魔改了很多功能定义。这样针对迁移和使用习惯来说更加简单便捷。
环境准备
环境准备工作和 Kubernetes 基本一致,需要注意的是如果想使用 IPVS Mode 的话,需要配置内核模块。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
## 手动加载下模块
sudo modprobe overlay
sudo modprobe br_netfilter
## 配置 sysctl 参数,并保持重启依然生效
cat <<EOF | sudo tee /etc/sysctl.d/rke2.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
## 应用 sysctl 参数,无需重启
sudo sysctl --system
安装 IPVS 所需工具链
sudo apt install -y ipset ipvsadm
配置 IPVS 内核模块
cat <<EOF | sudo tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
# 手动加载下模块
sudo modprobe ip_vs
sudo modprobe ip_vs_rr
sudo modprobe ip_vs_wrr
sudo modprobe ip_vs_sh
sudo modprobe nf_conntrack
配置完成后重启检查内核模块(输出结果大于四一般就是正常)
lsmod | grep ip_vs | wc -l
如果是由 NetworkManager 托管网卡的发行版,比如 CentOS 或 RHEL 等,还需要按【此文档】操作,防止 CNI 网络插件与 NetworkManager 冲突。
安装
控制节点
准备安装配置文件 /etc/rancher/rke2/config.yaml
write-kubeconfig-mode: "0644"
kube-proxy-arg:
- proxy-mode=ipvs
- ipvs-strict-arp=true
debug: true
配置文件指定了生成的控制平面授权文件权限,和指定 IPVS 模式运行。
可以直接使用下面的命令进行安装
curl -sfL https://get.rke2.io | sudo sh -
配置服务启动
sudo systemctl enable rke2-server.service
启动服务
sudo systemctl start rke2-server.service
查看日志
sudo journalctl -u rke2-server -f
完成安装后:
- 集群操控组件都会安装至
/var/lib/rancher/rke2/bin/
,包括kubectl
、crictl
和ctr
; - 卸载清理脚本
rke2-killall.sh
和rke2-uninstall.sh
被安装至/usr/local/bin
,如果配置了变量INSTALL_RKE2_TAR_PREFIX
则会被安装到此变量路径中; - 集群控制授权文件会被写入
/etc/rancher/rke2/rke2.yaml
,默认下仅 root 用户可访问; - 集群注册文件会被写入
/var/lib/rancher/rke2/server/node-token
,用于向集群中加入控制节点或工作节点;
检查集群状态
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
/var/lib/rancher/rke2/bin/kubectl get nodes
工作节点
控制节点中的配置文件里的字符串就是集群认证密钥,将其复制出来,方便一会加入工作节点。
sudo cat /var/lib/rancher/rke2/server/node-token
在希望加入集群的工作节点上创建配置文件 /etc/rancher/rke2/config.yaml
server: https://[控制节点域名或地址]:9345
token: [上面复制的认证密钥]
kube-proxy-arg:
- proxy-mode=ipvs
- ipvs-strict-arp=true
小贴士:需要注意每个节点必须有唯一的主机名,如果没有则需要在配置文件中添加 node-name
参数,且保证每个节点的配置文件的此参数值唯一。
然后执行安装脚本
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sudo sh -
配置服务启动
sudo systemctl enable rke2-agent.service
启动服务
sudo systemctl start rke2-agent.service
配置
配置控制授权
为了方便使用,将普通用户授权为集群管理用户,且在生产环境中只建议使用普通用户管理容器集群。
mkdir ~/.kube/
sudo cp /etc/rancher/rke2/rke2.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
sudo chmod 600 ~/.kube/config
同时为了使用 crictl
需要将配置文件软链到标准路径下:
sudo ln -s /var/lib/rancher/rke2/agent/etc/crictl.yaml /etc/crictl.yaml
配置环境变量
因为 rke2 集群的组件都被安装至非常规目录,因此需要配置环境变量才能直接执行。
echo 'export PATH=/var/lib/rancher/rke2/bin:$PATH' | sudo tee /etc/profile.d/rke2.sh
重新登录终端生效,如果使用普通用户对集群进行管理(也只推荐这样操作),但 sudo
命令对 PATH 存在限制,为了让普通用户通过 sudo
使用命令时不报错,需要配置 sudo
可继承环境变量。执行 sudo visudo
,在 secure_path
中添加被允许的路径(/var/lib/rancher/rke2/bin
)。
Defaults secure_path="/var/lib/rancher/rke2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
配置自动补全
默认情况下不会生成自动补全,为了方便使用手动生成配置文件。
sudo mkdir -p /etc/bash_completion.d/
curl -s https://raw.githubusercontent.com/containerd/containerd/main/contrib/autocomplete/ctr | sudo tee /etc/bash_completion.d/ctr
crictl completion bash | sudo tee /etc/bash_completion.d/crictl
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
配置 Helm
参考文章 从零开始的 Kubernetes 学习笔记(三) #5.1 部分
检查
全部配置完成后重新登录终端,检查集群状态:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
rke1 Ready control-plane,etcd,master 1h v1.25.11+rke2r1
rke2 Ready <none> 1h v1.25.11+rke2r1
rke3 Ready <none> 1h v1.25.11+rke2r1
检查节点状态
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cloud-controller-manager-rke1 1/1 Running 0 (1h ago) 1h
kube-system etcd-rke1 1/1 Running 0 (1h ago) 1h
kube-system helm-install-rke2-canal-rfjks 0/1 Completed 0 1h
kube-system helm-install-rke2-coredns-bspcz 0/1 Completed 0 1h
kube-system helm-install-rke2-ingress-nginx-22kf7 0/1 Completed 0 1h
kube-system helm-install-rke2-metrics-server-5vh7m 0/1 Completed 0 1h
kube-system helm-install-rke2-snapshot-controller-77s88 0/1 Completed 0 1h
kube-system helm-install-rke2-snapshot-controller-crd-29j25 0/1 Completed 0 1h
kube-system helm-install-rke2-snapshot-validation-webhook-74lpj 0/1 Completed 0 1h
kube-system kube-apiserver-rke1 1/1 Running 0 (1h ago) 1h
kube-system kube-controller-manager-rke1 1/1 Running 1 (1h ago) 1h
kube-system kube-proxy-rke1 1/1 Running 1 (1h ago) 1h
kube-system kube-proxy-rke2 1/1 Running 1 (1h ago) 1h
kube-system kube-proxy-rke3 1/1 Running 1 (1h ago) 1h
kube-system kube-scheduler-rke1 1/1 Running 1 (1h ago) 1h
kube-system rke2-canal-mxhb7 2/2 Running 1 (1h ago) 1h
kube-system rke2-canal-s6mp5 2/2 Running 1 (1h ago) 1h
kube-system rke2-canal-v9clh 2/2 Running 1 (1h ago) 1h
kube-system rke2-coredns-rke2-coredns-546587f99c-6dzzr 1/1 Running 1 (1h ago) 1h
kube-system rke2-coredns-rke2-coredns-546587f99c-zx5g4 1/1 Running 1 (1h ago) 1h
kube-system rke2-coredns-rke2-coredns-autoscaler-797c865dbd-q2t57 1/1 Running 1 (1h ago) 1h
kube-system rke2-ingress-nginx-controller-76qv7 1/1 Running 1 (1h ago) 1h
kube-system rke2-ingress-nginx-controller-7wgjl 1/1 Running 1 (1h ago) 1h
kube-system rke2-ingress-nginx-controller-c9ldq 1/1 Running 1 (1h ago) 1h
kube-system rke2-metrics-server-78b84fff48-bj4tf 1/1 Running 1 (1h ago) 1h
kube-system rke2-snapshot-controller-849d69c748-gwcjd 1/1 Running 1 (1h ago) 1h
kube-system rke2-snapshot-validation-webhook-654f6677b-qn58z 1/1 Running 1 (1h ago) 1h
检查 IPVS 状态
sudo ipvsadm -ln
有正常的生成的路由规则则正常。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-09-14 11:32 AM