k8s Horizontal Pod Autoscaler(HPA)

Kubernetes有一个HPA(Horizontal Pod Autoscaler)的资源,可以实现基于CPU使用率的Pod自动伸缩的功能
注意从kubernetes1.11开始Heapster被废弃不在使用,metrics-server 替代了heapster
实现HPA首先需要部署metrics-server,一个集群级别的资源利用率数据的聚合器
部署metrics-server步骤:
首先进入GitHub上进到kubernetes项目下的cluster下的addons文件路径下,把其中的yaml下载下来
然后对其中几份yaml进行修改
metrics-server-deployment.yaml

  1. metrics-server的command中加上 - --kubelet-insecure-tls 表示不验证客户端的证书
  2. 注释掉端口10255,注释后会使用10250
  3. 因为某些不可描述的原因,可以将其中两个镜像更换为阿里云镜像
  4. addon-resizer的command中写上具体的cpu、memory、extra-memory的值
  5. 注释掉minClusterSize={{ metrics_server_min_cluster_size }}
    resource-reader.yaml
  6. resource属性添加- nodes/stats属性

执行 kubectl create -f 下载的yaml和修改后的yaml
等待资源创建后
查看api-versions,会看到多出了metrics.k8s.io/v1beta1
使用 kubectl top nodes 或 kubectl top pods 可查看节点或某节点内容器组的cpu资源和内存资源的使用情况
参考文档

部署metrics-server后,创建hpa

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: ms-wechat  # 名称
  namespace: default #k8s命名空间
spec:
  maxReplicas: 10  # 最大副本数
  minReplicas: 1   # 最小副本数
  scaleTargetRef:   
    apiVersion: apps/v1beta1
    kind: Deployment  
    name: ms-wechat   # 监控名为ms-wechat的Deployment
  targetCPUUtilizationPercentage: 80  # cpu 阈值

或者

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: mynginx
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: mynginx
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50
  - type: Resource
    resource:
      name: memory
      targetAverageValue: 50Mi

spec中嵌套的个字段的说明如下:

  1. minReplicas:自动伸缩pod副本数下限
  2. maxReplicas:自动伸缩可扩展至Pod副本数的上限
  3. scaleTargetRef:要伸缩的目标资源
  4. metrics:用于计算所需的Pod副本数量的指标列表
  5. external:用于应用非附属于任何对象的全局指标
  6. object:应用描述集群中某单一对象的特定指标
  7. pods:应用被弹性伸缩的pod对象的特定指标
  8. resource:应用资源指标,即当前被弹性伸缩的pod对象中容器的requests和limits中定义的指标。
  9. type:标识指标源的类型

设置hpa后查看hpa资源

kubectl get hpa

假如targets字段有显示unknown
原因

  1. 刚建立,等待一段时间再查看
  2. 需要自动伸缩的目标资源并没有进行资源限制
    对目标资源加上
resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "1"

再执行

kubectl apply -f 对应的资源yaml

然后重新查看

你可能感兴趣的:(k8s Horizontal Pod Autoscaler(HPA))