使用計劃性維護來排程和控制 Azure Kubernetes Service 叢集的升級
本文說明如何使用計劃性維護來排程和控制 Azure Kubernetes Service (AKS) 中的叢集和節點映像升級。
維護會定期在您的 AKS 叢集上執行。 有兩種類型的維護作業:
- 由 AKS 起始的維護包含 AKS 執行的每週發行版本,讓您的叢集維持最新功能和修正。
- 使用者起始的維護包含叢集自動升級和節點作業系統 (OS) 自動安全性性更新。
您在 AKS 使用計劃性維護功能時,您可以透過您選擇的步調執行這兩種類型的維護,以最小化工作負載的影響。 您可以使用計劃性維護來排程自動升級的時間,但啟用或停用計劃性維護不會啟用或停用自動升級。
開始之前
- 此文章假設您目前具有 AKS 叢集。 如果您沒有 AKS 叢集,請參閱建立 AKS 叢集。
- 如果您使用 Azure CLI,請使用
az upgrade
命令,以升級至最新版本。
考量
使用計劃性維護時適用以下考量:
- AKS 保留針對緊急或重大非計劃性/回應式維護作業中斷原訂計畫性維護時段的權利。 這些維護作業甚至可以在您設定中定義的
notAllowedTime
或notAllowedDates
期間內執行。 - 只能盡可能承諾執行維護作業,而且不保證會在指定時段中進行。
排程計劃性維護的設定類型
有三個設定類型可用於排程計劃性維護:
default
是控制 AKS 版本的基本設定。 因為 Azure 安全部署做法,這些版本從初始發送時間開始,可能需要兩週的時間才能推出到所有區域。選擇
default
,以最不具干擾性的方式排程這些更新。 您可以使用每週發行版本追蹤器依區域監視進行中的 AKS 發行狀態。aksManagedAutoUpgradeSchedule
可控制何時執行指定自動升級通道所排程的叢集升級。 相較於default
設定,您可以使用此設定來設定更精細的控制節奏和定期設定。 如需叢集自動升級的詳細資訊,請參閱自動升級 Azure Kubernetes Service 叢集。aksManagedNodeOSUpgradeSchedule
可控制何時執行由節點作業系統自動升級通道排程的節點 OS 安全性修補程式。 相較於default
設定,您可以使用此設定來設定更精細的控制節奏和定期設定。 如需節點 OS 自動升級通道的詳細資訊,請參閱 自動修補和更新 AKS 叢集節點映像。
我們建議對所有叢集升級案例使用 aksManagedAutoUpgradeSchedule
,對所有節點作業系統安全修補案例使用 aksManagedNodeOSUpgradeSchedule
。
default
選項僅適用於 AKS 每周版本。 您可以透過使用 az aks maintenanceconfiguration update
命令,將 default
設定切換至 aksManagedAutoUpgradeSchedule
或 aksManagedNodeOSUpgradeSchedule
設定。
建立維護時段
注意
當您使用自動升級時,若要確保適當的功能,請使用持續時間為 4 小時以上的維護時段。
計劃性維護時段會以國際標準時間 (UTC) 指定。
default
維護時段具有下列舊版屬性 (不再建議):
名稱 | 描述: | 預設值 |
---|---|---|
timeInWeek |
在 default 設定中,這個屬性包含定義維護時段的 day 和 hourSlots 值。 |
不適用 |
timeInWeek.day |
在 default 設定中的要在星期幾執行維護。 |
不適用 |
timeInWeek.hourSlots |
在 default 設定中在特定日期執行維護的時段清單 (以小時為單位)。 |
不適用 |
notAllowedTime |
維護無法執行的日期範圍,由 start 和 end 子屬性決定。 此屬性只有在您使用設定檔案建立維護期間時才適用。 |
不適用 |
注意
從 2023-05-01 API 版本開始,請使用下列屬性進行 default
設定。
從 2023-05-01 API 版本開始的 aksManagedAutoUpgradeSchedule
或 aksManagedNodeOSUpgradeSchedule
維護時段和 default
組態具有下列屬性:
名稱 | 描述: | 預設值 |
---|---|---|
utcOffset |
叢集維護時區。 | +00:00 |
startDate |
維護時段開始生效的日期。 | 建立時間的目前日期 |
startTime |
根據 utcOffset 所決定的時區,開始維護的時間。 |
不適用 |
schedule |
升級頻率。 有三種類型可供使用:Weekly 、AbsoluteMonthly 和 RelativeMonthly 。 |
不適用 |
intervalDays |
維護執行的間隔天數。 僅適用於aksManagedNodeOSUpgradeSchedule 。 |
不適用 |
intervalWeeks |
維護執行的間隔以週為單位。 | 不適用 |
intervalMonths |
維護執行的間隔以月為單位。 | 不適用 |
dayOfWeek |
要開始維護的指定星期數。 | 不適用 |
durationHours |
要執行的維護時間範圍的持續時間。 | 不適用 |
notAllowedDates |
維護無法執行的日期範圍,由 start 和 end 子屬性決定。 只有在您使用設定檔案建立維護期間時才適用。 |
不適用 |
排程類型
有四種可用的排程類型:Daily
、Weekly
、AbsoluteMonthly
和 RelativeMonthly
。
Weekly
、AbsoluteMonthly
和 RelativeMonthly
排程類型僅適用於 aksManagedClusterAutoUpgradeSchedule
和 aksManagedNodeOSUpgradeSchedule
設定。 Daily
排程類型僅適用於 aksManagedNodeOSUpgradeSchedule
設定。
每個排程類型顯示的所有欄位都是必要的。
Daily
排程可能看起來會像「每隔三天」:
"schedule": {
"daily": {
"intervalDays": 3
}
}
Weekly
排程可能看起來像「每兩周的星期五」:
"schedule": {
"weekly": {
"intervalWeeks": 2,
"dayOfWeek": "Friday"
}
}
AbsoluteMonthly
排程可能看起來會像「每三個月,在當月的第一天」:
"schedule": {
"absoluteMonthly": {
"intervalMonths": 3,
"dayOfMonth": 1
}
}
RelativeMonthly
排程可能看起來像「每隔兩個月,在最後一個星期一」:
"schedule": {
"relativeMonthly": {
"intervalMonths": 2,
"dayOfWeek": "Monday",
"weekIndex": "Last"
}
}
weekIndex
的有效值包含 First
、Second
、Third
、Fourth
和 Last
。
新增維護期間設定
使用 az aks maintenanceconfiguration add
命令,新增維護時段設定至 AKS 叢集。
第一個範例會新增新的 default
設定,其排程的維護從每週一午夜 1:00 至午夜 2:00 間執行。 第二個範例新增 aksManagedAutoUpgradeSchedule
設定的命令,以排程在 UTC+5:30
時區的每隔三個星期五,午夜 12:00 到上午 8:00 之間執行一次維護。
# Add a new default configuration
az aks maintenanceconfiguration add --resource-group myResourceGroup --cluster-name myAKSCluster --name default --weekday Monday --start-hour 1
# Add a new aksManagedAutoUpgradeSchedule configuration
az aks maintenanceconfiguration add --resource-group myResourceGroup --cluster-name myAKSCluster --name aksManagedAutoUpgradeSchedule --schedule-type Weekly --day-of-week Friday --interval-weeks 3 --duration 8 --utc-offset +05:30 --start-time 00:00
注意
在使用 default
設定類型時,為了允許某一天中的任何時段進行維護,請省略 --start-time
參數。
更新現有維護時段
使用 az aks maintenanceconfiguration update
命令更新現有維護設定。
下列範例會更新 default
設定,排程維護於每週一午夜 2:00 至午夜 3:00 之間執行:
az aks maintenanceconfiguration update --resource-group myResourceGroup --cluster-name myAKSCluster --name default --weekday Monday --start-hour 2
列出現有叢集中的所有維護時段
使用 az aks maintenanceconfiguration list
命令,以列出 AKS 叢集中所有目前維護設定時段:
az aks maintenanceconfiguration list --resource-group myResourceGroup --cluster-name myAKSCluster
在現有叢集中顯示特定的維護設定時段
使用具有 --name
參數的 az aks maintenanceconfiguration show
命令,以檢視 AKS 叢集中特定維護設定時段:
az aks maintenanceconfiguration show --resource-group myResourceGroup --cluster-name myAKSCluster --name aksManagedAutoUpgradeSchedule
下列範例輸出顯示 aksManagedAutoUpgradeSchedule
的維護時段:
{
"id": "/subscriptions/<subscription>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/maintenanceConfigurations/aksManagedAutoUpgradeSchedule",
"maintenanceWindow": {
"durationHours": 4,
"notAllowedDates": [
{
"end": "2024-01-05",
"start": "2023-12-23"
}
],
"schedule": {
"absoluteMonthly": {
"dayOfMonth": 1,
"intervalMonths": 3
},
"daily": null,
"relativeMonthly": null,
"weekly": null
},
"startDate": "2023-01-20",
"startTime": "09:00",
"utcOffset": "-08:00"
},
"name": "aksManagedAutoUpgradeSchedule",
"notAllowedTime": null,
"resourceGroup": "myResourceGroup",
"systemData": null,
"timeInWeek": null,
"type": null
}
在現有叢集中刪除特定的維護設定時段
使用 az aks maintenanceconfiguration delete
命令,以刪除 AKS 叢集中特定維護設定時段。
下列範例會刪除 autoUpgradeSchedule
維護設定:
az aks maintenanceconfiguration delete --resource-group myResourceGroup --cluster-name myAKSCluster --name autoUpgradeSchedule
常見問題集
如何檢查叢集中的現有維護設定?
使用
az aks maintenanceconfiguration show
命令。回應式非計劃性維護是否也會在
notAllowedTime
或notAllowedDates
期間發生?是。 AKS 保留針對緊急或重大非計劃性/回應式維護作業中斷原訂維護時段的權利。
如何判斷是否已發生維護事件?
針對版本,請檢查叢集的區域,並在每週發行版本中查閱版本資訊,並查看是否符合您的維護排程。 若要檢視自動升級的狀態,請查閱叢集上的活動記錄。 您還可以查閱升級 AKS 叢集中所述的特定升級相關事件。
AKS 也會發出與升級相關的 Azure 事件方格事件。 若要深入了解,請參閱以 AKS 作為事件方格來源。
是否可以同時使用多個維護設定?
是,您可以同時執行這三個組態:
default
、aksManagedAutoUpgradeSchedule
和aksManagedNodeOSUpgradeSchedule
。 如時段重疊則由 AKS 決定執行順序。我已設定維護期間,但升級未發生。 為什麼?
AKS 自動升級需要一定的時間,通常不超過 15 分鐘,才能考慮維護時段。 建議您在建立或更新維護組態與排程的開始時間之間至少間隔 15 分鐘。
此外,請確保您的叢集會在計劃性維護期間啟動時啟動。 如果停止叢集,會解除分配其控制平面,而且無法執行任何作業。
為什麼其中一個代理程式集區在維護期間外進行升級?
如果尚未升級代理程式集區 (例如,因 Pod 中斷預算已阻止其升級),則稍後可能會在維護期間外進行升級。 此案例稱為「趕上升級」。其可避免代理程式集區和 AKS 控制平面使用不同版本進行升級。
代理程式集區意外升級的另一個原因是沒有定義的維護組態,或已刪除。 在此情況下,具有自動升級 但不含維護 設定的叢集會在隨機時間升級(後援排程),這可能是不想要的時間範圍。
維護設定是否有任何最佳做法?
如果您使用
NodeImage
通道,建議您將 節點 OS 安全性更新 排程為一週一次,因為每週都會發布新的節點映像。 您也可以加入SecurityPatch
通道,以接收每日安全性更新。將自動升級排程設定為每月頻率,以和 Kubernetes N-2 支援原則維持同步。
如需升級最佳做法和其他考量的詳細討論,請參閱 AKS 修補和升級指導。
我可以在單一訂用帳戶中設定所有叢集,以使用相同的維護設定嗎?
不建議針對單一訂用帳戶中的多個叢集使用相同的維護設定,因為這樣做可能會導致ARM節流錯誤導致叢集升級失敗。 相反地,建議您交錯每個叢集的維護時段,以避免這些錯誤。
下一步
- 若要開始升級 AKS 叢集,請參閱升級 AKS 叢集選項。