

 **協助改進此頁面** 

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

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

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

# 使用 Horizontal Pod Autoscaler 擴展 Pod 部署
<a name="horizontal-pod-autoscaler"></a>

Kubernetes [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) 會根據資源的 CPU 使用率，自動擴展部署、複寫控制器或複本集中的 Pod 數量。這可協助您的應用程式水平擴展以滿足增加的需求，或在不需要資源時縮減，從而釋出節點供其他應用程式使用。當您設定目標 CPU 使用率百分比時，Horizontal Pod Autoscaler 會擴展或縮減您的應用程式，以嘗試滿足該目標。

Horizontal Pod Autoscaler 是 Kubernetes 中的標準 API 資源，只需要在 Amazon EKS 叢集上安裝指標來源 (例如 Kubernetes 指標伺服器) 即可運作。您不需要在叢集上部署或安裝 Horizontal Pod Autoscaler，即可開始調整您的應用程式。如需詳細資訊，請參閱 Kubernetes 文件中的 [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)。

使用此主題為您的 Amazon EKS 叢集準備 Horizontal Pod Autoscaler，並以範例應用程式驗證是否正常運作。

**注意**  
此主題是根據 Kubernetes 文件中的 [Horizontal Pod Autoscaler 演練](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)。
+ 您擁有現有的 Amazon EKS 叢集。如果您沒有，則請參閱 [開始使用 Amazon EKS](getting-started.md)。
+ 您已安裝 Kubernetes 指標伺服器。如需詳細資訊，請參閱 [使用 Kubernetes 指標伺服器檢視資源用量](metrics-server.md)。
+ 您所使用的 `kubectl` 用戶端[已設定將與您的 Amazon EKS 叢集通訊](getting-started-console.md#eks-configure-kubectl)。

## 執行 Horizontal Pod Autoscaler 測試應用程式
<a name="hpa-sample-app"></a>

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

**注意**  
此範例是根據 Kubernetes 文件中的 [Horizontal Pod Autoscaler 演練](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)。

1. 使用下列命令部署簡單的 Apache Web 伺服器應用程式。

   ```
   kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
   ```

   此 Apache Web 伺服器 Pod 獲得 500 millicpu CPU 的限制，而在連接埠 80 上提供服務。

1. 建立 `php-apache` 部署的 Horizontal Pod Autoscaler 資源。

   ```
   kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
   ```

   此命令會建立自動擴展器，其目標為 50% CPU 使用率用於部署，以及至少一個 Pod 和最多十個 Pod。當平均 CPU 負載低於 50% 時，自動擴展器會嘗試降低部署中的 Pod 數量，最少降低至一個。當負載大於 50% 時，自動擴展器會嘗試增加部署中的 Pod 數量，最多十個。如需詳細資訊，請參閱 Kubernetes 文件中的 [HorizontalPodAutoscaler 如何運作？](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#how-does-a-horizontalpodautoscaler-work)。

1. 使用以下命令描述自動擴展器，以檢視其詳細資訊。

   ```
   kubectl get hpa
   ```

   範例輸出如下。

   ```
   NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
   php-apache   Deployment/php-apache   0%/50%    1         10        1          51s
   ```

   如您所見，目前的 CPU 負載是 `0%`，因為伺服器上還沒有負載。Pod 數量已在其最低底限 (一個)，因此無法縮減。

1.  透過執行容器來建立 Web 伺服器的負載。

   ```
   kubectl run -i \
       --tty load-generator \
       --rm --image=busybox \
       --restart=Never \
       -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
   ```

1. 若要觀察向外擴展部署，請定期在不同的終端機中，從您執行上一個步驟的終端機執行下列命令。

   ```
   kubectl get hpa php-apache
   ```

   範例輸出如下。

   ```
   NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
   php-apache   Deployment/php-apache   250%/50%   1         10        5          4m44s
   ```

   複本計數可能需要一分多鐘的時間才會增加。只要實際 CPU 百分比高於目標百分比，複本計數就會增加，最多可增加至 10。在這種情況下，它會是 `250%`，所以 `REPLICAS` 的數量會繼續增加。
**注意**  
您可能需要幾分鐘才會看到複本計數達到其最大值。例如，如果 CPU 負載只需要 6 個複本維持在 50% 或以下，則負載將不會擴展超出 6 個複本。

1. 停止該負載。在您正在產生負載的終端窗口中，按住 `Ctrl+C` 鍵來停用負載。透過在正在觀察縮減的終端中再次執行下列命令，您會看到複本縮減回 1。

   ```
   kubectl get hpa
   ```

   範例輸出如下。

   ```
   NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
   php-apache   Deployment/php-apache   0%/50%    1         10        1          25m
   ```
**注意**  
縮減的預設時間範圍為 5 分鐘，因此需要一些時間才會看到複本計數再次達到 1，即使目前的 CPU 百分比為 0。時間範圍是可修改的。如需詳細資訊，請參閱 Kubernetes 文件中的 [Horizontal Pod Autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)。

1. 當您完成範例應用程式的實驗後，請刪除 `php-apache` 資源。

   ```
   kubectl delete deployment.apps/php-apache service/php-apache horizontalpodautoscaler.autoscaling/php-apache
   ```