你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

AKS 群集会自动进行定期维护。 有两种类型的定期维护 - AKS 发起的维护和由你发起的维护。 通过计划内维护功能,你可按照自己选择的节奏运行这两种类型的维护,从而最大程度地减少对工作负载的影响。

AKS 发起的维护是指 AKS 版本。 这些版本是每周发布的修补程序和功能及组件更新,这些内容会影响你的群集。 由你定期发起的维护类型是群集自动升级节点 OS 自动安全更新

本文介绍了可用的维护选项,以及如何为 AKS 群集配置维护日程安排。

概述

目前有三种可用的维护日程安排配置类型:defaultaksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeSchedule

  • default 对应的是用于控制 AKS 版本的基本配置,由于 Azure 安全部署做法 (SDP),这些版本从发布之初可能需要长达两周的时间才能推出到所有区域。 选择 default 可安排这些更新,使其对你造成的影响最小。 可通过每周版本跟踪器按区域监视正在进行的 AKS 发布的状态。

  • aksManagedAutoUpgradeSchedule 控制何时执行由指定的自动升级通道计划的群集升级。 与 default 配置相比,可以更精细地控制频率和定期设置。 有关群集自动升级的详细信息,请参阅自动升级 Azure Kubernetes 服务 (AKS) 群集

  • aksManagedNodeOSUpgradeSchedule 控制何时执行由节点 OS 自动升级通道计划的节点操作系统安全修补。 与默认配置相比,可以更精细地控制频率和定期设置。 有关节点 OS 自动升级通道的详细信息,请参阅自动修补和更新 AKS 群集节点映像

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

开始之前

本文假定你拥有现有的 AKS 群集。 如果没有 AKS 群集,有关设计 AKS 企业级实现的指导,请参阅规划 AKS 设计

请务必使用 az upgrade 将 Azure CLI 升级到最新版本。

创建维护时段

若要创建维护时段,可以使用 --name 值为 defaultaksManagedAutoUpgradeScheduleaksManagedNodeOSUpgradeScheduleaz aks maintenanceconfiguration add 命令。 名称值应反映所需的配置类型。 使用任何其他名称都会阻止维护时段运行。

注意

使用自动升级时,为了确保正常运行,请使用持续时间为 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

注意事项

使用计划内维护时,以下限制适用:

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

使用 Azure CLI 添加维护时段配置

以下示例显示了一个命令,用于添加一个新的 default 配置,该配置计划维护在每周一从凌晨 1:00 运行到凌晨 2:00:

az aks maintenanceconfiguration add -g myResourceGroup --cluster-name myAKSCluster --name default --weekday Monday --start-hour 1

注意

使用 default 配置类型时,若要允许在一天内随时进行维护,请省略 --start-time 参数。

以下示例显示了一个命令,用于添加一个新 aksManagedAutoUpgradeSchedule 配置,该配置计划维护在 UTC+5:30 时区中每第三个星期五凌晨 12:00 到上午 8:00 运行一次:

az aks maintenanceconfiguration add -g myResourceGroup --cluster-name myAKSCluster -n aksManagedAutoUpgradeSchedule --schedule-type Weekly --day-of-week Friday --interval-weeks 3 --duration 8 --utc-offset +05:30 --start-time 00:00

使用 JSON 文件添加维护时段配置

你还可以使用 JSON 文件(而不是使用参数)来创建维护配置。 此方法还有另一个好处,即允许在一系列日期(由 default 配置的 notAllowedTimes 以及 aksManagedAutoUpgradeSchedule 配置的 notAllowedDates 指定)期间防止进行维护。

创建具有以下内容的 default.json 文件:

{
  "timeInWeek": [
    {
      "day": "Tuesday",
      "hour_slots": [
        1,
        2
      ]
    },
    {
      "day": "Wednesday",
      "hour_slots": [
        1,
        6
      ]
    }
  ],
  "notAllowedTime": [
    {
      "start": "2021-05-26T03:00:00Z",
      "end": "2021-05-30T12:00:00Z"
    }
  ]
}

