多次元 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: k8s.gcr.io/hpa-example
        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 自動スケーリングされるアプリケーション全体に適用される制約。
ContainerControlledResources []ResourceName オートスケーラーが制御する必要があるコンテナ リソース。サポートされる値は memory のみです。
Container []ContainerConstraints Pod のコンテナに適用される制約。

ResourceConstraints

ResourceConstraints は、コンテナ、Pod、またはアプリケーションに割り当てることができるリソースの最小値と最大値を定義します。

フィールド 説明
MinAllowed ResourceList 割り当てられるリソースの最小量。指定しない場合、0 が使用されます。
MaxAllowed []ResourceName 割り当て可能なリソースの最大量。指定しない場合、リソースの最大数に上限はありません。
Requests *ResourceConstraints アプリケーションがリクエストできるリソースの最小値と最大値。すべての Pod の合計値になります。

ContainerConstraints

ContainerConstraints は、Pod のコンテナに適用される制約です。

フィールド 説明
Name String 制約が指定されているコンテナの名前。* を使用して、Pod 内のすべてのコンテナに対して制約を指定することもできます。
Requests *ResourceConstraints 指定されたコンテナがリクエストできるリソースの最小値と最大値。

UpdateMode

UpdateMode を使用すると、計算結果の候補の適用方法を管理できます。

フィールド 説明
AutoUpdates UpdateMode = "Auto" 自動更新では、すべてのオートスケーラーの推奨事項をいつでも適用できます。

MultidimPolicy

フィールド 説明
Update UpdateMode 候補の適用方法を定義します。値が空の場合、検証に失敗します。

MultidimPodAutoscalerStatus

MultidimPodAutoscalerStatus は、オートスケーラーのランタイム状態を表します。

フィールド 説明
RecommendedPodResources *RecommendedPodResources オートスケーラーによって制御される Pod で最近計算されたリソース量。
CurrentReplicas Int32 CurrentReplicas は、オートスケーラーによって確認された、このオートスケーラーによって管理される Pod の現在のレプリカの数です。
DesiredReplicas Int32 DesiredReplicas は、このオートスケーラーによって管理される Pod のレプリカの数です。オートスケーラーによって最後に計算されます。
Conditions []metav1.Condition Conditions は、このオートスケーラーがターゲットをスケーリングするために必要な一連の条件で、その条件が満たされているかどうかを示します。

次のステップ