动态pv(nfs方式挂载)

1、定义

发布pvc之后可以生成pv,还可以在共享服务器上直接生成挂载目录

pvc直接绑定和使用pv

2、动态pv依赖两个组件

(1)provisioner卷插件:k8s本身支持的动态pv创建不包括nfs,需要声明和安装一个外部插件provisioner(存储分配器),可以动态创建pv,根据pvc请求自动绑定和使用(根据定义的pv属性创建pv)

(2)StorageClass:定义pv属性(存储类型、大小、回收策略等)

3、nfs实现动态pv

nfs支持NFS-client,provisioner来适配nfs-client

先创建nfs-client-provisioner卷插件动态pv(nfs方式挂载)_第1张图片

与静态pv相比,少了自定义挂载卷和自定义pv这两步,用StorageClass和provisioner来代替这两步自动生成

创建动态pv实验(默认策略是Delete,一定要设置成Retain)

1、创建共享目录

动态pv(nfs方式挂载)_第2张图片

查看其他节点是否共享目录

动态pv(nfs方式挂载)_第3张图片

动态pv(nfs方式挂载)_第4张图片

动态pv(nfs方式挂载)_第5张图片

2、创建账户Service Account

用来管理 NFS Provisioner 在 k8s 集群中运行的权限

nfs provisioner是一个插件,没有权限是无法在集群中获取k8s的消息.插件要有权限监听apiserver、获取集群的列表资源、create、delete

查看各个yaml文件的格式:

①查看账户kubectl explain ServiceAccount

动态pv(nfs方式挂载)_第6张图片

动态pv(nfs方式挂载)_第7张图片

②查看集群角色kubectl explain ClusterRole

动态pv(nfs方式挂载)_第8张图片

rbac:Role-based Access control基础权限配置,定义角色在集群中可以使用的权限

③查看集群角色和账户绑定kubectl explain ClusterRoleBinding

动态pv(nfs方式挂载)_第9张图片动态pv(nfs方式挂载)_第10张图片

④查看storageclass插件 kubectl explain storageclass动态pv(nfs方式挂载)_第11张图片动态pv(nfs方式挂载)_第12张图片

⑤查看pvc  

kubectl explain pvc

动态pv(nfs方式挂载)_第13张图片动态pv(nfs方式挂载)_第14张图片动态pv(nfs方式挂载)_第15张图片动态pv(nfs方式挂载)_第16张图片

verbs表示权限的动作

get

获取资源

list

获取集群中列表资源

watch

监听

create

创建

update

更新

patch

路径

动态pv(nfs方式挂载)_第17张图片

账户名称

nfs-client-provisioner

角色名称

nfs-client-provisioner-clusterrole

storageclass名称

nfs-client-storageclass

3、使用 Deployment 来创建 NFS Provisioner插件

NFS Provisione(即 nfs-client),有两个功能:一个是在 NFS 共享目录下创建挂载点(volume),另一个则是将 PV 与 NFS 的挂载点建立关联

①屏蔽selflink功能

由于 1.20 版本启用了 selfLink,所以 k8s 1.20+ 版本通过 nfs provisioner 动态生成pv会报错

动态pv(nfs方式挂载)_第18张图片

feature-gates

在不破坏现有规则和功能的情况下引入新功能或修改现有功能的机制

禁用不影响之前的规则

动态pv(nfs方式挂载)_第19张图片动态pv(nfs方式挂载)_第20张图片

②创建NFS Provisioner插件

创建nfs的provisioner的客户端,以pod的方式运行在集群中,根据刚才赋予的权限监听k8s集群中pv请求,动态创建与nfs服务器相关的pv

容器里使用的配置在provisioner里定义好环境变量传给容器

环境变量:storageclass的名称,nfs服务器的地址,nfs的目录动态pv(nfs方式挂载)_第21张图片动态pv(nfs方式挂载)_第22张图片

4创建 StorageClass

负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联动态pv(nfs方式挂载)_第23张图片

NAME

storageclass的名称

PROVISIONER

对应创建pv的provisioner插件

RECLAIMPOLICY

pv回收策略。这里定义的是retain

VOLUMEBINDINGMODE

卷绑定模式,immediate标识pvc请求创建pv时,系统会立即绑定一个可用的pv

waitForFirstConsumer第一个使用者而出现之后再绑定pv

ALLOWVOLUMEEXPANSION

可以在运行时对pv进行扩容

5、创建 PVC 和 Pod 测试

动态pv(nfs方式挂载)_第24张图片

动态pv(nfs方式挂载)_第25张图片

动态pv(nfs方式挂载)_第26张图片

测试挂载卷

动态pv(nfs方式挂载)_第27张图片

6、释放pv资源

动态pv(nfs方式挂载)_第28张图片

将pv资源改为可用状态Available

动态pv(nfs方式挂载)_第29张图片动态pv(nfs方式挂载)_第30张图片

7、重新定义pv回收策略

①Delete策略动态pv(nfs方式挂载)_第31张图片

先删除storageclass

再回收pv资源

动态pv(nfs方式挂载)_第32张图片②Recycle策略

动态pv(nfs方式挂载)_第33张图片

先删除storageclass

再回收pv资源

动态pv(nfs方式挂载)_第34张图片

结论:pv不支持Recycle回收策略

你可能感兴趣的:(linux,运维,服务器)