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
浙公网安备 33010602011771号