使用 IPVS 模式安装 RKE2 集群
后知后觉 暂无评论

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

完成安装后:

检查集群状态

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

有正常的生成的路由规则则正常。


附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。