Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它。
而容器产生的数据,会随着Pod消亡而自动消失。
为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume
(持久卷,以下简称PV)和Persistent Volume Claim
(持久卷申请,以下简称PVC)。
PV是Kubernetes集群中的一种网络存储实现,跟Node一样,也是属于集群的资源。
PV跟Docker里的Volume(卷)类似,不过会有独立于Pod的生命周期。
使用kubectl get pv
查看列表
而PVC是用户的一个请求,跟Pod类似。Pod消费Node的资源,PVC消费PV的资源。
Pod 能够申请特定的资源(CPU和内存);PVC能够申请特定的尺寸和访问模式,例如可以加载一个读写实例或者多个只读实例,(就是上图kubectl get pvc返回结果的Access Mode这一列的值RWO, ROX等等)而无须感知这些实例背后具体的存储实现。
通过kubectl describe pvc
可查看对应的配置文件
[root@ks-allinone ~]# kubectl describe pvc datasong -n iscas
Name: datasong
Namespace: iscas
StorageClass: local
Status: Bound
Volume: pvc-18d27ca2-1abf-48bb-b588-349b3141ea84
Labels: app=datasong
Annotations: kubesphere.io/creator: admin
pv.kubernetes.io/bind-completed: yes
pv.kubernetes.io/bound-by-controller: yes
volume.beta.kubernetes.io/storage-provisioner: openebs.io/local
volume.kubernetes.io/selected-node: ks-allinone
Finalizers: [kubernetes.io/pvc-protection]
Capacity: 25Gi
Access Modes: RWO
VolumeMode: Filesystem
Mounted By: datasong-duv9fw-0
Events: <none>
进入该容器挂载目录
[root@ks-allinone ~]# kubectl exec -it datasong-duv9fw-0 /bin/bash -n iscas
[root@datasong-duv9fw-0 bin]# exit
[root@ks-allinone ~]# yum -y install nfs-utils
base | 3.6 kB 00:00:00
docker-ce | 3.5 kB 00:00:00
epel/x86_64/metalink | 6.6 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/3): epel/x86_64/updateinfo | 1.0 MB 00:00:02
(2/3): epel/x86_64/primary_db | 6.9 MB 00:00:04
(3/3): updates/7/x86_64/primary_db | 4.5 MB 00:00:08
Package 1:nfs-utils-1.3.0-0.66.el7_8.x86_64 already installed and latest version
Nothing to do
[root@ks-allinone ~]# vi /etc/exports
[root@ks-allinone ~]# systemctl start nfs-server
[root@ks-allinone ~]# systemctl start rpcbind
[root@ks-allinone ~]# showmount -e
Export list for ks-allinone:
/nfsdata *