节点预处理

在安装 global 集群之前,所有节点(控制平面节点和工作节点)都必须完成预处理。

INFO

本页面适用于运行 传统操作系统 的节点,例如 RHEL、CentOS 或 Ubuntu, 会通过 SSH 为其执行部署。下面部分检查项——例如 SSH 用户以及 /etc/ssh/sshd_config 配置——是为了确保基于 SSH 的节点加入流程能够正常工作。如果你的环境运行在不可变基础设施上(Huawei DCS 上的 Alauda OS、VMware vSphere 或 Huawei Cloud Stack),节点部署采用基于镜像的方式,此处的预处理不适用;请参见 Installing the global Cluster on Immutable Infrastructure

支持的 OS 和内核版本

下表列出了受支持的操作系统、已验证版本以及对应的已测试内核版本。

平台对官方支持实施严格的版本匹配策略:

  • OS 版本 (x.y.z):补丁版本 (z) 可以不同,但主版本和次版本 (xy) 必须与已验证版本严格一致。修改 xy 不属于官方支持范围。
  • 内核版本 (x.y.z-build):构建后缀 (build) 可以不同,但内核核心版本 (x.y.z) 必须与已测试版本严格一致。修改 x.y.z 不属于官方支持范围。
INFO
  • 仅支持官方操作系统自带的内核版本。如果 OS、内核版本或 CPU 架构不满足要求,请联系技术支持。
  • 已知 Kylin V10、V10-SP1 和 V10-SP2 存在内核问题,可能导致 主机端口网络访问失败,建议升级到 Kylin V10-SP3

x86

Red Hat Enterprise Linux (RHEL)
CentOS
Ubuntu
Kylin Linux Advanced Server
  • RHEL 7.8: 3.10.0-1127.el7.x86_64
  • RHEL 8.0: 4.18.0-80.el8.x86_64
  • RHEL 8.6: 4.18.0-372.9.1.el8.x86_64
  • RHEL 8.10: 4.18.0-553
  • RHEL 9.6: 5.14.0-570.12.1

**注意:**RHEL 7.8 不支持 Calico Vxlan IPv6

ARM

Kylin Linux Advanced Server
  • Kylin V10 SP3: 4.19.90-52.22.v2207.ky10.aarch64

**注意:**ARM 架构仅支持 Kunpeng 920。对于其他型号,请联系技术支持。

执行快速配置脚本

安装包提供了一个用于快速配置节点的脚本。

解压安装包后,可以在 res 目录中获得 init.sh 脚本文件。将该脚本文件复制到各节点,并确保你拥有 root 权限。

执行脚本:

bash init.sh
WARNING

init.sh 无法保证以下所有检查项都已正确处理。你仍然需要继续执行下面的步骤。

节点检查

以下列出了所有必须在节点上完成的检查。根据节点角色的不同,所需检查项会有所差异。例如,某些检查仅适用于控制平面节点。

检查分为两类:

  • ✅ 表示该检查必须通过。
  • ⚠️ 表示该检查仅在特定场景下必须满足。请根据说明判断是否满足对应条件;如果满足,则必须处理。

