K8S動態(tài)擴縮容-HPA

kubernetes Horizontal Pod Autoscaling

  1. 自動擴縮ReplicationController赠涮、Deployment啤它、ReplicaSet 和 StatefulSet 中的 Pod 數量
  2. 度量指標可以是:CPU指標 和 自定義
HPA 控制過程
  1. 實現自動擴縮容的原理官方文檔

    1. --horizontal-pod-autoscaler-sync-period=15s 控制器的自動檢測周期驯用。
    2. metrics-server 提供 metrics.k8s.io API 為pod資源的使用提供支持鉴裹。
    3. 15s/周期 -> 查詢metrics.k8s.io API -> 算法計算 -> 調用scale 調度 -> 特定的擴縮容策略執(zhí)行喂很。
  2. HPA擴縮容算法 期望副本數 = ceil[當前副本數 * (度量指標 / 期望指標)]

    1. 擴容
      1. 如果計算出的擴縮比例接近 1.0, 將會放棄本次擴縮, 度量指標 / 期望指標接近1.0同衣。
    2. 縮容
      1. 冷卻/延遲: 如果延遲(冷卻)時間設置的太短,那么副本數量有可能跟以前一樣出現抖動缸逃。 默認值是 5 分鐘(5m0s)--horizontal-pod-autoscaler-downscale-stabilization
    3. 特殊處理
      1. 丟失度量值:縮小時假設這些 Pod 消耗了目標值的 100%, 在需要放大時假設這些 Pod 消耗了 0% 目標值厂抽。 這可以在一定程度上抑制擴縮的幅度需频。
      2. 存在未就緒的pod的時候:我們保守地假設尚未就緒的 Pod 消耗了期望指標的 0%,從而進一步降低了擴縮的幅度筷凤。
      3. 未就緒的 Pod 和缺少指標的 Pod 考慮進來再次計算使用率昭殉。 如果新的比率與擴縮方向相反,或者在容忍范圍內藐守,則跳過擴縮挪丢。 否則,我們使用新的擴縮比例卢厂。
      4. 指定了多個指標乾蓬, 那么會按照每個指標分別計算擴縮副本數,取最大值進行擴縮慎恒。

HPA 對象定義

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
spec:
  behavior:
  scaleDown:
    policies:
    - type: Pods
      value: 4
      periodSeconds: 60
    - type: Percent
      value: 10
      periodSeconds: 60
    stabilizationWindowSeconds: 300
  
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

HPA對象默認行為

behavior:
  scaleDown:
    stabilizationWindowSeconds: 300
    policies:
    - type: Percent
      value: 100
      periodSeconds: 15
  scaleUp:
    stabilizationWindowSeconds: 0
    policies:
    - type: Percent
      value: 100
      periodSeconds: 15
    - type: Pods
      value: 4
      periodSeconds: 15
    selectPolicy: Max

metrics-server api github

為集群提供監(jiān)控性能參考是必須的任内。

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

遇到問題請參考 issue

一個nginx的演示實例

---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
  namespace: lidj
spec:
  maxReplicas: 10
  metrics:
  - resource:
      name: cpu
      target:
        averageUtilization: 40
        type: Utilization
    type: Resource
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: lidj
spec:
  type: NodePort
  ports:
    - name: "http"
      port: 80
      targetPort: 80

  selector:
    service: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: lidj
spec:
  replicas: 1
  selector:
    matchLabels:
      service: nginx
  template:
    metadata:
      labels:
        service: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
            limits:
              cpu: 200m
              memory: 200Mi

使用壓測工具ab進行

ab -n 100000 -c 800 http://10.22.112.223:43434

查看現象

[root@shifeinode5 ~]# kubectl get pods,hpa -n lidj | grep nginx
pod/nginx-866f647cbc-97qp2            0/1     ContainerCreating   0          11s
pod/nginx-866f647cbc-hf65d            0/1     ContainerCreating   0          11s
pod/nginx-866f647cbc-hq6b7            1/1     Running             0          19h
pod/nginx-866f647cbc-kp6jq            1/1     Running             0          23h
horizontalpodautoscaler.autoscaling/nginx   Deployment/nginx   97%/40%   2         20        2          23h
[root@shifeinode5 ~]# kubectl get pods,hpa -n lidj | grep nginx
pod/nginx-866f647cbc-5tlft            1/1     Running             0          22s
pod/nginx-866f647cbc-97qp2            1/1     Running             0          37s
pod/nginx-866f647cbc-bfc5f            0/1     ContainerCreating   0          22s
pod/nginx-866f647cbc-chl48            0/1     ContainerCreating   0          7s
pod/nginx-866f647cbc-dl4v8            1/1     Running             0          22s
pod/nginx-866f647cbc-hf65d            1/1     Running             0          37s
pod/nginx-866f647cbc-hq6b7            1/1     Running             0          19h
pod/nginx-866f647cbc-j5275            1/1     Running             0          22s
pod/nginx-866f647cbc-kp6jq            1/1     Running             0          23h
pod/nginx-866f647cbc-v5gpc            0/1     ContainerCreating   0          7s
horizontalpodautoscaler.autoscaling/nginx   Deployment/nginx   91%/40%   2         20        8          23h
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市融柬,隨后出現的幾起案子死嗦,更是在濱河造成了極大的恐慌,老刑警劉巖粒氧,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越除,死亡現場離奇詭異,居然都是意外死亡外盯,警方通過查閱死者的電腦和手機摘盆,發(fā)現死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來门怪,“玉大人骡澈,你說我怎么就攤上這事≈揽眨” “怎么了肋殴?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵囤锉,是天一觀的道長。 經常有香客問我护锤,道長官地,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任烙懦,我火速辦了婚禮驱入,結果婚禮上,老公的妹妹穿的比我還像新娘氯析。我一直安慰自己亏较,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布掩缓。 她就那樣靜靜地躺著雪情,像睡著了一般。 火紅的嫁衣襯著肌膚如雪你辣。 梳的紋絲不亂的頭發(fā)上巡通,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音舍哄,去河邊找鬼宴凉。 笑死,一個胖子當著我的面吹牛表悬,可吹牛的內容都是我干的弥锄。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼签孔,長吁一口氣:“原來是場噩夢啊……” “哼叉讥!你這毒婦竟也來了?” 一聲冷哼從身側響起饥追,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤图仓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后但绕,有當地人在樹林里發(fā)現了一具尸體救崔,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年捏顺,在試婚紗的時候發(fā)現自己被綠了六孵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡幅骄,死狀恐怖劫窒,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情拆座,我是刑警寧澤主巍,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布冠息,位于F島的核電站,受9級特大地震影響孕索,放射性物質發(fā)生泄漏逛艰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一搞旭、第九天 我趴在偏房一處隱蔽的房頂上張望散怖。 院中可真熱鬧,春花似錦肄渗、人聲如沸镇眷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偏灿。三九已至,卻和暖如春钝的,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铆遭。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工硝桩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枚荣。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓碗脊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橄妆。 傳聞我的和親對象是個殘疾皇子衙伶,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容