Kubernetes 在 CentOS 上的扩展策略
一、扩展总览与选型
- 扩展通常分为两个层面:
- 集群层扩展:增加节点(Node)以提升集群可调度资源总量,适合容量吃紧或需要更高可用性的场景。
- 应用层扩展:在现有节点上增减 Pod 副本或调整单实例资源,适合应对业务负载波动与性能瓶颈。
- 策略选型建议:
- 优先采用水平扩展(增减 Pod 数量),弹性好、落地简单、对应用侵入低。
- 当单实例存在明显瓶颈或资源长期低估时,配合垂直扩展(调整 CPU/内存)与集群层扩展共同使用。
- 生产环境建议同时配置资源请求/限制、PodDisruptionBudget(PDB)与反亲和/污点容忍,保障扩缩过程稳定性与可用性。
二、集群层扩展 增加节点(基于 kubeadm 的 CentOS 节点)
- 前置准备(所有节点)
- 基础网络与主机标识:统一网段、可互通;设置唯一主机名与 /etc/hosts 映射;时间同步(如 chrony/ntp)。
- 内核与模块:加载 overlay、br_netfilter;开启桥接流量进入 iptables 与 ip_forward。
- 安全与资源:按需在测试环境临时关闭 firewalld/SELinux 与 swap(生产环境以最小暴露面与合规策略为准)。
- 容器运行时:安装并启用 Docker/Containerd;配置 systemd cgroup 驱动与镜像加速;确保与集群版本匹配。
- 加入集群
- 在控制平面生成加入命令(一次性或定期轮换):
- kubeadm token create --print-join-command
- 在新节点执行输出的 kubeadm join … 命令,完成后在控制平面验证:
- 网络与验证
- 如尚未部署网络插件(如 Calico),在控制平面应用对应清单,确保节点间与 Pod 间网络连通。
- 检查新节点 Ready 状态、系统 Pod 就绪与网络插件 Pod 运行正常。
三、应用层扩展 水平与垂直
- 手动水平扩展(快速应对瞬时流量)
- 对 Deployment/StatefulSet 调整副本数:
- kubectl scale deployment my-app --replicas=5
- 自动水平扩展(HPA,基于指标驱动)
- 前置:部署 Metrics Server,为 HPA 提供指标数据。
- 示例(CPU 利用率目标 50%,副本范围 1–10):
- apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- 建议为扩缩对象配置 resources.requests/limits 与 PDB,避免抖动与可用性受损。
- 垂直扩展(VPA,调整单实例资源)
- 组件安装:部署 VerticalPodAutoscaler(CRD、Admission Controller、Recommender、Updater)。
- 示例(推荐模式,仅给出建议;生产可改为 Auto 并配合滚动更新策略):
- apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
namespace: default
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
updatePolicy:
updateMode: “Recommend”
resourcePolicy:
containerPolicies:
- containerName: ‘*’
minAllowed:
cpu: 10m
memory: 2Mi
maxAllowed:
cpu: 100m
memory: 100Mi
controlledResources: [“cpu”, “memory”]
- 使用要点:VPA 可能触发 Pod 重启;与 HPA 配合时,通常让 VPA 管理 requests,HPA 基于 requests 做副本扩缩,避免指标冲突。
四、CentOS 系统级优化与稳定性保障
- 内核与网络
- 提升网络与连接跟踪能力:net.core.rmem_max、net.core.wmem_max、net.ipv4.tcp_max_syn_backlog、net.ipv4.tcp_max_tw_buckets、net.ipv4.ip_forward=1。
- 文件系统与事件:fs.inotify.max_user_instances、fs.inotify.max_user_watches、fs.aio-max-nr。
- kubelet / kube-proxy / etcd / API Server
- kubelet:合理设置 –max-pods;–cgroup-driver=systemd;按需开启 拓扑管理器 与 CPU 管理器(静态策略)提升性能隔离。
- kube-proxy:高并发场景优先 ipvs 模式,并优化 conntrack 相关参数。
- etcd:提高 –heartbeat-interval 与 –election-timeout 的容忍度(视网络延迟而定),合理规划副本数。
- API Server:提升 –max-requests-inflight 与 –max-mutating-requests-inflight 以支撑更高并发。
- 存储与节点资源
- 优先 SSD/NVMe 与高性能网络(如 10Gbps+);为时延敏感型应用配置合适的 StorageClass 与本地卷/分布式存储。
- 监控与可观测性
- 部署 Prometheus + Grafana 监控节点与组件指标,使用 ELK/Fluentd 或等效方案聚合日志,支撑扩缩容决策与容量规划。