調度應用程式的資源

本頁面說明如何在 Google Kubernetes Engine 中調度已部署的應用程式的資源。

總覽

在 GKE 中部署應用程式時,需定義要執行的應用程式「備用資源」數量。對應用程式進行「資源調度」時,您可增加或減少備用資源的數量。

應用程式的每個備用資源都代表一個 Kubernetes Pod,用來封裝應用程式的容器。

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

檢查應用程式

調度應用程式的資源之前,應先檢查應用程式並確認其健康狀態良好。

如要查看部署至叢集的所有應用程式,請執行 kubectl get [CONTROLLER]。 將 [CONTROLLER] 換成 deploymentsstatefulsets 或另一個控制器物件類型。

舉例來說,如果您執行 kubectl get deployments,而且只建立了一個部署,則指令的輸出應與以下類似:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

這個指令的輸出在所有物件中都類似,但可能略有不同。部署的輸出有六個資料欄:

  • NAME 會列出叢集中部署的名稱。
  • DESIRED 會顯示您在建立部署時定義的應用程式所需「備用資源」數量,或是「所需狀態」
  • CURRENT 會顯示目前正在執行的備用資源數量。
  • UP-TO-DATE 會顯示已更新以達到所需狀態的備用資源數量。
  • AVAILABLE 會顯示使用者可使用的應用程式備用資源數量。
  • AGE 會顯示應用程式在叢集中執行經過的時間。

在本範例中,只有 my-app 這一個部署。它只有一個備用資源,因為它的所需狀態為一個備用資源。您可以透過調度應用程式的資源,隨時變更在建立時定義的所需狀態。

檢查 StatefulSet

調度 StatefulSet 的資源之前,應先執行 kubectl describe statefulset my-app 以進行檢查。

在這個指令的輸出內容中,檢查「Pods Status」欄位。如果 Failed 值大於 0,資源調度可能會失敗。

如果 StatefulSet 看起來健康狀態不良,請執行 kubectl get pods,察看是哪些備用資源的健康狀態不良。接著執行 kubectl delete [POD],其中 [POD] 是健康狀態不良的 Pod 的名稱。

如果您嘗試在 StatefulSet 健康狀態不良的狀態下調度其資源,可能會導致 StatefulSet 無法使用。

調度應用程式的資源

以下各節將說明您可用來調度應用程式資源的各種方法。 kubectl scale 方法是調度資源最快速的方法。不過,在某些情況下,您可能會偏好採用其他方法,例如更新設定檔或執行就地修改。

kubectl scale

kubectl scale 可讓您立即變更您要執行應用程式的備用資源數量。

如要使用 kubectl scale,請設定 --replicas 標記以指定新的備用資源數量。舉例來說,若要將 my-app 擴充為四個備用資源,請執行以下指令,將 [CONTROLLER] 取代為 deploymentstatefulset 或其他控制器物件類型:

kubectl scale [CONTROLLER] my-app --replicas 4

如果成功,這個指令的輸出應該會與 deployment "my-app" scaled 的結果類似。

接下來,請執行 kubectl get [CONTROLLER] my-app。畫面會顯示類似以下的輸出內容:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                4         4         4            4           15m

kubectl 套用

您可以使用 kubectl apply,將新的設定檔套用到現有的控制器物件。kubectl apply 很適合用於對資源進行多項變更,而且對於偏好在設定檔中管理資源的使用者來說,這也是很實用的方法。

如要使用 kubectl apply 調度資源,您提供的設定檔應在物件規格的 replicas 欄位中包含新的備用資源數量。

以下是範例 my-app 物件的更新版設定檔。本範例顯示的是部署,因此,如果您使用 StatefulSet 等其他控制器類型,請變更 kind。本範例最適合用於有至少三個節點的叢集。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-container
        image: gcr.io/google-samples/hello-app:2.0

在這個檔案中,replicas 欄位的值為 3。如果套用了這個設定檔,my-app 物件會擴充到三個備用資源。

