開發與維運

自建Kubernetes集群如何接入事件通知告警

報警配置功能提供容器場景報警能力的統一管理,包括容器服務異常事件報警,以及容器場景指標報警,支持在創建集群時默認開啟報警功能。容器服務的報警規則支持通過集群內部署CRD的方式配置管理。本文介紹如何接入報警配置功能及授予報警功能資源的訪問權限。


功能使用場景

容器服務報警配置功能集合容器場景的監控報警能力,提供報警的統一配置管理,有如下幾個典型的使用場景:

  • 集群運維可以通過監控報警第一時間瞭解集群管控、存儲、網絡、彈性擴縮容等異常事件。例如,可通過配置並查看集群異常事件報警規則集感知集群節點或容器節點通用異常;通過配置並查看集群存儲異常事件報警規則集感知集群存儲的變更與異常;通過配置並查看集群網絡異常事件報警規則集感知集群網絡的變更與異常;通過配置並查看集群管控運維異常報警規則集感知集群管控的變更與異常等。
  • 應用開發可以通過監控報警第一時間瞭解在集群中運行應用的異常事件、指標是否異常。例如,集群容器副本異常或者應用Deployment的CPU、內存水位指標是否超過閾值等。可通過開啟報警配置功能中的默認報警規則模板,即可快速接受集群內應用容器副本的異常事件報警通知。例如,通過配置並訂閱關注集群容器副本異常報警規則集感知所屬應用的Pod是否異常。
  • 應用管理關注運行在集群上的應用健康、容量規劃、集群運行穩定性及異常甚至是錯誤報警等貫穿應用生命週期的一系列問題。例如,通過配置並訂閱關注集群重要事件報警規則集感知集群內所有Warning、Error等異常報警;關注集群資源異常報警規則集感知集群的資源情況,從而更好地做容量規劃等。
  • 多集群管理當您有多個集群需要管理,為集群配置報警規則往往會是一個重複繁瑣且難以同步的操作。容器服務報警配置功能,支持通過集群內部署CRD配置的方式管理報警規則。可通過維護多個集群中同樣配置的CRD資源,來方便快捷地實現多集群中報警規則的同步配置。

前提條件

步驟一:在自建集群中配置報警組件RAM權限

