多集群报警差异化配置

通过多集群统一报警管理,您可以在Fleet实例中配置或修改报警规则。但由Fleet实例下发的报警规则在各个关联集群中完全一致。如果在实际使用中,不同集群需要不同的报警规则,您可以通过多集群的报警差异化配置实现该功能。本文介绍如何定义多集群报警差异化,实现不同集群的报警差异化配置。

前提条件

  • 已开启舰队管理功能。具体操作,请参见开启舰队管理功能

  • 舰队的Fleet实例已添加2个关联集群(服务提供者集群、服务消费者集群)。具体操作,请参见添加关联集群

  • 在需要统一报警管理的集群上,已安装报警管理相关组件。具体操作,请参见组件安装与升级

背景信息

报警规则的差异化配置和应用差异化配置的原理一致,通过开源KubeVela在Fleet实例上定义差异化配置并进行分发。您可以在Fleet实例中定义统一的报警规则,并针对特定的集群定义报警的差异化配置,例如开启GPU报警,并设置不同的报警阈值和不同的报警联系人等,再将统一的报警规则以及差异化后的报警规则分发到目标关联集群中。

多集群报警差异化配置架构如下图所示,在Fleet实例中定义差异化配置并下发到ACK Cluster 2中,在ACK Cluster 1中不使用差异化配置。

image

步骤一:创建报警联系人与联系人分组

创建报警联系人与联系人分组。具体操作,请参见步骤一:创建报警联系人与联系人分组

步骤二:获取报警联系人分组ID

获取报警联系人分组ID。具体操作,请参见步骤二:获取报警联系人分组ID

步骤三:创建报警规则

创建报警规则。具体操作,请参见步骤三:创建报警规则

步骤四:差异化配置报警规则并进行分发

报警规则的差异化配置通过开源KubeVela,在Fleet实例上定义差异化配置并通过Fleet实例进行分发。具体操作步骤如下。

  1. 执行以下命令,获取分发的目标集群的Cluster ID。

    kubectl get managedcluster 

    预期输出:

    NAME            HUB ACCEPTED   MANAGED CLUSTER URLS   JOINED   AVAILABLE   AGE
    c565e4****      true                                  True     True        12d
    cbaa12****      true                                  True     True        12d
    说明

    您也可以通过给关联集群打标的方式选择目标集群。具体操作,请参见方式二:通过给关联集群打标选择目标集群

  2. 使用以下内容,定义差异化配置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中定义的分发规则下发。
  3. 执行以下命令,创建差异化配置与分发规则。

    kubectl apply -f ackalertrule-app-override.yaml
  4. 执行以下命令,查看报警规则的分发执行状态。

    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: **