「Kubernetes」- 容器交换数据

问题描述

某些时候,我们需要两个容器能够交换数据(简单交换)

解决方案

如果一个 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 中写入数据后,另个容器能够查看到这些数据;

注意事项

如果节点关闭,或者节点进行维护,那本地数据会丢失;

所以大多数时候,我们还是使用网络卷;