3. 集群安装规划

OpenShift 集群安装规划的核心,是在真正执行 openshift-install 之前,把“集群要长成什么样”确定下来。安装程序本身只负责把规划结果落地,规划错了,安装成功也可能在生产环境中留下隐患。本节围绕四个相互制约的维度展开:节点角色、网络拓扑、存储与计算资源、高可用要求。

一、节点角色规划

OpenShift 4.x 的节点角色由 MachineConfigPool 和节点标签共同决定,规划阶段至少要明确三类角色:控制平面节点(control plane / master)、基础设施节点(infra)和工作负载节点(worker)。控制平面节点运行 etcd、kube-apiserver、controller-manager、scheduler 以及集群自带的 Operator,它们对延迟和磁盘 IO 非常敏感,不应承载普通业务 Pod。

基础设施节点用于承载路由(Ingress Controller)、镜像仓库(Image Registry)、监控(Prometheus、Alertmanager)、日志(Loki/Elasticsearch)和集群日志转发等组件。把这些组件从 worker 上分离出来,可以避免业务负载与平台组件争抢资源,也便于单独扩容和打标签。工作负载节点则按业务类型进一步细分,例如通过标签区分 node-role.kubernetes.io/app、node-role.kubernetes.io/gpu,配合 taint/toleration 与 nodeSelector 实现调度隔离。

一个常见的教学示例规划如下:3 台控制平面节点(每台 8 vCPU / 32 GB / 200 GB SSD)、3 台基础设施节点(每台 8 vCPU / 32 GB / 200 GB SSD)、若干工作负载节点(按业务规模 16 vCPU / 64 GB 起)。控制平面节点数量必须是奇数,以保证 etcd 的 quorum 机制正常工作。

二、网络拓扑设计

网络规划需要同时考虑三类地址:节点管理网、集群内部 Pod 网络和 Service 网络,以及对外暴露的 Ingress/VIP 地址。安装前必须确定以下参数:

  • machineNetwork:节点所在子网,例如 192.168.10.0/24,用于节点间通信和 API 访问。
  • clusterNetwork:Pod CIDR,默认 10.128.0.0/14,需确保与现有企业网络不冲突。
  • serviceNetwork:Service CIDR,默认 172.30.0.0/16,同样不能与外部路由重叠。
  • API VIP 与 Ingress VIP:通常由 keepalived 或外部负载均衡器提供,例如 192.168.10.10 和 192.168.10.11。

如果企业已有 DNS 和负载均衡设备,推荐使用外部 LB 模式:由 F5、HAProxy 或云负载均衡器将 api.cluster.example.com:6443 和 *.apps.cluster.example.com:443 分别转发到控制平面节点和基础设施节点。若没有外部 LB,则使用安装程序内置的 keepalived + HAProxy 方案,此时需要预留两个 VIP。

OpenShift 集群网络拓扑与节点角色示意 外部客户端 / 企业 DNS api.cluster.example.com / *.apps.cluster.example.com 外部负载均衡 / VIP API VIP 192.168.10.10 · Ingress VIP 192.168.10.11 控制平面节点 ×3 etcd · kube-apiserver controller-manager · scheduler 8 vCPU / 32 GB / 200 GB SSD 192.168.10.21-23 基础设施节点 ×3 Ingress · Image Registry Prometheus · 日志组件 8 vCPU / 32 GB / 200 GB SSD 192.168.10.31-33 工作负载节点 ×N 业务 Pod · GPU 任务 按标签 / taint 隔离 16 vCPU / 64 GB 起 192.168.10.41+ 网络地址规划(示例) machineNetwork:192.168.10.0/24 clusterNetwork(Pod):10.128.0.0/14 serviceNetwork:172.30.0.0/16 API VIP:192.168.10.10 · Ingress VIP:192.168.10.11

三、存储与计算资源评估

计算资源评估要从“平台自身开销 + 业务负载 + 预留余量”三部分考虑。控制平面节点上,etcd 对磁盘延迟最敏感,建议使用本地 NVMe SSD,IOPS 不低于 3000,且不要与其他高 IO 组件共享磁盘。基础设施节点需要为 Prometheus 预留持久卷,默认保留 15 天指标时,每 100 个节点大约需要 100~200 GB 存储。

存储方面,OpenShift 通过 StorageClass 对接后端存储。规划时要明确:镜像仓库使用哪种 StorageClass(建议支持 RWX 或至少 RWO 的块存储)、监控和日志使用哪种(建议独立 StorageClass,避免与业务争抢 IO)、是否需要动态供给。常见后端包括 Ceph RBD/CephFS、NFS、iSCSI、云厂商块存储等。若使用本地存储 Operator(LSO),需要提前规划每块磁盘的盘符和所属节点。

一个可参考的容量估算方法是:先统计业务 Pod 的 requests/limits 总和,再乘以 1.3~1.5 的冗余系数,得到工作负载节点总资源;控制平面和基础设施节点单独计算,不参与业务调度。例如业务总 requests 为 200 vCPU / 400 GB,冗余系数 1.4,则工作负载节点至少需要 280 vCPU / 560 GB 可调度资源。

四、高可用要求

高可用规划要覆盖控制平面、基础设施和工作负载三个层面。控制平面必须为 3 台或 5 台,分布在不同物理机、机架或可用区,确保单点故障不会导致 etcd 失去 quorum。基础设施节点同样建议 3 台,Ingress Controller 默认 2 副本,可调整为 3 副本并配置反亲和性,使副本分散到不同节点。

工作负载的高可用由业务自身决定,但平台侧要提供 PodDisruptionBudget、拓扑分布约束(topologySpreadConstraints)和节点反亲和性等能力。规划阶段应明确:是否跨可用区部署、节点故障时业务能否自动迁移、存储是否支持跨节点访问。若使用本地存储,Pod 迁移后无法访问原数据,这类有状态业务必须配合应用层复制或使用支持多节点的存储方案。

注意:控制平面节点数量不能为偶数。2 台控制平面无法形成有效 quorum,4 台在故障时可能分裂为 2:2,均不满足高可用要求。
规划完成后,建议把节点角色、IP 地址、VIP、CIDR、StorageClass 和副本数整理成一份安装参数表,作为 install-config.yaml 的填写依据,避免安装过程中反复修改。

综合来看,节点角色决定“谁跑什么”,网络拓扑决定“怎么连通”,存储与计算评估决定“够不够用”,高可用要求决定“坏了怎么办”。四者需要在安装前统一确认,任何一项缺失都会在后续运维中放大为故障风险。