Share via


API の破壊的変更時に Azure Kubernetes Service (AKS) クラスターのアップグレードを自動的に停止する

サポートされている Kubernetes バージョンを継続して使用するには、お使いのクラスターを少なくとも年 1 回はアップグレードし、あらゆる中断の可能性に備える必要があります。 これらの中断には、API の破壊的変更、非推奨化、依存関係 (Helm や Container Storage Interface (CSI) など) によって発生するものが含まれます。 これらの中断を予測し、ダウンタイムを発生させずに重要なワークロードを移行することは困難な場合があります。

AKS は、非推奨 API を含むマイナー バージョンの変更で構成されるアップグレード操作を自動的に停止し、問題について警告するエラー メッセージを送信するようになりました。

開始する前に

開始する前に、以下の前提条件を満たしていることを確認してください。

  • アップグレード操作は、クラスター コントロール プレーンの Kubernetes マイナー バージョンの変更である。
  • アップグレード先の Kubernetes バージョンは 1.26 以降です。
  • アップグレードする対象バージョンでの非推奨の API の使用が最終に確認されたのが、アップグレード操作の 12 時間以内である必要がある。 AKS では使用状況が 1 時間ごとに記録されるため、1 時間以内の非推奨の API の使用は、検出に表示されない可能性があります。

停止されるアップグレード操作を軽減する

前提条件を満たしている場合、アップグレードを試行すると、次のエラー メッセージ例のようなエラー メッセージを受け取ります。

Bad Request({
  "code": "ValidationError",
  "message": "Control Plane upgrade is blocked due to recent usage of a Kubernetes API deprecated in the specified version. Please refer to https://kubernetes.io/docs/reference/using-api/deprecation-guide to migrate the usage. To bypass this error, set enable-force-upgrade in upgradeSettings.overrideSettings. Bypassing this error without migrating usage will result in the deprecated Kubernetes API calls failing. Usage details: 1 error occurred:\n\t* usage has been detected on API flowcontrol.apiserver.k8s.io.prioritylevelconfigurations.v1beta1, and was recently seen at: 2023-03-23 20:57:18 +0000 UTC, which will be removed in 1.26\n\n",
  "subcode": "UpgradeBlockedOnDeprecatedAPIUsage"
})

この問題を軽減するには、2 つのオプションがあります。 非推奨の API の使用を削除する (推奨)か、検証をバイパスして API の変更を無視できます。

  1. Azure portal で、[クラスターの概要] ページに移動し、[問題の診断と解決] を選びます。

  2. [Create, Upgrade, Delete and Scale] (作成、アップグレード、削除、スケーリング) カテゴリに移動し、[Kubernetes API deprecations] (Kubernetes API の非推奨化) を選びます。

    A screenshot of the Azure portal showing the 'Selected Kubernetes API deprecations' section.

  3. 最後に非推奨の API の使用状況が表示された時点から 12 時間待ちます。 非推奨の API の使用の動詞を調べて、それが監視かどうかを確認します。

  4. クラスターのアップグレードを再試行します。

コンテナー分析情報を有効にし、kube 監査ログを調べて、過去の API 使用状況をチェックすることもできます。 非推奨の API の使用法の動詞を調べて、それが監視のユース ケースかどうかを把握します。

検証を回避して API の変更を無視する

Note

この方法では、Azure CLI バージョン 2.53 以降を使用する必要があります。 aks-preview CLI 拡張機能がインストールされている場合は、バージョン 0.5.154 以降に更新する必要があります。 対象となる Kubernetes バージョンの非推奨の API は長期的には機能しない可能性があるため、この方法はお勧めしません。 アップグレードが完了したら、これらをできるだけ早く削除することをお勧めします。

  • 検証をバイパスして API の破壊的変更を無視するには、az aks update コマンドを使います。 enable-force-upgrade フラグを指定し、upgrade-override-until プロパティを設定して、検証をバイパスする期間の終了を定義します。 値が設定されていない場合、ウィンドウは既定で現在の時刻から 3 日間に設定されます。 指定する日付と時刻は、将来のものである必要があります。

    az aks update --name myAKSCluster --resource-group myResourceGroup --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
    

    注意

    Z は、ゼロ UTC/GMT オフセットのゾーン指定子で、"Zulu" 時間とも呼ばれます。 この例では、ウィンドウの終了を 13:00:00 GMT に設定します。 詳細については、「日付と時刻の組み合わせ」を参照してください。

  • 前のコマンドが成功したら、アップグレード操作を再試行できます。

    az aks upgrade --name myAKSCluster --resource-group myResourceGroup --kubernetes-version <KUBERNETES_VERSION>
    

次のステップ

この記事では、API の破壊的変更時に AKS クラスターのアップグレードを自動的に停止する方法について説明しました。 AKS クラスターのその他のアップグレード オプションについては、「Azure Kubernetes Service (AKS) クラスターのアップグレード」を参照してください。