Azure Kubernetes 水平自動擴充Pod

當我們將應用部署到AKS中以pod的形式對外提供服務時,爲了確保用戶可以獲得良好的使用體驗,我們需要關注如下兩種情況:

  • POD因爲不明原有掛掉,導致服務不可用
  • 當出現大量用戶訪問時,Pod在高負荷的情況下能否支撐我們的應用

對於Pod的高可用性我們可以使用AKS的deployment控制器來確保Pod可以持續對外提供服務,但是對於面臨大量用戶訪問時,我們就需要擴展我們的資源來滿足業務需求。
前面的文章中給大家介紹了手動擴展pod來滿足業務的擴展需求,但是相信大家都已經意識到了如果我們人工監控pods,人工進行調整副本那麼這個工作量無疑是巨大的,但kubernetes已經有了相應的機制來應對了。這就是我們今天要爲大家介紹的水平自動擴充POD(HPA)
HPA全稱Horizontal Pod Autoscaler控制器工作流程

HPA的工作流程如下:

  • 創建HPA資源對象,關聯對應資源例如Deployment,設定目標CPU使用率閾值,最大,最小replica數量。
    前提:pod一定要設置資源限制,參數request,HPA纔會工作。
  • HPA控制器每隔15秒鐘(可以通過設置controller manager的–horizontal-pod-autoscaler-sync-period參數設定,默認15s)通過觀測metrics值獲取資源使用信息
  • HPA控制器將獲取資源使用信息與HPA設定值進行對比,計算出需要調整的副本數量
  • 根據計算結果調整副本數量,使得單個POD的CPU使用率儘量逼近期望值,但不能照顧設定的最大,最小值。
  • 以上2,3,4週期循環

說了這麼多,下面我們來看下如何配置HPA:
在配置HPA之前,我們需要先了解Node節點的配置情況
檢查與配置resource limit
使用kubectl get nodes命令檢查node信息(node名稱)
Azure Kubernetes 水平自動擴充Pod
使用命令 kubectl describe nodes NODE_NAME 確認 Node 資源配置的狀態, 因爲我們之前沒有配置Resource quata,因此我們需要先設定好 Resource 限制:
Azure Kubernetes 水平自動擴充Pod
打開我們之前創建的yaml文件,修改 Resources 配置, 其中 CPU 配置 Container 只使用 1 個 CPU 單元, Request 限制使用 0.5 個 CPU 單元:
Azure Kubernetes 水平自動擴充Pod
修改完成以後使用kubectl apply -f FILE_NAME重新部署對應POD
Azure Kubernetes 水平自動擴充Pod

設置水平自動擴充HPA
使用命令 kubectl autoscale deployment nginx--cpu-percent=1 --min=1 --max=10 將自動擴充設定爲 CPU-percent 設定爲1%, 並且將 minimum replica 數設爲 1, maximum replica 數設爲 10.
Azure Kubernetes 水平自動擴充Pod

配置完成以後我們使用webbench來對我們部署的NGINX網站進行壓力測試:
Azure Kubernetes 水平自動擴充Pod
使用命令 kubectl get hpa 觀察水平自動擴充狀態, 請注意 Target 中有兩個數字, 是 Current/Target CPU 使用率
Azure Kubernetes 水平自動擴充Pod
使用命令 kubectl get deployment 觀察 deployment 數量有無增加
Azure Kubernetes 水平自動擴充Pod
使用命令 kubectl get pod 觀察 pod 數量有無增加, 並且注意狀態, 如果 > 1 表示水平自動擴充 (hpa) 已經成功設置且生效了
Azure Kubernetes 水平自動擴充Pod

清除資源
測試完成以後,我們可以使用kubect delete -f FILE_NAME 來刪除對應的deployment資源:
Azure Kubernetes 水平自動擴充Pod
使用kubectl delete hpa nginx來刪除hpa資源:
Azure Kubernetes 水平自動擴充Pod

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章