通过多集群统一报警管理,您可以在Fleet实例中配置或修改报警规则。但由Fleet实例下发的报警规则在各个关联集群中完全一致。如果在实际使用中,不同集群需要不同的报警规则,您可以通过多集群的报警差异化配置实现该功能。本文介绍如何定义多集群报警差异化,实现不同集群的报警差异化配置。
前提条件
背景信息
报警规则的差异化配置和应用差异化配置的原理一致,通过开源KubeVela在Fleet实例上定义差异化配置并进行分发。您可以在Fleet实例中定义统一的报警规则,并针对特定的集群定义报警的差异化配置,例如开启GPU报警,并设置不同的报警阈值和不同的报警联系人等,再将统一的报警规则以及差异化后的报警规则分发到目标关联集群中。
多集群报警差异化配置架构如下图所示,在Fleet实例中定义差异化配置并下发到ACK Cluster 2中,在ACK Cluster 1中不使用差异化配置。
步骤一:创建报警联系人与联系人分组
创建报警联系人与联系人分组。具体操作,请参见步骤一:创建报警联系人与联系人分组。
步骤二:获取报警联系人分组ID
获取报警联系人分组ID。具体操作,请参见步骤二:获取报警联系人分组ID。
步骤三:创建报警规则
创建报警规则。具体操作,请参见步骤三:创建报警规则。
步骤四:差异化配置报警规则并进行分发
报警规则的差异化配置通过开源KubeVela,在Fleet实例上定义差异化配置并通过Fleet实例进行分发。具体操作步骤如下。
执行以下命令,获取分发的目标集群的Cluster ID。
kubectl get managedcluster
预期输出:
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE c565e4**** true True True 12d cbaa12**** true True True 12d
说明您也可以通过给关联集群打标的方式选择目标集群。具体操作,请参见方式二:通过给关联集群打标选择目标集群。
使用以下内容,定义差异化配置ackalertrule-app-override.yaml。
如下示例中,
ack-cluster-1
为CPU集群,ack-cluster-2
为GPU集群,该示例可实现对ack-cluster-2
即GPU集群的差异化配置,包括开启GPU报警、修改报警阈值和告警联系人。apiVersion: core.oam.dev/v1alpha1 # 定义分发目标集群,使用Cluster ID标识。 kind: Policy metadata: name: cluster-cpu namespace: kube-system type: topology properties: clusters: ["<ack-cluster-1>"] # 替换<ack-cluster-1>为ack cluster 1的Cluster ID。 --- apiVersion: core.oam.dev/v1alpha1 # 定义分发目标集群,使用Cluster ID标识。 kind: Policy metadata: name: cluster-gpu namespace: kube-system type: topology properties: clusters: ["<ack-cluster-2>"] # 替换<ack-cluster-2>为ack cluster 2的Cluster ID。 --- apiVersion: core.oam.dev/v1alpha1 # 定义Override规则。 kind: Policy metadata: name: override-gpu namespace: kube-system type: override properties: components: - name: ackalertrules # 关联Application中的Component名称。 traits: - type: alert-rule # alert-rule trait用于修改ack alert rule。 properties: groups: # 差异化配置,结构与ack alert rule的结构一致,可以定义多个Groups和alerts的差异化。 - name: res-exceptions # 选择要修改的alert group。 rules: - contactGroups: # 修改contactGroups。 - arms_contact_group_id: "12345" cms_contact_group_name: ack_Default Contact Group id: "1234" enable: enable # 修改enable。 name: node_cpu_util_high # 选择要修改的alert name thresholds: # 修改thresholds。 - key: CMS_ESCALATIONS_CRITICAL_Threshold unit: percent value: "60" - name: cluster-error # 选择要修改的alert group。 rules: - enable: enable # 只修改enable。 name: gpu-xid-error # 选择要修改的alert name。 --- apiVersion: core.oam.dev/v1alpha1 # Kubevela工作流定义。 kind: Workflow metadata: name: deploy-ackalertrules namespace: kube-system steps: - type: deploy name: deploy-cpu properties: policies: ["cluster-cpu"] # 部署到分发目标cluster-cpu。 - type: deploy name: deploy-gpu properties: policies: ["override-gpu", "cluster-gpu"] # 应用Override规则,并部署到分发目标cluster-gpu。 --- apiVersion: core.oam.dev/v1beta1 # Kubevela Application定义。 kind: Application metadata: name: alertrules namespace: kube-system annotations: app.oam.dev/publishVersion: version1 # 当任何资源改变,需要重新下发Alert时,需要修改publishVersion。 spec: components: - name: ackalertrules type: ref-objects properties: objects: - resource: ackalertrules # 引用步骤三创建的报警规则ack alert rules。 name: default workflow: ref: deploy-ackalertrules # 使用Workflow中定义的分发规则下发。
执行以下命令,创建差异化配置与分发规则。
kubectl apply -f ackalertrule-app-override.yaml
执行以下命令,查看报警规则的分发执行状态。
kubectl amc appstatus alertrules -n kube-system --tree --detail
预期输出:
CLUSTER NAMESPACE RESOURCE STATUS APPLY_TIME DETAIL c565e4**** (ack-cluster-1)─── kube-system─── AckAlertRule/default updated 2022-**-** **:**:** Age: ** cbaa12**** (ack-cluster-2)─── kube-system─── AckAlertRule/default updated 2022-**-** **:**:** Age: **