4. 节点池配置项详解(上):实例规格、系统盘、数据盘、镜像、安全组配置
节点池是集群中一组具有相同配置的节点集合。在 Deployment 部署后,节点池配置的一致性直接决定了 Pod 能否获得预期的计算、存储与网络资源。本章聚焦节点池最核心的五个配置维度:实例规格、系统盘、数据盘、镜像与安全组,逐一解析其参数含义、配置要点及对一致性验证的影响。
配置一致性原则:节点池内所有节点必须使用完全相同的实例规格、磁盘类型与容量、镜像 ID 以及安全组规则。任何差异都会导致调度倾斜、资源碎片或网络策略失效,是验证的核心检查项。
4.1 实例规格(Instance Type)
实例规格定义了节点的 CPU、内存、GPU 等核心算力资源。节点池一旦选定规格,所有节点均锁定为该规格,不可混用。
| 参数 | 说明 | 一致性验证要点 |
|---|---|---|
| 规格族 | 通用型、计算型、内存型、GPU 型等 | 同一节点池内规格族必须一致 |
| vCPU / 内存 | 如 4C8G、8C16G | 与 Deployment 资源 requests/limits 匹配 |
| GPU 类型与数量 | 如 NVIDIA A100、V100 | 确保 GPU Operator 驱动版本兼容 |
| 弹性网卡上限 | 决定 Pod 网络密度 | 需满足最大 Pod 数需求 |
验证命令示例:
# 查看节点池内所有节点的实例规格
kubectl get nodes -o json | jq '.items[].metadata.labels["beta.kubernetes.io/instance-type"]' | sort -u
# 预期输出:所有节点返回同一个规格名称,如 "ecs.g7.xlarge"
4.2 系统盘(System Disk)
系统盘承载操作系统与容器运行时(如 Docker/containerd)。节点池内所有节点的系统盘配置必须完全一致,否则会导致节点启动后文件系统布局差异。
| 配置项 | 典型值 | 一致性验证方法 |
|---|---|---|
| 磁盘类型 | SSD(高效云盘/ESSD) | 检查云厂商 API 返回的磁盘类别 |
| 容量(GB) | 40~120 GB | kubectl 查看节点容量或 df -h |
| 加密属性 | 是否启用 KMS 加密 | 云厂商控制台或 CLI 确认 |
| 删除保护 | 是否随实例释放 | 节点池模板中检查 deleteWithInstance |
常见陷阱:系统盘容量过小会导致容器镜像拉取失败或日志撑满磁盘。建议系统盘 ≥ 80 GB,并单独挂载数据盘给容器数据卷。
4.3 数据盘(Data Disk)
数据盘用于存放容器镜像层、持久化数据卷(PV)或日志。节点池可挂载多块数据盘,每块盘的配置也必须一致。
- 磁盘数量:节点池内所有节点挂载相同数量的数据盘。
- 每盘容量:如 200 GB ESSD PL1,所有节点相同。
- 挂载点:如 /dev/vdb、/dev/vdc,路径一致。
- 文件系统:ext4 或 xfs,格式化参数一致。
- 容器数据目录:通常将数据盘挂载到 /var/lib/docker 或 /var/lib/containerd。
验证脚本片段:
# 遍历节点池内所有节点,检查数据盘挂载
for node in $(kubectl get nodes -l node-pool=your-pool -o name); do
echo "=== $node ==="
kubectl exec $node -- lsblk | grep -E "disk|part"
done
# 预期:所有节点输出相同的磁盘列表与容量
4.4 镜像(Image)
节点镜像指操作系统与预装软件的虚拟机模板。节点池内所有节点必须使用完全相同的镜像 ID,否则内核版本、系统库、容器运行时版本可能不一致。
| 镜像维度 | 检查项 | 一致性影响 |
|---|---|---|
| 操作系统发行版 | CentOS 7.9 / Ubuntu 22.04 / Alibaba Cloud Linux 3 | 内核参数、cgroup 版本差异 |
| 容器运行时 | containerd 1.6.x / Docker 20.10.x | CRI 接口版本、镜像拉取行为 |
| Kubernetes 组件版本 | kubelet、kube-proxy 版本 | API 兼容性、网络规则 |
| 预装内核模块 | IPVS、br_netfilter、overlay | 网络与存储功能可用性 |
最佳实践:使用自定义镜像(Packer/Image Builder)锁定节点池镜像版本,避免使用“最新”标签。验证时直接比对镜像 ID(如 ami-xxx 或 m-xxx)。
4.5 安全组(Security Group)
安全组是节点的虚拟防火墙,控制入站与出站流量。节点池内所有节点必须加入相同的安全组,否则 Pod 网络通信可能被阻断。
| 安全组规则类型 | 典型配置 | 一致性验证点 |
|---|---|---|
| 入方向 | 允许节点间通信(VPC CIDR)、允许 APIServer 访问(6443) | 所有节点安全组 ID 相同 |
| 出方向 | 允许所有流量或限制特定目标 | 规则数量与优先级一致 |
| 附加安全组 | 最多 5 个安全组 | 附加顺序不影响,但组 ID 列表必须相同 |
关键风险:如果节点池内部分节点缺少某个安全组规则,可能导致跨节点 Pod 通信超时、DNS 解析失败或日志采集 Agent 无法上报数据。安全组不一致是网络类故障的常见根因。
验证命令:
# 通过云厂商 CLI 获取节点池内所有节点的安全组 ID
aliyun ecs DescribeInstances --RegionId cn-hangzhou \
--InstanceIds '["i-xxx","i-yyy"]' \
--query "Instances.Instance[].SecurityGroupIds.SecurityGroupId[]" \
--output json | jq 'unique | length'
# 预期输出:1(所有节点属于同一个安全组)