CentOS K8s自动扩缩容实现方法
导读:在 CentOS 上落地 Kubernetes 自动扩缩容的实用方案 一 架构与组件选型 水平扩缩容 HPA:按指标(如 CPU/内存 或自定义/Prometheus 指标)增减 Pod 副本数,适配无状态服务,伸缩速度快、成本低。 垂...
在 CentOS 上落地 Kubernetes 自动扩缩容的实用方案
一 架构与组件选型
- 水平扩缩容 HPA:按指标(如 CPU/内存 或自定义/Prometheus 指标)增减 Pod 副本数,适配无状态服务,伸缩速度快、成本低。
- 垂直扩缩容 VPA:按历史使用自动调整 requests/limits,减少资源浪费,但会触发 Pod 重建,通常与 HPA 互斥。
- 集群自动扩缩容 CA:当节点资源不足时,自动增减 Node,为 HPA/VPA 提供底层资源池。
- 监控与指标链路:HPA 依赖 Metrics Server 获取资源指标;基于 Prometheus 的自定义/外部指标需部署 Kubernetes Metrics Adapter(如 prometheus-adapter)。
二 快速落地步骤 HPA CPU 示例
- 1)安装 Metrics Server(CentOS 常见因证书问题需开启不校验证书)
- 下载并修改官方组件清单,镜像可用国内源,容器启动参数加入:
- –kubelet-insecure-tls
- –kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- 部署并验证:
- kubectl apply -f components.yaml
- kubectl get pods -n kube-system -l app=metrics-server
- kubectl top nodes & & kubectl top pods
- 下载并修改官方组件清单,镜像可用国内源,容器启动参数加入:
- 2)部署示例应用(必须设置 resources.requests,HPA 才能计算利用率)
- apiVersion: apps/v1 kind: Deployment metadata: name: hpa-nginx labels: { app: nginx} spec: replicas: 1 selector: { matchLabels: { app: nginx} } template: metadata: { labels: { app: nginx} } spec: containers: - name: nginx image: nginx:1.25 ports: [{ containerPort: 80} ] resources: requests: { cpu: “100m”, memory: “128Mi”} limits: { cpu: “500m”, memory: “256Mi”}
- kubectl apply -f hpa-nginx.yaml
- 3)创建 HPA(v2 写法,支持多指标)
- apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata: {
name: hpa-nginx}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
- kubectl apply -f hpa-nginx.yaml
- apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata: {
name: hpa-nginx}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hpa-nginx
minReplicas: 1
maxReplicas: 10
metrics:
- 4)制造负载并验证
- 暴露服务:kubectl expose deployment hpa-nginx --port=80 --type=NodePort
- 终端1:kubectl get hpa -w
- 终端2:while true; do wget -q -O- http://:; done
- 观察:HPA 目标从 0%→> 50% 时,REPLICAS 自动增加;负载停止后逐步回落。
三 进阶用法
- 多指标与自定义指标
- 内存目标(v2):
-
- type: Resource resource: name: memory target: type: AverageValue averageValue: 100Mi
-
- 基于 Prometheus/QPS 等自定义指标:部署 prometheus-adapter,将指标以 External/ Custom Metrics API 暴露,HPA metrics 中 type 选择相应类型并配置指标名与查询。
- 内存目标(v2):
- 垂直扩缩容 VPA(与 HPA 互斥)
- 作用:自动给出或应用 requests/limits 推荐,优化资源分配。
- 部署:克隆 kubernetes/autoscaler 仓库,执行 ./hack/vpa-up.sh 部署 VPA 组件(准入控制、recommender、updater)。
- 使用:创建 VPA 资源,设置 updateMode(Off/Auto/Recreate),观察推荐值或启用自动更新。
四 常见问题与排查
- 指标不可用
- 现象:kubectl top nodes/pods 报错或 HPA 显示 unknown/0%。
- 处理:确认 Metrics Server 就绪;在 metrics-server 容器参数中加入 –kubelet-insecure-tls 与 –kubelet-preferred-address-types=InternalIP;检查 kubelet 10250 端口与 RBAC。
- HPA 不扩容
- 常见原因:未设置 resources.requests;指标阈值设置过高;指标采集周期未覆盖负载峰值;副本已达 maxReplicas;节点资源不足导致调度失败(需配合 CA 或扩容节点)。
- 伸缩抖动
- 处理:适当提高稳定窗口(behavior 字段)、拉高/拉低阈值区间,避免频繁启停;为应用配置合理的 readiness/liveness 探针,确保流量只打到健康实例。
五 常用命令速查
- 部署与验证
- kubectl apply -f components.yaml
- kubectl get pods -n kube-system -l app=metrics-server
- kubectl top nodes & & kubectl top pods
- kubectl apply -f deploy.yaml & & kubectl expose deploy --port=80 --type=NodePort
- HPA 管理
- kubectl autoscale deployment --cpu-percent=50 --min=1 --max=10
- kubectl get hpa -w
- kubectl describe hpa
- 负载测试
- ab -n 10000 -c 100 http://:/
- hey -c 20 -z 60s http://:/
- 静态扩缩容(对比理解)
- kubectl scale deployment --replicas=5
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS K8s自动扩缩容实现方法
本文地址: https://pptw.com/jishu/770689.html
