Azure Kubernetes Service 修補程序和升級指引

Azure Kubernetes Service (AKS) 第 2 天作業指南的這一節說明 AKS 背景工作節點和 Kubernetes 版本的修補和升級策略。 身為叢集操作員,您必須有一個計劃,讓您的叢集保持在最新狀態,並監視 Kubernetes API 變更和取代一段時間。

更新的背景和類型

AKS 有三種類型的更新,每個更新都是以下一個為基礎:

更新類型 升級的頻率 支援計劃性維護 支援的作業方法 Target 文件的連結
節點OS安全性修補程式 夜間 Yes 自動 (每周),手動/非受控 (夜間) 節點 自動升級節點映像
節點映像版本升級 Linux每周
Windows每月
Yes 自動、手動 節點集區 AKS 節點映射升級
Kubernetes 版本 (叢集) 升級 季度 Yes 自動、手動 叢集和節點集區 AKS 叢集升級

更新類型

  • 節點OS安全性修補程式 (僅限Linux)。 針對 Linux 節點, Canonical UbuntuAzure Linux 都會讓操作系統安全性修補程式每天提供一次。 Microsoft 會在節點映射的每周更新中測試並組合這些修補程式。

  • 節點映像的每周更新。 AKS 會提供節點映像的每周更新。 這些更新包括最新的 OS 和 AKS 安全性修補程式、錯誤修正和增強功能。 節點更新不會變更 Kubernetes 版本。 版本的格式為Linux和 Windows Server OS 組建和日期 (例如 20348.2113.231115) 的日期(例如 202311.07.0)。 如需詳細資訊,請參閱 AKS 發行狀態

  • 每季 Kubernetes 版本。 AKS 提供 Kubernetes 版本的每季更新。 這些更新可讓 AKS 使用者利用最新的 Kubernetes 功能和增強功能。 其中包括安全性修補程式和節點映像更新。 如需詳細資訊,請參閱 AKS 中支援的 Kubernetes 版本。

升級前考慮

整體叢集影響

  • 就地升級(節點和叢集)會在進行中時影響 Kubernetes 環境的效能。 您可以透過適當設定 Pod 中斷預算、節點激增設定和適當的規劃,將此效果降到最低。
  • 使用藍/綠更新策略,而不是就地升級,可消除對叢集效能造成任何影響,但會增加成本和複雜性。
  • 無論您的升級和修補策略為何,您都需要有叢集的強固測試和驗證程式。 先修補和升級較低環境,然後執行維護后驗證來檢查 叢集節點部署和應用程式健康情況。

AKS 工作負載最佳做法

