Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
本文介绍如何在 Azure Kubernetes 服务 (AKS) 中使用计划内维护来计划和控制群集和节点映像升级。
对 AKS 群集的定期维护是自动进行的。 有两种类型的维护操作:
- AKS 发起的维护是指 AKS 每周执行的更新,以便更新群集以包含最新功能和修补程序。
- 用户发起的维护包括群集自动升级和节点操作系统 (OS) 自动安全更新。
使用 AKS 中的计划内维护功能时,可以按照自己选择的节奏运行两种类型的维护,以最大程度地减少工作负荷影响。
注意事项
可以使用计划内维护来计划自动升级的时间,但启用或禁用计划内维护不会启用或禁用自动升级。
开始之前
- 本文假定你拥有现有的 AKS 群集。 如果还没有 AKS 群集,请参阅创建 AKS 群集。
- 如果使用的是 Azure CLI,请使用
az upgrade命令升级到最新版本。
注意事项
使用计划内维护时,以下注意事项适用:
- 对于紧急或关键的计划外、反应性维护操作,AKS 保留在计划内维护时段外进行操作的权利。 这些维护操作甚至可以在配置中定义的
notAllowedTime或notAllowedDates期间运行。 - 我们会尽最大努力执行维护操作,但不保证在指定时段内执行。
计划内维护的调度配置类型
计划内维护可使用三种计划配置类型:
default是用于管理 AKS 版本的基本配置,包括控制层组件和系统加载项升级。 由于 Azure 安全部署做法,这些发布可能需要长达两周的时间才能推出到所有区域(从最初的发布时间算起)。选择
default可安排这些更新,使其对你造成的影响最小。 可使用每周发布跟踪器按区域监视正在进行的 AKS 发布的状态。aksManagedAutoUpgradeSchedule控制何时执行由指定的自动升级通道计划的群集升级。 与default配置相比,使用此配置可以更精细地控制节奏和重复设置。 有关群集自动升级的详细信息,请参阅自动升级 Azure Kubernetes 服务群集。aksManagedNodeOSUpgradeSchedule控制节点操作系统(OS)自动升级通道安排的安全修补的执行时间。 与default配置相比,使用此配置可以更精细地控制节奏和重复设置。 有关节点 OS 自动升级通道的详细信息,请参阅自动修补和更新 AKS 群集节点映像。
建议对所有群集 Kubernetes 版本升级方案以及aksManagedAutoUpgradeSchedule所有节点 OS 安全修补方案使用aksManagedNodeOSUpgradeSchedule。
default 选项专用于 AKS 的每周发布。
default如果要控制 AKS 控制平面组件的升级计划(如 API 服务器、ETCD 等)和加载项(如 CoreDNS、Metrics Server 等)。
所有三种类型的配置都可以共存。
创建维护窗口
注意事项
使用自动升级时,为了确保功能正常,请使用持续时间至少为 4 小时的维护时段。
注意事项
从 2023-05-01 API 版本开始,请使用下表中的属性进行 default 配置。
从 2023-05-01 API 版本开始,aksManagedAutoUpgradeSchedule 或 aksManagedNodeOSUpgradeSchedule 的维护时段和 default 配置具有以下属性:
| 名称 | 说明 | 默认值 |
|---|---|---|
utcOffset |
群集维护的时间区域。 | +00:00 |
startDate |
维护时段开始生效的日期。 | 创建时的当前日期 |
startTime |
维护开始的时间,基于由 utcOffset 确定的时区。 |
不适用 |
schedule |
升级频率。 提供三种类型:Weekly、AbsoluteMonthly 和 RelativeMonthly。 |
不适用 |
intervalDays |
维护运行的间隔(以天为单位)。 它仅适用于 aksManagedNodeOSUpgradeSchedule。 |
不适用 |
intervalWeeks |
维护运行的间隔(以周为单位)。 | 不适用 |
intervalMonths |
维护运行的间隔(以月为单位)。 | 不适用 |
dayOfWeek |
要开始维护的一周中的指定某一天。 | 不适用 |
durationHours |
维护操作的时间窗口的持续时间。 | 不适用 |
notAllowedDates |
维护无法运行的日期范围,由 start 和 end 子属性确定。 仅当你使用配置文件创建维护窗口时,它才适用。 |
不适用 |
已弃用的属性
注意事项
如果使用以下已弃用的属性创建 default 配置,它会自动迁移到上表中所示的新属性。
[已弃用]default维护时段具有以下旧属性:
| 名称 | 说明 | 默认值 |
|---|---|---|
timeInWeek |
在 default 配置中,此属性包含定义维护时段的 day 和 hourSlots 值。 |
不适用 |
timeInWeek.day |
default 配置中要执行维护的一周中的某一天。 |
不适用 |
timeInWeek.hourSlots |
在default配置中,列出特定日子用于执行维护的小时级时间段。 |
不适用 |
notAllowedTime |
维护无法运行的日期范围,由 start 和 end 子属性确定。 仅当你使用配置文件创建维护窗口时,此属性才适用。 |
不适用 |
计划类型
支持四种计划类型: Daily、 Weekly、 AbsoluteMonthly和 RelativeMonthly。
下表显示了每种维护配置选项可用的类型:
| 计划类型 | default |
aksManagedClusterAutoUpgradeSchedule |
aksManagedNodeOSUpgradeSchedule |
|---|---|---|---|
| 每日 | 支持 ❌ | ✅ 支持(2025 年 6 月之后) | 已支持 ✅ |
| 每周 | 已支持 ✅ | 已支持 ✅ | 已支持 ✅ |
| AbsoluteMonthly | 支持 ❌ | 已支持 ✅ | 已支持 ✅ |
| RelativeMonthly | 支持 ❌ | 已支持 ✅ | 已支持 ✅ |
为每个计划类型显示的所有字段都是必填字段。
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 的有效值包括 First、Second、Third、Fourth 和 Last。
添加维护时段配置
使用 az aks maintenanceconfiguration add 命令将维护窗口配置添加到 AKS 群集。
第一个示例添加了一个新的 default 配置,该配置安排每周一凌晨1:00到5:00在UTC时区进行维护。 第二个示例添加一个新的 aksManagedAutoUpgradeSchedule 配置,该配置计划的维护每三周进行一次,在星期五的凌晨 0:00 到上午 8:00 之间运行(UTC+5:30 时区)。
# Add a new default configuration
az aks maintenanceconfiguration add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name default --schedule-type Weekly --day-of-week Monday --interval-weeks 1 --duration 4 --utc-offset +00:00 --start-time 01:00
# Add a new aksManagedAutoUpgradeSchedule configuration
az aks maintenanceconfiguration add --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name aksManagedAutoUpgradeSchedule --schedule-type Weekly --day-of-week Friday --interval-weeks 3 --duration 8 --utc-offset +05:30 --start-time 00:00
更新现有的维护时段
使用 az aks maintenanceconfiguration update 命令更新现有维护配置。
以下示例将 default 配置更新为安排每周五凌晨 2:00 到 6:00 进行的维护操作:
az aks maintenanceconfiguration update --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name default --schedule-type Weekly --day-of-week Friday --interval-weeks 1 --duration 4 --utc-offset +00:00 --start-time 02:00
在现有群集中列出所有维护时段
使用 az aks maintenanceconfiguration list 以下命令列出 AKS 群集中的当前维护配置窗口:
az aks maintenanceconfiguration list --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME
显示现有群集中的特定维护配置窗口
使用带有参数的 az aks maintenanceconfiguration show 命令 --name 在 AKS 群集中查看特定的维护配置窗口:
az aks maintenanceconfiguration show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --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 $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name autoUpgradeSchedule
常见问题 (FAQ)
如何检查群集中的现有维护配置?
使用 az aks maintenanceconfiguration show 命令。
在notAllowedDates期间是否也可能发生反应性和非计划性的维护?
是的。 对于紧急或关键的计划外、反应性维护操作,AKS 保留在这些时段外进行操作的权利。
如何判断是否发生了维护事件?
对于发布,请检查群集的区域并在每周发布中查找信息,看它是否与维护计划匹配。 若要查看自动升级的状态,请在群集上查找活动日志。 还可查找升级 AKS 群集中所述的与升级相关的特定事件。
是否可以同时使用多种维护配置?
是的,可以同时运行所有三种配置:default、aksManagedAutoUpgradeSchedule 和 aksManagedNodeOSUpgradeSchedule。 如果窗口重叠,AKS 会决定运行顺序。
我配置了维护时段,但升级没有进行。 为什么?
考虑到维护时段,AKS 自动升级需要一定的时间(通常不超过 15 分钟)。 建议在创建或更新维护配置与计划启动时间之间至少间隔 15 分钟。
此外,请确保在计划内维护时段开始时启动群集。 如果群集已停止,则会解除其控制平面的分配,不允许执行任何操作。
为什么我的一个代理池在维护时段之外被升级了?
如果代理池因故未升级(例如,Pod 中断预算阻止其升级),则稍后可能会在维护时段之外对其进行升级。 此方案称为 追赶升级。 这可防止将智能体池升级到与 AKS 控制平面不同的版本。
代理池意外升级的另一个原因是没有定义的维护配置或已删除。 在这种情况下,具有自动升级 但没有维护配置的 群集会在随机时间(回退计划)进行升级,这可能是一个不需要的时间范围。
对于维护配置,是否有任何最佳做法?
如果你使用的是通道,建议将节点操作系统安全更新计划设置为每周一次,因为每周都会发布一个新的节点操作系统映像。 也可选择使用 SecurityPatch 通道来接收每日安全更新.
可以将 自动升级 计划设置为每月节奏,以随时了解 Kubernetes N-2 支持策略。
是否可以将单个订阅中的所有群集配置为使用相同的维护配置?
不建议对单个订阅中的多个群集使用相同的维护配置,因为这样做可能会导致 ARM 限制错误,从而导致群集升级失败。 相反,我们建议错开每个群集的维护时段,以避免这些错误。
为什么在同一维护时段内,节点池升级了两次?
如果在维护时段内提供较新版本的节点映像,AKS 将执行第二次升级,以确保节点池正在运行最新版本。 此行为正常,并不指示问题。
相关内容
若要开始升级 AKS 群集,请参阅 AKS 群集的升级选项。