下面是第二步:创建配置文件(ConfigMap)的完整文档,包括详细说明、字段解释以及一键可用的命令👇
🧾 第二步:创建配置文件(ConfigMap)
🧠 1. 什么是 ConfigMap?
在 Kubernetes 中,ConfigMap 用于将配置信息从容器镜像中分离出来,方便灵活地管理配置。
本例中,我们通过 ConfigMap 来为 Fluent Bit 提供日志采集的完整配置,包括:
- 主配置(
fluent-bit.conf
) - 输入配置(
input-kube.conf
) - 过滤配置(
filter-kube.conf
) - 输出配置(Kafka & stdout)
- 解析器配置(
parsers.conf
)
🧰 2. 配置文件 YAML 详解
以下为一份可直接使用的配置文件 fluent-bit-config.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:name: fluent-bit-confignamespace: logging
data:fluent-bit.conf: |[SERVICE]Flush 1Log_Level debugDaemon OffParsers_File parsers.conf# IPv6 网络环境可启用# IPv6 On@INCLUDE input-kube.conf@INCLUDE filter-kube.conf@INCLUDE output-kafka.conf@INCLUDE output-stdout.conf# ====================== INPUT ======================input-kube.conf: |[INPUT]Name tailTag kube.*Path /var/log/containers/assign*.logDB /buffers/flb_kube.dbDB.Sync NormalParser dockerDocker_Mode OnMem_Buf_Limit 50MBSkip_Long_Lines OnRefresh_Interval 10# ====================== FILTER ======================filter-kube.conf: |# 注入 Kubernetes 元数据[FILTER]Name kubernetesMatch *Kube_URL https://kubernetes.default.svc.cluster.local:443Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crtKube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/tokenMerge_Log OnBuffer_Size 0[FILTER]Name nestMatch *Operation liftNested_under kubernetes[FILTER]Name nestMatch *Operation liftNested_under labels[FILTER]Name modifyMatch *Rename app job_name[FILTER]Name grepMatch *Regex container_name *-job# ====================== OUTPUT - Kafka ======================output-kafka.conf: |[OUTPUT]Name kafkaMatch kube.*Brokers 172.22.162.152:31092Topics k8s-pod-logsrdkafka.log.connection.close falseTimestamp_Key @timestampFormat jsonMessage_Key pod_nameRetry_Limit false# ====================== OUTPUT - Stdout ======================output-stdout.conf: |[OUTPUT]Name stdoutMatch *# ====================== PARSER ======================parsers.conf: |[PARSER]Name dockerFormat jsonTime_Key timeTime_Format %Y-%m-%dT%H:%M:%S.%LTime_Keep On
🧩 3. 各部分配置详解
区块 | 功能 | 说明 |
---|---|---|
[SERVICE] |
全局服务配置 | 定义 flush 间隔、日志等级、解析器文件等。 |
[INPUT] |
日志采集输入 | 使用 tail 插件采集 Pod 的容器日志。 |
[FILTER] |
过滤与增强 | 注入 K8s 元数据、重命名字段、过滤符合条件的日志。 |
[OUTPUT] |
日志输出 | 输出到 Kafka 与 stdout,便于调试与后续处理。 |
[PARSER] |
解析规则 | 将 Docker 容器日志从 JSON 解析为结构化字段。 |
⚠️ 注意:
namespace
必须与前面创建的命名空间(如logging
)一致。Brokers
地址应根据你的 Kafka 实际部署地址进行修改。Path
路径应匹配实际的容器日志路径。- 在生产环境中可以适当调整
Mem_Buf_Limit
和Flush
频率以避免内存溢出。
🛠️ 4. 一键创建命令
将上面的内容保存为 fluent-bit-config.yaml
后,使用以下命令创建 ConfigMap:
kubectl apply -f fluent-bit-config.yaml
或者,使用命令行直接创建(适合快速调试):
kubectl create configmap fluent-bit-config \--namespace=logging \--from-file=fluent-bit.conf \--from-file=input-kube.conf \--from-file=filter-kube.conf \--from-file=output-kafka.conf \--from-file=output-stdout.conf \--from-file=parsers.conf
✅ 验证创建结果:
kubectl get configmap -n logging
kubectl describe configmap fluent-bit-config -n logging
🧽 5. 更新与删除命令
更新配置(修改文件后重新应用):
kubectl apply -f fluent-bit-config.yaml
删除 ConfigMap:
kubectl delete configmap fluent-bit-config -n logging
⚠️ 更新 ConfigMap 不会自动热加载到 Pod 中,如需生效:
- 可以使用
kubectl rollout restart daemonset fluent-bit -n logging
- 或手动重启 Pod。
📝 小结
- ✅ ConfigMap 使 Fluent Bit 的日志采集配置更加灵活和可维护。
- 🔐 配合 ServiceAccount 与 RBAC 权限,保证采集安全性。
- 🪄 通过
kubectl
命令,可以快速创建、查看和更新配置。 - 🧭 最终效果:日志采集 → 过滤 → 输出 Kafka / Stdout。
是否希望我在下一步给出 部署 DaemonSet(真正让 Fluent Bit 运行起来)的完整 YAML 和命令?(即第 3 步) 🚀