0

在我的公司,Kubernetes 集群是由一个团队管理的,我们必须提供一个命名空间,然后创建我们的资源。我们不能使用诸如hostPath卷之类的特性,也不能创建新的角色或命名空间等。

fluentd-elasticsearch因此,将容器的示例实现视为 a 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. 流利的安装卷然后读取那些被推送到弹性搜索的卷中的文件吗?
  2. 我可以仅删除卷安装还是对其运行至关重要?
  3. fluentd 是否完全使用 kubernetes API?
  4. 是否有任何非守护程序集容器只会使用 kubernetes API 来获取 pod,然后使用 log api 转发到 log db?
4

1 回答 1

2

流利的安装卷然后读取那些被推送到弹性搜索的卷中的文件吗?

Docker 将日志存储在节点的磁盘上。Fluentd 需要以某种方式访问​​此日志文件;这就是为什么它作为守护进程运行的原因,您需要它在每个具有主机路径的节点上运行以访问日志文件。

我可以仅删除卷安装还是对其运行至关重要?

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

fluentd 是否完全使用 kubernetes API?

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

是否有任何非守护程序集容器只会使用 kubernetes API 来获取 pod,然后使用 log api 转发到 log db?

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

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

于 2020-12-29T10:29:59.273 回答