设置 Azure Kubernetes 服务通信管理器

Azure Kubernetes 服务(AKS)通信管理器使用 Azure 资源通知和 Azure Resource Graph 框架简化了所有 AKS 维护任务的通知。 通信管理器提供针对事件触发器和结果的及时警报,以便可以密切监视升级。

如果维护失败,通信管理器会通知你失败的原因。 此信息可减少与可观察性和后续措施相关的麻烦。

按照本文中的步骤操作,您可以为在维护时段内进行的所有类型自动升级设置通知。

先决条件

设置通信管理器

  1. 在 Azure 门户中,转到资源。

  2. 选择“ 监视>警报警报>规则”,然后选择“ 创建”。

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

    显示窗格中用于创建警报规则的自定义日志搜索选择的屏幕截图。

  4. 在 “搜索查询 ”框中,粘贴以下自定义查询之一。 请务必更新 where id contains 路径,以便参考您订阅 ID、资源组名称和群集名称的资源。

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

    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(30m) // Ensure this matches aggregation granularity & frequency
    | where upgradeType == "K8sVersionUpgrade"
    | project
        eventTime,
        upgradeType,
        status,
        properties,
        name,
        details
    | order by eventTime asc
    

    以下查询用于通知 NodeOS 的自动升级:

    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(30m) // Ensure this matches aggregation granularity & frequency
    | where upgradeType == "NodeOSUpgrade"
    | project
        eventTime,
        upgradeType,
        status,
        properties,
        name,
        details
    | order by eventTime asc
    
  5. 转到“ 条件 ”选项卡。使用以下设置配置警报条件:

    • 度量值:选择 表行。
    • 聚合类型:选择 计数。
    • 聚合粒度:选择 30 分钟。
    • 阈值:保持 为 0。
    • 按维度拆分:对于 维度名称,请选择 状态。 然后选择“ 包括所有未来值 ”复选框。

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

  6. 在 “按维度拆分 ”区域中的 维度值中,选择一个值。 由于你选择了维度名称 的状态 ,因此可用值为 “计划”、“ 已启动”、“ 已完成”、“ 已取消”和 “失败”。

    注释

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

    用于按维度拆分的区域下拉列表框的屏幕截图。

  7. 转到操作选项卡。确保存在一个包含正确电子邮件地址的操作组,以便你能够收到通知。

    1. 选择使用动作组>创建动作组。

    2. 对于 通知类型,请选择 “电子邮件/SMS_message/推送/语音”。

    3. 选中 “电子邮件 ”复选框,然后在 “电子邮件 ”框中输入电子邮件地址。

      用于操作组输入电子邮件信息的窗格的屏幕截图。

  8. 转到“ 详细信息 ”选项卡。分配托管标识,以便授予对所需资源的访问权限。 在 “标识 ”区域中,选择 “系统分配的托管标识”。

    显示用于分配系统分配托管标识的选择的屏幕截图。

  9. 转到“ 审阅 + 创建 ”选项卡,然后选择“ 创建”。

  10. 创建警报规则后,可以为托管标识分配相应的角色:

    1. 在警报规则中,转到 设置>标识>系统分配的托管标识>Azure角色分配。
    2. 选择 “添加角色分配”,选择 “读取者 ”角色,并将其分配给资源组。
    3. 再次选择 “添加角色分配 ”,选择 “读取者 ”角色,并将其分配给订阅。

    小窍门

    如果未看到 “标识 ”选项,请确保已创建警报规则,并且你具有必要的权限。

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

验证配置

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

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

显示 Azure Resource Graph 中的通知记录的屏幕截图。