RKE2 学习笔记

Posted by Ksd on November 15, 2023

RKE2 国内启动

# mkdir -p /etc/rancher/rke2
# cat > /etc/rancher/rke2/config.yaml << EOL
system-default-registry: registry.cn-hangzhou.aliyuncs.com
EOL

# curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
# systemctl enable rke2-server.service
# systemctl start rke2-server.service

RKE2 COMMAND

参考:https://forums.rancher.cn/t/rke2-commands/2110

网络选项

默认 CNI 为 Canal,RKE2 v1.21 开始支持 Cilium 和 Calico。

使用 Cilium CNI 启动:

# mkdir -p /etc/rancher/rke2
# cat > /etc/rancher/rke2/config.yaml << EOL
system-default-registry: registry.cn-hangzhou.aliyuncs.com
cni: cilium
EOL

# curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
# systemctl enable rke2-server.service
# systemctl start rke2-server.service

使用 Calico CNI 启动:

# mkdir -p /etc/rancher/rke2
# cat > /etc/rancher/rke2/config.yaml << EOL
system-default-registry: registry.cn-hangzhou.aliyuncs.com
cni: calico
EOL

# curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
# systemctl enable rke2-server.service
# systemctl start rke2-server.service

RKE2 的高可用

虽然官网说需要一个固定的注册地址,放在放在 Server 节点的前面,允许其他节点注册到集群。但实际操作,并不需要这样做。

因为,无论是注册的端口 9345,还是 api-server 的端口 6443。当 RKE2 启动 kubelet 并且必须连接到 Kubernetes api-server 时,它通过 rke2 agent 进程进行连接,该进程充当客户端负载均衡器。

也就是说,RKE2 agent 会自动做一个 HA 的连接,配置如下:

# cat /var/lib/rancher/rke2/agent/etc/rke2-agent-load-balancer.json
{
  "ServerURL": "https://172.16.1.134:9345",
  "ServerAddresses": [
    "172.16.0.25:9345",
    "172.16.1.129:9345",
    "172.16.1.134:9345"
  ],
  "Listener": null
}root@rke2-w1:~#
root@rke2-w1:~# cat /var/lib/rancher/rke2/agent/etc/rke2-api-server-agent-load-balancer.json
{
  "ServerURL": "https://172.16.1.134:6443",
  "ServerAddresses": [
    "172.16.0.25:6443",
    "172.16.1.129:6443",
    "172.16.1.134:6443"
  ],
  "Listener": null

当有master 节点被移除时,讲会自动从文件中剔除。

管理 Server 角色

官网地址:https://docs.rke2.io/zh/install/server_roles

按照官网禁用 etcd 和 control-plane 都没有问题,但对应的节点都有 worker 角色,也就是说都可以创建业务 pod,目前没找到什么好的方法,只能通过污点去禁止调度:

# /etc/rancher/rke2/config.yaml
node-taint:
  - "node-role.kubernetes.io/control-plane:NoSchedule"