升級 Azure 運算子連接點 Kubernetes 叢集
本文提供如何升級運算子連接點 Kubernetes 叢集,取得最新功能和安全性更新的指示。 Kubernetes 叢集生命週期包含定期升級至最新 Kubernetes 版本。 請務必套用最新的安全性版本或升級,以取得最新功能。 本文說明如何檢查、設定及套用升級至 Kubernetes 叢集。
限制
- 叢集預設升級流程是一種擴增方法,表示至少會新增一個額外的節點 (或與最大激增中所設定節點數目一樣多的節點)。 如果沒有足夠的可用容量,則升級無法成功。
- 當新的 Kubernetes 版本可供使用時,租用戶叢集不會進行自動升級。 當叢集中的所有網路功能都準備好支援新的 Kubernetes 版本時,使用者應該起始升級。 如需詳細資訊,請參閱升級叢集。
- 運算子連接點提供全叢集升級,確保所有節點集區的一致性。 不支援升級單一節點集區。 此外,當有新版本可用時,節點映像會在叢集升級過程中升級。
- 對代理程式節點所做的自訂會在叢集升級期間遺失。 建議您將這些自訂放在
DaemonSet
中,而不是手動變更節點組態,以便在升級後加以保留。 - 在叢集升級程序中,對核心附加元件組態所做的修改會還原至預設附加元件組態。 避免自訂附加元件組態 (例如 Calico 等),以避免潛在的升級失敗。 如果附加元件組態還原發生問題,可能會導致升級失敗。
- 當您升級運算子連接點 Kubernetes 叢集時,無法跳過 Kubernetes 次要版本。 您必須依主要版本號碼的順序執行所有升級。 例如,允許 1.14.x ->1.15.x 或 1.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 入口網站
- 登入 Azure 入口網站。
- 瀏覽至運算子連接點 Kubernetes 叢集。
- 在 [概觀] 底下,選取 [可用升級] 索引標籤。
選擇要升級至哪個版本
可用升級輸出表示有多個版本可供選擇進行升級。 在此特定案例中,目前的叢集是在版本 v1.25.4-3.
運作。因此,可用升級選項包括 v1.25.4-4
和最新的修補程式版本 v1.25.6-1.
。此外,也提供新的次要版本。
您可以彈性地升級至任何可用版本。 不過,建議的動作是執行升級至最新的可用 major-minor-patch-versionbundle
版本。
注意
版本的輸入格式為 major.minor.patch
或 major.minor.patch-versionbundle
。 版本輸入必須是其中一個可用升級版本。 例如,如果叢集的目前版本是 1.1.1-1
,則有效的版本輸入是 1.1.1-2
或 1.1.1-x
。 雖然 1.1.1
是有效的格式,但不會觸發任何更新,因為目前的版本已經是 1.1.1
。 若要起始更新,您可以使用版本套件組合來指定完整的版本,例如 1.1.1-2
。 不過,1.1.2
和 1.2.x
是有效的輸入,而且會使用適用於 1.1.2
或 1.2.x
的最新版本套件組合。
將叢集升級
在叢集升級流程期間,運算子連接點會執行下列作業:
- 將具有指定 Kubernetes 版本的新控制平面節點新增至叢集。
- 新增節點之後,請隔離和清空其中一個舊的控制平面節點,確保其上執行的工作負載會正常移至其他狀況良好的控制平面節點。
- 清空舊的控制平面節點之後,系統即會移除該節點,並將新的控制平面節點新增至叢集。
- 此流程在叢集中所有控制平面節點都已升級前,會不斷重複。
- 如果透過激增升級背景工作角色節點 (預設):
- 如果不使用激增升級背景工作角色節點:
- 針對叢集中的每個代理程式集區,舊的背景工作角色節點 (或與最大無法使用設定的節點數相同的節點) 會遭到封鎖、清空,然後移除,然後取代為指定 Kubernetes 版本的新背景工作角色節點。 多個代理程式集區會同時升級。
- 在升級期間,叢集容量會暫時減少,因為從舊背景工作角色節點清空的 Pod 不會立即有新的節點移入。 如果容量不足,這可能會導致 Pod 進入擱置狀態。 因此,設計叢集時務必要符合應用程式容量需求,尤其是在不使用激增升級期間。
- 此流程在叢集中所有背景工作角色節點都已升級前,會不斷重複。
注意
如果作業系統 (OS) 映像版本和 Kubernetes 版本在版本套件組合之間保持不變,則叢集升級不會建立新節點並取代舊節點。 這是預期行為,因為升級可能只包含附加元件版本更新,而不是新的 OS 或 K8s 版本。 由於不需要輪流升級,不會封鎖和清空節點,因此不會發生 Pod 中斷。
重要
請確定所有 PodDisruptionBudgets
(PDB) 至少都允許一次移動 1 個 Pod 複本,否則清空/收回作業將會失敗。
如果清空作業失敗,升級作業也會失敗,以確保應用程式不會中斷。 請修正導致作業停止的原因 (例如不正確的 PDB、缺乏配額等),然後再嘗試進行作業。 您也可以為每個背景工作角色節點集區設定清空逾時,在該逾時期間過後,即使 Pod 尚未完成清空,也會移除節點。 這可避免設定錯誤的 PDB 封鎖升級。 清空逾時設定是以秒為設定單位,預設為 1800。
- 使用
networkcloud kubernetescluster update
命令升級叢集。
az networkcloud kubernetescluster update --name myNexusK8sCluster --resource-group myResourceGroup --kubernetes-version v1.26.3
- 使用
show
命令確認升級成功。
az networkcloud kubernetescluster show --name myNexusK8sCluster --resource-group myResourceGroup --output json --query kubernetesVersion
以下範例輸出顯示叢集目前執行 v1.26.3:
"v1.26.3"
- 確定叢集狀況良好。
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 行為做出工作負載承諾。