k8s之共享存储概述以及演示
共享存储机制
k8s对有状态的容器应用或者需要对数据进行持久化的应用,在之前的篇章说过,可以将容器内的目录挂载到宿主机的容器目录或者emptyDir临时存储卷。
另外,k8s还开放了两个资源,分别是PersistentVolume(PV)和PersistentVolumeClaim(PVC),
这两个资源对象可允许k8s使用外部的存储设备。
比如在生产环境中有一个专门的文件服务器,那么就可以使用PV对文件服务器的资源进行定义,比如总共有多少容量等,然后用PVC对PV资源进行申请,申请多少容量,然后再容器里引用PVC即可。
PV是对底层网络共享存储的抽象,将共享存储定义为一种“资源”,比如Node也是容器应用可以消费的资源。PV由管理员创建和配置,与共享存储的具体实现直接相关。
PVC则是用户对存储资源的一个“申请”,就像Pod消费Node资源一样,PVC能够消费PV资源。PVC可以申请特定的存储空间和访问模式。
StorageClass,用于标记存储资源的特性和性能,管理员可以将存储资源定义为某种类别,正如存储设备对于自身的配置描述(Profile)。
根据StorageClass的描述可以直观的得知各种存储资源的特性,就可以根据应用对存储资源的需求去申请存储资源了。存储卷可以按需创建。
容器存储接口Container Storage Interface(CSI)机制,目标是在kubernetes与外部存储系统之前建立一套标准的存储管理接口,通过该接口为容器提供存储服务。
使用案例
在案例中,定义一个PV,申请对宿主机的资源使用,定义一个PVC,申请对PV资源的使用。然后再Pod中挂载PVC。
PV
apiVersion: v1 kind: PersistentVolume metadata: name: pv namespace: pv labels: name: pv spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle hostPath: path: /usr/soft/k8s/yaml/pv/storage
申请宿主机2G的存储。
创建:
kubectl create -f pv.yaml
创建后查看:
PVC
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc namespace: pv labels: name: pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi selector: matchLabels: name: pv
此PVC申请对上述PV的使用,申请1G存储。创建:
kubectl create -f pvc.yaml
创建后查看:
创建Pod使用PVC
apiVersion: v1 kind: Pod metadata: name: nginx namespace: pv labels: name: nginx spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent volumeMounts: - name: pv mountPath: /pvc readOnly: false ports: - containerPort: 80 volumes: - name: pv persistentVolumeClaim: claimName: pvc
使用volumes挂载pvc,挂载到容器的pvc目录。
验证
创建容器后,进入容器,在容器目录pvc添加文件,看对应的PersistemVolume中的路径是否有相应的文件。
在pvc目录创建test.txt文件
获取pod运行在哪个节点
去节点相应目录查看
可以看到,相应的节点目录是存在容器中创建的文件的。同理,如果在节点目录添加文件,那么容器中的挂载目录也会有相应的文件。
结尾
上述就是PV和PVC的简单使用,更详细的介绍在下一篇文章中。
===============================
我是Liusy,一个喜欢健身的程序员。
获取更多干货以及最新消息,请关注公众号:上古伪神
如果对您有帮助,点个关注就是对我最大的支持!!!