Azure Kubernetes 服务(AKS)中节点自动预配(NAP)的节点映像更新

本文概述了 Azure Kubernetes 服务(AKS)中节点自动预配(NAP)的节点映像更新,包括工作原理、建议的维护时段和入门示例。

节点映像更新如何适用于节点自动预配节点?

默认情况下,当新的映像版本可用时,NAP 节点池虚拟机(VM)会自动更新。 可以配置 AKS 管理的节点操作系统(OS)升级计划维护时间窗 ,以控制何时选取新映像并将其应用于 NAP 节点,或使用 Karpenter Node Disruption Budgets 和 Pod Disruption Budgets 来控制升级期间发生中断的时间和方式。

注释

如果现有节点映像版本超过 90 天,NAP 会强制选取最新的映像版本。 这会绕过任何现有的维护时段。

NAP 节点操作系统升级的维护时段

可以将 AKS 计划内维护功能节点 OS 自动升级通道 配合使用来配置 aksManagedNodeOSUpgradeSchedule 维护时段,该时段控制何时执行指定的节点 OS 自动升级通道计划节点 OS 安全修补。

节点操作系统升级维护窗口的行为和注意事项

为 NAP 配置节点 OS 升级维护时段时,请记住以下信息:

  • 维护 aksManagedNodeOSUpgradeSchedule 配置确定 NAP 选取新映像的时段。 此配置不一定确定现有节点何时中断。
  • 升级机制和决策标准特定于 NAP/Karpenter,并由 NAP 的偏移逻辑进行评估。 NAP 尊重 Karpenter 节点的中断预算和 Pod 的中断预算。 有关偏移的详细信息,请参阅 Karpenter 偏移文档
  • 这些 NAP 升级决策独立于群集 NodeImageSecurityPatch 通道。 但是,aksManagedNodeOSUpgradeSchedule 维护配置也会将其应用。
  • 建议使用不少于 4 小时的维护时段以确保可靠运行。
  • 如果没有维护配置设置,AKS 可能会使用备用计划来选取新映像,这可能导致在不期望的时间选取映像。 可以通过定义显式 aksManagedNodeOSUpgradeSchedule来避免新映像和升级的意外时机。
  • 在创建或更新维护配置与计划开始时间之间至少允许 30 分钟,以确保 AKS 有时间协调新配置。

建议对 NAP 托管节点使用以下计划模式:

  • 每周节奏:建议用于定期节点映像推出(例如:每周星期日)。

创建节点 OS 维护计划示例

以下部分介绍如何使用 Azure CLI 和 JSON 配置文件为 NAP 托管节点创建每周维护时段,以及如何更新、查看、列出和删除维护配置。

创建维护配置

  1. 创建一个名为 nodeosMaintenance.json 的 JSON 文件,其中包含每周的维护时段(例如:星期日 01:00 UTC,持续 4 小时)。

    {
      "properties": {
        "maintenanceWindow": {
          "durationHours": 4,
          "schedule": {
            "weekly": {
              "intervalWeeks": 1,
              "dayOfWeek": "Sunday"
            }
          },
          "startDate": "2025-01-01",
          "startTime": "01:00",
          "utcOffset": "+00:00"
        }
      }
    }
    
  2. 使用 az aks maintenanceconfiguration add 命令将维护配置添加到群集。

    az aks maintenanceconfiguration add \
      --resource-group $RESOURCE_GROUP \
      --cluster-name $CLUSTER_NAME \
      --name aksManagedNodeOSUpgradeSchedule \
      --config-file ./nodeosMaintenance.json
    

更新、查看、列出或删除维护配置

可以使用以下命令更新、查看、列出或删除 NAP 托管节点的维护配置:

  • 通过修改 JSON 文件,然后运行 az aks maintenanceconfiguration update 命令来更新维护配置。

    az aks maintenanceconfiguration update \
      --resource-group $RESOURCE_GROUP \
      --cluster-name $CLUSTER_NAME \
      --name aksManagedNodeOSUpgradeSchedule \
      --config-file ./nodeosMaintenance.json
    
  • 使用 az aks maintenanceconfiguration show 命令查看维护配置的详细信息。

    az aks maintenanceconfiguration show \
      --resource-group $RESOURCE_GROUP \
      --cluster-name $CLUSTER_NAME \
      --name aksManagedNodeOSUpgradeSchedule
    
  • 使用 az aks maintenanceconfiguration list 命令列出群集的所有维护配置。

    az aks maintenanceconfiguration list \
      --resource-group $RESOURCE_GROUP \
      --cluster-name $CLUSTER_NAME
    
  • 使用 az aks maintenanceconfiguration delete 命令删除维护配置。

    az aks maintenanceconfiguration delete \
      --resource-group $RESOURCE_GROUP \
      --cluster-name $CLUSTER_NAME \
      --name aksManagedNodeOSUpgradeSchedule
    

有关完整的详细信息、示例和高级方案,请参阅 使用计划维护为 AKS 群集安排维护时段

Karpenter 节点中断预算和 NAP 的 Pod 中断预算

有关为 NAP 配置 Karpenter 节点中断预算和 Pod 中断预算的详细信息,请参阅官方 Karpenter 文档中的以下资源:

后续步骤

有关 AKS 中的节点自动预配的详细信息,请参阅以下文章: