1、emptyDir
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer
spec:
containers:
- image: busybox
name: producer
volumeMounts:
- mountPath: /producer_dir
name: shared-volume
arge:
- /bin/sh
- -c
- echo "hello world" > /producer_dir/hello ; sleep 30000
- image: busybox
name: consumer
volumeMounts:
- mountPath: /consumer_dir
name: shared-volume
arge:
- /bin/bash
- -c
- cat /consumer_dir/hello ; sleep 30000
volumes:
- name: shared-volume
emptyDir: {}
模拟一个Pod中的两个容器使用一个volume;
1、文件最底部volumes定义了一个emptyDir类型的volumes shared-volumes。
2、producer容器将shared-volume mount到/producer_dir目录;
3、producer通过echo将数据写到文件hello里
4、consumer容器将shared_volume mount到/consumer_dir 目录中;
5、consumer通过cat从文件hello中读取数据
emptyDir是Host上创建的临时目录,其优点是能够方便的为Pod中的容器提供共享存储,不需要额外的配置。但他不具备持久性,如果Pod不存在了,emptyDir也就没有了,根据这个特性,emptyDir特别适合Pod中的容器需要临时共享存储空间的场景;
2、hostPath Volume
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer
spec:
containers:
- image: busybox
name: producer
volumeMounts:
- mountPath: /etc/kubernetes
name: k8s
readOnly: true
- mountPath: /etc/ssl/certs
name: certs
- mountPath: /etc/pki
name: pki
dnsPolicy: ClusterFirst
hostNetwork: true
nodeName: k8s-master
restartPolicy: Always
securityContext: {}
terminationGracePeriondSeconds: 30
tolerations:
- effect: NoExecute
operator: Exists
volumes:
- hostPath:
path: /etc/kubernetes
name: k8s
- hostPath:
path: /etc/ssl/certs
name: certs
- hostPath:
path: /etc/pki
name: pki
注:这里定义了三个hostPath volume k8s、certs、pki,分别对应目录/etc/kubernetes、/etc/ssl/certs和/etc/pki。如果Pod被销毁,hostPath对应的目录也还会被保留,从这点看,hostPath的持久性比emptyDir高;
hostPath与emptyDir区别:hostPath是已存在的目录挂载共享给容器,而emptyDir则是挂载时生成的目录;
PV&PVC
PV(PersistentVolume):是外部存储系统中的一块存储空间,由管理员创建和维护。
PVC(PersistentVolumeClaim):是对PV的申请,PVC通常由普通用户创建和维护,需要为Pod分配存储资源时,用户可以创建一个PVC,指明存储资源的容量大小和访问方式等信息,Kubernetes会查找并提供满足条件的PV。