多次元 Pod 自動スケーリングを使用すると、クラスタのスケーリング方法を 1 つにする必要がなくなります。多次元 Pod 自動スケーリングでは、CPU ベースの水平スケーリングと、メモリベースの垂直スケーリングを同時に使用できます。
MultidimPodAutoscaler オブジェクトは、各レプリカの平均 CPU 使用率がターゲット使用率と一致するように、メモリ リクエストを変更してレプリカを追加します。
前提条件
- GKE クラスタ バージョン 1.19.4-gke.1700 以降。
- Standard クラスタの場合は、クラスタで垂直 Pod 自動スケーリングを有効にします。垂直 Pod 自動スケーリングは、Autopilot クラスタではすでに有効になっています。
多次元 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は、このオートスケーラーがターゲットをスケーリングするために必要な一連の条件で、その条件が満たされているかどうかを示します。 | 
次のステップ
- 水平 Pod 自動スケーリングの構成方法を学習する。
- 垂直 Pod 自動スケーリングの構成方法を学習する。