k8s无脑系列(七)- NFS存储(动态存储)
1. 为什么需要动态存储
大概其的说一说,不一定对。总之一开始就觉得是个好东西。用到了,自然能体会到好处。
-
为每一个需要存储的资源编写pv,pvc很繁琐。
-
相同类型的请求有很多,急需快速可控的方案来实现动态申请。pvc申请,自动绑定pv
-
需要可以精细控制的存储回收重利用。既要保证容量,又要保证数据安全
2. 了解StorageClass
2.1 基础术语
- pv - Persistent Volume(持久化存储卷)
- pvc - Persistent Volume Claim(持久化存储卷请求)
- pvp - Persistent Volume Provisioner(持久化存储卷供应者)
- cluster role 集群操作角色,直接翻译role为角色,引申含义是角色具备哪些权限
2.1 原理
-
管理员创建Provisioner(供应者),负责为外部请求提供pv(持久化存储卷)实例
-
StorageClass代替pvc(持久存储卷请求)向绑定的Provistioner发出pv(持久化存储卷)实例的请求
-
Pod绑定的pvc通过pvc获取pv实例进行存储
3. 前期准备
物料 | 内容 | 备注 |
---|---|---|
nfs服务 | 192.168.56.4 | 一台 |
存储目录 | /data/nfs/db-svc-dynamic-volume | 用于存放数据 |
k8s集群 | 无脑系列有介绍 | 版本1.16.4 |
3.1 Yaml涉及的概念
名称 | 解释 | 备注 |
---|---|---|
StorageClass | k8s API Doc | |
ServiceAccount | 服务账户 | |
Role/ClusterRole | 角色/集群角色 | |
RoleBinding/ClusterRoleBinding | 角色与账户绑定 |
3.2 先定义服务账户与权限
定义一个服务账户,该账户负责向集群申请资源。
定义“集群角色”,“角色”并与服务账户绑定。所以,yaml中才会分五部分。分别是
- service account
- cluster role
- cluster role 与 service account绑定
- role
- role 与 service account 绑定
nfs-storage-rbac.yaml
apiVersion: v1
# 定义服务账户
kind: ServiceAccount
metadata:
# 名字要知命达意,这个账户专门为数据库服务
# {用途}-svc-{卷类型}-account
name: db-svc-nfs-account
namespace: default
---
# 定义集群角色声明该角色的权限列表,可以看出全是存储相关
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
# 与 db-svc-nfs-account 相呼应
name: db-svc-nfs-cluster-role
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources