通過多集群統一報警管理,您可以在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: **