Kubernetes 在 Linux 上的扩展策略
一 扩展策略总览
- 水平扩展(Scale Out/In):增加或减少应用的 Pod 副本数,适合无状态服务,通过 Deployment/ReplicaSet 管理,扩容速度快、弹性好。
- 垂直扩展(Scale Up/Down):调整单个 Pod 的 CPU/内存 Request/Limit,适合存在单实例瓶颈或资源长期低估的场景。
- 集群扩展(Cluster Scaling):向集群添加新的 Worker/控制平面节点,提升集群整体容量与可用性。
- 自动扩缩容组合:以 HPA(副本数)为主,必要时叠加 VPA(单实例资源),并在节点资源不足时联动 节点自动伸缩。
- 扩展方式既支持手动(kubectl 调整 replicas 或资源字段),也支持自动(HPA/VPA 控制器基于指标闭环调整)。
二 工作负载自动扩缩容
- 水平 Pod 自动扩缩容 HPA:基于 CPU/内存利用率或自定义指标(如 QPS、连接数)自动调整副本数;依赖 Metrics Server 提供基础指标,结合 Custom Metrics Adapter 可扩展到自定义/外部指标。
- 垂直 Pod 自动扩缩容 VPA:基于历史使用推荐或自动更新 Pod 资源请求/限制;提供 Off/Initial/Auto/Recreate 模式,其中 Auto/Recreate 会驱逐并重建 Pod 以应用新资源;自 Kubernetes v1.27 起提供就地垂直扩缩(InPlacePodVerticalScaling)特性门控,可在不重启的情况下调整资源(需显式开启)。
- 组合与取舍:HPA 更适合快速弹性与无状态场景;VPA 更适合单实例性能调优。两者在CPU/内存指标上通常不建议同时启用,以免冲突;可让 HPA 基于自定义指标扩容副本,VPA 负责资源请求基线。
三 集群规模扩展
- 添加节点:在 Linux(如 CentOS) 上准备主机(主机名、时间同步、内核参数、关闭 swap 等),安装容器运行时与 kubelet/kubeadm,使用 kubeadm join 将节点加入集群,并用 kubectl get nodes 验证 Ready 状态。
- 高可用与控制平面扩展:部署多个 Master 节点与 Worker 节点,提升控制平面容错与集群整体容量。
- 节点自动伸缩:当节点资源不足时,结合节点池/云厂商驱动进行节点级扩容,为 HPA/VPA 的扩容提供“承载”。
四 Linux 节点与组件调优要点
- kubelet:合理设置 –max-pods(提升单节点 Pod 密度),选择与系统匹配的 cgroup 驱动(如 systemd)。
- kube-proxy:高并发场景优先 ipvs 模式,并优化 conntrack 相关参数以降低连接跟踪开销。
- 网络:选择高性能 CNI 插件(如 Calico/Cilium),结合业务调优 MTU 与启用 NetworkPolicy 减少噪声流量。
- 存储:优先 SSD/NVMe,为不同性能需求配置 StorageClass,必要时启用 存储 QoS。
- etcd/API Server:提升 etcd 副本数与调优 heartbeat/election 间隔;为 API Server 调整并发请求上限(如 max-requests-inflight)以支撑更高控制面吞吐。
五 监控度量与容量规划
- 指标分层:采集 容器指标(CPU、内存、文件系统/网络 I/O)、应用指标(HTTP 延迟、错误率、队列长度)与 Kubernetes 指标(Pod 数量、节点资源使用率、Service 请求量),形成闭环观测。
- 监控告警体系:使用 Prometheus + Grafana 建立面板与阈值告警,结合 日志(如 EFK/ELK)定位伸缩触发原因与瓶颈。
- 容量与策略联动:基于监控数据设置 HPA 目标阈值与 VPA 推荐/自动模式,在节假日/促销等业务高峰前做预扩容与灰度验证,保障稳定性与成本平衡。