问题描述
某些时候,我们需要两个容器能够交换数据(简单交换)
解决方案
如果一个 Pod 上运行了两个或多个容器,如果要交换数据,可以使用 emptyDir 类型的本地数据卷;
原理简述(概述 emptyDir 实现)
Kubernetes emptyDir is not the same as Docker’s volumes-from
在 Docker 中,通过 –volumes –volumes-from 选项,能够在容器间实现数据的共享。两个容器都能够向同个 Volume 写入数据,以此来实现数据共享。
在 Kubernetes 中,通过 emptyDir 类型的存储,来实现两个容器之间的数据共享。但 emptyDir 与 –volumes-from 的实现方式并不相同,Kubernetes 创建空目录(如其名),并将其挂载到容器中。
数据的创建与销毁
Alibaba Cloud Community/Kubernetes Volume Basics: emptyDir and PersistentVolume
当 Pod 创建时,emptyDir 得以创建;
当 Pod 销毁时,emptyDir 数据将被删除;
当 Pod 重启时,例如 CrashLoopBackOff 等等,emptyDir 的数据将被保留,而不会被删除;
配置案例
以下的两个容器挂载了同一个本地卷:
kind: Pod apiVersion: v1 metadata: name: sahrevol spec: containers: - name: c1 image: centos:7 command: - "sh" - "-c" - "whatever" volumeMount: - name: xchange mountPath: /tmp/xchange - name: c2 image: centos:7 command: - "sh" - "-c" - "whatever" volumeMount: - name: xchange mountPath: /tmp/data volumns: - name: xchange emptyDir: {}
当创建容器后,可以到容器中查看挂载点;
当某个容器向 emptyDir 中写入数据后,另个容器能够查看到这些数据;
注意事项
如果节点关闭,或者节点进行维护,那本地数据会丢失;
所以大多数时候,我们还是使用网络卷;