节点预处理
在安装 global 集群之前,所有节点(控制平面节点和工作节点)都必须完成预处理。
本页适用于运行 传统操作系统 的节点,例如 Kylin Linux Advanced Server、RHEL 或 Ubuntu, 会通过 SSH 为其进行 provisioning。下面的一些检查——例如 SSH 用户以及 /etc/ssh/sshd_config 设置——是为了确保基于 SSH 的节点加入流程能够正常工作。如果您的集群使用 Alauda OS,则本页中的节点预处理步骤不适用。请改为参考 Immutable Infrastructure 文档中的 在 Immutable Infrastructure 上安装 global 集群。
支持的 OS 和 Kernel 版本
下表列出了受支持的操作系统、已验证版本以及对应的已测试 Kernel 版本。
平台会强制执行支持列表中声明的版本匹配粒度:
- OS 版本:使用下方列出的发行版版本。不支持其他 major 或 minor 版本,除非它也在列表中。
- Kernel 版本:使用操作系统厂商提供的官方 Kernel。若列表给出了精确的
x.y.z-build值,则 build 后缀可以不同,但x.y.z必须匹配。若列表给出了 Kernel 系列,请使用该系列中已针对已安装的 patch 验证过的 Kernel。不要假设任意较新的 Kernel 都受支持。
- 对于运行 Kubernetes 1.35 或更高版本的 集群,节点必须使用 cgroup v2 和 Linux kernel 5.8 或更高版本。仅使用下方列出的、已针对已安装的 patch 验证过的 OS 和 Kernel 组合。
x86-64-v2是 CPU 指令集基线,但 不会将其作为运行用户提供的传统操作系统的 x86 节点的通用要求。CPU 仍必须满足所选操作系统和待部署组件的要求。如果无法确认兼容性,请联系技术支持。
x86
- RHEL 9.6:
5.14.0-570.12.1
ARM
- Kylin Linux Advanced Server V11: 适用于已安装的 patch 的 6.6 系列官方 Kernel
注意: ARM 架构仅支持 Kunpeng 920,且不支持 Flannel。对于其他 CPU 型号,请联系技术支持。
执行快速配置脚本
安装包提供了一个用于快速配置节点的脚本。
解压安装包后,可在 res 目录中获得 init.sh 脚本文件。将该脚本文件复制到各节点,并确保您具有 root 权限。
执行脚本:
init.sh 无法保证以下所有检查都已正确处理。您仍然需要继续执行下面的步骤。
节点检查
以下列出了节点上必须完成的所有检查。根据节点的角色,所需检查会有所不同。例如,某些检查仅适用于控制平面节点。
检查分为两类:
- ✅ 表示该检查必须通过。
- ⚠️ 表示该检查仅在特定场景下必须满足。请根据说明判断对应条件是否成立。如果成立,您必须解决该问题。
以下是检查列表:
-
OS 和 Kernel
- ✅ 机器的 grub 启动配置中必须包含
transparent_hugepage=never参数。 - ✅ 检查 Kernel 模块
ip_vs、ip_vs_rr、ip_vs_wrr和ip_vs_sh是否已启用。 - ⚠️ 如果
global集群计划使用Kube-OVNCNI,则必须启用 Kernel 模块geneve和openvswitch。 - ✅ 禁用 apparmor/selinux 和 firewall。
- ✅ 禁用
swap。
- ✅ 机器的 grub 启动配置中必须包含
-
用户和权限
- ✅ 节点的 SSH 用户必须具有
root权限,并且可以免密码使用sudo。 - ✅
/etc/ssh/sshd_config中的UseDNS参数必须设置为no。 - ✅ 在添加节点之前,将
/etc/ssh/sshd_config中的UsePAM参数设置为no,然后重启sshd。否则,PAM session 策略(例如强制修改密码、pam_access、faillock或pam_limits)可能会阻止基于 SSH 的节点加入流程。节点达到Ready状态后,您可以恢复为UsePAM yes。在启用 SELinux 强制模式且使用密码认证的系统上,UsePAM no本身可能会破坏 SSH 登录;在这种情况下,请使用基于密钥的认证。 - ✅
systemctl show --property=DefaultTasksMax必须返回infinity;较低的限制会导致繁忙的容器无法创建线程。如果不是infinity,请在/etc/systemd/system.conf中设置DefaultTasksMax=infinity,并运行systemctl daemon-reexec。
- ✅ 节点的 SSH 用户必须具有
-
节点网络
- ✅
hostname必须符合以下规则:- 不超过 36 个字符。
- 以字母或数字开头并结尾。
- 仅包含小写字母、数字、
-和.,但不能包含.-、..或-.。
- ✅
/etc/hosts中的localhost必须解析为127.0.0.1。 - ✅
/etc/resolv.conf文件必须存在并包含nameserver配置,但不得包含以 172 开头的地址(禁用 systemd-resolved)。 - ⚠️
/etc/resolv.conf文件不应配置 search domains(如果必须配置,请参见 配置 Search Domain)。 - ✅ 机器的 IP 地址不能是 loopback、multicast、link-local、all-0 或 broadcast 地址。
- ✅ 执行
ip route必须返回默认路由,或者返回指向0.0.0.0的路由。 - ✅ 节点不得占用以下端口:
- 控制平面节点:
2379、2380、6443、10249~10256 - 安装程序所在节点:
8080、12080、12443、16443、2379、2380、6443、10249~10256 - 工作节点:
10249~10256
- 控制平面节点:
- ✅ 如果集群使用 Kube-OVN 或 Calico,请确保以下端口未被占用:
- Kube-OVN:
6641、6642 - Calico:
179
- Kube-OVN:
- ⚠️ 确保 nerdctl 所需的
172.17.x.x~172.18.x.x网络段中的 IP 地址未被占用。如果该网络段中的 IP 已被占用且无法更改,请联系技术支持。
- ✅
-
软件和目录要求:
- ✅ 必须已安装以下组件:
ip、ss、tar、swapoff、modprobe、sysctl、md5sum,以及scp或sftp。 - ⚠️ 如果您计划使用本地存储 TopoLVM 或 Rook,则需要安装
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 集群冲突的软件。因此,有必要检查并卸载冲突软件包。
- 为避免应用中断或数据丢失,请务必确认是否存在冲突的软件包。发现冲突时,请先制定应用切换方案并备份数据,然后再进行卸载。
- 卸载冲突软件包后,仍需检查
/usr/local/bin/等目录下是否存在其他可能冲突的二进制文件(例如与 docker、nerdctl、containerd、runc、podman、容器网络、容器运行时或 Kubernetes 相关的软件)。
可参考以下命令。
检查:
卸载:
配置 Search Domain
在 Linux OS 中,/etc/resolv.conf 文件用于配置 DNS 客户端的域名解析设置。search 行指定了 DNS 查询的域搜索路径。
配置要求
- 域数量:
search行中的域数量应小于domainCountLimit - 3(默认domainCountLimit为 32)。 - 单个域长度: 每个域名不得超过 253 个字符。
- 总字符长度: 所有域名及空格的总字符数不得超过
MaxDNSSearchListChar(默认值为 2048)。
示例
- 域的总数为 3。
- 单个域名长度,例如
domain1.com,为 11。 - 总字符长度为 35,即 11 + 11 + 11 + 2(两个空格)。
- 如果
/etc/resolv.conf文件中的search行不满足上述限制,可能会导致 DNS 查询失败或性能下降。 - 在修改
/etc/resolv.conf文件之前,建议先备份该文件。