如要套用更新的設定檔,請執行以下指令:

kubectl apply -f config.yaml

接下來,請執行 kubectl get [CONTROLLER] my-app。畫面會顯示類似以下的輸出內容:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

主控台

如要在 Google Cloud Platform 主控台調度工作負載的資源,請執行以下步驟:

  1. 造訪 GCP 主控台中的 Google Kubernetes Engine「工作負載」選單。

    前往「工作負載」選單

  2. 從選單選取所需的工作負載。

  3. 依序按一下 [Actions] (動作) > [Scale] (調度資源)

  4. 在 [Replicas] (備用資源) 欄位輸入您所需的備用資源數量。

  5. 按一下 [擴充]

自動調度部署的資源

您可以使用 kubectl autoscale 或從 GCP 主控台中的 GKE「工作負載」選單,根據 Pod 的 CPU 使用率,自動調度部署的資源。

kubectl autoscale

kubectl autoscale 會建立 HorizontalPodAutoscaler (也稱為 HPA) 物件,以指定的資源為目標 (稱為「資源調度目標」),並視需要調度資源。HPA 會定期調整資源調度目標的備用資源數量,以符合您指定的平均 CPU 使用率。

使用 kubectl autoscale 時,您可指定應用程式的最大與最小備用資源數量,以及 CPU 使用率目標。舉例來說,如要將備用資源最大數量設為六個,最小數量設為四個,以及將 CPU 使用率目標設為 50% 的使用率,請執行以下指令:

kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50

在這個指令中,--max 標記是必要的。--cpu-percent 標記是所有 Pod 的目標 CPU 使用率。這個指令「不會」將部署資源立即擴充到六個備用資源,除非已有系統性需求。

執行 kubectl autoscale 之後,就會建立 HorizontalPodAutoscaler 物件並以應用程式為目標。負載發生變更時,物件會增加或減少應用程式的備用資源。

如要查看叢集中的特定 HorizontalPodAutoscaler 物件,請執行:

kubectl get hpa [HPA_NAME]

如要查看 HorizontalPodAutoscaler 設定:

kubectl get hpa [HPA_NAME] -o yaml

這個指令會輸出類似以下的結果:

apiVersion: v1
items:
- apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    creationTimestamp: ...
    name: [HPA_NAME]
    namespace: default
    resourceVersion: "664"
    selfLink: ...
    uid: ...
  spec:
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: [HPA_NAME]
    targetCPUUtilizationPercentage: 50
  status:
    currentReplicas: 0
    desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

在這個輸出範例中,targetCPUUtilizationPercentage 欄位具有從 kubectl autoscale 範例傳入的 50 百分比值。

如要查看叢集中特定 HorizontalPodAutoscaler 物件的詳細說明:

kubectl describe hpa [HPA_NAME]

您可以使用 kubectl editkubectl patch 套用具有 kubectl apply 的新設定檔,藉此修改 HorizontalPodAutoscaler

如要刪除 HorizontalPodAutoscaler 物件:

kubectl delete hpa [HPA_NAME]

主控台

如要自動調度部署的資源,請執行以下步驟:

  1. 造訪 GCP 主控台中的 Google Kubernetes Engine「工作負載」選單。

    前往「工作負載」選單

  2. 從選單選取所需的工作負載。

  3. 依序按一下 [動作] > [自動調度資源]

  4. 在 [Pod 數量上限] 欄位中,填入所需的 Pod 數量上限。

  5. 您可以選擇在 [Pod 數量下限] 和 [目標 CPU 使用率 (百分比)] 欄位中填寫所需的值。

  6. 按一下 [自動調度資源]

使用自訂指標自動調度資源

從 GKE 1.9 版開始,您可以根據從 Stackdriver Monitoring 匯出的自訂指標調度部署的資源。

如要瞭解如何使用自訂指標自動調度部署的資源,請參閱使用自訂指標自動調整部署規模教學課程。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件