全部產品
Search
文件中心

Container Service for Kubernetes:事件監控

更新時間:Nov 07, 2024

事件監控是Kubernetes中的一種監控方式,可以彌補資源監控在即時性、準確性和情境上的不足。您可以通過使用NPD(node-problem-detector)結合SLS的Kubernetes事件中心、配置NPD叢集檢查項以及例外狀況事件離線功能、使用DingTalk、使用SLS離線Kubernetes事件及使用EventBridge離線Kubernetes事件,即時監控叢集的異常與問題。

費用說明

ACK事件監控功能預設上報叢集事件至SLSLog Service,SLSLog Service提供事件數目據的儲存、分析能力,預設90天內的ACK叢集事件數目據免費。詳細資料,請參見建立並使用K8s事件中心

背景資訊

Kubernetes的架構設計基於狀態機器,不同的狀態之間進行轉換會產生相應的事件,正常的狀態之間轉換會產生Normal等級的事件,正常狀態與異常狀態之間的轉換會產生Warning等級的事件。

ACK提供開箱即用的容器情境事件監控方案,通過ACK維護的NPD以及包含在NPD中的kube-eventer提供容器事件監控能力。

  • NPD(node-problem-detector)是Kubernetes節點診斷的工具,可以將節點的異常,例如Docker Engine Hang、Linux Kernel Hang、網路出網異常、檔案描述符異常轉換為Node的事件,結合kube-eventer可以實現節時間點事件警示的閉環。更多資訊,請參見NPD

  • kube-eventer是ACK維護的開源Kubernetes事件離線工具,可以將叢集的事件離線到DingTalk、SLS、EventBridge等系統,並提供不同等級的過濾條件,實現事件的即時採集、定向警示、非同步歸檔。更多資訊,請參見kube-eventer

本文通過以下五種情境為您介紹事件監控。

情境一:使用NPD結合SLS的Kubernetes事件中心監控叢集事件

NPD根據配置與第三方外掛程式檢測節點的問題或故障、產生相應的叢集事件。而Kubernetes叢集自身也會因為叢集狀態的切換產生各種事件,例如Pod驅逐、鏡像拉取失敗等異常情況。Log ServiceSLS(Log Service)的Kubernetes事件中心即時匯聚Kubernetes中的所有事件並提供儲存、查詢、分析、可視化、警示等能力。將叢集事件接入Log Service的Kubernetes事件中心操作步驟如下。

步驟一:安裝ack-node-problem-detector組件

  • 如果您在建立叢集時,已選中安裝node-problem-detector並建立事件中心,可直接按照步驟二查看Kubernetes事件中心。關於如何通過建立叢集時安裝NPD組件,請參見建立ACK託管叢集

  • 若建立叢集時未選中安裝node-problem-detector並建立事件中心,則需手動安裝,具體的操作步驟如下。

    1. 登入Container Service管理主控台

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

    3. 日誌與監控頁簽,尋找並安裝ack-node-problem-detector

步驟二:查看事件中心

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 事件中心

  3. 單擊右上方的事件中心管理,在K8s事件中心頁面的左側導覽列,單擊目的地組群名稱左邊的展開表徵圖展開,查看Kubernetes事件中心相關資訊。

    您可以查看Kubernetes事件的總覽及詳情、Pod生命週期,還可以進行自訂查詢和警示配置。更多資訊,請參見採集Kubernetes事件

情境二:配置NPD叢集檢查項以及例外狀況事件離線功能

NPD(node-problem-detector)是Kubernetes節點診斷的工具,可以將節點的異常,例如Docker Engine Hang、Linux Kernel Hang、網路出網異常、檔案描述符異常轉換為Node的事件,結合kube-eventer可以實現節時間點事件警示的閉環。

操作流程

  1. 安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件

    說明

    若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝。具體操作,請參見如何重新安裝ack-node-problem-detector組件

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 守護進程集

  3. 守護進程集頁面,選擇命名空間為kube-system,查看組件ack-node-problem-detector-daemonset運行正常。

    當node-problem-detector與eventer都正常運行後,可以通過配置的eventer的離線通道進行資料的離線處理或者警示。

NPD支援的問題檢查外掛程式

外掛程式名

功能

說明

fd_check

檢查叢集節點系統的已開啟的檔案描述符是否超過最大上限的80%。

