经过一个例子学习Kubernetes里的PersistentVolumeClaim的用法

Kubernetes的pod自己是无状态的(stateless),生命周期一般比较短,只要出现了异常,Kubernetes就会自动建立一个新的Pod来代替它。html

而容器产生的数据,会随着Pod消亡而自动消失。nginx

为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume(持久卷,如下简称PV)和Persistent Volume Claim(持久卷申请,如下简称PVC)。api

PV是Kubernetes集群中的一种网络存储实现,跟Node同样,也是属于集群的资源。网络

PV跟Docker里的Volume(卷)相似,不过会有独立于Pod的生命周期。less

使用kubectl get pv查看列表:htm

而PVC是用户的一个请求,跟Pod相似。Pod消费Node的资源,PVC消费PV的资源。blog

Pod 可以申请特定的资源(CPU和内存);PVC可以申请特定的尺寸和访问模式,例如能够加载一个读写实例或者多个只读实例,(就是上图kubectl get pvc返回结果的Access Mode这一列的值RWO, ROX等等)而无须感知这些实例背后具体的存储实现。生命周期

咱们来看一个具体的PVC实例,名称为nginx-pvc:内存

kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nginx-pvc spec: storageClassName: default accessModes: - ReadOnlyMany resources: requests: storage: 1Gi资源

使用命令kubectl create -f pvc.yaml建立这个yaml文件定义的persistent volume claim:

而后定义一个pod,消费这个名为nginx-pvc的persistent volume claim:

使用kubectl describe pvc nginx-pvc查看这个persistent volume claim对应生成的persistent volume:

如今我用命令kubectl cp train.jpg nginx-storage-pod:/usr/share/nginx/html将两个文件train.jpg和index.html文件拷贝到pod内部文件路径/usr/share/nginx/html下面:

如今切换到nginx-storage-pod pod里,在/usr/share/nginx/html目录下果真发现了这两个文件:

接下来我定义了另外一个pod,一样适用nginx-pvc这个PVC:

建立完这个pod以后,then kubectl exec -ti another ash 进入pod内部/usr/share/nginx/html,一样发现了index.html和train.jpg.

这个例子说明persistent volume claim可以用于在多个pod间共享持久化数据。 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

相关文章
相关标签/搜索