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

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

您的 AKS 叢集會自動於其上執行定期維護。 維護作業有兩種類型:AKS 起始和使用者起始。 AKS 起始的維護牽涉到 AKS 執行的每周版本,讓您的叢集保持最新狀態,並具有最新的功能和修正。 使用者起始的維護包括 叢集自動升級節點OS自動安全性更新。 計劃性維護功能可讓您以您選擇的步調執行這兩種類型的維護,藉此將任何工作負載的影響降到最低。

開始之前

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

考量

當您使用計劃性維護時,適用下列考慮:

  • AKS 會保留中斷計劃性維護時段的權利,以執行緊急或重大的非計劃性、反應性維護作業。 這些維護作業甚至可以在您設定中定義的 或 notAllowedDates 期間內notAllowedTime執行。
  • 我們只能承諾盡可能執行維護作業 ,而且不保證會在指定時段中進行。

計劃性維護排程設定

有三種可用的維護排程組態類型: defaultaksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule

  • default 是用來控制 AKS 版本的基本組態。 由於 Azure 保管庫 部署實務 (SDP),發行最多可能需要兩周的時間才會推出到所有區域。 選擇 default 以最不具干擾性的方式排程這些更新。 您可以使用每周發行追蹤器,依區域監視進行中的AKS發行狀態。
  • aksManagedAutoUpgradeSchedule 會控制何時執行您指定的自動升級通道所排程的叢集升級。 相較於組態,您可以使用此 default 組態來設定更精細的控制頻率和周期設定。 如需叢集自動升級的詳細資訊,請參閱自動升級 Azure Kubernetes Service (AKS) 叢集
  • aksManagedNodeOSUpgradeSchedule 控制節點作業系統自動升級通道排程的節點操作系統 (OS) 安全性修補的時機。 相較於組態,您可以使用此 default 組態來設定更精細的控制頻率和周期設定。 如需節點 OS 自動升級通道的詳細資訊,請參閱 自動修補和更新 AKS 叢集節點映像

我們建議對所有叢集升級案例使用 aksManagedAutoUpgradeSchedule,對所有節點作業系統安全修補案例使用 aksManagedNodeOSUpgradeScheduledefault 選項僅適用於 AKS 每周版本。 您可以使用 az aks maintenanceconfiguration update 命令,將 default 組態切換至 aksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 組態。

建立維護期間

注意

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

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

default 維護時段具有下列屬性:

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

aksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 維護期間具有下列屬性:

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

了解排程類型

有四種可用的排程類型: DailyWeeklyAbsoluteMonthly、 和 RelativeMonthly。 這些排程類型僅適用於 aksManagedClusterAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 組態。 Daily 排程僅適用於 aksManagedNodeOSUpgradeSchedule 類型。

注意

每個個別排程類型顯示的所有欄位都是必要的。

每日排程

注意

每日排程僅適用於 aksManagedNodeOSUpgradeSchedule 組態類型。

Daily 排程可能看起來會像「每隔三天」

"schedule": {
    "daily": {
        "intervalDays": 3
    }
}

每週排程

Weekly 排程可能看起來像 「每兩周的星期五」

"schedule": {
    "weekly": {
        "intervalWeeks": 2,
        "dayOfWeek": "Friday"
    }
}

AbsoluteMonthly 排程

AbsoluteMonthly 排程可能看起來會像「每三個月,在當月的第一天」

"schedule": {
    "absoluteMonthly": {
        "intervalMonths": 3,
        "dayOfMonth": 1
    }
}

RelativeMonthly 排程

RelativeMonthly 排程可能看起來像 「每隔兩個月,在最後一個星期一」

"schedule": {
    "relativeMonthly": {
        "intervalMonths": 2,
        "dayOfWeek": "Monday",
        "weekIndex": "Last"
    }
}

的有效值 weekIndex 包括 FirstSecondThirdFourthLast

新增維護時段組態

  • 使用 az aks maintenanceconfiguration add 命令將維護時段組態新增至 AKS 叢集。

    第一個範例會新增一個新的 default 設定,排程維護從上午 1:00 到每週一上午 2:00 執行。 第二個範例會新增一個新的 aksManagedAutoUpgradeSchedule 設定,排程維護在時區上午 12:00 到上午 8:00 之間每隔三個星期五執行 UTC+5:30 一次。

    # 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

在現有的叢集中顯示特定的維護設定視窗

使用 az aks maintenanceconfiguration show 命令搭配 --name 參數,在 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
}

刪除現有叢集中的維護設定視窗

  • 使用命令刪除 AKS 叢集中的 az aks maintenanceconfiguration delete 維護設定視窗。

    下列範例會 autoUpgradeSchedule 刪除維護組態。

    az aks maintenanceconfiguration delete --resource-group myResourceGroup --cluster-name myAKSCluster --name autoUpgradeSchedule
    

常見問題集

  • 如何檢查叢集中的現有維護設定?

    使用 az aks maintenanceconfiguration show 命令。

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

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

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

    如需版本,請檢查叢集的區域,並在每周發行版本中查閱發行版本資訊,並驗證它是否符合您的維護排程。 若要檢視自動升級的狀態,請查閱叢集上的活動記錄。 還可查閱升級 AKS 叢集中所述的特定升級相關事件。 AKS 也會發出與升級相關的事件方格事件。 若要深入了解,請參閱以 AKS 作為事件方格來源

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

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

  • 我已設定維護期間,但升級未發生 - 原因為何?

    AKS 自動升級需要一定的時間,才能考慮維護期間。 建議您在建立或更新排程開始時間的維護設定之間至少 24 小時。

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

  • AKS 自動升級未升級我所有的代理程式集區, 或其中一個集區是在維護期間外部升級?

    如果代理程式集區無法升級 (例如,由於 Pod 中斷預算導致無法升級),或處於失敗狀態,則可能會在維護期間之外稍後升級。 此案例稱為「趕上升級」,可避免讓 Agent 集區與 AKS 控制平面不同的版本。

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

    如果您使用 NodeImage 通道,建議您將節點 OS 安全性更新排程設定為每周頻率,因為當您選擇通道 SecurityPatch 接收每日安全性更新時,每周和每天都會發行新的節點映像。 將自動升級排程設定為每月頻率,以保持在 Kubernetes N-2 支援原則之上。 如需升級最佳做法和其他考量的詳細討論,請參閱 AKS 修補和升級指導

下一步