什么是 Kubernetes HPA
自動伸縮是 Kubernetes 的核心能力。您配置的擴展機制(HPA、VPA 和 Cluster Autoscaler)越嚴格,運行應用程序的浪費和成本就越低。?
Kubernetes 提供了三種自動伸縮機制:Horizo??ntal Pod Autoscaler (HPA)、Vertical Pod Autoscaler (VPA) 和 Cluster Autoscaler。
在本文中,我們關注水平 pod 自動縮放。您可以通過在集群上配置 Horizo??ntal Pod Autoscaler (HPA) 設置來控制基于各種指標運行的 pod 數量。這使您能夠根據需求擴大或縮小規模。?
繼續閱讀以了解 Kubernetes HPA 是什么以及它在動手示例中的工作原理。
讓我們從 Kubernetes 自動縮放的快速回顧開始
在深入研究 Horizo??ntal Pod Autoscaler (HPA) 之前,讓我們看一下 Kubernetes 的自動縮放機制。?
Kubernetes 支持三種類型的自動縮放:?
1. Horizo??ntal Pod Autoscaler (HPA),它縮放應用程序的副本數量。?
2. Vertical Pod Autoscaler (VPA),用于擴展容器的資源請求和限制。?
3. Cluster Autoscaler,調整集群的節點數。?
這些自動縮放器在兩個 Kubernetes 級別之一上工作:pod 和 cluster。雖然 Kubernetes HPA 和 VPA 方法在 pod 級別調整資源,但 Cluster Autoscaler 會擴大或縮小集群中的節點數量。?
什么是 Kubernetes Horizo??ntal Pod Autoscaler (HPA)?
在許多應用程序中,使用情況會隨著時間而變化——例如,晚上訪問電子商務商店的人多于中午左右。當您的應用程序需求發生變化時,您可以使用 Horizo??ntal Pod Autoscaler (HPA) 根據 CPU 利用率自動添加或刪除 pod。
HPA 根據您在外部提供的指標或自定義指標做出自動縮放決策。
首先,您需要使用 MIN 和 MAX 值定義在任何給定時間應運行的副本數。配置完成后,Horizo??ntal Pod Autoscaler 控制器會負責檢查指標并根據需要進行調整。默認情況下,它每 15 秒檢查一次指標。
Horizo??ntal Pod Autoscaler 如何工作?
配置 HPA 控制器將監控部署的 pod 并了解 pod 副本的數量是否需要更改。為了確定這一點,HPA 采用每個 pod 指標值的加權平均值,并計算刪除或添加副本是否會使該值更接近其目標值。
示例場景
假設您的部署的目標 CPU 利用率為 50%。您目前有五個 Pod 在那里運行,平均 CPU 利用率為 75%。在這種情況下,HPA 控制器將添加三個副本以使 pod 平均值更接近 50% 的目標。
何時使用 Kubernetes HPA?
Horizo??ntal Pod Autoscaler 是一種自動擴展機制,可用于擴展無狀態應用程序。但是您也可以使用它來支持擴展有狀態集。?
要為經歷定期需求變化的工作負載節省成本,請將 HPA 與集群自動縮放結合使用。這將幫助您在 pod 數量減少時減少活動節點的數量。
Horizo??ntal Pod Autoscaler 的限制?
請注意,HPA 有一些限制:
- 它可能需要在構建您的應用程序時考慮到橫向擴展,以便可以在多個服務器之間分配工作負載。?
- HPA 可能無法始終跟上意外的需求高峰,因為新虛擬機可能需要幾分鐘才能加載。
- 如果您未能在 pod 上設置 CPU 和內存限制,如果您選擇相反,它們可能會頻繁終止或浪費資源。?
- 如果集群容量不足,則 HPA 無法擴展,直到將新節點添加到集群中。Cluster Autoscaler (CA) 可以自動執行此過程。?
運行 Horizo??ntal Pod Autoscaler 需要什么?
Horizo??ntal Pod Autoscaler (HPA) 是 Kubernetes 集群管理器的一項功能,它監視 pod 容器的 CPU 使用情況,并根據需要自動調整它們的大小以保持目標利用率水平。?
為此,HPA 需要一個指標來源。例如,當基于 CPU 使用率進行擴展時,它使用metrics-server。如果要使用自定義或外部指標進行 HPA 擴展,則需要部署實現 custom.metrics.k8s.io API 或 external.metrics.k8s.io API 的服務;這提供了一個與監控服務或指標源的接口。?
自定義指標包括網絡流量、內存或與 pod 應用程序相關的任何值。如果您的工作負載使用標準 CPU 指標,請確保在 pod 規范中為容器配置 CPU 資源限制。
運行 Kubernetes HPA 的專家提示
1.安裝Metrics-Server?
Kubernetes HPA 需要訪問每個 pod 的資源指標來做出擴展決策。這些值是從 metrics-server 提供的 metrics.k8s.io API 中檢索的。?
2. 為所有 Pod 配置資源請求
HPA 擴展決策的另一個關鍵信息來源是觀察到的 pod 的 CPU 利用率值。但是這些值是如何計算的呢?它們是來自單個 pod 的資源請求的百分比。?
如果您錯過了某些容器??的資源請求值,這些計算可能會變得完全不準確,并導致次優操作和糟糕的擴展決策。這就是為什么值得為每個 pod 的所有容器配置資源請求值的原因,這些容器是由 HPA 擴展的 Kubernetes 控制器的一部分。
3. 配置自定義和外部指標
自定義指標
您可以將 Horizo??ntal Pod Autoscaler (HPA) 配置為基于自定義指標進行擴展,這些指標是您從應用程序收集的內部指標。HPA 支持兩種類型的自定義指標:?
- Pod 指標 – 應用程序中所有 pod 的平均值,僅支持目標類型 AverageValue。?
- 對象指標 – 描述與您的應用程序在同一命名空間中的任何其他對象并支持 Value 和 AverageValue 的目標類型的指標。?
請記住在配置自定義指標時為 pod 和對象指標使用正確的目標類型。?
外部指標
這些指標允許 HPA 根據第三方監控系統提供的指標自動擴展應用程序。外部指標支持 Value 和 AverageValue 的目標類型。?
在決定自定義指標和外部指標時,請選擇自定義指標,因為保護外部指標 API 比獲得內部指標更難。
4. 驗證您的 HPA 和 VPA 策略不沖突
Vertical Pod Autoscaler 可自動執行請求并限制配置,從而減少開銷并節省成本。另一方面,Horizo??ntal Pod Autoscaler 旨在橫向擴展而不是向上或向下擴展。?
在為業務或目的級服務層設計集群時,請仔細檢查您的分箱和打包密度設置是否相互沖突。
5. 使用實例加權分數
假設您的一個工作負載最終消耗的比它請求的多。發生這種情況是因為需要資源嗎?或者工作負載是否因為它們可用但不是非常需要而消耗它們?
在為自動縮放選擇實例大小和類型時使用實例權重。實例加權很有用,尤其是當您采用多樣化的分配策略并使用 Spot 實例時。
示例:HPA 演示
由于這是 Kubernetes 的核心功能之一,我們使用的云服務提供商應該無關緊要。但在本例中,我們將使用 GKE。?
您可以通過 UI 或 gcloud utils 創建集群,如下所示:
gcloud container \--project "[your-project]" clusters create "[cluster-name]" \--release-channel None \--zone "europe-west3-c" \--node-locations "europe-west3-c" \--machine-type "e2-standard-2" \--image-type "COS_CONTAINERD" \--disk-size "50" \--enable-autorepair \--num-nodes "3"然后我們可以使用以下方式連接到集群:
gcloud container clusters get-credentials [cluster-name] --zone europe-west3-c --project [your-project]這也應該將您的上下文切換到集群,因此無論何時使用 kubectl,您都將處于該集群的上下文中。
完成后,我們可以驗證是否可以看到節點:?
> kubectl get nodesNAME STATUS ROLES AGE VERSION gke-valdas-1-default-pool-cf1cd6be-cvc4 Ready <none> 4m50s v1.22.11-gke.400 gke-valdas-1-default-pool-cf1cd6be-q62h Ready <none> 4m49s v1.22.11-gke.400 gke-valdas-1-default-pool-cf1cd6be-xrf0 ? Ready ? ?<none> ? 4m50s ? v1.22.11-gke.400
GKE 預裝了指標服務器;我們可以驗證使用:
請注意,如果您的集群沒有指標服務器,您可以使用一個命令輕松安裝它:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml你可以在這里找到更多信息。
我們還可以使用 `top` 命令來驗證是否收集了指標:
> kubectl top pods -ANAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system event-exporter-gke-5479fd58c8-5rt4b 1m 12Mi kube-system fluentbit-gke-5r6v5 5m 22Mi kube-system fluentbit-gke-nwcx9 4m 25Mi kube-system fluentbit-gke-zz6gl 4m 25Mi kube-system gke-metrics-agent-n92rl 2m 26Mi kube-system gke-metrics-agent-p5d49 3m 27Mi kube-system gke-metrics-agent-tf96r 3m 26Mi kube-system konnectivity-agent-6fbc8c774c-4vvff 1m 6Mi kube-system konnectivity-agent-6fbc8c774c-lsk26 1m 7Mi kube-system konnectivity-agent-6fbc8c774c-rnvp2 2m 6Mi kube-system konnectivity-agent-autoscaler-555f599d94-f2w5n 1m 4Mi kube-system kube-dns-85df8994db-lvf55 2m 30Mi kube-system kube-dns-85df8994db-mvxv5 2m 30Mi kube-system kube-dns-autoscaler-f4d55555-pctcj 1m 11Mi kube-system kube-proxy-gke-valdas-1-default-pool-cf1cd6be-cvc4 1m 22Mi kube-system kube-proxy-gke-valdas-1-default-pool-cf1cd6be-q62h 1m 23Mi kube-system kube-proxy-gke-valdas-1-default-pool-cf1cd6be-xrf0 1m 26Mi kube-system l7-default-backend-69fb9fd9f9-fctch 1m 1Mi kube-system metrics-server-v0.4.5-fb4c49dd6-knw6v 27m 24Mi kube-system pdcsi-node-mf6pt 2m 9Mi kube-system pdcsi-node-sxdrg 3m 9Mi kube-system ? pdcsi-node-wcnw7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3m ? ? ? ? ? 9Mi現在,讓我們創建一個具有資源請求和限制的單副本部署:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata:name: hpa-demo spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: hpa-demominReplicas: 1maxReplicas: 5targetCPUUtilizationPercentage: 60總結
以上是生活随笔為你收集整理的什么是 Kubernetes HPA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AHB-SRAM简单设计之 顶层模块sr
- 下一篇: F407 sram