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


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

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

必要條件

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

這個範例說明如何建立 Deployment 和 MultidimPodAutoscaler 物件,自動調度 Deployment 的資源。

建立部署

必須先建立 MultidimPodAutoscaler 要監控的工作負載,才能建立該 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 UpdateMode = "Off" 如果啟用「自動更新」,系統就不會套用任何自動調整最佳化建議。

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 是自動調度器調度目標資源時必須符合的一組條件,並指出是否符合這些條件。

後續步驟