本主题介绍如何部署适用于 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
    tanzu-system-logging 命名空间中创建了 secret/fluent-bit-data-values。使用以下命令进行验证:
    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 以查看 pod 状态。fluent-bit Pod 应为 Running。如果 pod 状态为 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 配置图。
    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 Bit 服务帐户的名称 string fluent-bit
logging.cluster_role_name 为 fluent bit 授予获取、监视和列出权限的集群角色的名称 string fluent-bit-read
logging.image.name 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 端口 integer 空(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 端口 integer 空(output_plugin 为 splunk 时为必填参数)
fluent_bit.splunk.token 为 HTTP 事件收集器接口指定身份验证令牌 string 空(output_plugin 为 splunk 时为必填参数)
fluent_bit.http.host 目标 HTTP 服务器的 IP 地址或主机名 string 空(output_plugin 为 http 时为必填参数)
fluent_bit.http.port 目标 HTTP 服务器的 TCP 端口 integer 空(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 端口 integer 空(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 从主机节点的文件系统到 pod 的目录路径(对于卷 1) string /var/log
host_path.volume_2 从主机节点的文件系统到 pod 的目录路径(对于卷 2) string /var/lib/docker/containers
host_path.volume_3 从主机节点的文件系统到 pod 的目录路径(对于卷 3) string /run/log
systemd.path Systemd 日志目录的路径 string /var/log/journal