K8S中通过subpath实现节点上各pod的日志隔离

在生产中,需要对每个pod的日志在磁盘记录,之后再被专用的agent采集走。在旧的k8s中,项目使用是flexvolume,但从1.23版本后,将不再支持。因而考虑使用subpath的方式进行解决。
如下所示,可以指定变量的方式,$(NS_NAME)_$(POD_NAME),创建二级目录。

apiVersion: v1
kind: Pod
metadata:
  name: subpath
spec:
  containers:
  - name: container1
    env:
    - name: NS_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.namespace
    - name: POD_NAME
      valueFrom:
        fieldRef:
          apiVersion: v1
          fieldPath: metadata.name
    image: busybox
    command: [ "sh", "-c", "while [ true ]; do echo 'Hello'; sleep 10; done | tee -a /logs/hello.txt" ]
    volumeMounts:
    - name: workdir1
      mountPath: /logs
      subPathExpr: $(NS_NAME)_$(POD_NAME)
  restartPolicy: Never
  volumes:
  - name: workdir1
    hostPath:
      path: /opt/applog/pods

在Node节点上,将生成如下的目录

[root@vm-vmw64004-app default_subpath]# pwd
/opt/applog/pods/default_subpath

posted @ 2022-08-22 09:41  liujw2001  阅读(130)  评论(0)    收藏  举报