标签: #rke2
#k8s
#deployment
#rancher
#高可用
#运维
🚀 从零到一:手把手教你搭建生产级 RKE2 高可用集群 (HA)
还在为部署 Kubernetes 头疼?RKE2 来帮你!它轻量、安全、易用,是构建生产环境 K8s 集群的绝佳选择。今天,我们就来一起搭建一个坚如磐石的 RKE2 高可用(HA)集群,让你的业务稳稳的!
核心思想一句话: 用 3 个 server
节点扛起控制平面,再加一堆 agent
(worker)节点跑业务,前面架个“门面”(固定注册地址)统一接入,稳得很!
🧩 第一步:服务器基础配置
我们先规划好“战场”,准备好 5 台服务器:
- 控制平面 (Server Nodes – 3台,必须是奇数!):
10.228.22.60
命名为rke2-server-01
10.228.22.61
命名为rke2-server-02
10.228.22.62
命名为rke2-server-03
- 工作节点 (Agent/Worker Nodes – 2台):
10.228.22.65
命名为rke2-worker-01
10.228.22.66
命名为rke2-worker-02
为什么 Server 节点要奇数个?
这可不是玄学!RKE2 的核心数据库 etcd
需要“投票”来保证数据一致性。3 个节点,挂掉 1 个,剩下 2 个还能投票通过(超过半数),集群依然坚挺。如果是 4 个,挂掉 2 个,剩下 2 个就“僵持”了,集群就罢工了。所以,3、5、7… 奇数才是王道!
在所有 5 台服务器上,执行以下基础配置:
# 1. 关闭烦人的防火墙(生产环境请按需开放端口,测试环境先关了省心)
sudo systemctl stop firewalld && sudo systemctl disable firewalld
# 2. 关闭 SELinux(同样,生产环境可配置策略,测试环境先禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# 3. 关闭 Swap(K8s 的硬性要求)
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 4. 为每台服务器设置正确的主机名(以 rke2-server-01 为例,其他机器请替换)
sudo hostnamectl set-hostname rke2-server-01
# 5. 配置本地 hosts 文件,让节点们能互相“叫名字”
cat >> /etc/hosts << EOF
10.228.22.60 rke2-server-01 rke2-server-01.contoso.intra
10.228.22.61 rke2-server-02 rke2-server-02.contoso.intra
10.228.22.62 rke2-server-03 rke2-server-03.contoso.intra
10.228.22.65 rke2-worker-01 rke2-worker-01.contoso.intra
10.228.22.66 rke2-worker-02 rke2-worker-02.contoso.intra
EOF
[!note]
小贴士: 重启一下服务器,让所有配置生效!sudo reboot
🏗 第二步:启动第一个 Server 节点
我们从 rke2-server-01
开始,它是整个集群的第一台主机。
登录到 rke2-server-01
:
# 1. 创建 RKE2 的配置目录
sudo mkdir -p /etc/rancher/rke2/
# 2. 创建并编辑核心配置文件 config.yaml
# 这里我们定义了集群的“共享密码”(token)、安全证书的备用名(tls-san)、默认镜像仓库,以及给 Server 节点“打标签”防止业务 Pod 跑上来。
cat > /etc/rancher/rke2/config.yaml <<EOL
token: 123456 # 这就是集群的“共享密码”,其他节点靠它加入
tls-san: # 这是重点!为了让集群更健壮,我们把所有 Server 节点的 IP 和域名都加进来
- rke2-server-01.contoso.intra
- rke2-server-02.contoso.intra
- rke2-server-03.contoso.intra
- rke2-server-01
- rke2-server-02
- rke2-server-03
- 10.228.22.60
- 10.228.22.61
- 10.228.22.62
system-default-registry: registry.cn-hangzhou.aliyuncs.com # 国内用户福音,加速镜像拉取
node-taint: # 给 Server 节点打上“污点”,让业务 Pod 默认不会调度到控制平面上,保证其稳定性
- "node-role.kubernetes.io/control-plane=true:NoSchedule"
EOL
# 3. 使用国内镜像源一键安装 RKE2 Server
# INSTALL_RKE2_MIRROR=cn 这个参数非常关键,能让你的下载速度飞起来!
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
# 4. 启动并设置 RKE2 Server 服务开机自启
sudo systemctl enable --now rke2-server.service
# 5. (可选)查看安装生成的 token,理论上和你配置文件里的一样,但确认一下总没错
sudo cat /var/lib/rancher/rke2/server/node-token
现在,你的第一个控制节点就启动啦!它会自动初始化 etcd
数据库和 Kubernetes API Server。
🤝 第三步:扩大控制平面 —— 加入另外两个 Server 节点
接下来,我们把 rke2-server-02
和 rke2-server-03
也拉入伙,组成高可用“铁三角”。
登录到 rke2-server-02
(和 rke2-server-03
操作完全一样):
# 1. 创建配置目录
sudo mkdir -p /etc/rancher/rke2/
# 2. 创建配置文件
# 注意这里的 `server` 参数,指向第一个节点的 9345 端口,这是 RKE2 的注册端口。
# `tls-san` 也要配置齐全,保证证书在所有节点上都有效。
cat > /etc/rancher/rke2/config.yaml <<EOL
server: https://rke2-server-01:9345 # 告诉新节点,去 rke2-server-01 那里“报到”
token: 123456 # 用和第一个节点相同的“共享密码”
system-default-registry: registry.cn-hangzhou.aliyuncs.com
tls-san:
- rke2-server-01.contoso.intra
- rke2-server-02.contoso.intra
- rke2-server-03.contoso.intra
- rke2-server-01
- rke2-server-02
- rke2-server-03
- 10.228.22.60
- 10.228.22.61
- 10.228.22.62
node-taint:
- "node-role.kubernetes.io/control-plane=true:NoSchedule"
EOL
# 3. 安装 RKE2 Server
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
# 4. 启动服务
sudo systemctl enable --now rke2-server.service
# 5. (强烈建议)实时查看日志,确保节点成功加入集群
sudo journalctl -u rke2-server -f
看到日志里出现 ... joined successfully
之类的字样,就说明成功啦!用同样的方法搞定 rke2-server-03
。
🧪 第四步:验货!确认集群是否健康
在任意一个 Server 节点上(比如 rke2-server-01
),执行以下命令,看看我们的“铁三角”是否都准备就绪。
# 设置环境变量,方便后续使用 kubectl
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
export PATH=$PATH:/var/lib/rancher/rke2/bin
# 查看节点状态
kubectl get nodes
# 用 echo 命令追加配置到 .bashrc(避免手动编辑出错)
echo 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml' >> ~/.bashrc
echo 'export PATH=$PATH:/var/lib/rancher/rke2/bin' >> ~/.bashrc
# 重新加载 .bashrc,让配置立即生效(无需重启终端)
source ~/.bashrc
你应该会看到类似下面的输出,三个 Server 节点都显示 Ready
,大功告成!
NAME STATUS ROLES AGE VERSION
rke2-server-01 Ready control-plane,etcd,master 5m v1.33.5+rke2r1
rke2-server-02 Ready control-plane,etcd,master 2m v1.33.5+rke2r1
rke2-server-03 Ready control-plane,etcd,master 1m v1.33.5+rke2r1
🚚 第五步:添加打工人 —— 加入 Worker 节点
控制平面搭好了,该让 worker
节点上场干活了!它们负责运行你的应用容器。
登录到 rke2-worker-01
(和 rke2-worker-02
操作一样):
# 1. 创建配置目录
sudo mkdir -p /etc/rancher/rke2/
# 2. 创建配置文件
# 注意 `INSTALL_RKE2_TYPE="agent"`,这告诉安装脚本我们要装的是工作节点。
# `server` 参数可以指向任意一个 Server 节点,为了高可用,我们把三个都列出来,用逗号分隔。
cat > /etc/rancher/rke2/config.yaml <<EOL
server: https://rke2-server-01:9345
token: 123456
EOL
# 3. 安装 RKE2 Agent
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="agent" sh -
# 4. 启动并设置 Agent 服务开机自启
sudo systemctl enable --now rke2-agent.service
再次回到任意 Server 节点,执行 kubectl get nodes
,你应该能看到两个 Worker 节点也加入了集群!
NAME STATUS ROLES AGE VERSION
rke2-server-01 Ready control-plane,etcd,master 10m v1.xx.x+rke2r1
rke2-server-02 Ready control-plane,etcd,master 7m v1.xx.x+rke2r1
rke2-server-03 Ready control-plane,etcd,master 6m v1.xx.x+rke2r1
rke2-worker-01 Ready <none> 1m v1.xx.x+rke2r1
rke2-worker-02 Ready <none> 1m v1.xx.x+rke2r1
🎉 恭喜你!一个功能完备、高可用的 RKE2 Kubernetes 集群已经成功部署!
📌 最后的小贴士
tls-san
是灵魂: 务必在所有 Server 节点的配置中,把所有可能用于访问集群的 IP 和域名都加进去,否则会出现证书错误。- 配置一致性: 所有 Server 节点的关键配置(如
cluster-cidr
,service-cidr
等)必须保持一致,否则节点无法加入。 - 国内加速:
INSTALL_RKE2_MIRROR=cn
和system-default-registry
能极大提升部署体验。 - 下一步: 集群搭好了,可以开始部署你的应用啦!或者,考虑在前面加一个负载均衡器(如 Nginx、HAProxy),把
https://<LB_IP>:6443
作为你访问 Kubernetes API 的统一入口,那就更完美了!
现在就动手试试吧!遇到任何问题,欢迎在评论区留言交流。觉得有用,别忘了点赞、在看、分享给你的小伙伴!我们下期再见!
(点击上方蓝色标题即可跳转阅读,关注公众号「极客运维研习社」,获取更多技术实操手册,让运维效率翻倍~)
此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/4192.htm