設定多維度 Pod 自動調度資源

多維度 Pod 自動調整資源配置可讓您擺脫單一的叢集調整資源配置方式。透過多維度自動調度 Pod 資源,您可以同時使用水平調度 (依據 CPU) 和垂直調度 (依據記憶體)。

MultidimPodAutoscaler 物件會修改記憶體要求並新增副本,讓每個副本的平均 CPU 使用率符合目標使用率。

必要條件

使用多維度自動調度 Pod 資源功能

這個範例說明如何建立 Deployment 和 MultidimPodAutoscaler 物件,自動調整 Deployment 的規模。

建立部署

您必須先建立要監控的工作負載,才能建立 MultidimPodAutoscaler。下列檔案 (php-apache.yaml) 會指定 CPU 要求的價值:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
        ports:
        - containerPort: 80
        resources:
        # Since MPA does not specify CPU requests, you must specify a request in
        # the Deployment
          limits:
            cpu: 500m
          requests:
            cpu: 200m

如要建立 Deployment,請套用 php-apache.yaml 資訊清單:

kubectl apply -f php-apache.yaml

建立 MultidimPodAutoscaler

建立 Deployment 後,您可以建立 MultidimPodAutoscaler 物件。下列 MultidimPodAutoscaler 資訊清單會根據您指定的值,自動調整副本數量和記憶體要求。

如要進一步瞭解這個範例中的欄位,請參閱「API 參考資料」一節。

apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
  name: php-apache-autoscaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  goals:
    metrics:
    - type: Resource
      resource:
      # Define the target CPU utilization request here
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60
  constraints:
    global:
      minReplicas: 1
      maxReplicas: 5
    containerControlledResources: [ memory ]
    container:
    - name: '*'
    # Define boundaries for the memory request here
      requests:
        minAllowed:
          memory: 1Gi
        maxAllowed:
          memory: 2Gi
  policy:
    updateMode: Auto

如要建立 MultidimPodAutoscaler,請套用 php-apache-autoscaler.yaml 資訊清單:

kubectl apply -f php-apache-autoscaler.yaml

查看 MultidimPodAutoscaler

使用 kubectl get 指令查看所有 MultidimPodAutoscaler 物件:

kubectl get mpa

刪除 MultidimPodAutoscaler

使用 kubectl delete 指令刪除 MultidimPodAutoscaler 物件:

kubectl delete -f php-apache-autoscaler.yaml

API 參考資料

以下各節說明可新增至 MultidimPodAutoscaler 物件的可能欄位。

所有欄位均適用於apiVersion v1beta1 autoscaling.gke.io。

MultidimPodAutoscaler

MultidimPodAutoscaler 是多維度 Pod 自動配置器的設定,可根據歷來和即時資源使用率,自動管理 Pod 資源和數量。

欄位 類型 說明
metadata ObjectMeta 標準物件中繼資料。
spec MultidimPodAutoscalerSpec 多維度 Pod 自動配置器的預期行為。
status MultidimPodAutoscalerStatus 最近一次觀察到的多維度 Pod 自動配置器狀態。

MultidimPodAutoscalerSpec

MultidimPodAutoscalerSpec 是定義自動配置器行為的規格。

欄位 類型 說明
ScaleTargetRef autoscaling.CrossVersionObjectReference 參照,指向要縮放的目標資源 (使用 Scale 子資源)。
Goals *MultidimGoals 多維度 Pod 自動配置器嘗試達成及維持的目標。
Constraints *MultidimConstraints 說明自動調度資源的限制。限制條件的優先順序高於目標。如果限制條件阻礙了某個目標,系統就不會達成該目標。舉例來說,即使副本可能需要擴充,達到副本數量上限也會阻止進一步擴充。
Policy *MultidimPolicy 政策可讓您指定建議的套用方式。

MultidimGoals

MultidimGoals是多維度 Pod 自動配置器嘗試達成的目標。

欄位 類型 說明
Metrics []MetricSpec 包含指標清單和所需值。多維度 Pod 自動配置器會盡量接近所需值。

MultidimConstraints

MultidimConstraints 說明自動調度資源的限制。限制條件的優先順序高於目標。

欄位 類型 說明
Global *GlobalConstraints 適用於整個自動調度資源應用程式的限制。
Pod *PodConstraints 適用於目標應用程式中單一 Pod 的限制。
ContainerControlledResources []ResourceName 應由自動調整資源配置器控制的容器資源。memory 是唯一支援的值。
Container []ContainerConstraints 適用於 Pod 容器的限制。

ResourceConstraints

ResourceConstraints 定義可指派給容器、Pod 或應用程式的資源量下限和上限。

欄位 類型 說明
MinAllowed ResourceList 可指派的資源數量下限。如未提供,則會使用 0。
MaxAllowed ResourceList 可指派的資源數量上限。如未提供,則資源數量沒有上限。

GlobalConstraints

GlobalConstraints 定義適用於整個應用程式的限制。這些限制包括副本數量或資源總量。

欄位 類型 說明
MinReplicas *Int32 應用程式可擁有的副本數量下限。如未提供,則會使用 1。
MaxReplicas *Int32 應用程式可擁有的副本數量上限。如未提供,則副本數量上限不受限制。
Requests *ResourceConstraints 應用程式可要求的資源數量上下限,以所有 Pod 的總和計算。

PodConstraints

PodConstraints 定義單一 Pod 可要求的資源量下限和上限,這些資源量是 Pod 中所有容器要求的總和。

欄位 類型 說明
Requests *ResourceConstraints 單一 Pod 可要求的資源量下限和上限,是 Pod 中所有容器要求的資源量總和。

ContainerConstraints

ContainerConstraints 是套用至 Pod 容器的限制。

欄位 類型 說明
Name String 指定限制的容器名稱。您也可以使用 * 為 Pod 中的所有容器指定限制。
Requests *ResourceConstraints 指定容器可要求的最少和最多資源量。

UpdateMode

使用 UpdateMode 控制計算出的最佳化建議套用方式。

欄位 類型 說明
AutoUpdates UpdateMode = "Auto" AutoUpdates 表示所有自動配置器建議隨時都能套用。

MultidimPolicy

欄位 類型 說明
Update UpdateMode 定義建議的套用方式。空值會導致驗證失敗。

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus 說明自動配置器的執行階段狀態。

欄位 類型 說明
ObservedGeneration *Int64 這個自動配置器觀測到的最新世代。
RecommendedPodResources *RecommendedPodResources 自動配置器為受控 Pod 建議的最新計算資源量。
CurrentReplicas Int32 CurrentReplicas 是自動配置器上次看到的備用 Pod 數量,由這個自動配置器管理。
DesiredReplicas Int32 DesiredReplicas 是這個自動配置器管理的 Pod 副本所需數量,由自動配置器上次計算得出。
CurrentMetrics []autoscaling.MetricStatus 這個自動配置器使用的指標上次讀取狀態。
Conditions []metav1.Condition Conditions 是自動配置器調度目標時必須符合的一組條件,並指出是否符合這些條件。

後續步驟