8、k8s的pv和pvc

pv和pvc的概念

静态

动态------>自动分配

pv:persistent volume,持久化存储卷,描述或者定义存储卷的类型。集群范围内的存储概念,代表的是实际的存储空间(本地磁盘、网络系统文件nfs,云存储)。pv创建成功之后,独立于pod的,不依赖于特定的pod资源。一般都是由运维工程师定义好的。

pvc:persistent volume claim,用户对存储资源的请求,也就是创建pod的时候,我们定义好了对于存储卷的要求(大小,存储类型),在集群当中寻找一个合适的存储资源(pv),和这个pv进行绑定,然后使用。

在使用的过程中,被绑定的pv不可以再被其他pvc请求,当pod生命周期结束之后,pv的资源可以被释放,就可以被后续的请求继续使用(设置的pv类型,以及数据是否保留)。

数据流向

静态

动态

pv和pvc之间的生命周期的关系

1、provisioning(配置)------>匹配对象pv------>绑定------>使用------>使用------>回收(有不同的策略)

2、pv的状态

Available:表示pv的状态可用,且未被其他pvc绑定,只有Available才可以被pvc请求和绑定使用

Reclaiming:回收状态,以及释放,根据回收策略,把pv的资源进行回收,供下一次pvc继续使用

bound:绑定,pv和pvc已经绑定,可以正常使用。

released:已释放的状态,绑定解除,正在等待资源回收,也是不可被请求使用的。

Failed:失败,pv的自动回收失败。

3、回收策略

Retain:保留,即使pv和pvc解除绑定,之前的数据也会保留。

Delete:删除,动态卷可以使用,不仅是删除数据,而且会把pv也会一并删除。

Recycle:自动回收(自动删除),绑定会被解除,数据也会被删除,然后自动的把pv的状态恢复到Available的状态。

4、读写模式和挂载方式

ReadWriteOnce:RWO,存储方式可以读写,但是只能被单个pod挂载。

ReadOnlyMany:ROX,存储方式只能读,可以被多个pod进行挂载。

ReadWriteMany:RWX,存储方式可以读写,而且可以被多个pod进行挂载。

5、挂载卷的类型

emptyDir

hostPath:不支持ReadOnlyMany和ReadWriteMany

nfs:三种模式都可以使用

静态pv实操

1、nfs配置pv的底层,存储空间。

2、配置pv,设置pv的存储大小和读写类型。

3、创建pvc,匹配设置的pv,然后绑定使用。

只有状态是Available的pv可以被pvc请求和绑定使用。

工作中,根据业务的需要,开发提前约定好了,需求的规格,运维人员把pv创建好,等着上线使用即可。

1、nfs配置pv的底层,存储空间。

2、配置pv,设置pv的存储大小和读写类型

运行脚本之后,可以发现pv创建成功。

3、创建pvc,匹配设置的pv,然后绑定使用

运行脚本之后,可以发现我们创建的pvc1已经绑定pv02

恢复

将pv与pvc解绑

edit pv 02后删除如下字段,保存退出即可恢复pv状态成Available。

回收策略

动态pv实操

k8s机制提供了一个插件:stroagecalss------>创建pv的模版,插件pvc之后,找到对应的stroagecalss来完成pv和pvc之间的绑定。

stroagecalss+nfs来实现动态的pv

卷插件:k8s本身不支持nfs创建动态pv,外部的存储插件来实现pv的分配。需要prosisioner,存储卷分配器,外部存储卷的创建会来自动在nfs服务器创建pv。

nfs-client provisioner:当pvc请求时,会自动在nfs服务器上创建pv,然后把pvc的请求实现绑定,从而访问nfs的存储。只要有一个目录就可以实现不同pvc的请求。

配置过程

1、创建好共享的目录

2、配置nfs-client provisioner的集群访问权限

  • 为了可以能够创建 pv ,能够获取和绑定pvc的请求,获取storageclass创建的pv的资源。

权限三部分组成

  1. 账号------>访问集群
  2. 访问集群的规则,账号拥有的权限
  3. 把账号的权限绑定到集群当中去

selflink:是api的资源之一,表示资源对象在k8s api中的自身链接,唯一标识,用唯一标识来对集群当中的资源对象进行区分。

3、部署和安装provisioner的插件

动态pv的回收策略没有回收策略,只有保留和删除。

1、创建好共享的目录

2、配置nfs-client provisioner的集群访问权限

首先创建 Service Account 账户,用来管理 NFS Provisioner 在 k8s 集群中运行的权限

接着屏蔽selflink字段,以防报错,添加如下false一行内容

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

kubectl delete pods kube-apiserver -n kube-system

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

最后运行yml文件

3、部署和安装provisioner的插件

4、实现自动的pv和pvc

首先创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作。

  • RECLAIMPOLICY:pv的回收策略
  • VOLUMEBINDINGMODE:Immediate 当用pvc请求时,会立刻绑定一个可用的pv。
  • ALLOWVOLUMEEXPANSION:自动挂载,允许扩展大小。

然后使用上面静态pv创建的pvc脚本文件,添加如下一段,表示向class请求pv,让 PV 与 PVC 建立关联。

最后可以发现我们的共享目录已经生产

相关推荐
头孢头孢7 小时前
k8s常用总结
运维·后端·k8s
可观测性用观测云11 小时前
Kubernetes APIServer 可观测最佳实践
kubernetes
碣石潇湘无限路13 小时前
【云原生】Kubernetes CEL 速查表
容器·贪心算法·kubernetes
企鹅侠客17 小时前
Prometheus operator怎么添加targets和告警规则
运维·云原生·kubernetes·prometheus·pod
Leo Han19 小时前
k8s常用命令(持续更新中)
docker·容器·kubernetes
KubeSphere 云原生19 小时前
云原生周刊:Kubernetes v1.33 要来了
云原生·容器·kubernetes
dessler20 小时前
Kubernetes(k8s)-日志(logs)和exec内部逻辑
linux·运维·kubernetes
tingting01191 天前
k8s 1.30 安装ingress-nginx
nginx·容器·kubernetes
陈陈CHENCHEN1 天前
【Kubernetes】CentOS 7 安装 Kubernetes 1.30.1
kubernetes
2201_761199042 天前
k8s2部署
云原生·容器·kubernetes