温馨提示×

centos k8s自动扩缩容方法

小樊
42
2025-10-11 09:24:30
栏目: 智能运维

一、前提条件:安装Metrics Server
HPA(Horizontal Pod Autoscaler)依赖Metrics Server收集Pod的CPU、内存等资源使用数据。在CentOS上安装Metrics Server的步骤如下:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml 

安装后检查Metrics Server状态,确保其正常运行:

kubectl get pods -n kube-system | grep metrics-server 

若未正常运行,可删除对应Pod触发重启:

kubectl delete pod -n kube-system <metrics-server-pod-name> 

二、配置HPA(Horizontal Pod Autoscaler)
HPA是Kubernetes实现Pod水平自动扩缩容的核心资源,以下是详细配置步骤:

1. 创建带资源限制的Deployment

HPA需根据Pod的资源请求(requests)计算利用率,因此必须在Deployment中定义容器的resources.requestsresources.limits。示例如下:

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 # 初始副本数,HPA会动态调整 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-container image: nginx:latest ports: - containerPort: 80 resources: requests: # 调度依据,必须设置 cpu: "100m" # 0.1核 memory: "64Mi" limits: # 资源上限,防止Pod被OOM Kill cpu: "200m" # 0.2核 memory: "128Mi" 

将上述内容保存为deployment.yaml,应用到集群:

kubectl apply -f deployment.yaml 

2. 创建HPA资源

通过HPA配置自动扩缩容规则,以下是一个基于CPU利用率的示例(支持v2beta2及以上API版本):

apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: my-hpa spec: scaleTargetRef: # 指定扩缩容目标(Deployment/ReplicaSet/StatefulSet) apiVersion: apps/v1 kind: Deployment name: my-app minReplicas: 1 # 最小副本数(避免缩容至0) maxReplicas: 10 # 最大副本数(集群资源上限) metrics: - type: Resource # 资源指标(支持CPU、内存) resource: name: cpu # 指标名称(CPU/memory) target: type: Utilization # 目标类型(Utilization/AverageValue) averageUtilization: 50 # 目标利用率(如50%) 

将上述内容保存为hpa.yaml,应用到集群:

kubectl apply -f hpa.yaml 

说明

  • scaleTargetRef:指定要扩缩容的对象(如Deployment),需与已有资源名称一致;
  • minReplicas/maxReplicas:限制Pod数量范围,避免过度扩缩容;
  • metrics:可配置多个指标(如CPU+内存),支持Utilization(利用率)或AverageValue(绝对值)。

3. 验证HPA状态

使用以下命令查看HPA的当前状态(包括副本数、目标利用率、当前利用率):

kubectl get hpa 

输出示例:

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE my-hpa Deployment/my-app 30%/50% 1 10 1 2m 
  • TARGETS:显示当前利用率/目标利用率(如30%表示当前CPU利用率为30%,目标为50%);
  • REPLICAS:当前Pod副本数。

查看详细信息(包括扩缩容决策记录):

kubectl describe hpa my-hpa 

三、测试自动扩缩容
通过模拟负载触发HPA自动调整Pod数量,常用工具如hey(快速HTTP压测工具):

# 安装hey(若未安装) wget https://github.com/rakyll/hey/releases/download/v0.0.0/hey_linux_amd64 -O hey chmod +x hey mv hey /usr/local/bin/ # 发起压测(向my-app发送10个并发请求,持续30秒) hey -c 10 -z 30s http://<my-app-service-ip> 

随着负载增加,HPA会根据CPU利用率自动增加Pod副本数(不超过maxReplicas);负载降低时,自动减少副本数(不低于minReplicas)。

四、可选:基于自定义指标的自动扩缩容
若需根据非资源指标(如QPS、队列长度)扩缩容,需安装Custom Metrics Adapter(如Prometheus Adapter),并配置HPA使用自定义指标。示例如下:

apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: my-hpa-custom spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: my-app minReplicas: 1 maxReplicas: 20 metrics: - type: External # 自定义指标 external: metric: name: requests_per_second # 自定义指标名称(需与Prometheus Adapter配置一致) target: type: Value value: "100" # 目标值(每秒100个请求) 

需提前部署Prometheus Adapter并将自定义指标暴露给Kubernetes集群。

五、注意事项

  1. 资源请求必须设置:HPA依赖resources.requests计算利用率,未设置则无法正常工作;
  2. 避免频繁扩缩容:设置合理的targetUtilization(如50%-80%),避免因阈值过低导致频繁扩缩容(可能影响应用稳定性);
  3. 监控HPA行为:通过kubectl get hpa -w实时监控HPA状态,或结合Prometheus+Granafa实现可视化;
  4. 集群资源充足:确保集群有足够的节点资源容纳最大副本数(maxReplicas),否则可能导致Pod处于Pending状态。

0