天天看點

自建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-controller
      自建Kubernetes叢集如何接入事件通知告警

如何接入報警配置功能

步驟一:開啟預設報警規則

可在注冊叢集開啟對應報警規則。

  1. 在目标叢集左側導航欄選擇運維管理 > 報警配置配置管理。
  2. 在報警規則管理頁簽,打開啟動狀态可開啟對應報警規則集。
自建Kubernetes叢集如何接入事件通知告警

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

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

功能特性 說明
報警規則管理
  • 容器服務報警規則功能會預設生成容器場景下的報警模闆(包含異常事件報警、異常名額報警)。
  • 報警規則被分類為若幹個報警規則集,可為報警規則集關聯多個聯系人分組,并啟動或關閉報警規則集。
  • 報警規則集中包含多個報警規則,一個報警規則對應單個異常的檢查項。多個報警規則集可以通過一個YAML資源配置到對應叢集中,修改YAML會同步生成報警規則。
  • 關于報警規則YAML配置,請參見 如何通過CRD配置報警規則
  • 關于預設報警規則模闆,請參見 預設報警規則模闆
報警曆史 目前可檢視最近發送的近100條曆史記錄。單擊對應報警報警規則類型的連結,可跳轉到對應監控系統中檢視詳細規則配置;單擊對應報警排查現場的連結可快速定位到異常發生的資源頁面(異常事件、名額異常的資源)。
聯系人管理 對聯系人進行管理,可建立、編輯或删除聯系人。
聯系人分組管理 對聯系人分組進行管理,可建立、編輯或删除聯系人分組。當無聯系人分組時,控制台會從您的阿裡雲賬号注冊資訊中同步建立一個預設聯系人分組。
  1. 在報警規則管理頁簽,單擊編輯聯系人分組可設定關聯的聯系人分組;打開啟動狀态可開啟對應報警規則集。

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

  1. 在報警規則管理頁簽中,單擊右上角編輯報警配置,可檢視目前叢集中的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