共用方式為


升級 Azure 運算子連接點 Kubernetes 叢集

本文提供如何升級運算子連接點 Kubernetes 叢集,取得最新功能和安全性更新的指示。 Kubernetes 叢集生命週期包含定期升級至最新 Kubernetes 版本。 請務必套用最新的安全性版本或升級,以取得最新功能。 本文說明如何檢查、設定及套用升級至 Kubernetes 叢集。

限制

  • 叢集預設升級流程是一種擴增方法,表示至少會新增一個額外的節點 (或與最大激增中所設定節點數目一樣多的節點)。 如果沒有足夠的可用容量,則升級無法成功。
  • 當新的 Kubernetes 版本可供使用時,租用戶叢集不會進行自動升級。 當叢集中的所有網路功能都準備好支援新的 Kubernetes 版本時,使用者應該起始升級。 如需詳細資訊,請參閱升級叢集
  • 運算子連接點提供全叢集升級,確保所有節點集區的一致性。 不支援升級單一節點集區。 此外,當有新版本可用時,節點映像會在叢集升級過程中升級。
  • 對代理程式節點所做的自訂會在叢集升級期間遺失。 建議您將這些自訂放在 DaemonSet 中,而不是手動變更節點組態,以便在升級後加以保留。
  • 在叢集升級程序中,對核心附加元件組態所做的修改會還原至預設附加元件組態。 避免自訂附加元件組態 (例如 Calico 等),以避免潛在的升級失敗。 如果附加元件組態還原發生問題,可能會導致升級失敗。
  • 當您升級運算子連接點 Kubernetes 叢集時,無法跳過 Kubernetes 次要版本。 您必須依主要版本號碼的順序執行所有升級。 例如,允許 1.14.x ->1.15.x1.15.x ->1.16.x 之間的升級,然而,不允許 1.14.x ->1.16.x。 如果您的版本落後多個主要版本,您應該執行多個循序升級。
  • 叢集建立期間必須設定最大激增值和/或無法使用上限值。 建立叢集之後,您無法變更這些值。 如需詳細資訊,請參閱建立 Azure 運算子連接點 Kubernetes 叢集中的 upgradeSettings

必要條件

  • 部署在 Azure 訂用帳戶內資源群組中的 Azure 運算子連接點 Kubernetes 叢集。
  • 如果您使用 Azure CLI,此文章會要求您執行最新的 Azure CLI 版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • 最低必要的 networkcloud az-cli 延伸模組版本:2.0.b3
  • 了解版本套件組合概念。 如需詳細資訊,請參閱連接點 Kubernetes 版本套件組合

檢查可用升級

請按照下列步驟檢查您的叢集可用的 Kube 版本:

使用 Azure CLI

下列 Azure CLI 命令會傳回叢集的可用升級:

az networkcloud kubernetescluster show --name <NexusK8sClusterName> --resource-group <ResourceGroup> --output json --query availableUpgrades

範例輸出:

[
  {
    "availabilityLifecycle": "GenerallyAvailable",
    "version": "v1.25.4-4"
  },
  {
    "availabilityLifecycle": "GenerallyAvailable",
    "version": "v1.25.6-1"
  },
  {
    "availabilityLifecycle": "GenerallyAvailable",
    "version": "v1.26.3-1"
  }
]

使用 Azure 入口網站

  1. 登入 Azure 入口網站
  2. 瀏覽至運算子連接點 Kubernetes 叢集。
  3. 在 [概觀] 底下,選取 [可用升級] 索引標籤。

可用升級的螢幕擷取畫面。

選擇要升級至哪個版本

可用升級輸出表示有多個版本可供選擇進行升級。 在此特定案例中,目前的叢集是在版本 v1.25.4-3. 運作。因此,可用升級選項包括 v1.25.4-4 和最新的修補程式版本 v1.25.6-1.。此外,也提供新的次要版本。

您可以彈性地升級至任何可用版本。 不過,建議的動作是執行升級至最新的可用 major-minor-patch-versionbundle 版本。

注意

版本的輸入格式為 major.minor.patchmajor.minor.patch-versionbundle。 版本輸入必須是其中一個可用升級版本。 例如,如果叢集的目前版本是 1.1.1-1,則有效的版本輸入是 1.1.1-21.1.1-x。 雖然 1.1.1 是有效的格式,但不會觸發任何更新,因為目前的版本已經是 1.1.1。 若要起始更新,您可以使用版本套件組合來指定完整的版本,例如 1.1.1-2。 不過,1.1.21.2.x 是有效的輸入,而且會使用適用於 1.1.21.2.x 的最新版本套件組合。

將叢集升級

