調整網繭資源 Vertical Pod Autoscaler - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。

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

調整網繭資源 Vertical Pod Autoscaler

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

必要條件

部署 Vertical Pod Autoscaler

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

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

  2. 複製 kubernetes/autoscaler GitHub 儲存庫。

    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 取代 111122223333region-code以叢集所 AWS 區域 在的位置取代。以下命令假定您將自己的儲存庫命名為與清單檔案中儲存庫相同的名稱。如果您將自己的儲存庫命名為其他名稱,您也需要變更清單檔案中儲存庫的名稱。

    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. 確認已成功建立 Vertical Pod Autoscaler Pods。

    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 是否正常運作。

測試您的 Vertical Pod Autoscaler 安裝
  1. 使用以下命令部署 hamster.yaml Vertical Pod Autoscaler 範例。

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

    kubectl get pods -l app=hamster

    範例輸出如下。

    hamster-c7d89d6db-rglf5   1/1     Running   0          48s
    hamster-c7d89d6db-znvz5   1/1     Running   0          48s
  3. 描述其中一個 Pods,以檢視其 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 受到限制。保留的記憶體也遠少於所需。Vertical Pod Autoscaler vpa-recommender 部署會分析 hamster Pods,以檢查 CPU 和記憶體需求是否合適。若需要調整,vpa-updater 會以更新的值重新啟動 Pods。

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

    注意

    若您不確定新的 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 的資源不足,Vertical Pod Autoscaler 已依照更適當的值來更正預估值。

  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