通過多叢集統一警示管理,您可以在Fleet執行個體中配置或修改警示規則。但由於下發的警示規則在各個關聯集群中完全一致,如果不同叢集需要不同的警示規則,您可以通過多叢集的警示差異化配置實現該功能。本文介紹如何定義多叢集警示差異化,實現不同叢集的警示差異化配置。
前提條件
背景資訊
警示規則的差異化配置和應用差異化配置原理一致,通過開源KubeVela在Fleet執行個體上定義配置並進行分發。您可以在Fleet執行個體中定義統一的警示規則,並針對特定的叢集定義警示的差異化配置,例如開啟GPU警示,設定不同的警示閾值和不同的警示連絡人等,再將統一的警示規則以及差異化後的警示規則分發到目標關聯集群中。
多叢集警示差異化配置架構如下圖所示,Fleet執行個體中的差異化配置下發到ACK Cluster 2,而ACK Cluster 1不使用差異化配置。
步驟一:配置警示資訊
步驟二:差異化配置警示規則並進行分發
警示規則的差異化配置通過開源KubeVela,在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: **