美文网首页云原生专题
k8s Horizontal Pod Autoscaler(HP

k8s Horizontal Pod Autoscaler(HP

作者: Lvxus | 来源:发表于2020-03-01 16:22 被阅读0次

    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(HP

        本文链接:https://www.haomeiwen.com/subject/qfvqkhtx.html