監控節點健康狀況
節點問題偵測器是一個用於監控和報告節點健康狀況的常駐程式。您可以將節點問題偵測器作為 DaemonSet
或獨立常駐程式執行。節點問題偵測器從各種常駐程式收集有關節點問題的資訊,並將這些狀況作為節點狀況或事件報告給 API 伺服器。
若要瞭解如何安裝和使用節點問題偵測器,請參閱節點問題偵測器專案文件。
開始之前
您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且這些節點未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用minikube建立一個,或者您可以使用以下 Kubernetes 實驗環境
限制
- 節點問題偵測器使用核心日誌格式來報告核心問題。若要瞭解如何擴展核心日誌格式,請參閱新增對其他日誌格式的支援。
啟用節點問題偵測器
某些雲端供應商將節點問題偵測器作為附加元件啟用。您也可以使用 kubectl
或建立附加元件 DaemonSet 來啟用節點問題偵測器。
使用 kubectl 啟用節點問題偵測器
kubectl
提供對節點問題偵測器最彈性的管理。您可以覆寫預設組態以使其適合您的環境或偵測自訂節點問題。例如
建立類似於
node-problem-detector.yaml
的節點問題偵測器組態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 啟用節點問題偵測器
如果您使用自訂叢集啟動解決方案,並且不需要覆寫預設組態,則可以利用附加元件 Pod 來進一步自動化部署。
建立 node-problem-detector.yaml
,並將組態儲存在控制平面節點上附加元件 Pod 的目錄 /etc/kubernetes/addons/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
使用新的組態檔重新建立節點問題偵測器
# 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 以叢集 Addon 方式執行,則不支援覆寫組態。Addon 管理器不支援 ConfigMap
。
問題守護進程
問題守護進程是 Node Problem Detector 的子守護進程。它監控特定種類的節點問題,並將其回報給 Node Problem Detector。目前支援幾種類型的問題守護進程。
SystemLogMonitor
類型的守護進程會監控系統日誌,並根據預定義的規則回報問題和指標。您可以自訂不同日誌來源的組態,例如 filelog、kmsg、kernel、abrt 和 systemd。SystemStatsMonitor
類型的守護進程會收集各種與健康狀態相關的系統統計資訊作為指標。您可以透過更新其 組態檔來自訂其行為。CustomPluginMonitor
類型的守護進程會透過執行使用者定義的腳本來調用和檢查各種節點問題。您可以使用不同的自訂外掛程式監控器來監控不同的問題,並透過更新 組態檔來自訂守護進程的行為。HealthChecker
類型的守護進程會檢查節點上 kubelet 和容器執行階段的健康狀態。
新增對其他日誌格式的支援
系統日誌監控器目前支援基於檔案的日誌、journald 和 kmsg。可以透過實作新的 log watcher 來新增其他來源。
新增自訂外掛程式監控器
您可以透過開發自訂外掛程式來擴充 Node Problem Detector,以執行任何以任何語言編寫的監控腳本。監控腳本必須符合外掛程式協定的結束代碼和標準輸出。如需更多資訊,請參閱外掛程式介面提案。
匯出器
匯出器會將節點問題和/或指標回報給特定的後端。目前支援以下匯出器
Kubernetes 匯出器:此匯出器會將節點問題回報給 Kubernetes API 伺服器。暫時性問題會回報為事件 (Events),而永久性問題則會回報為節點狀況 (Node Conditions)。
Prometheus 匯出器:此匯出器會在本地將節點問題和指標回報為 Prometheus (或 OpenMetrics) 指標。您可以使用命令列引數來指定匯出器的 IP 位址和埠。
Stackdriver 匯出器:此匯出器會將節點問題和指標回報給 Stackdriver Monitoring API。可以使用 組態檔來自訂匯出行為。
建議與限制
建議在您的叢集中執行 Node Problem Detector,以監控節點健康狀態。執行 Node Problem Detector 時,您可以預期每個節點上都會有額外的資源開銷。通常這沒有問題,因為
- 核心日誌成長速度相對較慢。
- 已為 Node Problem Detector 設定資源限制。
- 即使在高負載下,資源使用量也是可接受的。如需更多資訊,請參閱 Node Problem Detector 基準測試結果。