检查项如下:

  • OS 和内核

    • ✅ 机器的 grub 启动配置必须包含 transparent_hugepage=never 参数。
    • ✅ CentOS 7.x 系统机器的 grub 启动配置必须包含 cgroup.memory=nokmem 参数。
    • ✅ 检查内核模块 ip_vsip_vs_rrip_vs_wrrip_vs_sh 是否已启用。
    • ⚠️ 当内核版本低于 4.19.0(或 RHEL 版本低于 4.18.0)时,检查内核模块 nf_conntrack_ipv4 和(对于 IPv6)nf_conntrack_ipv6 是否已启用。
    • ⚠️ 如果 global 集群计划使用 Kube-OVN CNI,则必须启用内核模块 geneveopenvswitch
    • ✅ 禁用 apparmor/selinux 和防火墙。
    • ✅ 禁用 swap
  • 用户和权限

    • ✅ 节点的 SSH 用户必须拥有 root 权限,并且可以免密使用 sudo
    • /etc/ssh/sshd_config 中的 UseDNS 参数必须设置为 no
    • ✅ 在添加节点之前,将 /etc/ssh/sshd_config 中的 UsePAM 参数设置为 no,然后重启 sshd。否则,PAM 会话策略(例如强制修改密码、pam_accessfaillockpam_limits)可能会阻止基于 SSH 的节点加入。在节点进入 Ready 状态后,可以恢复为 UsePAM yes。在启用 SELinux 且使用密码认证的系统上,UsePAM no 本身可能会导致 SSH 登录失败;这种情况下请使用基于密钥的认证。
    • systemctl show --property=DefaultTasksMax 必须返回 infinity;较低的限制(例如 RHEL 7 / CentOS 7 上默认的 512)会导致繁忙的容器无法创建线程。如果不是 infinity,请在 /etc/systemd/system.conf 中设置 DefaultTasksMax=infinity,然后执行 systemctl daemon-reexec
  • 节点网络

    • hostname 必须符合以下规则:
      • 长度不超过 36 个字符。
      • 以字母或数字开头并结尾。
      • 仅包含小写字母、数字、-.,且不能包含 .-..-.
    • /etc/hosts 中的 localhost 必须解析为 127.0.0.1
    • /etc/resolv.conf 文件必须存在并包含 nameserver 配置,但不能包含以 172 开头的地址(禁用 systemd-resolved)。
    • ⚠️ /etc/resolv.conf 文件不应配置搜索域(如果必须配置,请参见 配置搜索域)。
    • ✅ 机器的 IP 地址不能是回环地址、多播地址、链路本地地址、全 0 地址或广播地址。
    • ✅ 执行 ip route 必须返回默认路由或指向 0.0.0.0 的路由。
    • ✅ 节点不得占用以下端口:
      • 控制平面节点: 23792380644310249 ~ 10256
      • 安装程序所在节点: 808012080124431644323792380644310249 ~ 10256
      • 工作节点: 10249 ~ 10256
    • ✅ 如果集群使用 Kube-OVNCalico,请确保以下端口未被占用:
      • Kube-OVN: 66416642
      • Calico: 179
    • ⚠️ 确保 nerdctl 所需的 172.17.x.x ~ 172.18.x.x 网段中的 IP 地址未被占用。如果该网段中的 IP 已被占用且无法更改,请联系技术支持。
  • 软件和目录要求:

    • ✅ 必须已安装以下工具:ipsstarswapoffmodprobesysctlmd5sum,以及 scpsftp
    • ⚠️ 如果计划使用本地存储 TopoLVMRook,则需要安装 lvm2
    • /etc/systemd/system/kubelet.service 文件不允许存在。
    • /tmp 挂载参数中不能包含 noexec
    • ✅ 删除与 global 集群组件冲突的软件包(参见 删除冲突软件包)。
    • ✅ 如果存在以下文件,必须将其删除:
      • /var/lib/docker
      • /var/lib/nerdctl
      • /opt/nerdctl/
      • /var/lib/containerd
      • /var/log/pods
      • /var/lib/kubelet/pki
  • 跨节点检查

    • global 集群各节点之间不能存在网络防火墙限制。
    • ✅ 集群中每个节点的 hostname 必须唯一。
    • ✅ 所有节点的时区必须统一,且时间同步误差必须 ≤ 10 秒。

附录

删除冲突软件包

在安装之前,节点上可能已经在 docker/nerdctl/containerd 环境中运行应用,或者已经安装了与 global 集群冲突的软件。因此,有必要检查并卸载冲突软件包。

DANGER
  • 为避免应用中断或数据丢失,务必先确认是否存在冲突软件包。发现冲突后,请先制定应用切换方案并在卸载前备份数据。
  • 卸载冲突软件包后,还需要检查 /usr/local/bin/ 等目录中是否存在其他潜在冲突的二进制文件(例如与 docker、nerdctl、containerd、runc、podman、容器网络、容器运行时或 Kubernetes 相关的软件)。

可参考以下命令。

CentOS / RedHat
Ubuntu
Kylin

检查:

for x in \
    docker docker-client docker-common docker-latest \
    podman-docker podman \
    runc \
    containernetworking-plugins \
    apptainer \
    kubernetes kubernetes-master kubernetes-node kubernetes-client \
    ; do
    rpm -qa | grep -F "$x"
done

卸载:

for x in \
    docker docker-client docker-common docker-latest \
    podman-docker podman \
    runc \
    containernetworking-plugins \
    apptainer \
    kubernetes kubernetes-master kubernetes-node kubernetes-client \
    ; do
    yum remove "$x"
done

在 Linux OS 中,/etc/resolv.conf 文件用于配置 DNS 客户端的域名解析设置。search 行用于指定 DNS 查询的域搜索路径。

配置要求

  • 域数量: search 行中的域数量应小于 domainCountLimit - 3(默认 domainCountLimit 为 32)。
  • 单个域长度: 每个域名长度不得超过 253 个字符。
  • 总字符长度: 所有域名及空格的总字符数不得超过 MaxDNSSearchListChar(默认值为 2048)。

示例

search domain1.com domain2.com domain3.com
  • 域的总数为 3。
  • 单个域名长度,例如 domain1.com,为 11。
  • 总字符长度为 35,即 11 + 11 + 11 + 2(两个空格)。
WARNING
  • 如果 /etc/resolv.conf 文件中的 search 行不满足上述限制,可能会导致 DNS 查询失败或性能下降。
  • 在修改 /etc/resolv.conf 文件之前,建议先备份该文件。