VerticalPodAutoscaler の API バージョン間での移行

このページでは、VerticalPodAutoscaler オブジェクトを API バージョン v1beta1 から v1beta2 に移行する方法について説明します。

始める前に

このタスクの準備として、次の手順を行います。

  • Google Kubernetes Engine API が有効になっていることを確認します。
  • Google Kubernetes Engine API の有効化
  • Cloud SDK がインストール済みであることを確認します。
  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project [PROJECT_ID]
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone [COMPUTE_ZONE]
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud を最新バージョンに更新します。
    gcloud components update

クラスタの垂直ポッド自動スケーリングを有効にする

垂直ポッド自動スケーリングを有効にして新しいクラスタを作成するには、次のコマンドを入力します。

gcloud beta container clusters create [CLUSTER_NAME] --enable-vertical-pod-autoscaling

ここで、[CLUSTER_NAME] はクラスタに付ける名前です。

既存のクラスタに対して垂直ポッド自動スケーリングを有効にするには、次のコマンドを入力します。

cloud beta container clusters update [CLUSTER-NAME] --enable-vertical-pod-autoscaling

ここで、[CLUSTER_NAME] はクラスタ名です。

v1beta2 API の概要

垂直方向ポッド自動スケーリングは、GKE のバージョン 1.11 で導入されたベータ機能です。v1beta1 API はラベルセレクタを使用して、特定の VerticalPodAutoscaler に属するポッドを指定します。ユーザーからのフィードバックを収集し、使いやすさに関する次のような問題点が解消されるよう API を変更しました。

  • セレクタを使用すると構成に誤りが生じる可能性があります。たとえば、1 つのクラスタ内のすべてのポッドを対象とする VerticalPodAutoscaler オブジェクトや、複数の VerticalPodAutoscaler オブジェクトに属するポッドなどの誤りです。
  • 最も一般的なユースケースは、Deloyment 全体を対象とする VerticalPodAutoscaler です。
  • この変更により、VPA が HorizontalPodAutoscaler API に対応します。

v1beta2 API では、VerticalPodAutoscaler オブジェクトは Deployment や DaemonSet などのコントローラで直接指定されます。

v1beta1 から v1beta2 API への移行

このガイドでは、VerticalPodAutoscaler によってスケーリングされた Deployment を v1beta1 から v1beta2 に安全に移行する方法を説明します。

Deployment のマニフェストは次のとおりです。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    label: vpa-label
spec:
  replicas: 2
  template:
    metadata:
      labels:
        label: vpa-label
    spec:
      containers:
      - {...}

v1beta1 では、Deployment: 内のすべてのポッドに一致するようにセレクタを指定してスケールを調整していました。

apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  selector:
    matchLabels:
      label: vpa-label
  updatePolicy:
    updateMode: {...}

v1beta2 では、VerticalPodAutoscaler は Deployment を直接ターゲットにします。

apiVersion: autoscaling.k8s.io/v1beta2 # different API version
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  targetRef:
    apiVersion: "extensions/v1beta1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: {...}

v1beta2 マニフェストを vpa-v1beta2.yaml という名前のファイルに保存します。

updateMode が "Off" に設定されている場合は、kubectl apply -f vpa-v1beta2.yaml を実行できます。VerticalPodAutoscaler は切り替え中も推奨値を保持します。

設定がオンになっているもの(updateMode "Initial""Auto""Recreate")については、次の複数の手順で移行します。

  1. v1beta2 VerticalPodAutoscaler マニフェストを新しい名前で作成し、updateMode: "Off" に設定します。
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name-new # Different name
spec:
  targetRef:
    apiVersion: "extensions/v1beta1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: "Off" # Recommendation only mode.
  1. このマニフェストを vpa-v1beta1-off.yaml として保存します。
  2. 次のようにして新しい VerticalPodAutoscaler オブジェクトを作成します。

    kubectl apply -f vpa-v1beta1-off.yaml

  3. 新しいオブジェクトに推奨値が設定されたら、元の VerticalPodAutoscaler オブジェクトの推奨値と比較します。

  4. 推奨値が一致したら、次のようにして v1beta1 VerticalPodAutoscaler オブジェクトを削除します。

    kubectl delete vpa-name

  5. 新しい VerticalPodAutoscaler を更新して元の更新方法に合わせます。たとえば、updateMode: "Auto" の場合、次のように更新します。

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new
    spec:
      targetRef:
        apiVersion: "extensions/v1beta1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Auto" # Mode switched to auto
    
  6. このマニフェストを vpa-v1beta1-final.yaml として保存します。

  7. 次のようにして新しい構成を適用します。 kubectl apply -f vpa-v1beta1-final.yaml

リファレンス

