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]
所以我有几个问题:
- fluentd 安装卷然后读取那些被推送到 elasticsearch 的卷中的文件吗?
- 我可以只移除卷安装吗?或者这对它的运行至关重要吗?
- fluentd 是否完全使用 kubernetes API?
- 是否有任何非 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 来收集日志并将其转发到数据库。查看文档了解更多详情。
在我的公司,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]
所以我有几个问题:
- fluentd 安装卷然后读取那些被推送到 elasticsearch 的卷中的文件吗?
- 我可以只移除卷安装吗?或者这对它的运行至关重要吗?
- fluentd 是否完全使用 kubernetes API?
- 是否有任何非 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 来收集日志并将其转发到数据库。查看文档了解更多详情。