Kubernetes:仅将 Fluentd 安装到命名空间

Kubernetes: Install Fluentd to a namespace only

我从 https://github.com/fluent/fluentd-kubernetes-daemonset 获得了 fluentd-kubernetes-daemonset 图表,并将 fluentd 作为 daemonset 部署到 kube-system 命名空间中。它将整个集群日志发送到 elasticsearch。我们将 csc 应用程序部署在 csc 命名空间中。我们不想将 fluentd 安装为 daemonset 来收集整个集群日志,而是希望仅将 fluentd 部署在 csc 命名空间中,并且仅将 csc 日志(csc 命名空间中的日志)发送到 elasticsearch。有办法吗?

您在此处共享的 link 具有 namespace: kube-system,这就是它在 kube-system 命名空间中创建的原因。所以要使用您的命名空间,请编辑 yaml 文件并在 yaml 文件的所有位置替换 namepsace: csc 并将其应用于 kubernetes。

并且您部署为 daemonsets,因此它会 运行 每个节点上的 fluentd pod。

这是将日志架构记录到 运行 每个节点上的 DaemonSet 并收集日志的典型解决方案:

Because the logging agent must run on every node, it's common to implement it as either a DaemonSet replica, a manifest pod, or a dedicated native process on the node. However the latter two approaches are deprecated and highly discouraged.

您可能希望使用 parser and filter 插件根据您的需要调整和解析日志消息。

This and this文档展示了解析日志的例子。

您需要修复 https://github.com/fluent/helm-charts/blob/main/charts/fluentd/values.yaml 中的过滤器配置 要从特定命名空间收集日志,您可以在 02_filters.conf:

部分禁止所有其他命名空间
  <match kubernetes.var.log.containers.**_kube-system_**>
    @type null
    @id ignore_kube_system_logs
  </match>
  ......
  <match kubernetes.var.log.containers.**NAMESPACE**>
    @type null
    @id ignore_NAMESPACE_logs
  </match>

我这样做了,看起来没问题