主题
RKE2 新增 master 节点失败:critical configuration value mismatch between servers
问题现象
在已有 RKE2 集群中新增 master(control-plane + etcd)节点时,rke2-server 服务不断重启,无法加入集群。
bash
systemctl status rke2-server --no-pager -l输出显示:
text
Active: activating (auto-restart) (Result: exit-code)
Main PID: xxxx (code=exited, status=1/FAILURE)查看日志:
bash
journalctl -u rke2-server --no-pager -n 100关键错误:
text
time="..." level=warning msg="critical configuration mismatched: ClusterDNSs.slice[0].slice[13]"
time="..." level=warning msg="critical configuration mismatched: ClusterIPRanges.slice[0].IP.slice[13]"
time="..." level=warning msg="critical configuration mismatched: ClusterDNS.slice[13]"
time="..." level=warning msg="critical configuration mismatched: ClusterIPRange.IP.slice[13]"
time="..." level=warning msg="critical configuration mismatched: ServiceIPRange.IP.slice[13]"
time="..." level=warning msg="critical configuration mismatched: ServiceIPRanges.slice[0].IP.slice[13]"
time="..." level=fatal msg="Error: preparing server: failed to bootstrap cluster data: failed to validate server configuration: critical configuration value mismatch between servers"环境信息
- RKE2 版本:
v1.35.6+rke2r1 - 现有 master:
192.168.122.78 - 新增 master:
192.168.122.69 - 操作系统:RHEL 9 / Rocky Linux 9 系列
根因分析
RKE2 在加入新的 control-plane / etcd 节点时,会对比新节点与现有集群的关键配置,必须完全一致才能加入。这些关键配置包括:
cluster-cidr(Pod 网络 CIDR)service-cidr(Service 网络 CIDR)cluster-dns(由 service-cidr 派生)
如果第一台 master 初始化时显式指定了 cluster-cidr 和 service-cidr,后续所有 master/worker 节点必须使用完全相同的值。否则新节点会使用默认值,导致校验失败。
第一台 master 的配置
yaml
# /etc/rancher/rke2/config.yaml on 192.168.122.78
cluster-cidr: 10.12.0.0/16
service-cidr: 10.13.0.0/16新节点原配置
yaml
# /etc/rancher/rke2/config.yaml on 192.168.122.69
server: https://192.168.122.78:9345
token: xxx
kube-proxy-arg:
- "proxy-mode=ipvs"
node-name: 192.168.122.69
data-dir: /var/lib/rancher/rke2缺少 cluster-cidr 和 service-cidr,RKE2 默认使用 10.42.0.0/16 / 10.43.0.0/16,与现有集群冲突。
排查步骤
确认服务状态
bashsystemctl status rke2-server --no-pager -l查看最近日志
bashjournalctl -u rke2-server --no-pager -n 200对比新旧节点配置
在现有 master 上:
bashcat /etc/rancher/rke2/config.yaml在新增节点上:
bashcat /etc/rancher/rke2/config.yaml确认网络可达性
bashcurl -sk https://<现有master-ip>:9345 # 正常应返回 404 page not found检查是否有残留状态
bashfind /var/lib/rancher/rke2/server -type f如果之前失败过,应确保
/var/lib/rancher/rke2/server下没有残留的 etcd/tls 数据。
修复方法
1. 修改新节点配置
在新增 master 节点上编辑 /etc/rancher/rke2/config.yaml,补充与现有集群一致的 CIDR:
yaml
server: https://192.168.122.78:9345
token: xxx
kube-proxy-arg:
- "proxy-mode=ipvs"
node-name: 192.168.122.69
data-dir: /var/lib/rancher/rke2
cluster-cidr: 10.12.0.0/16
service-cidr: 10.13.0.0/162. 清理可能残留的 server 数据
如果之前失败时写入了部分数据,建议清理后重新加入:
bash
systemctl stop rke2-server
rm -rf /var/lib/rancher/rke2/server/
rm -rf /var/lib/rancher/rke2/agent/etc/*注意:仅清理新节点,不要清理现有集群 master 的数据!
3. 重启服务
bash
systemctl restart rke2-server4. 观察启动过程
bash
journalctl -u rke2-server -f首次加入时,RKE2 会从现有节点同步 etcd 数据并拉取镜像,日志中会出现大量 Pulling image ...,这是正常现象。等待几分钟后:
bash
systemctl status rke2-server --no-pager -l状态应变为 active (running)。
5. 在现有 master 上确认新节点已加入
bash
/var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get nodes -o wide预期输出类似:
text
NAME STATUS ROLES AGE VERSION
192.168.122.78 Ready control-plane,etcd,worker 31h v1.35.6+rke2r1
192.168.122.69 Ready control-plane,etcd,worker 5m v1.35.6+rke2r1常见问题
Q: 配置里的 disable-scheduler-node-taints: true 有没有影响?
A: 在当前 RKE2 版本(v1.35.6+rke2r1)中,该选项不存在,日志会提示:
text
Unknown flag --disable-scheduler-node-taints found in config.yaml, skipping这是一个警告,不会导致启动失败。如果目的是禁用 control-plane 节点的默认污点,需要确认当前版本是否支持 disable-control-plane-taints;此版本中未提供该参数。
Q: 为什么 slice[13] 会 mismatch?
A: RKE2 在比较 IP 地址时按字节对比。10.12.0.0/16 与默认 10.42.0.0/16 的第 2 个字节不同(12 vs 42),内部切片索引显示为 slice[13],指的是配置结构体中的第 14 个字节位置。
预防措施
- 统一配置管理:使用 Ansible、Terraform 或脚本统一生成所有节点的
/etc/rancher/rke2/config.yaml。 - 初始化时记录 CIDR:第一台 master 初始化时如果修改了默认
cluster-cidr/service-cidr,务必将相同值应用到所有后续节点。 - 新增节点前做配置校验:加入前先在现有 master 上查看
config.yaml,确保新节点配置一致。 - 避免手动修改已初始化集群的 CIDR:
cluster-cidr和service-cidr一旦确定,不能在不重建集群的情况下修改。
参考命令汇总
bash
# 查看服务状态
systemctl status rke2-server --no-pager -l
# 查看日志
journalctl -u rke2-server --no-pager -n 200
# 查看节点
/var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get nodes -o wide
# 查看配置
cat /etc/rancher/rke2/config.yaml
# 重启 rke2-server
systemctl restart rke2-server记录时间:2026-07-13
涉及版本:RKE2 v1.35.6+rke2r1