多次元 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 自動スケーリングの構成方法を学習する。