本主題說明如何部署適用於 Fluent Bit 的 TKG 延伸 v1.3.1。Fluent Bit 是一個快速輕量型記錄處理器和轉寄站,可讓您從不同的來源收集應用程式資料與記錄,並統一和傳送至多個目的地。部署 Fluent Bit 的 TKG 延伸,以收集 Tanzu Kubernetes 叢集記錄並將其轉送至所選目的地。

延伸必要條件

部署適用於 Fluent Bit 的 TKG 延伸 v1.3.1 之前,請遵循下列需求。

部署 Fluent Bit 延伸

適用於 Fluent Bit 的 TKG 延伸會在叢集上安裝 Fluent Bit 容器。如需有關此容器的詳細資訊,請參閱 https://fluentbit.io/
容器 資源類型 複本 說明
Fluent Bit DaemonSet 6 記錄收集器、彙總工具、轉寄站
延伸設定為從位於 https://projects.registry.vmware.com/ 的 VMware 公用登錄提取容器。如果使用私人登錄,請變更資料值和延伸組態檔中的端點 URL 以便相符。如需欄位和選項的說明,請參閱 設定 Fluent Bit 延伸
  1. 確認您已完成各個延伸必要條件。請參閱延伸必要條件
  2. 將目錄變更為 Fluent Bit 延伸。
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
  3. 建立 tanzu-system-logging 命名空間以及 Fluent Bit 服務帳戶和角色物件。
    kubectl apply -f namespace-role.yaml
  4. 決定要用於 Fluent Bit 的記錄目的地。支援的輸出包括 Elasticsearch、HTTP、Kafka、Splunk 和 Syslog。如需詳細資訊,請參閱https://docs.fluentbit.io/manual/pipeline/outputs
  5. 透過複製其中一個 <LOG_BACKEND>/fluent-bit-data-values.example.yaml 檔案,為所選記錄目的地建立 Fluent Bit 資料值檔案。
    每個支援的記錄目的地都有一個範例資料值檔案。此範例會提供該記錄目的地的最低組態。
    cp elasticsearch/fluent-bit-data-values.yaml.example elasticsearch/fluent-bit-data-values.yaml
    cp http/fluent-bit-data-values.yaml.example http/fluent-bit-data-values.yaml
    cp kafka/fluent-bit-data-values.yaml.example kafka/fluent-bit-data-values.yaml
    cp splunk/fluent-bit-data-values.yaml.example splunk/fluent-bit-data-values.yaml
    cp syslog/fluent-bit-data-values.yaml.example syslog/fluent-bit-data-values.yaml
  6. 填入 <LOG_BACKEND>/fluent-bit-data-values.yaml 以設定 Fluent Bit 延伸。如需欄位和選項的說明,請參閱設定 Fluent Bit 延伸
    例如,Fluent Bit Syslog 組態需要下列值:
    logging:
      image:
        repository: projects.registry.vmware.com/tkg # Public registry
    tkg:
      instance_name: "<TKG_INSTANCE_NAME>" #mandatory but arbitrary; appears in logs
      cluster_name: "<CLUSTER_NAME>" #name of the target tkgs cluster
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "<SYSLOG_HOST>"
        port: "<SYSLOG_PORT>"
        mode: "<SYSLOG_MODE>"
        format: "<SYSLOG_FORMAT>"
    Fluent Bit Syslog 的填入資料值檔案可能有以下組態:
    logging:
      image:
        repository: projects.registry.vmware.com/tkg
    tkg:
      instance_name: "tkgs-cluster-1"
      cluster_name: "tkgs-cluster-1"
    fluent_bit:
      output_plugin: "syslog"
      syslog:
        host: "10.192.175.59"
        port: "514"
        mode: "tcp"
        format: "rfc5424"
  7. 使用記錄目的地的資料值建立 Fluent Bit 密碼。
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=elasticsearch/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=kafka/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=splunk/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=http/fluent-bit-data-values.yaml -n tanzu-system-logging
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=syslog/fluent-bit-data-values.yaml -n tanzu-system-logging
    secret/fluent-bit-data-values 是在 tanzu-system-logging 命名空間中建立的。使用下列命令進行驗證:
    kubectl get secrets -n tanzu-system-logging
  8. 部署 Fluent Bit 應用程式。
    kubectl apply -f fluent-bit-extension.yaml

    成功後,您應該會看到 app.kappctrl.k14s.io/fluent-bit created

  9. 檢查 Fluent Bit 應用程式的狀態。
    kubectl get app fluent-bit -n tanzu-system-logging
    成功後,狀態應從 Reconciling 變更為 Reconcile succeeded。如果狀態為 Reconcile failed,請參閱疑難排解 Fluent Bit 部署
  10. 檢視有關應用程式的詳細狀態。
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  11. 驗證 Fluent Bit DeamonSet。
    kubectl get daemonsets -n tanzu-system-logging
    成功後,您應該會看到下列內容:
    NAME         DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    fluent-bit   6         6         6       6            6           <none>          105s

