多維度 Pod 自動調度功能可讓您擺脫單一叢集調度方式的限制,透過多維度自動調度 Pod 資源,您可以同時使用水平調度 (依據 CPU) 和垂直調度 (依據記憶體)。
MultidimPodAutoscaler 物件會修改記憶體要求並新增副本,讓每個副本的平均 CPU 使用率符合目標使用率。
必要條件
- GKE 叢集版本 1.19.4-gke.1700 以上。
 - 如果是 Standard 叢集,請在叢集中啟用垂直 Pod 自動調度資源功能。Autopilot 叢集已啟用垂直 Pod 自動調度資源功能。
 
使用多維度 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 是自動調度器調度目標資源時必須符合的一組條件,並指出是否符合這些條件。 | 
後續步驟
- 進一步瞭解如何設定水平 Pod 自動調度資源。
 - 進一步瞭解如何設定垂直自動調度 Pod 資源。