共用方式為


升級 Azure Operator Nexus Kubernetes 叢集

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

局限性

  • 叢集預設升級程序是擴展方法,這意味著最多新增一個或多個節點(或 最大激增參數中配置的節點數量)。 如果沒有足夠的可用容量,升級將無法成功。
  • 當新的 Kubernetes 版本可供使用時,租用戶叢集將不會進行自動升級。 當叢集中的所有網路功能都準備好支援新的 Kubernetes 版本時,使用者應該啟動升級。 如需詳細資訊,請參閱 升級叢集
  • Operator Nexus 提供全叢集升級,確保所有節點集區的一致性。 不支援升級單一節點集區。 此外,當有新版本可用時,節點映像會升級為叢集升級的一部分。
  • 在叢集升級期間,對代理程式節點所做的自訂將會遺失。 建議您將這些自訂項目放置在 DaemonSet,而非手動更改節點組態,這樣可確保在升級後保留它們。
  • 在叢集升級程序中,對核心附加元件組態所做的修改會還原為預設附加元件組態。 避免自訂插件配置(例如 Calico 等),以防止潛在的升級失敗。 如果插件配置恢復遇到問題,可能會導致升級失敗。
  • 當您升級 Operator Nexus Kubernetes 叢集時,無法略過 Kubernetes 小版本。 您必須依主要版本號碼依序執行所有升級。 例如,允許 在 1.14.x ->1.15.x1.15.x ->1.16.x 之間進行升級,但不允許 1.14.x ->1.16.x 。 如果您的版本落後於多個主要版本,您應該執行多個循序升級。
  • 必須在叢集建立期間設定最大突波和/或最大不可用值。 建立叢集之後,您無法變更這些值。 如需詳細資訊,請參閱upgradeSettings建立 Azure 操作員連接點 Kubernetes 叢集

先決條件

  • 部署在您的 Azure 訂用帳戶中資源群組的 Azure Operator Nexus Kubernetes 叢集。
  • 如果您使用 Azure CLI,本文需要您執行最新的 Azure CLI 版本。 如果您需要安裝或升級,請參閱 安裝 Azure CLI
  • 必要的 networkcloud az-cli 擴充功能最低版本:2.0.b3
  • 瞭解版本套件組合概念。 如需詳細資訊,請參閱 Nexus 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. 導航至您的 Operator Nexus 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 的最新版本套件組合。

升級叢集

在叢集升級過程期間,Operator Nexus 會執行下列作業:

  • 將具有指定 Kubernetes 版本的新控制平面節點新增至叢集。
  • 新增節點之後、請封鎖並清空其中一個舊控制平面節點、確保在其上執行的工作負載會正常移至其他狀況良好的控制平面節點。
  • 清空舊的控制平面節點之後,會將其移除,並將新的控制平面節點新增至叢集。
  • 此程序會重複進行,直到叢集中的所有控制平面節點都升級為止。
  • 如果透過動態擴增升級工作節點 (預設):
    • 針對叢集中的每個代理程式集區,新增具有指定 Kubernetes 版本的新工作者節點(或新增最大突增中設定的節點數目)。 多個代理程式集區會同時升級。
    • 封鎖並清空其中一個舊工作節點,以將執行中的應用程式中斷降到最低。 如果您使用最大突波,它會在隔離並排空工作節點的同時,按照指定的緩衝節點數目進行操作。
    • 清空舊的工作節點之後,它會被移除,然後會將具有新版 Kubernetes 的工作節點新增至叢集(或如 最大激增 中設定的節點數目)。
  • 如果升級工作節點時沒有突波:
    • 針對叢集中的每個節點池,舊的工作節點(或由 max unavailable 所設定的節點數目)會先被封鎖、清空並移除,接著由具有指定 Kubernetes 版本的新工作節點取代。 多個代理程式集區會同時升級。
    • 在升級期間,叢集容量會暫時減少,因為從舊工作節點清空的 Pod 不會立即移到新的節點。 如果容量不足,這可能會導致 Pod 進入擱置狀態。 因此,設計叢集以滿足應用程式容量需求至關重要,尤其是在無突波升級期間。
  • 此程序會重複進行,直到叢集中的所有工作節點都已升級為止。

備註

如果作業系統 (OS) 映像版本和 Kubernetes 版本在版本套件組合之間保持不變,則叢集升級不會建立新節點並取代舊節點。 這是預期行為,因為升級可能只包括插件版本的更新,而不是新的操作系統或 K8s 版本。 由於不涉及滾動升級,因此節點上沒有隔離和排空作業,因此不會發生 Pod 運行中斷。

這很重要

請確定任何 PodDisruptionBudgetsPDB) 允許一次至少移動 一個 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

自定義節點負載激增或不可用性升級

根據預設,Operator Nexus 將升級配置為使用一個額外的工作節點進行擴展。 最大突波設定的預設值為 1,可讓操作員連接點在現有應用程式的封鎖/清空之前建立額外的節點,以取代舊版的節點,將工作負載中斷降到最低。 可以自訂每個節點集區的最大激增值,以便在升級速度和升級中斷之間進行權衡。 當您增加最大突波值時,升級程序會更快完成。 如果您設定最大突波值較大,則在升級程序期間可能會遇到中斷。

例如,100% 的最大突波值可提供最快的升級程序 (將節點計數加倍),但也會導致節點集區中的所有節點同時清空。 您可能想要為測試環境使用較高的值,例如此值。 對於生產節點集區,建議將max_surge設定為 33%。

透過突然增長進行升級不是在所有情況下都合適的,例如在資源受限的環境中。 升級也可以在不進行大量增加的情況下進行,其中會先移除工作節點,然後更換新的節點。 這意味著不需要額外的資源,但會導致容量減少一段時間,其中 Pod 可能無法排程到節點。 這種類型的升級是由每個節點集區由最大無法使用設定控制。 依預設,最大不可用值設定為 0。 這表示最多可以有 0 個節點不可用,即預設不會發生這種類型的升級。

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

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

可以同時設定最大額外容量和最大不可用的容量,在過程中,升級將透過額外容量和不可用容量的混合進行。

這很重要

標準 Kubernetes 工作負載在從被拆除的節點中清空時,會原生循環到新節點。 請記住,操作員連接點 Kubernetes 服務無法針對非標準 Kubernetes 行為做出工作負載承諾。

後續步驟