疑難排解 Fluent Bit 部署

如果部署或協調失敗,請執行 kubectl get pods -A 以檢視網繭狀態。fluent-bit 網繭的狀態應為 Running。如果網繭狀態為 ImagePullBackOffImageCrashLoopBackOff,則無法提取容器映像。檢查資料值和延伸 YAML 檔案中的登錄 URL,並確保其正確無誤。

檢查容器記錄,其中 name-XXXX 是您在執行 kubectl get pods -A 時可以看到的唯一網繭名稱:
kubectl logs pod/fluent-bit-XXXXX -c fluent-bit -n tanzu-system-logging

更新 Fluent Bit 延伸

更新部署到 Tanzu Kubernetes 叢集的 Fluent Bit 延伸。

  1. 從密碼取得 Fluent Bit 資料值。
    kubectl get secret fluent-bit-data-values -n tanzu-system-logging -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > fluent-bit-data-values.yaml
    
  2. 更新 fluent-bit-data-values.yaml 中的 Fluent Bit 資料值。請參閱設定 Fluent Bit 延伸
  3. 更新 Fluent Bit 資料值密碼。
    kubectl create secret generic fluent-bit-data-values --from-file=values.yaml=fluent-bit-data-values.yaml -n tanzu-system-logging -o yaml --dry-run | kubectl replace -f-
    
    將使用上述資料值重新協調 Fluent Bit 延伸。
    備註: 依預設,kapp-controller 將每 5 分鐘同步一次應用程式。更新應在 5 分鐘內生效。如果您想讓更新立即生效,請變更 fluent-bit-extension.yaml 中的 syncPeriod 為較小值,然後使用 kubectl apply -f fluent-bit-extension.yaml 來套用 Fluent Bit 延伸。
  4. 檢查該延伸的狀態。
    kubectl get app fluent-bit -n tanzu-system-logging
  5. 檢視詳細狀態和疑難排解。
    kubectl get app fluent-bit -n tanzu-system-logging -o yaml
  6. 視需要進行疑難排解。請參閱疑難排解 Fluent Bit 部署

刪除 Fluent Bit 延伸

Tanzu Kubernetes 叢集刪除 Fluent Bit 延伸。
備註: 按順序完成步驟。請不要在完全刪除 Fluent Bit 應用程式之前,先刪除命名空間、服務帳戶和角色物件。這樣做可能會導致系統錯誤。
  1. 將目錄變更為 Fluent Bit 延伸。
    cd extensions/logging/fluent-bit/
  2. 刪除 Fluent Bit 應用程式。
    kubectl delete app fluent-bit -n tanzu-system-logging

    預期結果:app.kappctrl.k14s.io "fluent-bit" deleted

  3. 確認 Fluent Bit 應用程式是否已刪除。
    kubectl get app fluent-bit -n tanzu-system-logging

    預期結果:apps.kappctrl.k14s.io "fluent-bit" not found

  4. 刪除 tanzu-system-logging 命名空間以及 Fluent Bit 延伸服務帳戶和角色物件。
    kubectl delete -f namespace-role.yaml

升級 Fluent Bit 延伸

如果已部署現有的 Fluent Bit 延伸,可以將其升級至最新版本。
  1. 匯出 Fluent Bit configmap。
    kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
    
  2. 刪除現有的 Fluent Bit 部署。請參閱刪除 Fluent Bit 延伸
  3. 部署最新的 Fluent Bit 延伸。請參閱部署 Fluent Bit 延伸

設定 Fluent Bit 延伸

