使用计划内维护来计划和控制 Azure Kubernetes 服务 (AKS) 群集的升级

本文介绍如何在 Azure Kubernetes 服务 (AKS) 中使用计划内维护来安排和控制群集和节点映像升级。

AKS 群集会自动进行定期维护。 有两种类型的维护操作:AKS 发起的维护和用户发起的维护。 AKS 发起的维护涉及 AKS 执行的用于使群集保持最新功能和修补程序的每周发布。 用户发起的维护包括群集自动升级节点 OS 自动安全更新。 通过计划内维护功能,你可按照自己选择的节奏运行这两种类型的维护,从而最大程度地减少对工作负载的影响。

开始之前

  • 本文假定你拥有现有的 AKS 群集。 如果还没有 AKS 群集,请参阅创建 AKS 群集
  • 如果使用 Azure CLI,请确保通过 az upgrade 命令升级到最新版本。

注意事项

使用计划内维护时,以下约束适用:

  • 对于紧急或关键的计划外/反应性维护操作,AKS 保留在计划内维护时段外进行操作的权利。 这些维护操作甚至可以在配置中定义的 notAllowedTimenotAllowedDates 期间运行。
  • 我们会尽最大努力执行维护操作,但不保证在指定时段内执行。

计划内维护计划配置

有三种可用的维护计划配置类型:defaultaksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule

  • default 是用于控制 AKS 版本的基本配置。 由于 Azure 安全部署做法 (SDP),这些版本可能需要长达两周的时间才能从发布之初开始推出到所有区域。 选择 default 可安排这些更新,使其对你造成的影响最小。 可使用每周版本跟踪器按区域监视正在进行的 AKS 发布的状态。
  • aksManagedAutoUpgradeSchedule 控制何时执行由指定的自动升级通道计划的群集升级。 与 default 配置相比,使用此设置可以配置控制更加精细的节奏和重复设置。�有关群集自动升级的详细信息,请参阅自动升级 Azure Kubernetes 服务 (AKS) 群集
  • aksManagedNodeOSUpgradeSchedule 控制何时执行由节点操作系统 (OS) 自动升级通道计划的节点 OS 安全修补。 与 default 配置相比,使用此配置可以更精细地控制频率和定期设置。 有关节点 OS 自动升级通道的详细信息,请参阅自动修补和更新 AKS 群集节点映像

建议对所有群集升级方案使用 aksManagedAutoUpgradeSchedule,对所有节点 OS 安全修补方案使用 aksManagedNodeOSUpgradeScheduledefault 专用于 AKS 每周发布。 可以使用 az aks maintenanceconfiguration update 命令将 default 配置切换到 aksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 配置。

创建维护时段

注意

使用自动升级时,为了确保正常运行,请使用持续时间为 4 小时或 4 小时以上的维护时段。

计划内维护时段以协调世界时 (UTC) 方式指定。

default 维护时段具有以下属性:

名称 说明 默认值
timeInWeek default 配置中,此属性包含定义维护时段的 dayhourSlots 空值
timeInWeek.day default 配置中要执行维护的一周中的某一天 空值
timeInWeek.hourSlots default 配置中要在给定一天执行维护的小时长的时间槽列表 空值
notAllowedTime 指定维护无法运行的日期范围,由 startend 子属性确定。 仅在使用配置文件创建维护时段时适用 空值

aksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule 维护时段具有以下属性:

名称 说明 默认值
utcOffset 用于确定群集维护的时区 +00:00
startDate 维护时段开始生效的日期 创建时的当前日期
startTime 维护开始的时间,基于由 utcOffset 确定的时区 空值
schedule 用于确定频率。 提供有三种类型:WeeklyAbsoluteMonthlyRelativeMonthly 空值
intervalDays 维护运行的间隔(以天为单位)。 仅适用于 aksManagedNodeOSUpgradeSchedule 空值
intervalWeeks 维护运行的间隔(以周为单位) 空值
intervalMonths 维护运行的间隔(以月为单位) 空值
dayOfWeek 要开始维护的指定一周中的某一天 空值
durationHours 要运行维护的时段的持续时间 空值
notAllowedDates 指定维护无法运行的日期范围,由 startend 子属性确定。 仅在使用配置文件创建维护时段时适用 空值

了解计划类型

有四种可用的计划类型:DailyWeeklyAbsoluteMonthlyRelativeMonthly。 这些计划类型仅适用于 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
}

删除现有群集中的维护配置时段

  • 使用 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 群集中所述的特定升级相关事件。

  • 是否可以同时使用多个维护配置?

    是,可以同时运行所有三种配置,即 defaultaksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule。 如果时段重叠,AKS 会决定运行顺序。

  • 我配置了维护时段,但升级没有进行 - 为什么?

    AKS 自动升级需要一定的时间(考虑到维护时段)。 建议在创建/更新维护配置与计划启动时间之间至少间隔 24 小时。

    此外,请确保在计划内维护时段启动时启动群集。 如果群集已停止,则会解除其控制平面分配,并且无法执行任何操作。

  • AKS 自动升级未升级我的所有代理池 - 是否其中一个池是在维护时段之外升级的?

    如果代理池因故无法升级(例如,Pod 中断预算阻止其升级)或处于“失败”状态,则稍后可能会在维护时段之外对其进行升级。 此方案称为“弥补升级”,避免让代理池使用与 AKS 控制平面不同的版本。

  • 对于维护配置,是否有任何最佳做法?

    如果你使用的是 NodeImage 通道,建议将节点 OS 安全更新计划设置为每周一次,因为每周都会发布一个新的节点映像;如果你选择使用 SecurityPatch 通道来接收每日安全更新,则设置为每日一次。 请将自动升级计划设置为每月一次,随时了解 kubernetes N-2 支持策略

后续步骤