iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
DevOps

k8s新手船長船難記系列 第 11

[DAY11]Horizontal Pod Autoscaling(HPA)

  • 分享至 

  • xImage
  •  

Horizontal Pod Autoscaler

Pod 水平自動擴縮(Horizontal Pod Autoscaler)(以下都簡稱HPA) 可以基於CPU利用率(by metrics)自動擴縮Pod數量。 除了CPU利用率,也可以透過自定義的metrics進行擴縮。

架構圖


資料來源

還記得前面的Deployment replicas的設定值嗎,這個設定值決定了要產生多少個pod,但是如果今天request很少或是很高時,這樣子的pod數量是否有符合需求呢?
除了人工scaling pods外,是否有自動性的機會咧~~科技始終來自於惰性,有HPA後就可以省去這些動作啦,一切交給k8s進行自動擴縮Pod。

HPA如何運作

k8s中的controller manager會定時去查詢HPA中定義的metrics設定資料(ex cpu使用率),metrics資料來源是controller manager使用resource metric API或是custom metrics API取得,前一篇有提到,如果Deployment沒有設定resources的話是無法使用HPA喔。
HPA需要判斷目前metrics跟設定值的百分比。

實作HPA-kubectl autoscale

使用上篇文章中的test-myapp deployment,執行kubectl autoscale 可以簡單的把原本的test-myapp套上HPA設定

kubectl autoscale deployment test-myapp --cpu-percent=60 --min=1 --max=3

實作HPA-HPA YAML

apiVersion: autoscaling/v2beta1 
kind: HorizontalPodAutoscaler
metadata:
  name: test-myapp 
spec:
  minReplicas: 1
  maxReplicas: 3
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: test-myapp
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization:  60

取得所有HPA

kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
test-myapp   Deployment/test-myapp   10%/60%    1         3         1          1d
test-myapp2  Deployment/test-myapp2   5%/80%    1         2         1          1d
test-myapp3  Deployment/test-myapp3   4%/80%    1         1         1          1d

取得HPA詳細資訊

kubectl describe hpa test-myapp
Name:                                                  test-myapp
Namespace:                                             default
CreationTimestamp:                                     
Reference:                                             Deployment/test-myapp
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  9% (36m) / 60%
Min replicas:                                          1
Max replicas:                                          3
Deployment pods:                                       1 current / 1 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    ReadyForNewScale    recommended size matches current size
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:           <none>

使用原則

HPA建議使用在無狀態的服務上面,因為k8s會隨時根據資源使用率進行擴縮pod,如果pod是有狀態的情形時,這樣子自動縮pod會導致原本的資料或是狀態遺失掉,後續需要更多的精力進行hpa後資料遺失的補救。


上一篇
[DAY10]Service:服務與POD的連結
下一篇
[DAY12]就是要持久-Statefulset
系列文
k8s新手船長船難記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言