Kubernetes持久化存储PV、PVC和StorageClass介绍

Kubernetes中的PersistentVolume(PV)、PersistentVolumeClaim(PVC)和StorageClass解决了大型集群中存储管理的问题。PV是集群级别的网络存储资源,PVC是用户对存储的请求。StorageClass用于动态创建PV。PV和PVC通过容量和访问模式匹配,PVC的生命周期包括Provisioning、Binding、Using和Reclaiming。LocalVolume允许访问node本地存储,适用于高性能和高可靠性场景。
摘要由CSDN通过智能技术生成

PV和PVC

Kubernetes Volume提供了非常好的数据持久化方案,不过对于大型Kubernetes集群来说管理上还有不方便之处。Volume方案需要创建Pod或者Deployment的管理员对共享存储的参数和机制比较清楚,甚至对一些存储的访问是需要身份验证的,这导致集群用户(存储使用者)和系统管理员(存储管理员)的职责耦合在一起了。但对于大型的生产环境,为了管理的效率和安全,集群用户(存储使用者)和系统管理员(存储管理员)是分置的。

Kubernetes引入了两个新的API资源PersistentVolume和PersistentVolumeClaim来解决这个问题。

PersistentVolume(PV)是集群中由系统管理员配置的一段网络存储。它是集群中的资源,就像node是集群资源一样。PV也是像是Volumes一样的存储插件,但其生命周期独立于使用PV的任何单个Pod。PV配置存储实现的详细信息,包括NFS,iSCSI或特定于云提供程序的存储系统。PV属于集群级别资源,不属于任何的Namespace。

PersistentVolumeClaim(PVC)是使用存储的请求,属于Namespace中的资源。PVC类似于Pod,Pod消耗node资源,PVC消耗PV资源。Pod可以请求特定级别的计算资源(CPU和内存),PVC可以请求特定大小和访问模式的存储资源。

PV由系统管理员创建和维护,系统管理员会根据后端存储系统的特点以及访问需求(访问模式和容量)创建不同的PV,系统管理员不用关心哪些Pod会使用这些PV。PVC由集群用户创建和维护,PVC指明需求的存储资源的访问模式和容量大小,Kubernetes会根据PVC的需求自动查找并提供满足条件的PV,开发人员提出PVC请求时不用关心真正的存储资源在哪儿,如何访问等底层信息。
PV和PVC
下面采用NFS共享存储举一个例子进行说明。NFS服务器的搭建请参见NFS v4的安装和使用-CentOS 7。并创建一个新的共享目录。

mkdir /data/pvpvc -p
chmod 777 /data/pvpvc

vim /etc/exports
/data/pvpvc                     192.168.1.0/24(sync,rw,no_root_squash)

exportfs -r

showmount -e nfs
Export list for nfs:
/data/pvpvc    192.168.1.0/24

在Kubernetes的所有worker节点安装NFS客户端,并测试是否能够连接NFS服务器。

yum install -y nfs-utils

showmount -e 192.168.1.80
Export list for 192.168.1.80:
/data/pvpvc      192.168.1.0/24

创建PV和PVC,PVC和PV之间没有依靠ID、名称或者label匹配,而是靠容量和访问模式,PVC的容量和访问模式需要是某个PV的子集才能自动匹配上。注意:PVC和PV是一对一的,也即一个PV被一个PVC自动匹配后,不会再被其它PVC匹配了,即使PVC需求能够完全满足。

vi my-nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-nfs-pv
spec:
  #容量参数
  capacity:
    storage: 2Gi
  #访问模式
  accessModes:
    - ReadWriteMany
    - ReadWriteOnce
    - ReadOnlyMany
  #后端共享存储访问参数
  nfs:
    path: /data/pvpvc
    server: 192.168.1.80

vi my-nfs-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: my-nfs-pvc
spec:
  #访问模式需求
  accessModes:
    - ReadWriteMany
  #资源(容量)请求      
  resources:
    requests:
      storage: 2Gi

kubectl apply -f my-nfs-pv.yaml

kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
my-nfs-pv   2Gi        RWX            Retain           Available                                   14s

kubectl apply -f my-nfs-pvc.yaml

#发现PVC已经和PV自动匹配上
kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
my-nfs-pv   2Gi        RWX            Retain           Bound    default/my-nfs-pvc                           49s

kubectl get pvc
NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
my-nfs-pvc   Bound    my-nfs-pv   2Gi        RWX                           23s

使用pvc创建Pod。Pod通过volumes来声明使用哪个PVC,直接使用PVC的名字即可,可见在创建Pod时无需再关心共享存储的细节了。Pod会向存储卷中写入数据。

vi my-pvpvc-pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pvpvc-pod
spec:
  volumes:
    - name: my-nfs-pvc-vol
      persistentVolumeClaim:
        claimName: my-nfs-pvc
  containers:
    - name: busybox
      image: busybox:latest
      volumeMounts:
        - mountPath: /data
          name: my-nfs-pvc-vol
      command:
        - "/bin/sh"
        - "-c"
        - "echo 'hello world' >> /data/hello.txt; sleep 3600"

在NFS服务器中查看,确实有文件生成。

cat /data/pvpvc/hello.txt
hello world

PV访问模式

  • ReadWr
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值