監控節點健康狀況
Node Problem Detector 是一個用於監控和報告節點健康狀況的守護程序。你可以將 Node Problem Detector 作為 DaemonSet
或獨立守護程序執行。Node Problem Detector 從各種守護程序收集有關節點問題的資訊,並將這些狀況作為節點 Condition 或 Event 報告給 API 伺服器。
要了解如何安裝和使用 Node Problem Detector,請參閱 Node Problem Detector 專案文件。
準備工作
你需要擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個非控制平面主機的節點叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一
限制
- Node Problem Detector 使用核心日誌格式報告核心問題。要了解如何擴充套件核心日誌格式,請參閱新增對其他日誌格式的支援。
啟用 Node Problem Detector
一些雲提供商將 Node Problem Detector 作為附加元件啟用。你也可以使用 kubectl
或透過建立附加元件 DaemonSet 來啟用 Node Problem Detector。
使用 kubectl 啟用 Node Problem Detector
kubectl
提供了最靈活的 Node Problem Detector 管理。你可以覆蓋預設配置以使其適應你的環境,或者檢測自定義節點問題。例如:
建立一個類似於
node-problem-detector.yaml
的 Node Problem Detector 配置apiVersion: apps/v1 kind: DaemonSet metadata: name: node-problem-detector-v0.1 namespace: kube-system labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" template: metadata: labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: hostNetwork: true containers: - name: node-problem-detector image: registry.k8s.io/node-problem-detector:v0.1 securityContext: privileged: true resources: limits: cpu: "200m" memory: "100Mi" requests: cpu: "20m" memory: "20Mi" volumeMounts: - name: log mountPath: /log readOnly: true volumes: - name: log hostPath: path: /var/log/
注意
你應該驗證系統日誌目錄是否適用於你的作業系統分發。使用
kubectl
啟動節點問題檢測器kubectl apply -f https://k8s.io/examples/debug/node-problem-detector.yaml
使用附加元件 Pod 啟用 Node Problem Detector
如果你正在使用自定義叢集引導解決方案,並且不需要覆蓋預設配置,你可以利用附加元件 Pod 進一步自動化部署。
建立 node-problem-detector.yaml
,並將配置儲存到控制平面節點上附加元件 Pod 的目錄 /etc/kubernetes/addons/node-problem-detector
中。
覆蓋配置
當構建 Node Problem Detector 的 Docker 映象時,預設配置是嵌入在其中的。
但是,你可以使用 ConfigMap
覆蓋配置
修改
config/
中的配置檔案建立
ConfigMap
node-problem-detector-config
kubectl create configmap node-problem-detector-config --from-file=config/
修改
node-problem-detector.yaml
以使用ConfigMap
apiVersion: apps/v1 kind: DaemonSet metadata: name: node-problem-detector-v0.1 namespace: kube-system labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: selector: matchLabels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" template: metadata: labels: k8s-app: node-problem-detector version: v0.1 kubernetes.io/cluster-service: "true" spec: hostNetwork: true containers: - name: node-problem-detector image: registry.k8s.io/node-problem-detector:v0.1 securityContext: privileged: true resources: limits: cpu: "200m" memory: "100Mi" requests: cpu: "20m" memory: "20Mi" volumeMounts: - name: log mountPath: /log readOnly: true - name: config # Overwrite the config/ directory with ConfigMap volume mountPath: /config readOnly: true volumes: - name: log hostPath: path: /var/log/ - name: config # Define ConfigMap volume configMap: name: node-problem-detector-config
使用新配置檔案重新建立 Node Problem Detector
# If you have a node-problem-detector running, delete before recreating kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml kubectl apply -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml
注意
此方法僅適用於透過kubectl
啟動的 Node Problem Detector。如果 Node Problem Detector 作為叢集附加元件執行,則不支援覆蓋配置。附加元件管理器不支援 ConfigMap
。
問題守護程序
問題守護程序是 Node Problem Detector 的一個子守護程序。它監控特定型別的節點問題,並將其報告給 Node Problem Detector。支援幾種型別的問題守護程序。
SystemLogMonitor
型別的守護程序監控系統日誌,並根據預定義的規則報告問題和指標。你可以為不同的日誌源自定義配置,例如 檔案日誌、kmsg、核心、abrt 和 systemd。SystemStatsMonitor
型別的守護程序將各種與健康相關的系統統計資訊收集為指標。你可以透過更新其配置檔案來自定義其行為。CustomPluginMonitor
型別的守護程序透過執行使用者定義的指令碼來呼叫和檢查各種節點問題。你可以使用不同的自定義外掛監視器來監視不同的問題,並透過更新配置檔案來自定義守護程序行為。HealthChecker
型別的守護程序檢查節點上 kubelet 和容器執行時的健康狀況。
新增對其他日誌格式的支援
系統日誌監視器目前支援基於檔案的日誌、journald 和 kmsg。可以透過實現一個新的日誌監視器來新增其他來源。
新增自定義外掛監視器
你可以透過開發自定義外掛來擴充套件 Node Problem Detector,以執行用任何語言編寫的任何監視指令碼。監視指令碼必須符合退出程式碼和標準輸出中的外掛協議。有關更多資訊,請參閱外掛介面提案。
匯出器
匯出器將節點問題和/或指標報告給某些後端。支援以下匯出器:
Kubernetes 匯出器:此匯出器將節點問題報告給 Kubernetes API 伺服器。臨時問題報告為事件,永久問題報告為節點狀況。
Prometheus 匯出器:此匯出器將節點問題和指標本地報告為 Prometheus(或 OpenMetrics)指標。你可以使用命令列引數指定匯出器的 IP 地址和埠。
Stackdriver 匯出器:此匯出器將節點問題和指標報告給 Stackdriver 監控 API。可以透過使用配置檔案來自定義匯出行為。
建議和限制
建議在叢集中執行 Node Problem Detector 以監控節點健康狀況。執行 Node Problem Detector 時,每個節點都會有額外的資源開銷。通常情況下,這沒問題,因為:
- 核心日誌增長相對緩慢。
- Node Problem Detector 設定了資源限制。
- 即使在高負載下,資源使用率也是可以接受的。有關更多資訊,請參閱 Node Problem Detector 基準測試結果。