k8s存储 docker容器是有生命周期的。 Volume: emptyDir(空目录):类似docker数据持久化的:docker manager volume [root@master yaml]# vim emptyDir.yaml apiVersion: v1 kind: Pod metadata: name: producer-consumer spec: containers:
-
image: busybox name: producer volumeMounts:
- mountPath: /producer_dir name: shared-volume args:
- /bin/sh
- -c
- echo "hello k8s" > /producer_dir/hello; sleep 30000
-
image: busybox name: consumer volumeMounts:
- mountPath: /consumer_dir name: shared-volume args:
- /bin/sh
- -c
- cat /consumer_dir/hello; sleep 30000
volumes:
- name: shared-volume emptyDir: {} [root@master yaml]# kubectl apply -f emptyDir.yaml [root@master yaml]# kubectl logs producer-consumer consumer hello k8s [root@node02 ~]# docker ps [root@node02 ~]# docker inspect 使用场景:在同一个Pod里,不同的容器,共享数据卷。 如果容器被删除,数据仍然存在,如果pod被删除,数据也会被删除。 hostPath Volume:类似docker 数据持久化的:bind mount 如果Pod被删除,数据会被保留,相比较emptyDir要好一点。不过一旦host崩溃,hostPath也无法访问。 docker或者k8s集群本身的存储会采用hostPath这种方式。 Persistent Volume | PV(持久卷)提前做好的,数据持久化的数据存放目录。 Psesistent Volume Claim|PVC(持久卷使用声明|申请) 基于NFS服务来做的PV [root@master ~]# yum install -y nfs-utils rpcbind [root@master ~]# mkdir /nfsdata [root@master ~]# vim /etc/exports /nfsdata *(rw,sync,no_root_squash) [root@master ~]# systemctl start rpcbind [root@master ~]# systemctl start nfs-server.service [root@master ~]# showmount -e
[root@master yaml]# vim nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
path: /nfsadta/pv1
server: 192.168.2.10
[root@master yaml]# kubectl apply -f nfs-pv.yaml
[root@master yaml]# kubectl get pv
accessModes:
- ReadWriteOnce: 能以读-写mount到单个节点。
- ReadWriteMany: 能以读-写mount到多个节点。
- ReadOnlyOnce:能以只读的方式mount到单个节点。
persistentVolumeReclaimPolicy:(PV存储空间的回收策略是什么)
Recycle:自动清除数据。
Retain:需要管理员手动回收。
Delete:云存储专用。
PV和PVC相互的关联:通过的市storageclassname && accessmodes。
[root@master yaml]# vim nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce resources: requests: storage: 1Gi storageClassName: nfs [root@master yaml]# kubectl apply -f nfs-pvc.yaml [root@master yaml]# kubectl get pvc
[root@master yaml]# kubectl get pv