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

この記事では、API の破壊的変更時に Azure Kubernetes Service (AKS) クラスターのアップグレードを自動的に停止する方法について説明します。

概要

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

非推奨 API を含むマイナー バージョンの変更で構成されるアップグレード操作を自動的に停止し、問題について警告するように 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"
})

問題を軽減するために、非推奨の API の使用を削除する (推奨) か、検証を回避して API の変更を無視するという 2 つのオプションがあります。

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

  2. [作成、アップグレード、削除、スケーリング] > [Kubernetes API の非推奨化] を選びます。

    選択された [Kubernetes API 非推奨] セクションが表示されている Azure portal のスクリーンショット。

  3. 最後に非推奨の API の使用状況が表示された時点から 12 時間待ちます。 読み取り専用動詞は、非推奨の API の使用、つまり Get/List/Watch から除外されます (コンテナーの分析情報を有効にし、kube 監査ログを調べて、過去の API の使用状況を確認することもできます)。

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

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

Note

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

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

    az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION --enable-force-upgrade --upgrade-override-until 2023-10-01T13:00:00Z
    

    注意

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

次のステップ

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