共用方式為

Azure Kubernetes 服务通信管理器

Azure Kubernetes 服务(AKS)通信管理器使用 Azure 资源通知和 Azure Resource Graph 框架简化了所有 AKS 维护任务的通知。 借助此工具,你可以密切监视升级,因为它提供了有关事件触发器和结果的及时警报。 如果维护失败,它会通知你故障原因,减少与可观测性和跟进相关的操作麻烦。 可以按照以下步骤为利用维护时段的所有类型的自动升级设置通知。

先决条件

注释

设置后,通信管理器会发送提前通知 - 维护开始前一周,在维护开始前一天。 这是除了在维护操作期间及时发出警报之外的操作。

如何设置通信管理器

  1. 转到资源,然后选择“监视”并选择“警报”,然后单击“警报规则”。

  2. 警报的条件应该是自定义日志搜索。

    警报规则边栏中自定义日志搜索的屏幕截图。

  3. 在打开的“搜索查询”框中,粘贴以下自定义查询之一,然后单击“审阅+创建”按钮。

查询群集自动升级通知

containerserviceeventresources
| where type == "microsoft.containerservice/managedclusters/scheduledevents"
| where id contains "/subscriptions/<subid>/resourcegroups/<rgname>/providers/Microsoft.ContainerService/managedClusters/<clustername>"
| where properties has "eventStatus"
| extend status = substring(properties, indexof(properties, "eventStatus") + strlen("eventStatus") + 3, 50)
| extend status = substring(status, 0, indexof(status, ",") - 1)
| where status != ""
| where properties has "eventDetails"
| extend upgradeType = case(
                           properties has "K8sVersionUpgrade",
                           "K8sVersionUpgrade",
                           properties has "NodeOSUpgrade",
                           "NodeOSUpgrade",
                           ""
                       )
| extend details = parse_json(tostring(properties.eventDetails))
| where properties has "lastUpdateTime"
| extend eventTime = substring(properties, indexof(properties, "lastUpdateTime") + strlen("lastUpdateTime") + 3, 50)
| extend eventTime = substring(eventTime, 0, indexof(eventTime, ",") - 1)
| extend eventTime = todatetime(tostring(eventTime))
| where eventTime >= ago(2h)
| where upgradeType == "K8sVersionUpgrade"
| project
    eventTime,
    upgradeType,
    status,
    properties,
    name,
    details
| order by eventTime asc

查询节点 OS 自动升级通知

containerserviceeventresources
| where type == "microsoft.containerservice/managedclusters/scheduledevents"
| where id contains "/subscriptions/<subid>/resourcegroups/<rgname>/providers/Microsoft.ContainerService/managedClusters/<clustername>"
| where properties has "eventStatus"
| extend status = substring(properties, indexof(properties, "eventStatus") + strlen("eventStatus") + 3, 50)
| extend status = substring(status, 0, indexof(status, ",") - 1)
| where status != ""
| where properties has "eventDetails"
| extend upgradeType = case(
                           properties has "K8sVersionUpgrade",
                           "K8sVersionUpgrade",
                           properties has "NodeOSUpgrade",
                           "NodeOSUpgrade",
                           ""
                       )
| extend details = parse_json(tostring(properties.eventDetails))
| where properties has "lastUpdateTime"
| extend eventTime = substring(properties, indexof(properties, "lastUpdateTime") + strlen("lastUpdateTime") + 3, 50)
| extend eventTime = substring(eventTime, 0, indexof(eventTime, ",") - 1)
| extend eventTime = todatetime(tostring(eventTime))
| where eventTime >= ago(2h)
| where upgradeType == "NodeOSUpgrade"
| project
    eventTime,
    upgradeType,
    status,
    properties,
    name,
    details
| order by eventTime asc
  1. 使用以下设置配置警报条件:
    • 度量:选择“表行”
    • 聚合:选择“计数”
    • 聚合粒度:选择“30 分钟”
    • 阈值:保留为 0
    • 按维度拆分:选择“状态”,然后选择“包括所有未来值”

警报条件的配置选项的屏幕截图。

  1. “按维度拆分 ”下拉列表中选择“状态”时,可用值为:“计划”、“已启动”、“已完成”、“已取消”和“失败”。

    注释

    仅当群集之前已执行自动升级作时,才会显示这些状态值。 对于尚未进行自动升级的新群集或群集,下拉列表可能显示为空或未显示任何可用维度。 群集执行第一次自动升级后,这些状态值将可供选择。

“按维度拆分”下拉菜单的屏幕截图。

  1. 检查是否存在具有正确电子邮件地址的操作组来接收通知。