80%為預設值,可通過參數修改。該檢查項消耗資源較多,不建議開啟。

ram_role_check

檢查叢集節點是否具有RAM Role以及相應的鑒權密鑰。

ntp_check

檢查叢集節點上的NTP時間同步服務是否正常運行。

預設開啟項。

nvidia_gpu_check

檢查叢集節點上的NVIDIA GPU計算卡是否具有有效xid

network_problem_check

檢查叢集節點上的conntrack表用量是否超過了總量的90%。

預設開啟項。

inodes_usage_check

檢查叢集節點系統硬碟的inode是否超過了總量的80%。

80%為預設值,可通過參數修改。預設開啟項。

csi_hang_check

檢查叢集節點上的CSI儲存外掛程式狀態是否正常。

ps_hang_check

檢查叢集節點系統中是否有狀態為D(掛起且無法喚醒)的進程。

public_network_check

檢查叢集節點是否可以訪問公網。

irqbalance_check

檢查叢集節點系統中的irqbalance服務是否正常。

pid_pressure_check

檢查叢集節點系統中的進程pid數與系統核心中允許的pid最大數佔比是否超過了85%。

預設開啟項。

docker_offline_check

檢測叢集節點上的docker daemon服務是否正常。

預設開啟項。

情境三:使用DingTalk實現Kubernetes監控警示

使用DingTalk機器人監控並警示Kubernetes的事件是一個非常典型的ChatOps實現。具體的操作步驟如下。

  1. 單擊DingTalk群右上方的群設定表徵圖,進入群設定頁面。

  2. 單擊機器人,然後單擊添加機器人,選擇需要添加的機器人。此處選擇自訂機器人。

    自訂機器人

  3. 機器人詳情頁面,單擊添加,進入添加機器人頁面。

    添加機器人

  4. 根據以下資訊配置群機器人後,閱讀並同意服務及免責條款,然後單擊完成

    參數

    說明

    編輯頭像

    (可選)為群機器人設定頭像。

    機器人名字

    添加的機器人名稱。

    添加到群組

    添加機器人的群組。

    安全設定

    安全設定支援3種方式:自訂關鍵詞、加簽和IP地址(段)。

    目前叢集的事件監控僅支援第一種方式,即自訂關鍵詞

    選中自訂關鍵詞,填入Warning可接收所有監控警示。如果發現機器人訊息發送過於頻繁,可增加關鍵詞進行過濾,最多支援設定10個關鍵詞。ACK發送訊息時也會同步此關鍵詞。

  5. 單擊複製,複製webhook地址以備後續使用。

    複製webhook

    說明

    群機器人頁面,選擇目標群機器人,單擊右側設定按鈕表徵圖可以進行以下操作:

    • 修改群機器人的頭像及機器人名字。

    • 開啟關閉訊息推送。

    • 重設webhook地址。

    • 刪除群機器人。

  6. 安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件

    說明

    若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝,具體操作請參見如何重新安裝ack-node-problem-detector組件

  7. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  8. 在Helm頁面,找到ack-node-problem-detector組件,然後在組件對應的操作列單擊更新,修改以下內容,然後單擊確定

    • npd下方的enabled設定為false

    • eventer.sinks.dingtalk.enabled設定為true

    • 通過步驟5建立webhook地址查看Token,填入Token欄位。

預期結果:

部署成功後30秒,eventer生效,當事件等級超過閾值等級時,即可在DingTalk群收到如下警示。訊息提醒

情境四:使用SLS離線Kubernetes事件

