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