你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用计划内维护来计划和控制 Azure Kubernetes 服务 (AKS) 群集的升级
AKS 群集会自动进行定期维护。 有两种类型的定期维护 - AKS 发起的维护和由你发起的维护。 通过计划内维护功能,你可按照自己选择的节奏运行这两种类型的维护,从而最大程度地减少对工作负载的影响。
AKS 发起的维护是指 AKS 版本。 这些版本是每周发布的修补程序和功能及组件更新,这些内容会影响你的群集。 由你定期发起的维护类型是群集自动升级和节点 OS 自动安全更新。
本文介绍了可用的维护选项,以及如何为 AKS 群集配置维护日程安排。
概述
目前有三种可用的维护日程安排配置类型:default
、aksManagedAutoUpgradeSchedule
和 aksManagedNodeOSUpgradeSchedule
:
default
对应的是用于控制 AKS 版本的基本配置,由于 Azure 安全部署做法 (SDP),这些版本从发布之初可能需要长达两周的时间才能推出到所有区域。 选择default
可安排这些更新,使其对你造成的影响最小。 可通过每周版本跟踪器按区域监视正在进行的 AKS 发布的状态。aksManagedAutoUpgradeSchedule
控制何时执行由指定的自动升级通道计划的群集升级。 与default
配置相比,可以更精细地控制频率和定期设置。 有关群集自动升级的详细信息,请参阅自动升级 Azure Kubernetes 服务 (AKS) 群集。aksManagedNodeOSUpgradeSchedule
控制何时执行由节点 OS 自动升级通道计划的节点操作系统安全修补。 与默认配置相比,可以更精细地控制频率和定期设置。 有关节点 OS 自动升级通道的详细信息,请参阅自动修补和更新 AKS 群集节点映像
建议对所有群集升级方案使用 aksManagedAutoUpgradeSchedule
,对所有节点 OS 安全修补方案使用 aksManagedNodeOSUpgradeSchedule
。 default
专用于 AKS 每周发布。 可以使用 az aks maintenanceconfiguration update
命令将 default
配置切换到 aksManagedAutoUpgradeSchedule
或 aksManagedNodeOSUpgradeSchedule
配置。
开始之前
本文假定你拥有现有的 AKS 群集。 如果没有 AKS 群集,有关设计 AKS 企业级实现的指导,请参阅规划 AKS 设计。
请务必使用 az upgrade
将 Azure CLI 升级到最新版本。
创建维护时段
若要创建维护时段,可以使用 --name
值为 default
、aksManagedAutoUpgradeSchedule
或 aksManagedNodeOSUpgradeSchedule
的 az aks maintenanceconfiguration add
命令。 名称值应反映所需的配置类型。 使用任何其他名称都会阻止维护时段运行。
注意
使用自动升级时,为了确保正常运行,请使用持续时间为 4 小时或 4 小时以上的维护时段。
计划内维护时段以协调世界时 (UTC) 方式指定。
default
维护时段具有以下属性:
名称 | 说明 | 默认值 |
---|---|---|
timeInWeek |
在 default 配置中,此属性包含定义维护时段的 day 和 hourSlots 值 |
空值 |
timeInWeek.day |
default 配置中要执行维护的一周中的某一天 |
空值 |
timeInWeek.hourSlots |
default 配置中要在给定一天执行维护的小时长的时间槽列表 |
空值 |
notAllowedTime |
指定维护无法运行的日期范围,由 start 和 end 子属性确定。 仅在使用配置文件创建维护时段时适用 |
空值 |
aksManagedAutoUpgradeSchedule
或 aksManagedNodeOSUpgradeSchedule
维护时段具有以下属性:
名称 | 说明 | 默认值 |
---|---|---|
utcOffset |
用于确定群集维护的时区 | +00:00 |
startDate |
维护时段开始生效的日期 | 创建时的当前日期 |
startTime |
维护开始的时间,基于由 utcOffset 确定的时区 |
空值 |
schedule |
用于确定频率。 提供有三种类型:Weekly 、AbsoluteMonthly 和 RelativeMonthly |
空值 |
intervalDays |
维护运行的间隔(以天为单位)。 仅适用于 aksManagedNodeOSUpgradeSchedule |
空值 |
intervalWeeks |
维护运行的间隔(以周为单位) | 空值 |
intervalMonths |
维护运行的间隔(以月为单位) | 空值 |
dayOfWeek |
要开始维护的指定一周中的某一天 | 空值 |
durationHours |
要运行维护的时段的持续时间 | 空值 |
notAllowedDates |
指定维护无法运行的日期范围,由 start 和 end 子属性确定。 仅在使用配置文件创建维护时段时适用 |
空值 |
了解计划类型
目前有四种可用的计划类型:Daily
、Weekly
、AbsoluteMonthly
和 RelativeMonthly
。 这些计划类型仅适用于 aksManagedClusterAutoUpgradeSchedule
和 aksManagedNodeOSUpgradeSchedule
配置。 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
的有效值为 First
、Second
、Third
、Fourth
和 Last
。
注意事项
使用计划内维护时,以下限制适用:
- 对于紧急或关键的计划外、反应性维护操作,AKS 保留在这些时段外进行操作的权利。 这些维护操作甚至可以在配置中定义的
notAllowedTime
或notAllowedDates
期间运行。 - 我们会尽最大努力执行维护操作,但不保证在指定时段内执行。
使用 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:00Z
到 2021-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-23
到 2024-01-05
还有一个例外时段,即使该时段与维护时段重叠,也不允许在该时段进行维护。
以下命令从 default.json
和 autoUpgradeWindow.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
命令。计划外、反应性维护是否也能在
notAllowedTime
或notAllowedDates
期间进行?是,对于紧急或关键的计划外、反应性维护操作,AKS 保留在这些时段外进行操作的权利。
如何判断是否发生了维护事件?
若要查看版本,请检查你的群集所在的区域,并在每周版本中查找版本信息,验证它是否与维护计划相匹配。 若要查看自动升级的状态,请在群集上查找活动日志。 还可查找升级 AKS 群集中所述的特定升级相关事件。 AKS 还会发出与升级相关的事件网格事件。 若要了解详细信息,请参阅充当事件网格源的 AKS。
是否可以同时使用多个维护配置?
是,可以同时运行所有三种配置,即
default
、aksManagedAutoUpgradeSchedule
和aksManagedNodeOSUpgradeSchedule
。 如果时段重叠,AKS 会决定运行顺序。我配置了维护时段,但升级没有进行 - 为什么?
AKS 自动升级需要一定的时间(考虑到维护时段)。 建议在创建/更新维护配置与计划启动时间之间至少间隔 24 小时。
此外,请确保在计划内维护时段启动时启动群集。 如果群集已停止,则会解除其控制平面分配,并且无法执行任何操作。
AKS 自动升级未升级我的所有代理池 - 是否其中一个池是在维护时段之外升级的?
如果代理池因故无法升级(例如,Pod 中断预算阻止其升级)或处于“失败”状态,则稍后可能会在维护时段之外对其进行升级。 此方案称为“弥补升级”,避免让代理池使用与 AKS 控制平面不同的版本。
对于维护配置,是否有任何最佳做法?
如果你使用的是
NodeImage
通道,建议将节点 OS 安全更新计划设置为每周一次,因为每周都会发布一个新的节点映像;如果你选择使用SecurityPatch
通道来接收每日安全更新,则设置为每日一次。 请将自动升级计划设置为每月一次,随时了解 kubernetes N-2 支持策略。 有关升级最佳做法和其他注意事项的详细讨论,请参阅 AKS 补丁和升级指南。
后续步骤
- 若要开始升级 AKS 群集,请参阅升级 AKS 群集