当发布PVC之后可以生成PV,还可以在动态服务器上直接生成挂载目录。PVC直接绑定和使用PV。
动态PV需要两个组件
-
存储卷插件:Provisioner(存储分配器)根据定义的属性创建PV
-
StorageClass:定义属性
存储卷插件
存储卷插件:k8s本身不支持动态PV创建,不包括NFS。所以需要声明和安装一个外部插件Provisioner(存储分配器)
Provisioner(存储分配器)可以动态的创建PV。根据PVC的请求自动绑定和使用。
StorageClass
StorageClass来定义PV属性、存储类型、大小、回收策略等等。
使用NFS实现动态PV。NFS支持的方式NFS-client。先创建Provisioner来适配NFS-client
需要先创建nfs-client-Provisioner
动态PV实验举例
实验架构图:
serviceAccount:NFS PRovisioner:是一个插件,没有权限是无法在集群当中获取k8s的信息的。插件要有权限才能监听APIserver。获取get,list(获取集中列表资源)create delete.
开始实验:
实验架构:
master01: 20.0.0.32
ndoe01: 20.0.0.34
node02: 20.0.0.35
k8s5: 20.0.0.36 NFS服务
k8s5
mkdir k8s
chmod 777 k8s/
vim /etc/exports
/opt/k8s 20.0.0.0/24(rw,no_root_squash,sync)
systemctl restart rpcbind
systemctl restart nfs
showmount -e
确定每台主机上都能查看
serviceAccount:NFS PRovisioner:是一个插件,没有权限是无法在集群当中获取k8s的信息的。插件要有权限才能监听APIserver。获取get,list(获取集中列表资源)create delete.
给NFS PRovisioner创建一个账户
[root@master01 ~]# cd /opt/
[root@master01 opt]# vim nfs-client-rbac.yaml
#定义账户类型和名称
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner
#定义账户的名称叫nfs-client-provisioner
---
#定义类型名称和权限以及动作
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: nfs-client-provisioner-role
rules:
#定义权限
- apiGroups: [""]
#apiGroups定义规则可以使用哪个api组的权限
#[""]:如果为空表示直接使用api的核心资源
resources: ["persistentvolumes"]
#定义在核心组中需要的资源.定义获取PV的相关资源
verbs: ["get","list","watch","create","delete"]
#表示权限需要哪些动作
#watch表示监听
#表示声明的账号可以对PV进行这些操作
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
#定义获取pvc的相关组件
verbs: ["watch","get","list","update"]
#表示权限需要哪些动作
- apiGroups: ["storage.k8s.io"]
resources: ["storageclass"]
verbs: ["get","watch","get"]
- apiGroups: [""]
#获取核心组件中的事件信息
#api在调用时候的所有事件信息
resources: ["eve