Kubernetes (1.20) 集群中的 Graylog

Graylog in Kubernetes (1.20) cluster

我尝试设置 graylog
此部署有效。但我需要向 graylog 部署添加一个卷。因为我要安装插件。 当我添加卷 (hostPath) 并启动 pod 时,我的 pod 中出现错误:

ERROR StatusLogger File not found in file system or classpath: /usr/share/graylog/data/config/log4j2.xml
ERROR StatusLogger Reconfiguration failed: No configuration found for '70dea4e' at 'null' in 'null'
06:37:19.707 [main] ERROR org.graylog2.bootstrap.CmdLineTool - Couldn't load configuration: Properties file /usr/share/graylog/data/config/graylog.conf doesn't exist!

我明白了,那个 pod 在卷中创建了目录(所有者 ID 1100:1100),但是那里没有任何文件。

Kubernetes 版本为 1.20 我的 kubernetes 集群中的运行时是“containerd”。

我的 Graylog 部署:

  1. 容器的体积单位:

volumeMounts:
    - mountPath: /usr/share/graylog/data
      name: graylog-data
  1. 音量:

 volumes:
  - name: graylog-data
    hostPath:
      path: /mnt/k8s-storage/graylog-data
      type: DirectoryOrCreate

hostPath 卷的概念开始,这里几乎没有什么要看的:

A hostPath volume mounts a file or directory from the host node's filesystem into your Pod.

Pods with identical configuration (such as created from a PodTemplate) may behave differently on different nodes due to different files on the nodes

The files or directories created on the underlying hosts are only writable by root. You either need to run your process as root in a privileged Container or modify the file permissions on the host to be able to write to a hostPath volume

hostPath 如果您想在 DaemonSet 中将其用于日志收集器 运行ning,那么 hostPath 会很好,但在您描述的用例中,它可能并不理想因为你不直接控制你的 pods 将 运行 在哪个节点上,所以你不能保证 pod 实际上会被调度到具有数据量的节点上。

但如果不是这样,您还需要注意 type: DirectoryOrCreate 在这里不是最好的,因为我看到您想要加载文件。最好使用:

  • File: 文件必须存在于给定路径

  • FileOrCreate:如果给定路径不存在任何内容,将根据需要在此处创建一个空文件,权限设置为 0644,与 Kubelet 具有相同的组和所有权。

最后,可能存在权限问题。如前所述:

The files or directories created on the underlying hosts are only writable by root.

Graylog 是 运行 可能对您有帮助的 userid 1100 which might cause a permission denial. Also, I have found a similar issue