若要確保 AKS 叢集在維護期間順利運作,請遵循下列最佳做法:

  • 定義 Pod 中斷預算 (PDB)。 設定 部署的 Pod 中斷預算 非常重要。 PDB 會強制執行最少可用的應用程式複本數目,以確保中斷事件期間的連續功能。 PDB 可協助維護叢集在維護或節點失敗期間的穩定性。

    警告

    設定錯誤的 PDB 可能會封鎖升級程式,因為 Kubernetes API 會防止發生滾動節點映射升級所需的警戒線和清空。 此外,如果同時移動太多 Pod,可能會發生應用程式中斷。 PDB 設定可降低此風險。

  • 檢查可用的計算和網路限制。 透過 Azure 入口網站 中的配額頁面或使用 az quota 命令,確認 Azure 訂用帳戶中可用的計算和網路限制。 檢查您的節點的計算和網路資源,特別是 VM vCPU,以及虛擬機和虛擬機擴展集的數目。 如果您接近限制,請在升級之前要求增加配額。
  • 檢查節點子網中的可用IP空間。 在更新期間,會在叢集中建立額外的激增節點,而Pod會移至這些節點。 請務必監視節點子網中的IP位址空間,以確保有足夠的位址空間可進行這些變更。 不同的 Kubernetes 網路設定 有不同的 IP 需求。 作為起點,請檢閱下列考慮:
    • 在升級期間,節點IP數目會根據您的激增值而增加。 (最低浪湧值為 1.
    • 以 Azure CNI 為基礎的叢集會將 IP 位址指派給個別 Pod,因此 Pod 移動需要有足夠的 IP 空間。
    • 您的叢集會在升級期間繼續運作。 請確定有足夠的IP空間可允許節點調整(如果已啟用的話)。
  • 設定多個環境。 建議您設定不同的環境,例如開發、預備和生產環境,讓您在將變更推出至生產環境之前先進行測試和驗證。
  • 調整激增升級值。 根據預設,AKS 的激增值為 1,這表示在升級過程中一次會建立一個額外的節點。 您可以藉由增加此值來增加 AKS 升級的速度。 33% 的激增是對中斷敏感度工作負載的建議最大值。 如需詳細資訊,請參閱 AKS 的升級選項。
  • 調整節點清空逾時。節點清空逾 時指定叢集在嘗試在更新的節點上重新排程Pod時所等候的時間上限。 預設值為30分鐘。 對於難以重新排程 Pod 的工作負載,調整此預設值會很有説明。
  • 規劃和排程維護期間。 升級程式可能會影響 Kubernetes 叢集的整體效能。 排程尖峰使用時段外的就地升級程式,並監視叢集效能,以確保適當重設大小,特別是在更新程序期間。
  • 檢查叢集中的其他相依性。 Kubernetes 操作員通常會將其他工具部署至 Kubernetes 叢集作為作業的一部分,例如 KEDA 縮放程式、Dapr 和服務網格。 當您規劃升級程式時,請檢查您用來確保與目標版本相容性的任何元件版本資訊。

管理節點映像的每周更新

Microsoft 會為 AKS 節點建立大約每週一次的新節點映射。 節點映像包含最新的OS安全性修補程式、OS核心更新、Kubernetes 安全性更新、kubelet等二進位檔的更新版本,以及版本資訊中列出的元件版本更新。

更新節點映射時, 會在目標節點集區的節點上觸發警戒線和清空 動作:

  • 已更新映像的節點會新增至節點集區。 一次新增的節點數目是由激增值所控管。
  • 其中一個現有的節點已 封鎖清空。 封鎖可確保節點不會排程Pod。 清空會移除其 Pod,並將其排程至其他節點。
  • 節點完全清空之後,就會從節點集區中移除。 激增所新增的更新節點會取代它。
  • 此程式會針對需要在節點集區中更新的每個節點重複執行。

類似的程式會在叢集升級期間發生。

自動節點映射升級

一般而言,大部分的叢集都應該使用 NodeImage 更新通道。 此通道會每周提供更新的節點映射 VHD,並根據叢集的維護時間範圍進行更新。

可用的通道包括下列專案:

  • None. 不會自動套用任何更新。
  • Unmanaged. OS 會每晚套用 Ubuntu 和 Azure Linux 更新。 重新啟動必須分開管理。
  • SecurityPatch. 夜間安全性修補程式會部署為OS映像更新。
  • NodeImage. 每周 AKS 修補程式和夜間安全性修補程式會合併。

如果您選擇Unmanaged更新通道,則必須使用 kured 之類的工具來管理重新啟動程式。 如果您選擇 SecurityPatch 更新通道,可以像夜間一樣頻繁地套用更新。 此修補程式層級需要 VHD 儲存在您的資源群組中,這會產生名義費用。 此外,您必須將組 SecurityPatch 態與 NodeImage 組態結合,以啟用完整的節點修補程式。

最佳做法是使用 NodeImage 更新通道,並將 aksManagedNodeOSUpgradeSchedule 維護期間設定為叢集超出尖峰使用時段的時間。 如需可用來設定叢集維護期間的屬性,請參閱 建立維護期間 。 主要屬性如下:

  • name. 用於 aksManagedNodeOSUpgradeSchedule 節點OS更新。
  • utcOffset. 設定時區。
  • startTime. 設定維護時段的開始時間。
  • dayofWeek. 設定視窗的星期幾。 例如: Saturday
  • schedule. 設定視窗的頻率。 如需 NodeImage 更新,建議 weekly使用 。
  • durationHours. 將此屬性設定為至少四小時。

本範例會將週六東部時間下午 8:00 的維護期間設定為:

az aks maintenanceconfiguration add -g <ResourceGroupName> --cluster-name <AKSClusterName> --name aksManagedNodeOSUpgradeSchedule --utcOffset -05:00 --start-time 20:00 --day-of-week Saturday --schedule-type weekly --duration 4

如需更多範例,請參閱 使用 Azure CLI 新增維護時段設定。

在理想情況下,此組態會部署為叢集基礎結構即程序代碼部署的一部分。

您可以使用 Azure CLI 來檢查是否已設定的維護時段:

az aks maintenanceconfiguration list -g <ResourceGroupName> --cluster-name <AKSClusterName>

您也可以使用 CLI 來檢查特定維護時段的詳細資料:

az aks maintenanceconfiguration show -g <ResourceGroupName> --cluster-name <AKSClusterName> --name aksManagedNodeOSUpgradeSchedule

如果未設定叢集維護期間,則節點映射更新會以雙周方式進行。 盡可能多地在設定的時段內進行 AKS 維護,但無法保證維護的時間。

您可以透過 Azure 活動記錄,或檢閱 叢集上的資源記錄 ,來檢查升級事件的狀態。

您可以使用包含 AKS 升級事件的 Azure 事件方格 訂閱 Azure Kubernetes Service (AKS) 事件。 這些事件可以在新版本的 Kubernetes 可用時發出警示,並協助追蹤升級程式期間的節點狀態變更。

您也可以使用 GitHub Actions 來管理每周更新程式。 此方法提供更細微的更新程式控制。

手動節點更新程式

您可以使用 kubectl 描述 nodes 命令來判斷叢集中節點的 OS 核心版本和 OS 映射版本:

kubectl describe nodes <NodeName>

範例輸出(截斷):

System Info:
  Machine ID:                 bb2e85e682ae475289f2e2ca4ed6c579
  System UUID:                6f80de9d-91ba-490c-8e14-9e68b7b82a76
  Boot ID:                    3aed0fd5-5d1d-4e43-b7d6-4e840c8ee3cf
  Kernel Version:             5.15.0-1041-azure
  OS Image:                   Ubuntu 22.04.2 LTS
  Operating System:           linux
  Architecture:               arm64
  Container Runtime Version:  containerd://1.7.1+azure-1
  Kubelet Version:            v1.26.6
  Kube-Proxy Version:         v1.26.6

使用 Azure CLI az aks nodepool list 命令來判斷叢集中節點的節點映射版本:

az aks nodepool list \
   --resource-group <ResourceGroupName> --cluster-name <AKSClusterName> \
   --query "[].{Name:name,NodeImageVersion:nodeImageVersion}" --output table

範例輸出︰

Name       NodeImageVersion
---------  ---------------------------------------------
systempool  AKSUbuntu-2204gen2containerd-202307.12.0
usernodepool  AKSUbuntu-2204gen2arm64containerd-202307.12.0

使用 az aks nodepool get-upgrades 來判斷特定節點集區的最新可用節點映射版本:

az aks nodepool get-upgrades \
   --resource-group <ResourceGroupName> \
   --cluster-name <AKSClusterName> \
   --nodepool-name <NodePoolName> --output table

範例輸出︰

KubernetesVersion    LatestNodeImageVersion                         Name     OsType
-------------------  ---------------------------------------------  -------  --------
1.26.6               AKSUbuntu-2204gen2arm64containerd-202308.10.0  default  Linux

叢集升級

Kubernetes 社群大約每三個月發行一次 Kubernetes 次要版本。 為了讓您隨時瞭解新的 AKS 版本和版本, AKS 版本資訊頁面 會定期更新。 您也可以訂閱 GitHub AKS RSS 摘要,以提供變更和增強功能的即時更新。

AKS 遵循 N - 2 支持原則,這表示已針對最新版本 (N) 和兩個先前的次要版本提供完整支援。 第三個舊版的次要版本提供有限的平台支援。 如需詳細資訊,請參閱 AKS 支持原則

若要確保您的 AKS 叢集仍受支援,您必須建立持續叢集升級程式。 此程式牽涉到在較低環境中測試新版本,並在新版本變成預設值之前規劃升級至生產環境。 這種方法可以在升級程式中維持可預測性,並將應用程式的中斷降到最低。 如需詳細資訊,請參閱 升級 AKS 叢集

如果您的叢集需要較長的升級週期,請使用支援長期支援 (LTS) 選項AKS 版本。 如果您啟用 LTS 選項,Microsoft 會針對 Kubernetes 版本提供兩年的擴充支援,以啟用更長時間且受控制的升級週期。 如需詳細資訊,請參閱 AKS 中支援的 Kubernetes 版本。

叢集升級包含節點升級,並使用類似的警戒線和清空程式。

升級之前

最佳做法是,您應該一律在較低的環境中升級和測試,以將生產中斷的風險降到最低。 叢集升級需要額外的測試,因為它們牽涉到 API 變更,這可能會影響 Kubernetes 部署。 下列資源可協助您進行升級程式:

  • 已淘汰 API 的 AKS 活頁簿。 從 Azure 入口網站 的叢集概觀頁面中,您可以選取 [診斷並解決問題],移至 [建立]、[升級]、[刪除和調整] 類別,然後選取 [Kubernetes API 取代]。 這麼做會執行活頁簿,檢查叢集中所使用的已淘汰 API 版本。 如需詳細資訊,請參閱 移除已取代 API 的使用方式。
  • AKS 版本資訊頁面。 此頁面提供新 AKS 版本和版本的完整資訊。 請檢閱這些附注,隨時掌握最新的更新和變更。
  • Kubernetes 版本信息頁面。 此頁面提供最新 Kubernetes 版本的詳細深入解析。 請特別注意緊急升級注意事項,其中醒目提示可能會影響AKS叢集的重要資訊。
  • AKS 元件會依版本中斷變更。 下表提供 AKS 元件中依版本重大變更的完整概觀。 藉由參考本指南,您可以在升級程式之前主動解決任何潛在的相容性問題。

除了這些 Microsoft 資源,請考慮使用開放原始碼工具來優化叢集升級程式。 其中一個這類工具是 Fairwinds pluto,其可掃描您的部署和 Helm 圖表,以尋找已淘汰的 Kubernetes API。 這些工具可協助您確保應用程式與最新的 Kubernetes 版本保持相容。

升級程序

若要檢查叢集何時需要升級,請使用 az aks get-upgrades 取得 AKS 叢集可用升級版本的清單。 從結果判斷叢集的目標版本。

以下是範例:

az aks get-upgrades \
   --resource-group <ResourceGroupName> --name <AKSClusterName> --output table

範例輸出︰

MasterVersion  Upgrades
-------------  ---------------------------------
1.26.6         1.27.1, 1.27.3

檢查節點集區中節點的 Kubernetes 版本,以判斷需要升級的集區:

az aks nodepool list \
   --resource-group <ResourceGroupName> --cluster-name <AKSClusterName> \
   --query "[].{Name:name,k8version:orchestratorVersion}" --output table

範例輸出︰

Name          K8version
------------  ------------
systempool    1.26.6
usernodepool  1.26.6

手動升級

若要將中斷降至最低,並協助確保 AKS 叢集的順利升級,請遵循此升級方法:

  1. 升級 AKS 控制平面。 從升級 AKS 控制平面開始。 此步驟牽涉到升級負責管理和協調叢集的控制平面元件。 升級控制平面先有助於確保相容性和穩定性,再升級個別節點集區。
  2. 升級您的系統節點集區。 升級控制平面之後,請升級 AKS 叢集中的系統節點集區。 節點集區是由執行應用程式工作負載的虛擬機實例所組成。 升級節點集區可個別啟用支援您應用程式之基礎結構的受控和系統升級。
  3. 升級用戶節點集區。 升級系統節點集區之後,請升級 AKS 叢集中的任何用戶節點集區。

遵循這種方法,您可以將升級程序期間的中斷降到最低,並維護應用程式的可用性。 以下是詳細步驟:

  1. 使用 --control-plane-only 旗標執行 az aks upgrade 命令,只升級叢集控制平面,而不是叢集的節點集區:

    az aks upgrade \
       --resource-group <ResourceGroupName> --name <AKSClusterName> \
       --control-plane-only \
       --kubernetes-version <KubernetesVersion>
    
  2. 執行 az aks nodepool upgrade 以將節點集區升級 至目標版本:

    az aks nodepool upgrade \
       --resource-group <ResourceGroupName> --cluster-name <AKSClusterName> --name <NodePoolName> \
       --no-wait --kubernetes-version <KubernetesVersion>
    

    在節點集區升級期間,AKS 會在正在升級的節點中建立激增節點、 封鎖和清空 Pod、重新映射節點,然後取消記錄 Pod。 然後,此程式會針對節點集區中的任何其他節點重複。

您可以執行 kubectl get events來檢查升級程式的狀態。 如需針對叢集升級問題進行疑難解答的資訊,請參閱 AKS 疑難解答檔

在自動升級發行通道中註冊叢集

AKS 也提供 自動叢集升級解決方案 ,讓您的叢集保持最新狀態。 如果您使用此解決方案,您應該將它與維護期間配對,以控制升級的時間。 升級窗口必須是四小時以上。 當您在發行通道中註冊叢集時,Microsoft 會自動管理叢集及其節點集區的版本和升級頻率。

叢集自動升級提供不同的發行通道選項。 以下是建議的環境和發行通道組態:

Environment 升級通道 描述
生產 stable 針對穩定性和版本成熟度,請使用穩定或一般通道來進行生產工作負載。
預備、測試、開發 與生產環境相同 若要確保您的測試指出您要將生產環境升級至的版本,請使用與生產環境相同的發行通道。
Canary rapid 若要測試最新的 Kubernetes 版本和新的 AKS 功能或 API,請使用 rapid 通道。 當 中的版本 rapid 升階到您用於生產環境的通道時,您可以改善上市時間。

考量

下表描述各種 AKS 升級和修補案例的特性:

案例 使用者起始 Kubernetes 升級 OS 核心升級 節點映像升級
安全性修補 No No 是,重新啟動後 Yes
叢集建立 Yes 可能 是,如果更新的節點映射使用更新的核心 是,如果有新版本可用,則相對於現有叢集
控制平面 Kubernetes 升級 Yes .是 No
節點集區 Kubernetes 升級 Yes Yes 是,如果更新的節點映射使用更新的核心 是,如果有新版本可用
節點集區相應增加 No
節點映像升級 No 是,如果更新的節點映射使用更新的核心 Yes
叢集自動升級 No Yes 是,如果更新的節點映射使用更新的核心 是,如果有新版本可用
  • 作為節點映射升級一部分所套用的OS安全性修補程式,可能會安裝比建立新叢集時要安裝的更新版本的核心版本。
  • 節點集區相應增加會使用目前與虛擬機擴展集相關聯的模型。 套用安全性修補程式並重新啟動節點時,操作系統核心會升級。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主體作者:

其他投稿人:

若要查看非公用LinkedIn配置檔,請登入LinkedIn。

下一步