在叢集升級流程期間,運算子連接點會執行下列作業:

  • 將具有指定 Kubernetes 版本的新控制平面節點新增至叢集。
  • 新增節點之後,請隔離和清空其中一個舊的控制平面節點,確保其上執行的工作負載會正常移至其他狀況良好的控制平面節點。
  • 清空舊的控制平面節點之後,系統即會移除該節點,並將新的控制平面節點新增至叢集。
  • 此流程在叢集中所有控制平面節點都已升級前,會不斷重複。
  • 如果透過激增升級背景工作角色節點 (預設):
    • 針對叢集中的每個代理程式集區,新增具有指定 Kubernetes 版本的背景工作角色節點 (或與最大激增中所設定的節點數目一樣多)。 多個代理程式集區會同時升級。
    • 隔離和清空其中一個舊的背景工作角色節點,將執行中應用程式的中斷降到最低。 若您正在使用最大激增,則會同時隔離和清空與指定緩衝節點相同數量的背景工作角色節點。
    • 清空舊的背景工作角色節點之後,系統即會移除該節點,並將具有新 Kubernetes 版本的新背景工作角色節點新增至叢集 (或與最大激增中所設定的節點數目一樣多)
  • 如果不使用激增升級背景工作角色節點:
    • 針對叢集中的每個代理程式集區,舊的背景工作角色節點 (或與最大無法使用設定的節點數相同的節點) 會遭到封鎖、清空,然後移除,然後取代為指定 Kubernetes 版本的新背景工作角色節點。 多個代理程式集區會同時升級。
    • 在升級期間,叢集容量會暫時減少,因為從舊背景工作角色節點清空的 Pod 不會立即有新的節點移入。 如果容量不足,這可能會導致 Pod 進入擱置狀態。 因此,設計叢集時務必要符合應用程式容量需求,尤其是在不使用激增升級期間。
  • 此流程在叢集中所有背景工作角色節點都已升級前,會不斷重複。

注意

如果作業系統 (OS) 映像版本和 Kubernetes 版本在版本套件組合之間保持不變,則叢集升級不會建立新節點並取代舊節點。 這是預期行為,因為升級可能只包含附加元件版本更新,而不是新的 OS 或 K8s 版本。 由於不需要輪流升級,不會封鎖和清空節點,因此不會發生 Pod 中斷。

重要

請確定所有 PodDisruptionBudgets (PDB) 至少都允許一次移動 1 個 Pod 複本,否則清空/收回作業將會失敗。 如果清空作業失敗,升級作業也會失敗,以確保應用程式不會中斷。 請修正導致作業停止的原因 (例如不正確的 PDB、缺乏配額等),然後再嘗試進行作業。 您也可以為每個背景工作角色節點集區設定清空逾時,在該逾時期間過後,即使 Pod 尚未完成清空,也會移除節點。 這可避免設定錯誤的 PDB 封鎖升級。 清空逾時設定是以秒為設定單位,預設為 1800。

  1. 使用 networkcloud kubernetescluster update 命令升級叢集。
az networkcloud kubernetescluster update --name myNexusK8sCluster --resource-group myResourceGroup --kubernetes-version v1.26.3
  1. 使用 show 命令確認升級成功。
az networkcloud kubernetescluster show --name myNexusK8sCluster --resource-group myResourceGroup --output json --query kubernetesVersion

以下範例輸出顯示叢集目前執行 v1.26.3

"v1.26.3"
  1. 確定叢集狀況良好。
az networkcloud kubernetescluster show --name myNexusK8sCluster --resource-group myResourceGroup --output table

以下範例輸出顯示叢集狀況良好:

Name                 ResourceGroup          ProvisioningState    DetailedStatus    DetailedStatusMessage             Location
------------------   ---------------------  -------------------  ----------------  --------------------------------  --------------
myNexusK8sCluster    myResourceGroup        Succeeded            Available         Cluster is operational and ready  southcentralus

自訂節點激增或無法使用升級

運算子連接點預設會將升級設定為激增一個額外背景工作角色節點。 若最大激增設定的預設值為 1,可讓運算子連接點在隔離/清空現有應用程式前,建立額外節點來取代舊版節點,將工作負載中斷降至最低。 每個節點集區可自訂最大激增值,在升級速度和升級中斷之間取捨。 當您增加最大激增值時,升級程序會更快完成。 如果您為最大激增設定較大的值,可能會在升級程序期間遇到中斷。

例如,100% 最大激增值可提供最快的升級流程 (節點數量加倍),但也會導致節點集區中的所有節點同時清空。 建議您針對測試環境使用這類較高的值。 針對生產節點集區,建議將 max_surge 設定為 33%。

不一定適合透過激增升級,例如在資源受限的環境中。 升級也可以在沒有激增的情況下繼續進行,其中背景工作角色節點會先移除,然後再行取代。 這表示不需要額外資源,但會導致發生容量降低期間,在這段期間內可能無法在節點上排程 Pod。 此類型的升級是由每個節點集區的最大無法使用設定控制。 根據預設,最大無法使用設定為 0。 這表示最多可以有 0 個節點無法使用,也就是說,預設不會進行此類型的升級。

API 接受為最大激增和最大無法使用使用整數值和百分比值。 例如,整數 5 表示可以激增五個節點/將五個節點設定為無法使用。 值 50% 表示激增集區中目前節點數量的一半/將集區中目前節點數量的一半設為無法使用。

最大激增或最大無法使用之一必須至少為 1 (或 1%),否則無法使用任何機制來升級叢集。 百分比值會四捨五入到最接近的節點數量。 最大激增和最大無法使用最多可設定為 100%。 如果最大激增值高於要升級的必要節點數目,則會使用要升級的節點數目作為最大激增值。

最大激增和最大無法使用可以同時設定,在此情況下,會透過激增和無法使用組合繼續升級。

重要

標準 Kubernetes 工作負載會在從要終止的節點中清空時,以原生方式循環到新節點。 請記住,運算子連接點 Kubernetes 服務無法對非標準 Kubernetes 行為做出工作負載承諾。

下一步