共用方式為


使用計劃性維護來排程和控制 Azure Kubernetes Service 叢集的升級

本文說明如何使用計劃性維護來排程和控制 Azure Kubernetes Service (AKS) 中的叢集和節點映像升級。

維護會定期在您的 AKS 叢集上執行。 有兩種類型的維護作業:

您在 AKS 使用計劃性維護功能時,您可以透過您選擇的步調執行這兩種類型的維護,以最小化工作負載的影響。 您可以使用計劃性維護來排程自動升級的時間,但啟用或停用計劃性維護不會啟用或停用自動升級。

開始之前

  • 此文章假設您目前具有 AKS 叢集。 如果您沒有 AKS 叢集,請參閱建立 AKS 叢集
  • 如果您使用 Azure CLI,請使用 az upgrade 命令,以升級至最新版本。

考量

使用計劃性維護時適用以下考量:

  • AKS 保留針對緊急或重大非計劃性/回應式維護作業中斷原訂計畫性維護時段的權利。 這些維護作業甚至可以在您設定中定義的 notAllowedTimenotAllowedDates 期間內執行。
  • 只能盡可能承諾執行維護作業,而且不保證會在指定時段中進行。

排程計劃性維護的設定類型

有三個設定類型可用於排程計劃性維護:

  • default 是控制 AKS 版本的基本設定。 因為 Azure 安全部署做法,這些版本從初始發送時間開始,可能需要兩週的時間才能推出到所有區域。

    選擇 default,以最不具干擾性的方式排程這些更新。 您可以使用每週發行版本追蹤器依區域監視進行中的 AKS 發行狀態。

  • aksManagedAutoUpgradeSchedule 可控制何時執行指定自動升級通道所排程的叢集升級。 相較於 default 設定,您可以使用此設定來設定更精細的控制節奏和定期設定。 如需叢集自動升級的詳細資訊,請參閱自動升級 Azure Kubernetes Service 叢集

  • aksManagedNodeOSUpgradeSchedule 可控制何時執行由節點作業系統自動升級通道排程的節點 OS 安全性修補程式。 相較於 default 設定,您可以使用此設定來設定更精細的控制節奏和定期設定。 如需節點 OS 自動升級通道的詳細資訊,請參閱 自動修補和更新 AKS 叢集節點映像

我們建議對所有叢集升級案例使用 aksManagedAutoUpgradeSchedule,對所有節點作業系統安全修補案例使用 aksManagedNodeOSUpgradeSchedule

default 選項僅適用於 AKS 每周版本。 您可以透過使用 az aks maintenanceconfiguration update 命令,將 default 設定切換至 aksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 設定。

建立維護時段

注意

當您使用自動升級時,若要確保適當的功能,請使用持續時間為 4 小時以上的維護時段。

計劃性維護時段會以國際標準時間 (UTC) 指定。

default 維護時段具有下列舊版屬性 (不再建議):

名稱 描述: 預設值
timeInWeek default 設定中,這個屬性包含定義維護時段的 dayhourSlots 值。 不適用
timeInWeek.day default 設定中的要在星期幾執行維護。 不適用
timeInWeek.hourSlots default 設定中在特定日期執行維護的時段清單 (以小時為單位)。 不適用
notAllowedTime 維護無法執行的日期範圍,由 startend 子屬性決定。 此屬性只有在您使用設定檔案建立維護期間時才適用。 不適用

注意

從 2023-05-01 API 版本開始,請使用下列屬性進行 default 設定。

從 2023-05-01 API 版本開始的 aksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 維護時段和 default 組態具有下列屬性:

名稱 描述: 預設值
utcOffset 叢集維護時區。 +00:00
startDate 維護時段開始生效的日期。 建立時間的目前日期
startTime 根據 utcOffset 所決定的時區,開始維護的時間。 不適用
schedule 升級頻率。 有三種類型可供使用:WeeklyAbsoluteMonthlyRelativeMonthly 不適用
intervalDays 維護執行的間隔天數。 僅適用於aksManagedNodeOSUpgradeSchedule 不適用
intervalWeeks 維護執行的間隔以週為單位。 不適用
intervalMonths 維護執行的間隔以月為單位。 不適用
dayOfWeek 要開始維護的指定星期數。 不適用
durationHours 要執行的維護時間範圍的持續時間。 不適用
notAllowedDates 維護無法執行的日期範圍,由 startend 子屬性決定。 只有在您使用設定檔案建立維護期間時才適用。 不適用

排程類型

有四種可用的排程類型:DailyWeeklyAbsoluteMonthlyRelativeMonthly

WeeklyAbsoluteMonthlyRelativeMonthly 排程類型僅適用於 aksManagedClusterAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 設定。 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 的有效值包含 FirstSecondThirdFourthLast

新增維護期間設定

使用 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 命令。

  • 回應式非計劃性維護是否也會在 notAllowedTimenotAllowedDates 期間發生?

    是。 AKS 保留針對緊急或重大非計劃性/回應式維護作業中斷原訂維護時段的權利。

  • 如何判斷是否已發生維護事件?

    針對版本,請檢查叢集的區域,並在每週發行版本中查閱版本資訊,並查看是否符合您的維護排程。 若要檢視自動升級的狀態,請查閱叢集上的活動記錄。 您還可以查閱升級 AKS 叢集中所述的特定升級相關事件。

    AKS 也會發出與升級相關的 Azure 事件方格事件。 若要深入了解,請參閱以 AKS 作為事件方格來源

  • 是否可以同時使用多個維護設定?

    是,您可以同時執行這三個組態:defaultaksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule。 如時段重疊則由 AKS 決定執行順序。

  • 我已設定維護期間,但升級未發生。 為什麼?

    AKS 自動升級需要一定的時間,通常不超過 15 分鐘,才能考慮維護時段。 建議您在建立或更新維護組態與排程的開始時間之間至少間隔 15 分鐘。

    此外,請確保您的叢集會在計劃性維護期間啟動時啟動。 如果停止叢集,會解除分配其控制平面,而且無法執行任何作業。

  • 為什麼其中一個代理程式集區在維護期間外進行升級?

    如果尚未升級代理程式集區 (例如,因 Pod 中斷預算已阻止其升級),則稍後可能會在維護期間外進行升級。 此案例稱為「趕上升級」。其可避免代理程式集區和 AKS 控制平面使用不同版本進行升級。

    代理程式集區意外升級的另一個原因是沒有定義的維護組態,或已刪除。 在此情況下,具有自動升級 但不含維護 設定的叢集會在隨機時間升級(後援排程),這可能是不想要的時間範圍。

  • 維護設定是否有任何最佳做法?

    如果您使用 NodeImage 通道,建議您將 節點 OS 安全性更新 排程為一週一次,因為每週都會發布新的節點映像。 您也可以加入 SecurityPatch 通道,以接收每日安全性更新。

    自動升級排程設定為每月頻率,以和 Kubernetes N-2 支援原則維持同步。

    如需升級最佳做法和其他考量的詳細討論,請參閱 AKS 修補和升級指導

  • 我可以在單一訂用帳戶中設定所有叢集,以使用相同的維護設定嗎?

    不建議針對單一訂用帳戶中的多個叢集使用相同的維護設定,因為這樣做可能會導致ARM節流錯誤導致叢集升級失敗。 相反地,建議您交錯每個叢集的維護時段,以避免這些錯誤。

下一步