Kubernetes安全之NPD

      網友投稿 1344 2025-04-04

      一 前言

      在云原生時代,有大量的節點問題可能會影響節點上運行的 pod,例如:

      基礎設施守護進程問題:ntp 服務關閉;

      硬件問題:CPU、內存或磁盤損壞;

      內核問題:內核死鎖、文件系統損壞;

      容器運行時問題:無響應的運行時守護進程;

      目前,這些問題對于集群管理堆棧中的上游層來說是不可見的,因此 Kubernetes 將繼續將 Pod 調度到壞節點。

      為了解決這個問題,我們引入了新的守護進程節點問題檢測器,從各個守護進程中收集節點問題,并使它們對上行層可見。一旦上游層對這些問題有了可見性,我們就可以討論補救系統。

      Kubernetes 針對與部署的Node節點,需要有一款工具能夠對齊進行持續性的檢測,包括內核、內存、系統線程、文件系統描述符等,針對Node節點進行檢測第一時間發現異常,以保障集群安全穩定。

      二 node-problem-detector簡介

      2.1 NPD簡介

      節點問題檢測器旨在使各種節點問題對集群管理堆棧的上行層可見。它是一個在每個節點上運行的守護進程,檢測節點問題并將其報告給服務器。Node-problem-detector 既可以作為 DaemonSet 運行,也可以獨立運行。現在它作為默認啟用的 Kubernetes Addon 在 GCE 集群中運行。用于監視和報告節點的健康狀況(包括內核死鎖、OOM、系統線程數壓力、系統文件描述符壓力等指標)。 節點問題檢測器從各種守護進程收集節點問題,并以NodeCondition和Event的形式報告給 API Server。

      2.2 Problem API

      node-problem-detector 使用 Event 和 NodeCondition 向 apiserver 報告問題。

      NodeCondition:使節點對 pod 不可用的永久性問題應報告為 NodeCondition。

      Event:對 pod 影響有限但提供信息的臨時問題應報告為事件。

      2.3 Problem 守護進程(Monitor)

      Problem Daemon(在代碼內部也叫Monitor)是NPD的子守護進程,每個PD監控一個特定類型的節點故障,并報告給NPD。目前PD以Goroutine的形式運行在NPD中,未來會支持在獨立進程(容器)中運行并編排為一個Pod。在編譯期間,可以通過相應的標記禁用每一類PD。

      問題守護進程是 node-problem-detector 的子守護進程。它監視特定類型的節點問題并將它們報告給節點問題檢測器。

      問題守護進程可能是:

      為專用 Kubernetes 用例設計的小型守護程序。

      與 node-problem-detector 集成的現有節點健康監控守護程序。

      目前,一個問題守護進程在 node-problem-detector 二進制文件中作為 goroutine 運行。未來,我們會將 node-problem-detector 和問題守護進程分離到不同的容器中,并按照 pod 規范組合它們。

      通過設置相應的構建標記,可以在編譯時禁用每一類問題守護進程。如果在編譯時禁用它們,那么它們的所有構建依賴項、全局變量和后臺 goroutine 都將從已編譯的可執行文件中刪除。

      支持的問題守護進程類型列表:

      2.4 Exporter

      導出器是節點問題檢測器的一個組件。它向某些后端報告節點問題和/或指標。其中一些可以在編譯時使用構建標簽禁用。支持的出口商列表:

      三 部署測試

      3.1 集群內部署

      利用helm進行部署,部署完成后可以看到npd是以daemonset方式存在,在每個節點上都有運行的具體pod。

      $ helm repo add deliveryhero https://charts.deliveryhero.io/ $ helm install deliveryhero/node-problem-detector --generate-name NAME: node-problem-detector-1646190796 LAST DEPLOYED: Wed Mar 2 11:13:20 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: To verify that the node-problem-detector pods have started, run: kubectl --namespace=default get pods -l "app.kubernetes.io/name=node-problem-detector,app.kubernetes.io/instance=node-problem-detector-1646190796"

      3.2 單機獨立部署

      Node-problem-detector也可以直接獨立啟動,需要指定k8s-apiserver的地址以及配置inClusterConfig 為false,詳細可以參考獨立部署

      四 配置參數

      system-log-monitor相關參數

      –config.system-log-monitor: system log monitor配置文件路徑,多個文件用逗號分隔,如config/kernel-monitor.json,NPD會為每一個配置文件生成單獨的log monitor。你可以使用不同的log monitors來監控不同的系統日志。

      system-stats-monitor相關參數

      –config.system-stats-monitor: system status monitor配置文件路徑,多個文件用逗號分隔,如config/system-stats-monitor.json,NPD會為每一個配置文件生成單獨的status monitor。你可以使用不同的status monitors來監控系統的不同狀態。

      custom-plugin-monitor相關參數

      –config.custom-plugin-monitor:用戶自定義插件配置文件路徑,多個文件用逗號分隔,如config/custom-plugin-monitor.json,NPD會為每一個配置文件生成單獨的自定義插件監視器。你可以使用不同的自定義插件監視器來監控不同的系統問題。

      Kubernetes exporter相關參數

      –enable-k8s-exporter:是否開啟上報信息到API Server,默認為true–apiserver-override:一個URI參數,用于自定義node-problem-detector連接apiserver的地址。如果–enable-k8s-exporter為false,則忽略此內容。格式與Heapster的源標志相同。例如,要在沒有身份驗證的情況下運行,請使用以下配置:http://APISERVER_IP:APISERVER_ … false

      請參閱heapster文檔以獲取可用選項的完整列表。–address:綁定NPD服務器的地址。–port:NPD服務端口,如果為0,表示禁用NPD服務。

      Prometheus exporter相關參數

      –prometheus-address:綁定Prometheus抓取端點的地址,默認為127.0.0.1–prometheus-port:綁定Prometheus抓取端點的端口,默認為20257,使用0禁用

      Stackdriver exporter相關參數

      –exporter.stackdriver:Stackdriver exporter程序配置文件的路徑,例如:config/exporter/stackdriver-exporter.json,默認為空字符串。 設置為空字符串以禁用。

      五 模擬測試

      sudo sh -c "echo 'kernel: BUG: unable to handle kernel NULL pointer dereference at TESTING' >> /dev/kmsg"

      sudo sh -c "echo 'kernel: INFO: task docker:20744 blocked for more than 120 seconds.' >> /dev/kmsg"

      六 其他

      如果鏡像拉取異常,可以嘗試使用我的鏡像:

      通過自定義配置健康Node節點的規則,可以在K8s Api-server的事件中獲取到具體的告警信息。

      node-problem-detector是一個K8S加載項(Addon),目的是將節點故障暴露給集群管理的上層組件。NPD通常運行為DaemonSet,也可以作為獨立進程運行。NPD會檢測各種各樣的節點問題,NodeCondition:當遇到永久性的節點故障,導致其不可用時,設置節點的NodeCondition,Event:可能對Pod產生影響的臨時信息。

      參考鏈接

      http://dockone.io/article/2434546

      https://github.com/kubernetes/node-problem-detector

      https://blog.gmem.cc/problem-detection-and-auto-repairing-in-k8s

      Kubernetes安全之NPD

      Kubernetes 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:進度表甘特圖(進度甘特圖excel)
      下一篇:如何找到未保存的文檔(電腦突然斷電如何找到未保存的文檔)
      相關文章
      亚洲一级毛片在线播放| 亚洲a一级免费视频| 亚洲一区二区三区日本久久九| 久久亚洲AV成人无码国产最大| 亚洲av无码av制服另类专区| 亚洲另类少妇17p| 亚洲日韩一区二区三区| 亚洲国产成人私人影院| 亚洲无码日韩精品第一页| 国产精品久久久久久亚洲影视| 亚洲一区二区三区高清视频| 久久精品国产亚洲77777| 亚洲电影一区二区三区| 久久精品国产精品亚洲精品| 亚洲国产成人久久综合一区77| 亚洲依依成人亚洲社区| 亚洲在成人网在线看| 久久青青草原亚洲AV无码麻豆 | 亚洲男人的天堂在线va拉文 | 亚洲av综合日韩| 亚洲av无码专区在线电影天堂| 精品亚洲国产成人| 亚洲无砖砖区免费| 亚洲成人在线免费观看| 亚洲高清无在码在线无弹窗 | 亚洲国产女人aaa毛片在线 | 国产成人无码综合亚洲日韩| 亚洲日韩小电影在线观看| 久久久久亚洲av成人无码电影 | 久久精品国产99精品国产亚洲性色| 亚洲AV日韩精品久久久久久| 亚洲色自偷自拍另类小说| 国产成人精品久久亚洲| 亚洲无人区午夜福利码高清完整版 | 亚洲精品456人成在线| 亚洲国产精品无码第一区二区三区| 麻豆亚洲AV成人无码久久精品 | 久久亚洲国产精品成人AV秋霞| 亚洲欧洲久久精品| 最新亚洲精品国偷自产在线| 亚洲精品无播放器在线播放|