透過垂直 Pod 自動擴展器來調整 Pod 資源 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

透過垂直 Pod 自動擴展器來調整 Pod 資源

Kubernetes 垂直 Pod 自動擴展器可自動調整保留給裝置的 CPU 和記憶體,以便 Pod 協助保持應用程式的「適當大小」。這項調整可以改善叢集資源使用率,並釋放 CPU 和記憶體給其他 Pod。本主題協助您將 Vertical Pod Autoscaler 部署到您的叢集,並驗證是否正常運作。

部署 Vertical Pod Autoscaler

在本節中,您會將 Vertical Pod Autoscaler 部署到叢集。

  1. 開啟終端機視窗,導覽至您要下載 Vertical Pod Autoscaler 原始程式碼的目錄。

  2. 複製 kubernetes/autoscalerGitHub 儲存庫。

    git clone https://github.com/kubernetes/autoscaler.git
  3. 切換至 vertical-pod-autoscaler 目錄。

    cd autoscaler/vertical-pod-autoscaler/
  4. (選用) 如果您已部署另一個版本的 Vertical Pod Autoscaler,請使用下列命令將其移除。

    ./hack/vpa-down.sh
  5. 如果您的節點對 registry.k8s.io 容器登錄檔無網際網路存取權,則您需要提取以下映像,並將其推送到您的私有儲存庫。如需有關如何提取映像以及將映像推送到您的私有儲存庫的詳細資訊,請參閱 將容器映像從一個儲存庫複製到另一個儲存庫

    registry.k8s.io/autoscaling/vpa-admission-controller:0.10.0 registry.k8s.io/autoscaling/vpa-recommender:0.10.0 registry.k8s.io/autoscaling/vpa-updater:0.10.0

    如果要將映像推送到私有 Amazon ECR 儲存庫,請使用您的登錄檔取代清單檔案中的 registry.k8s.io。使用您的帳戶 ID 取代 111122223333。使用叢集所在的 AWS 區域取代 region-code。以下命令假定您將自己的儲存庫命名為與清單檔案中儲存庫相同的名稱。如果您將自己的儲存庫命名為其他名稱,您也需要變更清單檔案中儲存庫的名稱。

    sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/updater-deployment.yaml
  6. 使用下列命令,將 Vertical Pod Autoscaler 部署到您的叢集。

    ./hack/vpa-up.sh
  7. 確認已成功建立垂直 Pod 自動擴展器 Pod。

    kubectl get pods -n kube-system

    範例輸出如下。

    NAME READY STATUS RESTARTS AGE [...] metrics-server-8459fc497-kfj8w 1/1 Running 0 83m vpa-admission-controller-68c748777d-ppspd 1/1 Running 0 7s vpa-recommender-6fc8c67d85-gljpl 1/1 Running 0 8s vpa-updater-786b96955c-bgp9d 1/1 Running 0 8s

測試您的 Vertical Pod Autoscaler 安裝

在本節中,您將部署範例應用程式,以驗證 Vertical Pod Autoscaler 是否正常運作。

  1. 使用以下命令部署 hamster.yaml Vertical Pod Autoscaler 範例。

    kubectl apply -f examples/hamster.yaml
  2. hamster 範例應用程式取得 Pod。

    kubectl get pods -l app=hamster

    範例輸出如下。

    hamster-c7d89d6db-rglf5 1/1 Running 0 48s hamster-c7d89d6db-znvz5 1/1 Running 0 48s
  3. 描述其中一個 Pod,以檢視其 cpumemory 的保留情況。使用在上一個步驟傳回的輸出中的其中一個 ID 取代 c7d89d6db-rglf5

    kubectl describe pod hamster-c7d89d6db-rglf5

    範例輸出如下。

    [...] Containers: hamster: Container ID: docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24 Image: registry.k8s.io/ubuntu-slim:0.1 Image ID: docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1 Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Fri, 27 Sep 2019 10:35:16 -0700 Ready: True Restart Count: 0 Requests: cpu: 100m memory: 50Mi [...]

    您可以看到原始 Pod 保留 100 millicpu 的 CPU 和 50 MiB 的記憶體。在這個範例應用程式中,100 millicpu 小於 Pod 執行所需,因此 CPU 受限制。保留的記憶體也遠少於所需。垂直 Pod 自動擴展器 vpa-recommender 部署會分析 hamster Pod,以檢查 CPU 和記憶體需求是否合適。如果需要調整,vpa-updater 會以更新的值重新啟動 Pod。

  4. 等待 vpa-updater 啟動新的 hamster Pod。這需要一兩分鐘。您可使用下列命令來監控 Pod。

    注意

    如果您不確定新的 Pod 是否已啟動,請將 Pod 名稱與之前的清單進行比較。當新的 Pod 啟動時,您會看到新的 Pod 名稱。

    kubectl get --watch Pods -l app=hamster
  5. 當新的 hamster Pod 啟動時,請對其做出描述並檢視更新的 CPU 和記憶體保留。

    kubectl describe pod hamster-c7d89d6db-jxgfv

    範例輸出如下。

    [...] Containers: hamster: Container ID: docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db Image: registry.k8s.io/ubuntu-slim:0.1 Image ID: docker-pullable://registry.k8s.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1 Port: <none> Host Port: <none> Command: /bin/sh Args: -c while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done State: Running Started: Fri, 27 Sep 2019 10:37:08 -0700 Ready: True Restart Count: 0 Requests: cpu: 587m memory: 262144k [...]

    在先前的輸出中,您可以看到 cpu 保留已增加到 587 millicpu,這已是原始值的 5 倍。memory 已增加到 262,144 KB,大約是 250 MiB 或原始值的 5 倍。此 Pod 的資源不足,垂直 Pod 自動擴展器已依照更適當的值來更正預估值。

  6. 描述 hamster-vpa 資源以檢視新的建議。

    kubectl describe vpa/hamster-vpa

    範例輸出如下。

    Name: hamster-vpa Namespace: default Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d... API Version: autoscaling.k8s.io/v1beta2 Kind: VerticalPodAutoscaler Metadata: Creation Timestamp: 2019-09-27T18:22:51Z Generation: 23 Resource Version: 14411 Self Link: /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa UID: d0d85fb9-e153-11e9-ae53-0205785d75b0 Spec: Target Ref: API Version: apps/v1 Kind: Deployment Name: hamster Status: Conditions: Last Transition Time: 2019-09-27T18:23:28Z Status: True Type: RecommendationProvided Recommendation: Container Recommendations: Container Name: hamster Lower Bound: Cpu: 550m Memory: 262144k Target: Cpu: 587m Memory: 262144k Uncapped Target: Cpu: 587m Memory: 262144k Upper Bound: Cpu: 21147m Memory: 387863636 Events: <none>
  7. 當您完成範例應用程式的實驗後,您可以使用下列命令將其刪除。

    kubectl delete -f examples/hamster.yaml