在 Azure Kubernetes 服务 (AKS) 中配置节点中断策略(预览版)

本文介绍如何配置和管理节点中断策略,以控制Azure Kubernetes 服务 (AKS)群集中何时允许需要节点重置映像和触发节点重新部署的操作。

先决条件

Important

AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

安装 aks-preview Azure CLI 扩展

  1. 使用 aks-preview 命令安装 az extension add 扩展。

    az extension add --name aks-preview
    
  2. 使用 az extension update 命令更新到扩展的最新版本。

    az extension update --name aks-preview
    

注册“节点中断策略”预览功能

使用 az feature register 命令注册节点中断策略预览功能。

az feature register --namespace “Microsoft.ContainerService“ --name ”NodeDisruptionProfile”

要过几分钟,状态才会显示为已注册

在新群集上配置节点中断策略

使用 az aks create 命令创建新的 AKS 群集,并将 --node-disruption-policy 参数设置为以下策略配置之一,以配置节点中断策略:Allow(默认值)、AllowDuringMaintenanceWindowBlock

随时允许中断操作(默认值)

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 3 \
    --node-disruption-policy Allow \
    --generate-ssh-keys

仅允许在维护时段内执行可能造成中断的操作

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 3 \
    --node-disruption-policy AllowDuringMaintenanceWindow \
    --generate-ssh-keys

Important

使用 AllowDuringMaintenanceWindow 时,请确保配置 aksManagedNodeOSUpgradeSchedule维护窗口。 否则,将无限期允许干扰性操作。 有关详细信息,请参阅使用计划内维护来计划和控制Azure Kubernetes 服务群集的升级

禁止所有干扰性操作

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 3 \
    --node-disruption-policy Block \
    --generate-ssh-keys

更新现有群集上的节点中断策略

使用 az aks update 命令,将 --node-disruption-policy 参数设置为以下策略配置之一,以更新现有 AKS 群集的节点中断策略:Allow(默认值)、AllowDuringMaintenanceWindowBlock

更改策略以在维护时段期间允许操作

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-disruption-policy AllowDuringMaintenanceWindow

更改策略以阻止所有中断性操作

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-disruption-policy Block

将策略改回为允许在任何时间进行操作

az aks update \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-disruption-policy Allow

验证节点中断策略配置

使用 az aks show 命令验证节点中断策略配置。

az aks show \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --query "nodeDisruptionProfile.nodeDisruptionPolicy" \
    --output tsv

输出显示当前策略设置,例如 AllowAllowDuringMaintenanceWindowBlock

处理被阻止的操作

当节点中断策略阻止中断操作时,可以 等待维护时段暂时更改策略

等待维护窗口

如果您使用 AllowDuringMaintenanceWindow,请将该操作安排在下一个维护窗口期间进行。 您可以使用 az aks maintenanceconfiguration list 命令查看已配置的维护时段。

az aks maintenanceconfiguration list \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster

暂时更改策略

  1. 使用 Allow 命令将 az aks update 设为 --node-disruption-policy,把策略更新为 Allow

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-disruption-policy Allow
    
  2. 执行中断性操作。 以下示例使用 az aks update 命令更新自定义 CA 证书:

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --custom-ca-trust-certificates <path-to-certificate-file>
    
  3. 使用 az aks update 命令还原原始策略。 以下示例还原 --node-disruption-policyBlock

    az aks update \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-disruption-policy Block
    

需要手动节点池升级的操作

节点中断策略 无法控制的 一些操作需要在进行任何配置更改后进行手动节点池升级。 这些操作包括:

  • SSH 配置更改,例如更改 SSH 访问方法或更新 SSH 公钥。
  • IMDS 限制更改,例如启用或禁用 IMDS 限制。
  • 网络隔离群集的引导配置文件 ACR 名称变更。
  • 出站类型更改,例如更改群集出口路由。

对于这些操作,在进行配置更改后,必须手动运行 az aks nodepool upgrade 命令。 例如:

az aks nodepool upgrade \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name <nodepool-name> \
    --node-image-only

有关节点中断策略涵盖的操作的详细信息,请参阅 节点中断策略概述

排查节点中断策略问题

操作被意外阻止

如果操作意外阻止,请使用以下步骤排查问题:

  1. 使用 az aks show 命令检查当前策略设置。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query "nodeDisruptionProfile.nodeDisruptionPolicy" \
        --output tsv
    
  2. 如果您使用 AllowDuringMaintenanceWindow,请使用 az aks maintenanceconfiguration show 命令来验证维护时段配置。

    az aks maintenanceconfiguration show \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name aksManagedNodeOSUpgradeSchedule
    
  3. 检查当前时间是否在维护时段内。

未配置维护时段

如果将该策略设为 AllowDuringMaintenanceWindow,但未配置维护窗口,则 允许执行所有中断性操作。

使用 az aks maintenanceconfiguration add 命令配置维护窗口。

az aks maintenanceconfiguration add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name aksManagedNodeOSUpgradeSchedule \
    --schedule-type Weekly \
    --day-of-week Sunday \
    --interval-weeks 1 \
    --duration 4 \
    --start-hour 2