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

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

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの Compute Engine ゾーンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト 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

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

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

gcloud beta container clusters create cluster-name --enable-vertical-pod-autoscaling

cluster-name は新しいクラスタに付ける名前です。

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

gcloud 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: apps/v1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    label: vpa-label
spec:
  replicas: 2
  selector:
    matchLabels:
      label: vpa-label
  template:
    metadata:
      labels:
        label: vpa-label
    spec:
      containers:
      - {...}

v1beta1 で VerticalPodAutoscaler をスケーリングするには、selector を指定して Deployment 内のすべての Pod を照合します。

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: "apps/v1"
    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 マニフェストを新しい名前(vpa-name-new)で作成し、updateMode フィールドを "Off" に設定します。

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new # Different name
    spec:
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Off" # Recommendation only mode.
    
  2. このマニフェストを vpa-v1beta1-off.yaml として保存します。

  3. 次のようにして新しい VerticalPodAutoscaler オブジェクトを作成します。

    kubectl apply -f vpa-v1beta1-off.yaml
    
  4. 新しいオブジェクトに推奨値が設定されたら、元の VerticalPodAutoscaler オブジェクトの推奨値と比較します。

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

    kubectl delete vpa-name
    
  6. 新しい VerticalPodAutoscaler を更新して元の更新方法に合わせます。updateMode: "Auto" の例:

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

  8. 新しい構成を適用します。

    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

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