監控節點健康狀況

節點問題偵測器是一個用於監控和報告節點健康狀況的常駐程式。您可以將節點問題偵測器作為 DaemonSet 或獨立常駐程式執行。節點問題偵測器從各種常駐程式收集有關節點問題的資訊,並將這些狀況作為節點狀況事件報告給 API 伺服器。

若要瞭解如何安裝和使用節點問題偵測器,請參閱節點問題偵測器專案文件

開始之前

您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具以與您的叢集通訊。建議在至少有兩個節點且這些節點未充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用minikube建立一個,或者您可以使用以下 Kubernetes 實驗環境

限制

啟用節點問題偵測器

某些雲端供應商將節點問題偵測器作為附加元件啟用。您也可以使用 kubectl 或建立附加元件 DaemonSet 來啟用節點問題偵測器。

使用 kubectl 啟用節點問題偵測器

kubectl 提供對節點問題偵測器最彈性的管理。您可以覆寫預設組態以使其適合您的環境或偵測自訂節點問題。例如

  1. 建立類似於 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/
  2. 使用 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 來覆寫組態

  1. 變更 config/ 中的組態檔

  2. 建立 ConfigMap node-problem-detector-config

    kubectl create configmap node-problem-detector-config --from-file=config/
    
  3. 變更 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
  4. 使用新的組態檔重新建立節點問題偵測器

    # 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
    

如果 Node Problem Detector 以叢集 Addon 方式執行,則不支援覆寫組態。Addon 管理器不支援 ConfigMap

問題守護進程

問題守護進程是 Node Problem Detector 的子守護進程。它監控特定種類的節點問題,並將其回報給 Node Problem Detector。目前支援幾種類型的問題守護進程。

  • SystemLogMonitor 類型的守護進程會監控系統日誌,並根據預定義的規則回報問題和指標。您可以自訂不同日誌來源的組態,例如 filelogkmsgkernelabrtsystemd

  • 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 基準測試結果
上次修改時間:2023 年 8 月 24 日下午 6:38 PST:Use code_sample shortcode instead of code shortcode (e8b136c3b3)