

 **協助改進此頁面** 

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

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

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

# 透過垂直 Pod 自動擴展器來調整 Pod 資源
<a name="vertical-pod-autoscaler"></a>

Kubernetes [垂直 Pod 自動擴展器](https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler)可自動調整保留給裝置的 CPU 和記憶體，以便 Pod 協助保持應用程式的「適當大小」。這項調整可以改善叢集資源使用率，並釋放 CPU 和記憶體給其他 Pod。本主題協助您將 Vertical Pod Autoscaler 部署到您的叢集，並驗證是否正常運作。
+ 您擁有現有的 Amazon EKS 叢集。如果您沒有，則請參閱 [開始使用 Amazon EKS](getting-started.md)。
+ 您已安裝 Kubernetes 指標伺服器。如需詳細資訊，請參閱 [使用 Kubernetes 指標伺服器檢視資源用量](metrics-server.md)。
+ 您所使用的 `kubectl` 用戶端[已設定將與您的 Amazon EKS 叢集通訊](getting-started-console.md#eks-configure-kubectl)。
+ 裝置上已安裝 OpenSSL `1.1.1` 或更新版本。

## 部署 Vertical Pod Autoscaler
<a name="vpa-deploy"></a>

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

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

1. 複製 [kubernetes/autoscaler](https://github.com/kubernetes/autoscaler)GitHub 儲存庫。

   ```
   git clone https://github.com/kubernetes/autoscaler.git
   ```

1. 切換至 `vertical-pod-autoscaler` 目錄。

   ```
   cd autoscaler/vertical-pod-autoscaler/
   ```

1. (選用) 如果您已部署另一個版本的 Vertical Pod Autoscaler，請使用下列命令將其移除。

   ```
   ./hack/vpa-down.sh
   ```

1. 如果您的節點對 `registry.k8s.io` 容器登錄檔無網際網路存取權，則您需要提取以下映像，並將其推送到您的私有儲存庫。如需有關如何提取映像以及將映像推送到您的私有儲存庫的詳細資訊，請參閱 [將容器映像從一個儲存庫複製到另一個儲存庫](copy-image-to-repository.md)。

   ```
   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
   ```

1. 使用下列命令，將 Vertical Pod Autoscaler 部署到您的叢集。

   ```
   ./hack/vpa-up.sh
   ```

1. 確認已成功建立垂直 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 安裝
<a name="vpa-sample-app"></a>

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

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

   ```
   kubectl apply -f examples/hamster.yaml
   ```

1. 從 `hamster` 範例應用程式取得 Pod。

   ```
   kubectl get pods -l app=hamster
   ```

   範例輸出如下。

   ```
   hamster-c7d89d6db-rglf5   1/1     Running   0          48s
   hamster-c7d89d6db-znvz5   1/1     Running   0          48s
   ```

1. 描述其中一個 Pod，以檢視其 `cpu` 和 `memory` 的保留情況。使用在上一個步驟傳回的輸出中的其中一個 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。

1. 等待 `vpa-updater` 啟動新的 hamster Pod。這需要一兩分鐘。您可使用下列命令來監控 Pod。
**注意**  
如果您不確定新的 Pod 是否已啟動，請將 Pod 名稱與之前的清單進行比較。當新的 Pod 啟動時，您會看到新的 Pod 名稱。

   ```
   kubectl get --watch Pods -l app=hamster
   ```

1. 當新的 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 自動擴展器已依照更適當的值來更正預估值。

1. 描述 `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>
   ```

1. 當您完成範例應用程式的實驗後，您可以使用下列命令將其刪除。

   ```
   kubectl delete -f examples/hamster.yaml
   ```