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相比,少了自定义挂载卷和自定义pv这两步,用StorageClass和provisioner来代替这两步自动生成

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

1、创建共享目录

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

2、创建账户Service Account

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

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

查看各个yaml文件的格式:

①查看账户kubectl explain ServiceAccount

②查看集群角色kubectl explain ClusterRole

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

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

④查看storageclass插件 kubectl explain storageclass

⑤查看pvc  

kubectl explain pvc

verbs表示权限的动作

get

获取资源

list

获取集群中列表资源

watch

监听

create

创建

update

更新

patch

路径

账户名称

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会报错

feature-gates

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

禁用不影响之前的规则

②创建NFS Provisioner插件

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

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

环境变量:storageclass的名称,nfs服务器的地址,nfs的目录

4创建 StorageClass

负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

NAME

storageclass的名称

PROVISIONER

对应创建pv的provisioner插件

RECLAIMPOLICY

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

VOLUMEBINDINGMODE

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

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

ALLOWVOLUMEEXPANSION

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

5、创建 PVC 和 Pod 测试

测试挂载卷

6、释放pv资源

将pv资源改为可用状态Available

7、重新定义pv回收策略

①Delete策略

先删除storageclass

再回收pv资源

②Recycle策略

先删除storageclass

再回收pv资源

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