iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
0

Horizontal Pod Autoscaler是K8s提供的一種可以自動伸縮(Auto Scaling)的工具, 它可以從資源指標API和自定義指標API中獲取指標數據再依照Pod的負載進行Deployment的伸縮擴展, 目的是為了讓觀察到的CPU利用率和用戶期望的目標相近;HPA是一個control loop的實現, 預設的週期為30秒, 可由controller-manager的 horizontal-pod-autoscaler-sync-period來定義。
HPA Controller 透過metrics-server請求查看核心指標, 像是CPU和Memory的資源相關數據, 也透過k9s-prometheus-adapter等自定義API指標來取得相關的指標數據。
https://ithelp.ithome.com.tw/upload/images/20200929/20129656ILJ4BoMecr.png

HPA 部署

HPA YAML由 apiVersion, kind, metadata, spec組成
spec包含以下字段:
* minReplicas : 自動伸縮仍須保有的最小Pod數
* maxReplicas : 自動伸縮可以擴展的的最大Pod數
* scaleTargetRef : 要縮放的目標, 目標的spec只少會包含apiVersopn, kind, spec
* metrics <[]object>: 用來計算所需Pod數的指標列表
* external: 引用不屬於任何對象的全局指標
* object: 引用描述cluster中單一對象的特定指標
* pods: 引用當前被自動伸縮的Pod對象的特定指標
* resource: 引用資源指標, 即當前被自動伸縮的Pod對象容器中的requests 和 limits 定義的指標
* type: 指標的類型, 可選Objects, PodsResource

  • 部署YAML

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

    -> % kubectl get hpa
    NAME    REFERENCE          TARGETS                         MINPODS   MAXPODS   REPLICAS   AGE
    myapp   Deployment/myapp   <unknown>/50Mi, <unknown>/50%   2         10        0          13s
    

為了避免忽大忽小的流量造成Pod會重複開關,HPA在異動Pod的時候都很慢。

今日小結

中秋連假,吃肉喝酒之前要記得先準備好文章再喝醉喔!


上一篇
day 24 Prometheus
下一篇
day 26 HELM
系列文
K8S - 30天從擦槍到提槍上陣學習筆記。30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言