組態值於 extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml 中設定。
表 1. Fluent Bit 延伸組態
參數 說明 類型 預設值
logging.namespace 將部署 Fluent Bit 的命名空間 string tanzu-system-logging
logging.service_account_name Fluent Bit 服務帳戶的名稱 string fluent-bit
logging.cluster_role_name 授與取得、監視和列示權限的叢集角色名稱 string fluent-bit-read
logging.image.name Fluent Bit 映像的名稱 string fluent-bit
logging.image.tag Fluent Bit 映像標籤。如果您要升級版本,則可能需要更新此值。 string v1.6.9_vmware.1
logging.image.repository 具有 Fluent Bit 映像的存放庫的位置。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 string projects.registry.vmware.com/tkg
logging.image.pullPolicy Fluent Bit 提取原則 string IfNotPresent
logging.update_strategy 更新在更新 DaemonSet 時所使用的策略 string RollingUpdate
tkg.cluster_name Tanzu Kubernetes 叢集的名稱 string 空值 (必要參數)
tkg.instance_name TKG 執行個體的使用者定義名稱,由一個部署中的主管叢集及所有 Tanzu Kubernetes 叢集共用。可以使用與安裝相關的任何名稱。 string 空值 (必要參數)
備註: 此欄位為必填,但內容是任意的。這是顯示在記錄中的名稱。
fluent_bit.log_level 要用於 Fluent Bit 的記錄層級 string 資訊
fluent_bit.output_plugin 設定 Fluent Bit 應排清所收集之資訊的後端 string 空值 (必要參數)
fluent_bit.elasticsearch.host 目標 Elasticsearch 執行個體的 IP 位址或主機名稱 string 空值 (output_plugin 為彈性搜尋時的必要參數)
fluent_bit.elasticsearch.port 目標 Elasticsearch 執行個體的 TCP 連接埠 整數 空值 (output_plugin 為彈性搜尋時的必要參數)
fluent_bit.elasticsearch.buffer_size 指定用來讀取 Elasticsearch 服務回應的緩衝區大小。若為 False,則設定為無限制 string False
fluent_bit.elasticsearch.tls 指定適用於 Elasticsearch 之 TLS 的預設設定 string 關閉
fluent_bit.kafka.broker_service_name Kafka Broker 的多個清單之一,例如:192.168.1.3:9092 string 空值 (output_plugin 為 kafka 時的必要參數)
fluent_bit.kafka.topic_name Fluent Bit 用於將訊息傳送給 Kafka 的單一項目或以 (,) 分隔的主題清單 string 空值 (output_plugin 為 kafka 時的必要參數)
fluent_bit.splunk.host 目標 Splunk 伺服器的 IP 位址或主機名稱 string 空值 (output_plugin 為 splunk 時的必要參數)
fluent_bit.splunk.port 目標 Splunk 伺服器的 TCP 連接埠 整數 空值 (output_plugin 為 splunk 時的必要參數)
fluent_bit.splunk.token 指定 HTTP 事件收集器介面的驗證 Token string 空值 (output_plugin 為 splunk 時的必要參數)
fluent_bit.http.host 目標 HTTP 伺服器的 IP 位址或主機名稱 string 空值 (output_plugin 為 http 時的必要參數)
fluent_bit.http.port 目標 HTTP 伺服器的 TCP 連接埠 整數 空值 (output_plugin 為 http 時的必要參數)
fluent_bit.http.mode 指定目標 Web 服務器的 HTTP URI string 空值 (output_plugin 為 http 時的必要參數)
fluent_bit.http.header_key_value HTTP 標頭索引鍵/值配對。可以設定多個標頭 string 空值 (output_plugin 為 http 時的必要參數)
fluent_bit.http.format 指定要用於 HTTP 要求本文的資料格式 string 空值 (output_plugin 為 http 時的必要參數)
fluent_bit.syslog.host 遠端 Syslog 伺服器的網域或 IP 位址 string 空值 (output_plugin 為 syslog 時的必要參數)
fluent_bit.syslog.port 遠端 Syslog 伺服器的 TCP 或 UDP 連接埠 整數 空值 (output_plugin 為 syslog 時的必要參數)
fluent_bit.syslog.mode 從 TCP、UDP 和 TLS 指定傳輸類型 string 空值 (output_plugin 為 syslog 時的必要參數)
fluent_bit.syslog.format 指定要用於 HTTP 要求本文的資料格式 string 空值 (output_plugin 為 syslog 時的必要參數)
host_path.volume_1 從主機節點檔案系統到網繭的目錄路徑 (針對磁碟區 1) string /var/log
host_path.volume_2 從主機節點檔案系統到網繭的目錄路徑 (針對磁碟區 2) string /var/lib/docker/containers
host_path.volume_3 從主機節點檔案系統到網繭的目錄路徑 (針對磁碟區 3) string /run/log
systemd.path Systemd 日誌目錄的路徑 string /var/log/journal