本主题介绍如何部署适用于 Fluent Bit 的 TKG 扩展 v1.3.1。Fluent Bit 是一种快速的轻型日志处理器和转发器,可用于从不同来源收集应用程序数据和日志,并统一并将其发送到多个目标。部署适用于 Fluent Bit 的 TKG 扩展以收集 Tanzu Kubernetes 集群日志并转发到所选目标。
扩展必备条件
在为 Fluent Bit 部署 TKG 扩展 v1.3.1 之前,请遵循以下要求。
- 置备集群。请参见使用 TKGS v1alpha2 API 置备 Tanzu Kubernetes 集群的工作流。
- 连接到集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。
- 下载 TKG 扩展 v1.3.1 包到运行 kubectl 的客户端主机上。
- 在目标集群上安装 TKG 扩展必备条件。
部署 Fluent Bit 扩展
适用于 Fluent Bit 的 TKG 扩展会在集群上安装 Fluent Bit 容器。有关此容器的详细信息,请参见
https://fluentbit.io/。
该扩展配置为从位于
https://projects.registry.vmware.com/ 的 VMware 公共注册表中提取容器。如果使用专用注册表,请更改数据值和扩展配置文件中的端点 URL,以便匹配。有关字段和选项的描述,请参见
配置 Fluent Bit 扩展。
容器 | 资源类型 | 副本 | 描述 |
---|---|---|---|
Fluent Bit | DaemonSet | 6 | 日志收集器、集成器、转发器 |
- 确认已完成每个扩展必备条件。请参见扩展必备条件。
- 将目录更改为 Fluent Bit 扩展。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/logging/fluent-bit
- 创建
tanzu-system-logging
命名空间以及 Fluent Bit 服务帐户和角色对象。kubectl apply -f namespace-role.yaml
- 确定要用于 Fluent Bit 的日志目标。支持的输出包括 Elasticsearch、HTTP、Kafka、Splunk 和 Syslog。有关详细信息,请参见https://docs.fluentbit.io/manual/pipeline/outputs。
- 通过复制其中一个
<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
- 通过填充
<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"
- 使用日志目标的数据值创建 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
- 部署 Fluent Bit 应用。
kubectl apply -f fluent-bit-extension.yaml
成功后,应该会看到
app.kappctrl.k14s.io/fluent-bit created
。 - 检查 Fluent Bit 应用的状态。
kubectl get app fluent-bit -n tanzu-system-logging
成功后,状态应从Reconciling
更改为Reconcile succeeded
。如果状态为Reconcile failed
,请参见对 Fluent Bit 部署进行故障排除。 - 在应用上查看详细状态。
kubectl get app fluent-bit -n tanzu-system-logging -o yaml
- 验证 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 状态为 ImagePullBackOff
或 ImageCrashLoopBackOff
,则无法提取容器映像。检查数据值和扩展 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 扩展。
- 从密钥获取 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
- 更新
fluent-bit-data-values.yaml
中的 Fluent Bit 数据值。请参见配置 Fluent Bit 扩展。 - 更新 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 扩展。 - 检查扩展的状态。
kubectl get app fluent-bit -n tanzu-system-logging
- 查看详细状态并进行故障排除。
kubectl get app fluent-bit -n tanzu-system-logging -o yaml
- 如有必要,进行故障排除。请参见对 Fluent Bit 部署进行故障排除。
删除 Fluent Bit 扩展
从
Tanzu Kubernetes 集群中删除 Fluent Bit 扩展。
注: 按顺序完成步骤。在完全删除 Fluent Bit 应用之前,请勿删除命名空间、服务帐户和角色对象。这样做可能会导致系统错误。
- 将目录更改为 Fluent Bit 扩展。
cd extensions/logging/fluent-bit/
- 删除 Fluent Bit 应用。
kubectl delete app fluent-bit -n tanzu-system-logging
预期结果:
app.kappctrl.k14s.io "fluent-bit" deleted
。 - 验证是否已删除 Fluent Bit 应用。
kubectl get app fluent-bit -n tanzu-system-logging
预期结果:
apps.kappctrl.k14s.io "fluent-bit" not found
。 - 删除
tanzu-system-logging
命名空间以及 Fluent Bit 扩展服务帐户和角色对象。kubectl delete -f namespace-role.yaml
升级 Fluent Bit 扩展
如果部署了现有的 Fluent Bit 扩展,可以将其升级到最新版本。
- 导出 Fluent Bit 配置图。
kubectl get configmap fluent-bit -n tanzu-system-logging -o 'go-template={{ index .data "fluent-bit.yaml" }}' > fluent-bit-configmap.yaml
- 删除现有的 Fluent Bit 部署。请参见删除 Fluent Bit 扩展。
- 部署最新的 Fluent Bit 扩展。请参见部署 Fluent Bit 扩展。
配置 Fluent Bit 扩展
配置值在
extensions/logging/fluent-bit/<LOG_BACKEND>/fluent-bit-data-values.yaml
中进行配置。
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
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 |