节点预处理

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

执行快速配置脚本

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

解压安装包以获得 res 目录下的 init.sh 脚本文件。将脚本文件复制到节点,并确保你具有 root 权限。

执行脚本:

bash init.sh
警告

init.sh 不能保证所有以下检查都已妥善处理。你仍然需要继续执行以下步骤。

节点检查

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

检查分为两类:

  • ✅ 表示必须通过的检查。
  • ⚠️ 表示在特定场景下必须满足的检查。请根据说明确定是否满足相应条件。如果满足,你必须解决这些问题。

以下是检查列表:

  • 操作系统和内核

    • ✅ 机器的 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 中的 UseDNSUsePAM 参数必须设置为 no
    • ✅ 执行 systemctl show --property=DefaultTasksMax 返回 infinity 或非常大的值;否则,请调整 /etc/systemd/system.conf
  • 节点网络

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

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

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

附录

移除冲突包

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

危险
  • 为了避免应用程序中断或数据丢失,请务必确认是否存在冲突的软件包。当发现冲突时,请制定应用切换计划并在卸载之前备份数据。
  • 卸载冲突包后,仍需检查 /usr/local/bin/ 等目录中是否存在其他可能冲突的二进制文件(例如与 docker、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 操作系统中,/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(两个空格)。
警告
  • 如果 /etc/resolv.conf 文件中的 search 行未满足上述限制,可能导致 DNS 查询失败或性能下降。
  • 在修改 /etc/resolv.conf 文件之前,建议备份该文件。