共用方式為


在 API 重大變更上自動停止 Azure Kubernetes Service (AKS) 叢集升級

本文說明如何在 API 重大變更上自動停止 Azure Kubernetes Service (AKS) 叢集升級。

概觀

若要保持在支援的 Kube 版本內,您必須每年至少升級您的叢集一次,並準備因應全部可能的中斷。 這些中斷包括 API 重大變更、取代,和相依性 (例如 Helm 和 Container Storage Interface (CSI)) 所造成的中斷。 在沒有任何停機時間的情況下,很難預期這些中斷並移轉重要的工作負載。

您可以將您的 AKS 叢集設定為自動停止升級操作,其中包含已淘汰 API 的次要版本變更,並向您警示該問題。 這項功能可協助您避免非預期的中斷,並讓您有時間處理已淘汰的 API 後,再繼續進行升級。

開始之前

開始之前,請先確定您已符合下列必要條件:

  • 升級作業是叢集控制平面的 Kubernetes 次要版本變更。
  • 您要升級至的 Kubernetes 版本是 1.26 或更新版本。
  • 在執行升級操作之前,被淘汰的 API 最後一次使用必須在目標版本之前的 12 小時內發生。 AKS 會每小時記錄使用量,因此一小時內任何已淘汰 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 變更

  1. 在 Azure 入口網站中,瀏覽至叢集資源,然後選取 [診斷並解決問題]

  2. 選取 [建立]、[升級]、[刪除] 和 [調整]>[Kubernetes API 淘汰]

    Azure 入口網站的螢幕擷取畫面,其中顯示 [已選取的 Kubernetes API 淘汰] 區段。

  3. 從最後一次淘汰的 API 使用量看到的時間起等候 12 小時。 檢查已淘汰 API 使用量中的動詞,以了解其是否為監看式。 如果是監看,您可以等候使用量降至零。 (您也可以啟用容器深入解析並探索 kube 稽核記錄,來檢查過去的 API 使用量。)

  4. 重試叢集升級。

略過驗證以忽略 API 變更

注意

此方法會要求您使用 Azure CLI 2.53 版或更新版本。 如果您已安裝 aks-preview CLI 擴充功能,則必須更新為版本 0.5.154 或更新版本。 不建議使用此方法,因為目標 Kubernetes 版本中已被淘汰的 API 可能無法長期運作。 建議您在升級完成後儘快將其移除。

  1. 略過驗證以忽略使用 az aks update 命令的 API 重大變更。 指定 enable-force-upgrade 旗標並設定 upgrade-override-until 屬性,以定義略過驗證的時段結尾。 如果未設定任何值,則會將時段預設為目前時間起的三天。 您指定的日期和時間必須在未來。

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

    注意

    Z 是零 UTC/GMT 位移的區域指示項,也稱為「Zulu」時間。 本範例會將視窗的結尾設定為 13:00:00 GMT。 如需詳細資訊,請參閱合併日期和時間表示法

  2. 使用 az aks upgrade 命令重試叢集升級。

    az aks upgrade --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --kubernetes-version $KUBERNETES_VERSION
    

下一步

本文說明如何在 API 重大變更上自動停止 AKS 叢集升級。 若要深入了解 AKS 叢集的更多升級選項,請參閱 Azure Kubernetes Service (AKS) 叢集的升級選項