こちらは v1beta1 API リファレンスです。v1beta2 リファレンスも確認できます。

VerticalPodAutoscaler v1beta1 autoscaling.k8s.io

フィールド

TypeMeta

API グループ、バージョン、種類。

metadata

ObjectMeta

標準のオブジェクト メタデータ

spec

VerticalPodAutoscalerSpec

VerticalPodAutoscaler の動作。

status

VerticalPodAutosclerStatus

VerticalPodAutoscaler の直近に観測されたステータス。

VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io

フィールド
selector

LabelSelector

VerticalPodAutoscaler で制御されるポッドのセットを決定するラベルクエリ。

updatePolicy

PodUpdatePolicy

ポッドの起動時に推奨アップデートを適用するかどうか、またポッドのライフサイクル期間中に推奨アップデートを適用するかどうかを指定します。

resourcePolicy

PodResourcePolicy

個々のコンテナに対する CPU リクエストおよびメモリ リクエストの調整方法に関するポリシーを指定します。

VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io

フィールド

TypeMeta

API グループ、バージョン、種類。

metadata

ObjectMeta

標準のオブジェクト メタデータ

items

VerticalPodAutoscaler array

VerticalPodAutoscaler オブジェクトのリスト。

PodUpdatePolicy v1beta1 autoscaling.k8s.io

フィールド
updateMode

string

ポッドの起動時に推奨アップデートを適用するかどうか、またポッドのライフサイクル期間中に推奨アップデートを適用するかどうかを指定します。有効な値は、「Off」、「Initial」、「Recreate」、「Auto」です。

PodResourcePolicy v1beta1 autoscaling.k8s.io

フィールド
containerPolicies

ContainerResourcePolicy array

個々のコンテナに対するリソース ポリシーの配列。

ContainerResourcePolicy v1beta1 autoscaling.k8s.io

フィールド
containerName

string

ポリシーが適用されるコンテナの名前。指定しない場合、そのポリシーはデフォルト ポリシーとして機能します。

mode

ContainerScalingMode

コンテナの起動時に推奨アップデートを適用するかどうか、またコンテナのライフサイクル期間中に推奨アップデートを適用するかどうかを指定します。有効な値は、「Off」と「Auto」です。

minAllowed

ResourceList

そのコンテナで許容される CPU リクエストとメモリ リクエストの最小値を指定します。

maxAllowed

ResourceList

そのコンテナで許容される CPU リクエストとメモリ リクエストの最大値を指定します。

VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io

フィールド
recommendation

RecommendedPodResources

CPU リクエストおよびメモリ リクエストの最新の推奨値。

conditions

VerticalPodAutoscalerCondition array

VerticalPodAutoscaler の現在のステータスを示します。

RecommendedPodResources v1beta1 autoscaling.k8s.io

フィールド
containerRecommendation

RecommendedContainerResources array

個々のコンテナに対するリソースの推奨値の配列。

RecommendedContainerResources v1beta1 autoscaling.k8s.io

フィールド
containerName

string

推奨値が適用されるコンテナの名前。

target

ResourceList

そのコンテナに対する CPU リクエストとメモリ リクエストの推奨値。

lowerBound

ResourceList

そのコンテナに対する CPU リクエストとメモリ リクエストの推奨値の下限。この値は、アプリケーションが安定して動作するのに十分であるとは限りません。CPU リクエストとメモリ リクエストがこの値に満たない場合、パフォーマンスや可用性に重大な影響を及ぼす可能性があります。

upperBound

ResourceList

そのコンテナに対する CPU リクエストとメモリ リクエストの推奨値の上限。CPU リクエストとメモリ リクエストをこの値より大きくしても、無駄になる可能性があります。

uncappedTarget

ResourceList

オートスケーラーによって計算された最新のリソース推奨値。実際のリソース使用量のみに基づいており、ContainerResourcePolicy は考慮されていません。実際のリソース使用量に基づく値が ContainerResourcePolicy に違反する場合は、推奨範囲から外れる可能性があります。このフィールドは、ステータスの表示のみが目的です。実際のリソース割り当てには影響しません。

VerticalPodAutoscalerCondition v1beta1 autoscaling.k8s.io

フィールド
type

VerticalPodAutoscalerConditionType

記述する状態のタイプ。有効な値は、「RecommendationProvided」、「LowConfidence」、「NoPodsMatched」、「FetchingHistory」です。

status

ConditionStatus

状態のステータス。有効な値は、「True」、「False」、「Unknown」です。

lastTransitionTime

Time

状態のステータスが最後に遷移した時刻。

reason

string

最後のステータス遷移の理由。

message

string

人間が読める文字列で記述された、最後のステータス遷移についての詳細情報。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Kubernetes Engine のドキュメント