Azure Kubernetes 服务(AKS)通信管理器使用 Azure 资源通知和 Azure Resource Graph 框架简化了所有 AKS 维护任务的通知。 借助此工具,你可以密切监视升级,因为它提供了有关事件触发器和结果的及时警报。 如果维护失败,它会通知你故障原因,减少与可观测性和跟进相关的操作麻烦。 可以按照以下步骤为利用维护时段的所有类型的自动升级设置通知。
先决条件
注释
设置后,通信管理器会发送提前通知 - 维护开始前一周,在维护开始前一天。 这是除了在维护操作期间及时发出警报之外的操作。
如何设置通信管理器
转到资源,然后选择“监视”并选择“警报”,然后单击“警报规则”。
警报的条件应该是自定义日志搜索。
在打开的“搜索查询”框中,粘贴以下自定义查询之一,然后单击“审阅+创建”按钮。
查询群集自动升级通知
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
- 使用以下设置配置警报条件:
- 度量:选择“表行”
- 聚合:选择“计数”
- 聚合粒度:选择“30 分钟”
- 阈值:保留为 0
- 按维度拆分:选择“状态”,然后选择“包括所有未来值”
在 “按维度拆分 ”下拉列表中选择“状态”时,可用值为:“计划”、“已启动”、“已完成”、“已取消”和“失败”。
注释
仅当群集之前已执行自动升级作时,才会显示这些状态值。 对于尚未进行自动升级的新群集或群集,下拉列表可能显示为空或未显示任何可用维度。 群集执行第一次自动升级后,这些状态值将可供选择。
- 检查是否存在具有正确电子邮件地址的操作组来接收通知。
分配托管系统标识:创建警报规则后,分配托管标识,以便它可以访问所需的资源。 在创建警报规则后执行此步骤,而不是在初始设置期间执行。 若要分配托管标识,请:
- 在 Azure 门户中,转到 “监视>警报>警报规则”,然后选择警报规则。
- 在警报规则窗格中的 “设置”下,选择“ 标识”。
- 将 系统分配的托管标识 设置为 On。
- 单击“ 保存 ”以启用警报规则的托管标识。
小窍门
如果未看到“标识”选项,请确保已创建警报规则,并且你具有必要的权限。 创建警报规则后,分配托管标识始终是单独的步骤。
请确保分配相应的阅读者角色。
在警报规则中,转到 “设置>标识>系统分配的托管标识>Azure 角色分配>添加角色分配”。
选择 “读取者 ”角色并将其分配给资源组。 如有需要,请为订阅重复“添加角色分配”。
注释
设置通信管理器后,它会在维护开始前一周和维护开始前一天发送提前通知。 它还会在维护操作时及时发送警报。
设置通信管理器
转到资源,选择“ 监视”,选择“ 警报”,然后选择“ 警报规则”。
在 “条件 ”选项卡上,选择 “信号名称”,选择“ 自定义日志搜索”。
在 “搜索查询 ”框中,粘贴以下自定义查询之一,然后选择“ 查看+创建 ”按钮。
以下查询适用于群集自动升级通知:
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
间隔应为 30 分钟,阈值应为 1。
确保存在具有正确电子邮件地址的作组,以便你能够接收通知。
确保将“读取”角色授予资源组以及日志搜索警报规则的托管标识订阅。
转到警报规则:“设置”>“标识”>“系统分配的托管标识”>“Azure 角色分配”>“添加角色分配”。
选择 “读取者 ”角色并将其分配给资源组。 为订阅重复“添加角色分配”。
验证
若要升级群集,请等待自动升级程序启动。 然后,验证是否在配置为接收通知的电子邮件上及时收到通知。
检查 Azure Resource Graph 数据库中的计划通知记录。 每个计划的事件通知都应列为表中的一条记录 containerserviceeventresources
。