簡述
pod的橫向自動伸縮
獲取pod度量
計算所需的 pod 數量

更新被伸縮資源的副本數


• Deployment
• ReplicaSet
• ReplicationController
• StatefulSet
目前也只有這些對象可以附着Autoscaler。
基於CPU使用率創建HPA

創建deployment 資源 apiVersion: extensions/vlbetal kind: Deployment metadata: name: kubia spec: replicas: 3 #手動設置(初始)想要的副本數為3 template: metadata: name: kubia labels: app: kubia spec: containers: - image: luksa/kubia:vl name: nodejs resources: requests: cpu: 100m #每個pod請求100毫核的CPU 創建了Deployment之后, 為了給它的pod 啟用橫向自動伸縮 , 需要創建一個 HorizontalpodAutoscaler (HPA)對象, 並把它指向該Deployment。 $ kubectl autoscale deploymen七kubia --cpu-percent=30 --min=l --max=5 這會幫你創建 HPA對象,並將叫作kubia的Deployment設置為伸縮目標。你還設置了pod的目標 CPU使用率為30%, 指定了副本的最小和最大數量。Autoscaler會持續調整副本的數量 以使CPU使用率接近30%, 但它永遠不會調整到少於1個或者多於5個。 提示:一定要確保自動伸縮的目標是Deployinent 而不是底層的 ReplicaSet。 這樣才能確保預期的副本數量在應用更新后繼續保持(記着 Deployment 會給每個應用版本創建一個 新的 ReplicaSet)。 手動伸縮也是同樣的道理。
修改一個已有 HPA 對象的目標度量值
可能你 開始設置的目標值30 有點太低了,我們把它提高到 你將使用 kubectl edit 命令來完成這項工作。文本編輯器打開之后,把 targetAverageUtilization 字段改為 60,
正如大多數其他資源 樣,在你修改資源之后, Autosca er 控制器會檢測到這一變更,並執行相應動作 也可以先刪除 HPA 資源再用新的值創建一個,因為刪除HPA 資源只會禁用目標資源的自動伸縮(本例中為 Deployment ,而它的伸縮規模會保持在刪除資源的時刻 在你為 Deployment 創建一個新的 HPA 資源之后,自動伸縮過程就會繼續進行

... spec: maxReplicas: 5 metrics: - type: Resource resource: name: cpu targetAverageUtilization:30 ...
如上所示, metrics 字段允許你定義多個度量供使用。在代碼清單中使用了單個度量。每個條目都指定相應度量的類型一一本例中為一個 Resource 度量。可以在HPA 對象中使用三種度量:
Resurce 量類型
pods 度量類型

... spec: metrics: - type: Pods resource: metricName: qps targetAverageValue:100 ...
Object 度量類型

... spec: maxReplicas: 5 metrics: - type: Object resource: metricname: latencyMillis #度量名稱 target: #autoscale 從中獲取度量的特定對象 apiVersion: extensions/vlbetal kind: Ingress name: frontend targetValue: 20 scaleTargetRef: #autoscale 將要管理的可伸縮資源 apiVersion: extensions/vlbetal kind: Deployment name: kubia ...
該例中 HPA 被配置為使用 Ingress 對象 frontend 的 latencyMillis 度量,目標值為 20 。HPA 會監控該 Ingress 度量,如果該度量超過了目標值太多autoscaler 便會對 kubia Deployment 資源進行擴容了。
pod 的縱向自動伸縮
集群節點的橫向伸縮
Cluster Autoscaler負責在由於節點資源不足, 而無法調度某pod到已有節點時,自動部署新節點。它也會在 節點長時間使用率低下的情況下下線節點。
從雲端基礎架構請求新節點
歸還節點

節點也可以手動被標記為不可調度並排空。 不涉及細節, 這些工作可用以下 kubectl 命令完成: • kubectl cordon <node> 標記節點為不可調度(但對其上的 pod不做任何事)。 • kubectl drain <node> 標記節點為不可調度, 隨后疏散其上所有pod。 兩種情形下, 在你用 kubectl uncordon <node> 解除節點的不可調度狀態之前, 不會有新 pod被調度到該節點。

$ kubectl create pdb kubia-pdb --selector=app=kubia --min-available=3 poddisruptionbudget "kubia-pdb" created
現在獲取這個pod 的YAML文件, 如以下代碼清單所示。
也可以用 一個百分比而非絕對數值來寫minAvailable字段。 比方說,可以指定60%帶app=kubia標簽的pod應當時刻保持運行。注意從Kubemetes 1. 7開始podDismptionBudget資源也支持maxUnavailable。如果當很多pod不可用而想要阻止pod被剔除時,就可以用maxUnavailable字段而不是minAvailable。