阿里雲Log ServiceSLS(Log Service)可以將Kubernetes的事件以更持久的方式進行儲存,從而提供更多的事件歸檔、審計的能力。詳情請參見建立並使用K8s事件中心

  1. 建立Project與Logstore。

    1. 登入Log Service管理主控台

    2. Project列表地區,單擊建立Project,填寫Project的基本資料並單擊確認進行建立。

      本樣本建立一個名為k8s-log4j的Project,與Kubernetes叢集位於同一地區(華東1)。

      說明

      為降低成本並提高效率,通常建議將Log Service與Kubernetes叢集配置在同一地區。這樣可以使日誌資料通過內網進行傳輸,避免因地區不一致產生的外網資料轉送費用,並減少傳輸延遲,實現日誌的即時採集和快速查詢。

    3. 建立完成後,k8s-log4j出現在Project列表下,單擊該Project名稱,進入Project詳情頁面。

    4. 預設進入日誌庫頁面,在頁面左側,單擊加號+,彈出建立Logstore對話方塊。

    5. 填寫日誌庫配置資訊並單擊確定

      本樣本建立名為k8s-logstore的日誌庫。

      image

    6. 建立完畢後,頁面會提示您使用資料接入嚮導。單擊資料接入嚮導,彈出接入資料對話方塊。

    7. 選擇Log4j 1/2,根據頁面引導進行配置。

      本樣本使用了預設配置,您可根據日誌資料的具體使用情境,進行相應的配置。

      自訂資料

  2. 在Kubernetes叢集中配置log4j。

    1. 安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件

    重要
    • 單擊安裝ack-node-problem-detector組件時,在配置項中將步驟1建立好的ProjectLogstore分別填入各欄位。

    • 若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝,具體操作請參見如何重新安裝ack-node-problem-detector組件

    1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

    2. Helm頁面,找到ack-node-problem-detector組件,然後在組件對應的操作列單擊更新,修改以下內容,然後單擊確定

      • npd下方的enabled設定為false

      • eventer.sinks.sls.enabled設定為true

  3. 操作叢集(例如,刪除Pod或者建立應用等)產生事件後,登入Log Service控制台查看資料擷取。請參見通過API消費

    查看採集資料

  4. 設定索引與歸檔。請參見建立索引

    1. 在Log Service控制台Project列表地區,單擊Project名稱。

    2. 單擊日誌庫名稱後的日誌庫管理表徵圖表徵圖,選擇查詢分析

    3. 單擊右上方的開啟索引

    4. 查詢分析對話方塊中配置索引,然後單擊確定

      此時會出現日誌查詢與分析頁面。日誌分析頁面

      說明
      • 索引配置在1分鐘之內生效。

      • 開啟或修改索引後,新的索引配置只對新寫入的資料生效。

    5. (可選)在需要設定離線歸檔與計算的情境下,在Logstore上將資料投遞給MaxCompute或者OSS,請參見建立MaxCompute投遞任務(新版)建立OSS投遞任務(新版)

情境五:使用EventBridge離線Kubernetes事件

事件匯流排EventBridge是阿里雲提供的一款無伺服器事件匯流排服務,支援阿里雲服務、自訂應用及SaaS應用以標準化、中心化的方式接入,並能夠以標準化的CloudEvents 1.0協議在這些應用之間路由事件。Container Service事件可支援通過離線到EventBridge實現構建松耦合、分布式的事件驅動架構。關於EventBridge的詳情,請參見什麼是事件匯流排EventBridge

  1. 開通事件匯流排EventBridge。具體操作,請參見開通事件匯流排EventBridge並授權

  2. 安裝ack-node-problem-detector組件,安裝過程請參見安裝ack-node-problem-detector組件

    說明

    若之前已安裝過ack-node-problem-detector組件,請刪除重新安裝,具體操作請參見如何重新安裝ack-node-problem-detector組件

  3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  4. Helm頁面,定位ack-node-problem-detector組件,然後在組件對應的操作列單擊更新,將eventer.sinks.eventbridge.enable修改為true,以配置事件中心並開啟EventBridge事件離線資料鏈路,然後單擊確定

    image

  5. 資料鏈路開啟成功後,在事件匯流排EventBridge控制台查看容器事件。

    1. 登入事件匯流排EventBridge控制台
    2. 在左側導覽列,單擊事件匯流排
    3. 事件匯流排頁面,單擊目標匯流排名稱。
    4. 在左側導覽列,單擊事件追蹤
    5. 選擇事件查詢方式,設定查詢條件,單擊查詢

    6. 在事件列表操作列,單擊事件詳情,查看事件詳細內容。

      更多資訊,請參見查詢事件

如何重新安裝ack-node-problem-detector組件

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 任務

  3. 任務頁面,單擊kube-eventer-init-v1.7-xxxx右側更多,單擊刪除

  4. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

  5. Helm頁面,刪除原有的ack-node-problem-detector組件。

  6. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  7. 日誌與監控頁簽,尋找並重新安裝ack-node-problem-detector