• kubernetes之HPA


      1.什么是HPA?
      在 Kubernetes 中,HorizontalPodAutoscaler 自动更新工作负载资源 (例如 Deployment 或者 StatefulSet), 目的是自动扩缩工作负载以满足需求。

      水平扩缩意味着对增加的负载的响应是部署更多的 Pods。 这与 “垂直(Vertical)” 扩缩不同,对于 Kubernetes, 垂直扩缩意味着将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod。

      如果负载减少,并且 Pod 的数量高于配置的最小值, HorizontalPodAutoscaler 会指示工作负载资源( Deployment、StatefulSet 或其他类似资源)缩减。

      水平 Pod 自动扩缩不适用于无法扩缩的对象(例如:DaemonSet。)

      HorizontalPodAutoscaler 被实现为 Kubernetes API 资源和控制器。

      资源决定了控制器的行为。在 Kubernetes 控制平面内运行的水平 Pod 自动扩缩控制器会定期调整其目标(例如:Deployment)的所需规模,以匹配观察到的指标, 例如,平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标。

      官方是这样给出的。
      2.下载metrics
      GitHUB地址
      https://github.com/kubernetes-sigs/metrics-server
      3.测试是否metrics是否正常运行,metrics正常运行。
      kubectl top node
      NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
      kubernetes-master01 183m 4% 1279Mi 21%
      kubernetes-node01 49m 1% 1111Mi 18%
      kubernetes-node02 39m 0% 369Mi 6%
      4.创建测试应用
      vim web.yaml
      apiVersion: apps/v1
      kind: Deployment
      metadata:
      labels:
      app: web-nginx-hpa
      name: web-deployment-nginx-test
      namespace: default
      spec:
      replicas: 1
      selector:
      matchLabels:
      app: web-nginx-hpa
      template:
      metadata:
      labels:
      app: web-nginx-hpa
      spec:
      containers:
      - image: nginx
      name: web-deployment-nginx-test
      resources:
      limits:
      cpu: "50m"
      memory: 20Mi
      requests:
      cpu: "50m"
      memory: 20Mi
      5.创建Serivce,这一步可以为前端提供一个访问入口。方便我们测试使用。
      cat service-hpa.yaml
      apiVersion: v1
      kind: Service
      metadata:
      name: hpa-service
      spec:
      selector:
      run: php-apache
      ports:

      • name: http
        port: 80
        targetPort: 80

      6.创建hpa资源
      cat web.hpa.yaml
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      metadata:
      name: web-deployment-nginx-test
      spec:
      scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: web-deployment-nginx-test
      minReplicas: 2 # 最小Pod数量
      maxReplicas: 10 # 最大Pod数量
      targetCPUUtilizationPercentage: 30 # CPU到百分之30使用扩缩容。

      7.创建完毕后测试。
      while :;do wget -q -O- http://nginx-hpa;done
      8.随着不断访问,流量渐渐上来了。会触发扩缩容。
      kubectl get hpa -w
      NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
      web-deployment-nginx-test Deployment/web-deployment-nginx-test 0%/30% 2 10 2 90m
      web-deployment-nginx-test Deployment/web-deployment-nginx-test 76%/30% 2 10 2 90m
      web-deployment-nginx-test Deployment/web-deployment-nginx-test 76%/30% 2 10 4 91m
      web-deployment-nginx-test Deployment/web-deployment-nginx-test 55%/30% 2 10 6 91m
      web-deployment-nginx-test Deployment/web-deployment-nginx-test 50%/30% 2 10 6 91m
      9.停止压测。因为默认情况下,每30s检测一次指标,只要检测到了配置HPA的目标值,则会计算出预期的工作负载的副本数,再进行扩缩容操作。同时,为了避免过于频繁的扩缩容,默认在5min内没有重新扩缩容的情况下,才会触发扩缩容。 不过,HPA本身的算法相对比较保守,可能并不适用于很多场景。例如,一个快速的流量突发场景,如果正处在5min内的HPA稳定期,这个时候根据HPA的策略,会导致无法扩容。 另外,在一些Serverless场景下,有缩容到0然后冷启动的需求,但HPA默认不支持。
      kubectl get pod -w
      web-deployment-nginx-test-54f8c5b657-c2wc4 1/1 Running 0 44m
      web-deployment-nginx-test-54f8c5b657-c54w4 0/1 ContainerCreating 0 1s
      web-deployment-nginx-test-54f8c5b657-cgf74 0/1 ContainerCreating 0 16s
      web-deployment-nginx-test-54f8c5b657-k4mpc 0/1 ContainerCreating 0 1s
      web-deployment-nginx-test-54f8c5b657-qv9f2 1/1 Running 0 16s
      web-deployment-nginx-test-54f8c5b657-v5zfr 1/1 Running 0 3m4s
      web-deployment-nginx-test-54f8c5b657-cgf74 1/1 Running 0 27s

    • 相关阅读:
      cmip6数据如何下载?您是利用官方网站手动人工下载还是半自动购物车方式?
      29、Elasticsearch进阶查询
      【示波器专题】示波器探头的负载效应
      秋招笔试整理
      品牌化战略:跨境电商市场突破的关键
      MySQL进阶 —— 超详细操作演示!!!(上)
      一文读懂PostgreSQL中的索引
      Java学习笔记_No.1
      基于Android studio智能快递柜存放取物系统java
      深入 lerna 发包机制 —— lerna publish - 掘金
    • 原文地址:https://www.cnblogs.com/xunweidezui/p/16494897.html