在註冊集群中安裝組件前,您需要在接入集群中設置AK用來訪問雲服務的權限。設置AK前,您需要創建RAM用戶併為其添加訪問相關雲資源的權限。

  1. 創建RAM用戶。有關如何創建RAM用戶的具體步驟,請參見創建RAM用戶
  2. 創建權限策略。有關創建權限策略的具體操作步驟,請參見創建自定義策略。請授權RAM權限如下所示:
{
            "Action": [
                "log:*",
                "arms:*",
                "cs:UpdateContactGroup"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
}
  1. 為RAM用戶添加權限。有關如何為RAM用戶授權的具體步驟,請參見為RAM用戶授權
  2. 為RAM用戶創建AK。有關如何為子賬戶創建AK,請參見獲取AccessKey
  3. 使用AK在自建Kubernetes集群中創建名為alibaba-addon-secret的Secret資源,步驟二中安裝事件中心相關組件時將自動引用此AK訪問對應的雲服務資源。
kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'

您需要將上述代碼中替換為您獲取的AK信息。


步驟二:組件安裝與升級

控制檯會自動檢測報警配置環境是否符合要求,並會引導進行開通或安裝、升級組件。

  1. 登錄容器服務管理控制檯
  2. 在控制檯左側導航欄中,單擊集群
  3. 集群列表頁面中,單擊目標集群名稱或者目標集群右側操作列下的詳情
  4. 在集群管理頁左側導航欄,選擇運維管理 > 報警配置
  5. 報警配置頁面控制檯會自動檢查以下條件。若不符合條件,請按以下提示完成操作。
    • 已開通SLS日誌服務雲產品。當您首次使用日誌服務時,需要登錄日誌服務控制檯,根據頁面提示開通日誌服務。
    • 已安裝事件中心。具體操作,請參見事件監控
    • 集群託管組件alicloud-monitor-controller升級到最新版本。更多信息,請參見alicloud-monitor-controllerimage.png

如何接入報警配置功能

步驟一:開啟默認報警規則

可在註冊集群開啟對應報警規則。

  1. 在目標集群左側導航欄選擇運維管理 > 報警配置配置管理。
  2. 報警規則管理頁籤,打開啟動狀態可開啟對應報警規則集。

image.png

步驟二:手動配置報警規則

可進行報警規則、聯繫人和聯繫人分組管理。

  1. 登錄容器服務管理控制檯
  2. 在控制檯左側導航欄中,單擊集群
  3. 集群列表頁面中,單擊目標集群名稱或者目標集群右側操作列下的詳情
  4. 在集群管理頁左側導航欄,選擇運維管理 > 報警配置
功能特性 說明
報警規則管理
  • 容器服務報警規則功能會默認生成容器場景下的報警模板(包含異常事件報警、異常指標報警)。
  • 報警規則被分類為若干個報警規則集,可為報警規則集關聯多個聯繫人分組,並啟動或關閉報警規則集。
  • 報警規則集中包含多個報警規則,一個報警規則對應單個異常的檢查項。多個報警規則集可以通過一個YAML資源配置到對應集群中,修改YAML會同步生成報警規則。
  • 關於報警規則YAML配置,請參見如何通過CRD配置報警規則
  • 關於默認報警規則模板,請參見默認報警規則模板
報警歷史 目前可查看最近發送的近100條歷史記錄。單擊對應報警報警規則類型的鏈接,可跳轉到對應監控系統中查看詳細規則配置;單擊對應報警排查現場的鏈接可快速定位到異常發生的資源頁面(異常事件、指標異常的資源)。
聯繫人管理 對聯繫人進行管理,可創建、編輯或刪除聯繫人。
聯繫人分組管理 對聯繫人分組進行管理,可創建、編輯或刪除聯繫人分組。當無聯繫人分組時,控制檯會從您的阿里雲賬號註冊信息中同步創建一個默認聯繫人分組。
  1. 報警規則管理頁籤,單擊編輯聯繫人分組可設置關聯的聯繫人分組;打開啟動狀態可開啟對應報警規則集。

如何通過CRD配置報警規則

報警配置功能開啟時,會默認在kube-system Namespace下創建一個AckAlertRule類型的資源配置,包含默認報警規則模板。容器服務報警規則集可通過此資源配置在集群中。

  1. 登錄容器服務管理控制檯
  2. 在控制檯左側導航欄中,單擊集群
  3. 集群列表頁面中,單擊目標集群名稱或者目標集群右側操作列下的詳情
  4. 在集群管理頁左側導航欄,選擇運維管理 > 報警配置
  5. 報警規則管理頁籤中,單擊右上角編輯報警配置,可查看當前集群中的AckAlertRule資源配置,並可通過YAML文件修改。報警規則配置的YAML文件示例如下:
apiVersion: alert.alibabacloud.com/v1beta1
kind: AckAlertRule
metadata:
  name: default
spec:
  groups:
    - name: pod-exceptions                     ## 報警規則集名。
      rules:
        - name: pod-oom                        ## 報警規則名。
          type: event                          ## 報警規則類型,枚舉值為event(事件類型)、metric(指標類型)。
          expression: sls.app.ack.pod.oom      ## 報警規則表達式,當規則類型為event時,表達式的值為SLS日誌服務事件報警sls_event_id。
          enable: enable                       ## 報警規則開啟狀態,枚舉值為enable、disable。
        - name: pod-failed
          type: event
          expression: sls.app.ack.pod.failed
          enable: enable

默認報警規則模板

在以下情況下ACK會默認創建相應報警規則:

  • 開啟默認報警規則功能。
  • 未開啟默認報警規則,首次進入報警規則頁面。

默認創建的報警規則如下表所示。

規則集類型 規則名 ACK_CR_Rule_Name SLS_Event_ID
critical-events集群重要事件報警規則集 集群error事件 error-event sls.app.ack.error
集群warning事件 warn-event sls.app.ack.warn
cluster-error集群異常事件報警規則集 集群節點docker進程異常 docker-hang sls.app.ack.docker.hang
集群驅逐事件 eviction-event sls.app.ack.eviction
集群GPU的XID錯誤事件 gpu-xid-error sls.app.ack.gpu.xid_error
集群節點重啟 node-restart sls.app.ack.node.restart
集群節點時間服務異常 node-ntp-down sls.app.ack.ntp.down
集群節點PLEG異常 node-pleg-error sls.app.ack.node.pleg_error
集群節點進程異常 ps-hang sls.app.ack.ps.hang
res-exceptions集群資源異常報警規則集 集群節點文件句柄過多 node-fd-pressure sls.app.ack.node.fd_pressure
集群節點磁盤空間不足 node-disk-pressure sls.app.ack.node.disk_pressure
集群節點進程數過多 node-pid-pressure sls.app.ack.node.pid_pressure
集群節點調度資源不足 node-res-insufficient sls.app.ack.resource.insufficient
集群節點IP資源不足 node-ip-pressure sls.app.ack.ip.not_enough
pod-exceptions集群容器副本異常報警規則集 集群容器副本OOM pod-oom sls.app.ack.pod.oom
集群容器副本啟動失敗 pod-failed sls.app.ack.pod.failed
集群鏡像拉取失敗事件 image-pull-back-off sls.app.ack.image.pull_back_off
cluster-ops-err集群管控運維異常報警規則集 無可用LoadBalancer slb-no-ava sls.app.ack.ccm.no_ava_slb
同步LoadBalancer失敗 slb-sync-err sls.app.ack.ccm.sync_slb_failed
刪除LoadBalancer失敗 slb-del-err sls.app.ack.ccm.del_slb_failed
刪除節點失敗 node-del-err sls.app.ack.ccm.del_node_failed
添加節點失敗 node-add-err sls.app.ack.ccm.add_node_failed
創建VPC網絡路由失敗 route-create-err sls.app.ack.ccm.create_route_failed
同步VPC網絡路由失敗 route-sync-err sls.app.ack.ccm.sync_route_failed
安全巡檢發現高危風險配置 si-c-a-risk sls.app.ack.si.config_audit_high_risk
託管節點池命令執行失敗 nlc-run-cmd-err sls.app.ack.nlc.run_command_fail
託管節點池未提供任務的具體命令 nlc-empty-cmd sls.app.ack.nlc.empty_task_cmd
託管節點池出現未實現的任務模式 nlc-url-m-unimp sls.app.ack.nlc.url_mode_unimpl
託管節點池發生未知的修復操作 nlc-opt-no-found sls.app.ack.nlc.op_not_found
託管節點池銷燬節點發生錯誤 nlc-des-node-err sls.app.ack.nlc.destroy_node_fail
託管節點池節點排水失敗 nlc-drain-node-err sls.app.ack.nlc.drain_node_fail
託管節點池重啟ECS未達到終態 nlc-restart-ecs-wait sls.app.ack.nlc.restart_ecs_wait_fail
託管節點池重啟ECS失敗 nlc-restart-ecs-err sls.app.ack.nlc.restart_ecs_fail
託管節點池重置ECS失敗 nlc-reset-ecs-err sls.app.ack.nlc.reset_ecs_fail
託管節點池自愈任務失敗 nlc-sel-repair-err sls.app.ack.nlc.repair_fail
cluster-network-err集群網絡異常事件報警規則集 Terway資源無效 terway-invalid-res sls.app.ack.terway.invalid_resource
Terway分配IP失敗 terway-alloc-ip-err sls.app.ack.terway.alloc_ip_fail
解析ingress帶寬配置失敗 terway-parse-err sls.app.ack.terway.parse_fail
Terway分配網絡資源失敗 terway-alloc-res-err sls.app.ack.terway.allocate_failure
Terway回收網絡資源失敗 terway-dispose-err sls.app.ack.terway.dispose_failure
Terway虛擬模式變更 terway-virt-mod-err sls.app.ack.terway.virtual_mode_change
Terway觸發PodIP配置檢查 terway-ip-check sls.app.ack.terway.config_check
Ingress重載配置失敗 ingress-reload-err sls.app.ack.ingress.err_reload_nginx
cluster-storage-err集群存儲異常事件報警規則集 雲盤容量少於20Gi限制 csi_invalid_size sls.app.ack.csi.invalid_disk_size
容器數據卷暫不支持包年包月類型雲盤 csi_not_portable sls.app.ack.csi.disk_not_portable
掛載點正在被進程佔用,卸載掛載點失敗 csi_device_busy sls.app.ack.csi.deivce_busy
無可用雲盤 csi_no_ava_disk sls.app.ack.csi.no_ava_disk
雲盤IOHang csi_disk_iohang sls.app.ack.csi.disk_iohang
磁盤綁定的PVC發生slowIO csi_latency_high sls.app.ack.csi.latency_too_high
磁盤容量超過水位閾值 disk_space_press sls.app.ack.csi.no_enough_disk_space

Leave a Reply

Your email address will not be published. Required fields are marked *