fluentd-elasticsearch 无法挂载 hostPath 卷错误

fluentd-elasticsearch unable to mount hostPath volume error

在我的公司,kubernetes 集群由一个团队管理,我们必须提供一个命名空间,然后创建我们的资源。我们无法使用 hostPath 卷等功能,也无法创建新角色或命名空间等

所以看看 fluentd-elasticsearch 容器作为 DaemonSet 的示例实现,它们似乎都在使用 hostPath 卷安装,但我不确定为什么。

例如,我 运行 通过这个: https://www.howtoforge.com/create-a-daemonset-in-kubernetes/

并创建了这个:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-fluentd-elasticsearch-daemonset
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd-elasticsearch
        image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

但是出现这个错误:

Error creating: pods "fluentd-elasticsearch-" is forbidden: unable to validate against any pod 
security policy: [spec.volumes[0]: Invalid value: "hostPath": hostPath volumes are not allowed 
to be used spec.volumes[1]: Invalid value: "hostPath": hostPath volumes are not allowed to be 
used]

所以我有几个问题:

  1. fluentd 安装卷然后读取那些被推送到 elasticsearch 的卷中的文件吗?
  2. 我可以只移除卷安装吗?或者这对它的运行至关重要吗?
  3. fluentd 是否完全使用 kubernetes API?
  4. 是否有任何非 daemonset 容器只使用 kubernetes API 获取 pods 然后使用日志 api 转发到日志数据库?

Is fluentd mounting volumes then reading files in those volumes that get pushed out to elasticsearch?

Docker 正在节点磁盘上存储日志。 Fluentd 需要以某种方式访问​​此日志文件;这就是为什么它 运行 宁作为 daemonset,你需要它 运行 在每个具有主机路径的节点上访问日志文件。

Can I just remove the volume mounting or is that essential to it functioning?

不,您不能“只删除”卷挂载(主机路径),因为 fluentd 将失去对 docker 保留在节点上的日志文件的访问权。

Is fluentd using the kubernetes API at all?

这个问题没有直接的答案。我发现有一些插件可以使用 k8s api 访问 k8s 元数据,但我还没有找到任何插件可以使用 k8s api 来提取日志。

Are there any non-daemonset containers which would just use the kubernetes API to get the pods then use log api to forward to a log db?

k8s 文档中描述了一些与此类似的内容:sidecar container with a logging agent

所以是的,您可以将 fluentd 部署为 sidecar 来收集日志并将其转发到数据库。查看文档了解更多详情。