首页主机资讯centos k8s自动扩缩容方法

centos k8s自动扩缩容方法

时间2025-10-11 19:18:04发布访客分类主机资讯浏览1226
导读:一、前提条件:安装Metrics Server HPA(Horizontal Pod Autoscaler)依赖Metrics Server收集Pod的CPU、内存等资源使用数据。在CentOS上安装Metrics Server的步骤如下:...

一、前提条件:安装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状态。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: centos k8s自动扩缩容方法
本文地址: https://pptw.com/jishu/723890.html
CentOS上JMeter如何进行负载测试 k8s部署在centos上的难点在哪

游客 回复需填写必要信息