上述 JSON 文件将维护时段指定为每个星期二的凌晨 1:00 - 凌晨 3:00,以及每个星期三的凌晨 1:00 - 凌晨 2:00 以及上午 6:00 - 上午 7:00(UTC 时区)。 从 2021-05-26T03:00:00Z2021-05-30T12:00:00Z 还有一个例外时段,即使该时段与维护时段重叠,也不允许在该时段进行维护。

创建具有以下内容的 autoUpgradeWindow.json 文件:

{
  "properties": {
    "maintenanceWindow": {
        "schedule": {
            "absoluteMonthly": {
                "intervalMonths": 3,
                "dayOfMonth": 1
            }
        },
        "durationHours": 4,
        "utcOffset": "-08:00",
        "startTime": "09:00",
        "notAllowedDates": [
            {
                "start": "2023-12-23",
                "end": "2024-01-05"
            }
        ]
    }
  }
}

上述 JSON 文件将维护时段指定为每三个月一次,在当月第一天的上午 9:00 - 下午 1:00 进行(UTC-08 时区)。 从 2023-12-232024-01-05 还有一个例外时段,即使该时段与维护时段重叠,也不允许在该时段进行维护。

以下命令从 default.jsonautoUpgradeWindow.json 添加维护时段:

az aks maintenanceconfiguration add -g myResourceGroup --cluster-name myAKSCluster --name default --config-file ./test.json

az aks maintenanceconfiguration add -g myResourceGroup --cluster-name myAKSCluster --name aksManagedAutoUpgradeSchedule --config-file ./autoUpgradeWindow.json

更新现有的维护时段

若要更新现有的维护配置,请使用 az aks maintenanceconfiguration update 命令。

az aks maintenanceconfiguration update -g myResourceGroup --cluster-name myAKSCluster --name default --weekday Monday  --start-hour 2

在现有群集中列出所有维护时段

若要查看 AKS 群集中所有的当前维护配置时段,请使用 az aks maintenanceconfiguration list 命令。

az aks maintenanceconfiguration list -g myResourceGroup --cluster-name myAKSCluster

在 AKS 群集中显示特定的维护配置时段

若要查看 AKS 群集中的特定维护配置时段,请使用 az aks maintenanceconfiguration show 命令。

az aks maintenanceconfiguration show -g 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 群集中的某个维护配置时段

若要删除 AKS 群集中的某个维护配置时段,请使用 az aks maintenanceconfiguration delete 命令。

az aks maintenanceconfiguration delete -g myResourceGroup --cluster-name myAKSCluster --name autoUpgradeSchedule

常见问题

  • 如何检查群集中的现有维护配置?

    使用 az aks maintenanceconfiguration show 命令。

  • 计划外、反应性维护是否也能在 notAllowedTimenotAllowedDates 期间进行?

    是,对于紧急或关键的计划外、反应性维护操作,AKS 保留在这些时段外进行操作的权利。

  • 如何判断是否发生了维护事件?

    若要查看版本,请检查你的群集所在的区域,并在每周版本中查找版本信息,验证它是否与维护计划相匹配。 若要查看自动升级的状态,请在群集上查找活动日志。 还可查找升级 AKS 群集中所述的特定升级相关事件。 AKS 还会发出与升级相关的事件网格事件。 若要了解详细信息,请参阅充当事件网格源的 AKS

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

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

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

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

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

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

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

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

    如果你使用的是 NodeImage 通道,建议将节点 OS 安全更新计划设置为每周一次,因为每周都会发布一个新的节点映像;如果你选择使用 SecurityPatch 通道来接收每日安全更新,则设置为每日一次。 请将自动升级计划设置为每月一次,随时了解 kubernetes N-2 支持策略。 有关升级最佳做法和其他注意事项的详细讨论,请参阅 AKS 补丁和升级指南

后续步骤