输入适当的电子邮件或短信到操作组的过程截图。

  1. 分配托管系统标识:创建警报规则后,分配托管标识,以便它可以访问所需的资源。 在创建警报规则后执行此步骤,而不是在初始设置期间执行。 若要分配托管标识,请:

    • 在 Azure 门户中,转到 “监视>警报>警报规则”,然后选择警报规则。
    • 在警报规则窗格中的 “设置”下,选择“ 标识”。
    • 系统分配的托管标识 设置为 On
    • 单击“ 保存 ”以启用警报规则的托管标识。

    分配托管系统标识的位置的屏幕截图。

    小窍门

    如果未看到“标识”选项,请确保已创建警报规则,并且你具有必要的权限。 创建警报规则后,分配托管标识始终是单独的步骤。

  2. 请确保分配相应的阅读者角色。

    在警报规则中,转到 “设置>标识>系统分配的托管标识>Azure 角色分配>添加角色分配”。

    选择 “读取者 ”角色并将其分配给资源组。 如有需要,请为订阅重复“添加角色分配”。

    注释

    设置通信管理器后,它会在维护开始前一周和维护开始前一天发送提前通知。 它还会在维护操作时及时发送警报。

设置通信管理器

  1. 转到资源,选择“ 监视”,选择“ 警报”,然后选择“ 警报规则”。

  2. “条件 ”选项卡上,选择 “信号名称”,选择“ 自定义日志搜索”。

    显示警报规则窗格中自定义日志搜索的屏幕截图。

  3. “搜索查询 ”框中,粘贴以下自定义查询之一,然后选择“ 查看+创建 ”按钮。

    以下查询适用于群集自动升级通知:

     arg("").containerserviceeventresources
     | where type == "microsoft.containerservice/managedclusters/scheduledevents"
     | where id contains "/subscriptions/<subid>/resourcegroups/<rgname>/providers/Microsoft.ContainerService/managedClusters/<clustername>"
     | where properties has "eventStatus"
     | extend status = substring(properties, indexof(properties, "eventStatus") + strlen("eventStatus") + 3, 50)
     | extend status = substring(status, 0, indexof(status, ",") - 1)
     | where status != ""
     | where properties has "eventDetails"
     | extend upgradeType = case(
                                properties has "K8sVersionUpgrade",
                                "K8sVersionUpgrade",
                                properties has "NodeOSUpgrade",
                                "NodeOSUpgrade",
                                ""
                            )
     | extend details = parse_json(tostring(properties.eventDetails))
     | where properties has "lastUpdateTime"
     | extend eventTime = substring(properties, indexof(properties, "lastUpdateTime") + strlen("lastUpdateTime") + 3, 50)
     | extend eventTime = substring(eventTime, 0, indexof(eventTime, ",") - 1)
     | extend eventTime = todatetime(tostring(eventTime))
     | where eventTime >= ago(2h)
     | where upgradeType == "K8sVersionUpgrade"
     | project
         eventTime,
         upgradeType,
         status,
         properties,
         name,
         details
     | order by eventTime asc
    

    以下查询适用于 Node OS 自动升级通知:

     arg("").containerserviceeventresources
     | where type == "microsoft.containerservice/managedclusters/scheduledevents"
     | where id contains "/subscriptions/<subid>/resourcegroups/<rgname>/providers/Microsoft.ContainerService/managedClusters/<clustername>"
     | where properties has "eventStatus"
     | extend status = substring(properties, indexof(properties, "eventStatus") + strlen("eventStatus") + 3, 50)
     | extend status = substring(status, 0, indexof(status, ",") - 1)
     | where status != ""
     | where properties has "eventDetails"
     | extend upgradeType = case(
                                properties has "K8sVersionUpgrade",
                                "K8sVersionUpgrade",
                                properties has "NodeOSUpgrade",
                                "NodeOSUpgrade",
                                ""
                            )
     | extend details = parse_json(tostring(properties.eventDetails))
     | where properties has "lastUpdateTime"
     | extend eventTime = substring(properties, indexof(properties, "lastUpdateTime") + strlen("lastUpdateTime") + 3, 50)
     | extend eventTime = substring(eventTime, 0, indexof(eventTime, ",") - 1)
     | extend eventTime = todatetime(tostring(eventTime))
     | where eventTime >= ago(2h)
     | where upgradeType == "NodeOSUpgrade"
     | project
         eventTime,
         upgradeType,
         status,
         properties,
         name,
         details
     | order by eventTime asc
    
  4. 间隔应为 30 分钟,阈值应为 1。

  5. 确保存在具有正确电子邮件地址的作组,以便你能够接收通知。

  6. 确保将“读取”角色授予资源组以及日志搜索警报规则的托管标识订阅。

  7. 转到警报规则:“设置”>“标识”>“系统分配的托管标识”>“Azure 角色分配”>“添加角色分配”。

  8. 选择 “读取者 ”角色并将其分配给资源组。 为订阅重复“添加角色分配”

验证

若要升级群集,请等待自动升级程序启动。 然后,验证是否在配置为接收通知的电子邮件上及时收到通知。

检查 Azure Resource Graph 数据库中的计划通知记录。 每个计划的事件通知都应列为表中的一条记录 containerserviceeventresources

显示如何查找 Azure Resource Graph 的屏幕截图。