Skip to content

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-cidrservice-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-cidrservice-cidr,RKE2 默认使用 10.42.0.0/16 / 10.43.0.0/16,与现有集群冲突。

排查步骤

  1. 确认服务状态

    bash
    systemctl status rke2-server --no-pager -l
  2. 查看最近日志

    bash
    journalctl -u rke2-server --no-pager -n 200
  3. 对比新旧节点配置

    在现有 master 上:

    bash
    cat /etc/rancher/rke2/config.yaml

    在新增节点上:

    bash
    cat /etc/rancher/rke2/config.yaml
  4. 确认网络可达性

    bash
    curl -sk https://<现有master-ip>:9345
    # 正常应返回 404 page not found
  5. 检查是否有残留状态

    bash
    find /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/16

2. 清理可能残留的 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-server

4. 观察启动过程

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 个字节位置。

预防措施

  1. 统一配置管理:使用 Ansible、Terraform 或脚本统一生成所有节点的 /etc/rancher/rke2/config.yaml
  2. 初始化时记录 CIDR:第一台 master 初始化时如果修改了默认 cluster-cidr / service-cidr,务必将相同值应用到所有后续节点。
  3. 新增节点前做配置校验:加入前先在现有 master 上查看 config.yaml,确保新节点配置一致。
  4. 避免手动修改已初始化集群的 CIDRcluster-cidrservice-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