多次元 Pod 自動スケーリングを構成する


多次元 Pod 自動スケーリングを使用すると、クラスタのスケーリング方法を 1 つにする必要がなくなります。多次元 Pod 自動スケーリングでは、CPU ベースの水平スケーリングと、メモリベースの垂直スケーリングを同時に使用できます。

MultidimPodAutoscaler オブジェクトは、各レプリカの平均 CPU 使用率がターゲット使用率と一致するように、メモリ リクエストを変更してレプリカを追加します。

前提条件

多次元 Pod 自動スケーリングの使用

この例では、Deployment と MultidimPodAutoscaler オブジェクトを作成して Deployment を自動スケーリングする方法を示しています。

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 スケーリングするターゲット リソースを指すリファレンス(スケール サブリソースを使用)。
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 は、このオートスケーラーがターゲットをスケールするために必要な一連の条件で、その条件が満たされているかどうかを示します。

次のステップ