emptyDir

一个emptyDir Volume是在Pod分配到Node时创建的。

  • 它的初始内容为空,并且无须指定宿主机上对应的目录文件,因为这是Kubernetes自动分配的一个目录;

  • 当Pod从Node上移除时,emptyDir中的数据也会被永久删除

emptyDir的一些用途如下:

  • 临时空间,例如用于某些应用程序运行时所需的临时目录,且无须永久保留。

  • 长时间任务的中间过程CheckPoint的临时保存目录

  • Pod中的不同Container共享数据。 比如一个Pod存在两个容器A和B,容器A需要使用容器B产生的数据,此时可以采用emptyDir共享数据,一个容器需要从另一个容器中获取数据的目录(多容器共享目录

默认情况下,emptyDir支持节点上的任何介质,可能是SSD、磁盘或网络存储,具体取决于自身的环境可以将emptyDir.medium字段设置为Memory,让Kubernetes使用tmpfs(内存支持的文件系统),虽然tmpfs非常快,但是tmpfs在节点重启时,数据同样会被清除,并且设置的大小会被计入Container的内存限制中

示例

pod-empty.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  volumes: 
  - name: share-volume
    emptyDir: {}
  containers:
  - name: nginx
    image: nginx:1.25.3
    volumeMounts:
      - name: share-volume
        mountPath: /opt
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
      - containerPort: 80
  - name: redis
    image: redis:7.0.12
    volumeMounts:
      - name: share-volume
        mountPath: /mnt
    resources:
      limits:
        memory: "128Mi"
        cpu: "500m"
    ports:
      - containerPort: 6379

此部署文件创建一个Pod,采用 spec.volumes 字段配置了一个名字为share-volume、类型为emptyDir的Volume,同时里面包含两个容器nginx和redis,并将该Volume挂载到了/opt/mnt目录下,此时/opt和/mnt目录的数据就实现了共享

最后更新于