首页主机资讯CentOS K8s自动扩缩容实现方法

CentOS K8s自动扩缩容实现方法

时间2025-12-12 17:20:04发布访客分类主机资讯浏览375
导读:在 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
  • 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 选择相应类型并配置指标名与查询。
  • 垂直扩缩容 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
CentOS JMeter脚本编写技巧有哪些 CentOS K8s服务发现机制介绍

游客 回复需填写必要信息