k8s pod中多个容器共享volume
问题在一个Pod中, 存在2个容器, 这两个容器呢要共享某些存储. 比如一个写日志, 另外一个收集日志.方法在Pod中声明一个emptyDir类型的volume.以下引用来自 https://kubernetes.io/docs/concepts/storage/volumes/#emptydirContainers in the Pod can all read and write ...
·
问题
在一个Pod中, 存在2个容器, 这两个容器呢要共享某些存储. 比如一个写日志, 另外一个收集日志.
方法
在Pod中声明一个emptyDir类型的volume.
以下引用来自 https://kubernetes.io/docs/concepts/storage/volumes/#emptydir
Containers in the Pod can all read and write the same files in the emptyDir volume, though that volume can be mounted at the same or different paths in each Container.
大致是说: 一个Pod中的多个容器都能读写emptyDir中的同样的文件, 尽管这个volume可以被各个容器挂载到自身的任何位置.
下面的yaml文件配置了一个Pod, 里边有两个容器, 一个模拟写日志, 一个模拟读日志并输出到标准输出.
apiVersion: v1
kind: Pod
metadata:
name: shared-volume-pod
labels:
app: shared-volume-pod
spec:
containers:
- name: alpine-write # 第一个容器模拟写日志
image: alpine
volumeMounts:
- name: shared-volume
mountPath: /var/log/app-logs # 容器内任意位置都行
readOnly: false
command:
- sh
- -c
- "while true; do date +'%Y-%m-%d %H:%M:%S' >> /var/log/app-logs/log.log; sleep 1; done"
- name: alpine-read # 第二个容器模拟收集日志
image: alpine
command: ["sh", "-c", "tail -f /var/log/collect-logs/log.log"]
volumeMounts:
- name: shared-volume
mountPath: /var/log/collect-logs # 容器内任意位置都行
readOnly: true
volumes:
- name: shared-volume # pod中有一个volume让其中的多个容器共享
emptyDir: {}
实验结果
在"日志收集"容器中查看收集的日志
查看两个容器日志存储路径
# 查看日志收集容器/var/log/collect-logs/log.log的第一行
$ kubectl exec -it shared-volume-pod -c alpine-read -- head -1 /var/log/collect-logs/log.log
2019-08-03 04:07:12
# 查看写日志容器/var/log/app-logs/log.log的第一行
$ kubectl exec -it shared-volume-pod -c alpine-write -- head -1 /var/log/app-logs/log.log
2019-08-03 04:07:12
说明Pod中的volume:shared-volume被两个容器挂载到了自身的不同位置,
而且可以共享(一个读, 一个写)
欢迎补充指正!
更多推荐
已为社区贡献3条内容
所有评论(0)