关于k8s的pv和pvc

关于k8s的pv和pvc

   小白     2022年9月21日 20:58     2246    

pv(persistent volume)

  • 是对存储资源的抽象,将存储定义为一种容器应用可以使用的资源,由管理员事先供应,或者 使用存储类(Storage Class)来动态供应

  • 持久卷是集群资源,就像节点也是集群资源一样, 也和普通Volume一样 使用 卷插件来实现的

  • 拥有独立于任何使用 PV 的 Pod 的生命周期

pvc(persistent volume claim)

  • 是用户对存储资源的一个申请。就像Pod消耗Node的资源一样,PVC消耗PV的资源。

  • PVC可以申请存储空间的大小(Size)和访问模式(例如ReadWriteOnce、ReadOnlyMany或ReadWriteMany)


Kubernetes支持两种资源供应模式:静态模式(Static)和动态模式(Dynamic),资源供应的结果就是将合适的PV与 PVC成功绑定

静态

集群管理员创建若干 PV 卷。这些卷对象带有真实存储的细节信息,并且对集群 用户可用(可见)。

PV 卷对象存在于 Kubernetes API 中,可供用户消费(使用)

pv是没有namespace属性的,它是一种跨namespace的共享资源

动态

集群管理员无需预先创建PV,而是通过StorageClass的设置对后端存储资源进行描述,标记存储的类型和特性。

用户通过创建PVC对存储类型进行申请,系统将自动完成PV的创建和PVC的绑定。

如果PVC声明的Class为空“”,则说明PVC不用动态模式、另外Kubernetes支持设置集群范围内默认的StorageClass设置,通过kuber-apiserver开启准入控制器DefaultStorageClass,可以为用户创建PVC设置一个默认的存储类StorageClass。


pv pvc storageclass的关联

1.PV和PVC是自动绑定的,PV符合PVC的要求即可

2.PVC向StorageClass申请资源,StorageClass创建PV,然后PVC和PV自动绑定的


创建storeclass的示例:

2、编写yaml文件,创建相应权限

nfs-client-provisioner-authority.yaml

nfs-client-provisioner-authority.txt


3、安装nfs-分配器

nfs-client-provisioner.txt


4、创建StorageClass

nfs-storage-class.txt


5、创建测试pod

nfs-deployment-python.txt


6、问题

在自动分配nfs的时候pvc的状态一直处于pending状态。

这个是解决办法。

因为原来是1.20版本(我的是1.21.1)默认禁止使用selfLink


# https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/issues/25


# 解决:

# 修改apiserver的yaml文件

$ vim /etc/kubernetes/manifests/kube-apiserver.yaml

spec:

  containers:

  - command:

    - kube-apiserver

    - --feature-gates=RemoveSelfLink=false

    

# 执行apiserver文件(twice)

$ kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

$ kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml

执行完后,pvc自动就会Bound 

文章评论

0

其他文章