Kubernetes集群中部署NFS动态存储供应器
nfs-client-provisioner:是Kubernetes中的一个外部存储供应器,主要用于为集群动态提供NFS持久化存储卷。自动创建PV(持久卷),当用户创建PVC(持久卷声明)时,它会自动在现有的NFS服务器上创建对应的目录并生成PV无需手动管理。
1、创建RBAC(基于角色的访问控制)
apiVersion: v1
kind: Namespace#类型是命名空间
metadata:
name: nfs-tool#命名空间名称
---
apiVersion: v1
kind: ServiceAccount#账户
metadata:
name: nfs-client-provisioner#账户名称
namespace: nfs-tool
---
kind: ClusterRole#集群角色
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: clusterrole-nfs-client-provisioner#角色名称
namespace: nfs-tool
rules:#定义角色的权限
- apiGroups: [""]
resources: ["nodes"]#节点资源
verbs: ["get", "list", "watch"]#获取、列表、监控
- apiGroups: [""]
resources: ["persistentvolumes"]#持久卷资源
verbs: ["get", "list", "watch", "create", "delete"]#获取、列表、监控、创建、删除
- apiGroups: [""]
resources: ["persistentvolumeclaims"]#持久卷声明资源
verbs: ["get", "list", "watch", "update"]#获取、列表、监控、更新
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]#存储类资源
verbs: ["get", "list", "watch"]#获取、列表、监控
- apiGroups: [""]
resources: ["events"]#事件资源
verbs: ["create", "update", "patch"]#创建、更新、补丁
---
kind: ClusterRoleBinding#集群角色绑定
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: clusterrolebinding-nfs-client-provisioner#集群角色绑定名称
subjects:#绑定的主体对象
- kind: ServiceAccount#服务账户类型
name: nfs-client-provisioner#服务账户名称
namespace: nfs-tool
roleRef:#引用的角色
kind: ClusterRole#集群角色类型
name: clusterrole-nfs-client-provisioner#角色名称
apiGroup: rbac.authorization.k8s.io#API组
---
kind: Role #角色
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: role-nfs-client-provisioner#角色名称
namespace: nfs-tool
rules:
- apiGroups: [""]
resources: ["endpoints"]#资源
verbs: ["get", "list", "watch", "create", "update", "patch"]#获取、列表、监控、创建、更新、部分更新
---
kind: RoleBinding#角色绑定
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: rolebinding-nfs-client-provisioner
namespace: nfs-tool
subjects:
- kind: ServiceAccount#账户
name: nfs-client-provisioner#账户名称
namespace: nfs-tool
roleRef:#引用的角色
kind: Role#角色
name: role-nfs-client-provisioner#角色名称
apiGroup: rbac.authorization.k8s.io
---
2、StorageClass存储类部署
apiVersion: storage.k8s.io/v1
kind: StorageClass #类型StorageClass(存储类)
metadata:
name: nfs-provisioner
namespace: nfs-tool
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: choerodon.io/nfs-client-provisioner#指定使用该供应器创建持久卷
parameters:
archiveOnDelete: "true"
reclaimPolicy: Retain#删除PVC时保留PV和数据
allowVolumeExpansion: true#允许卷容量在线扩容
---
3、nfs-client-provisioner部署
kind: Deployment #类型Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner#部署名称
namespace: nfs-tool#命名空间
spec:
selector:
matchLabels:
app: nfs-client-provisioner
replicas: 1#副本数
strategy:
type: Recreate#先停止旧的Pod再创建新Pod
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccount: nfs-client-provisioner#用于K8S API权限
containers:
- name: nfs-client-provisioner
image: registry.cn-shanghai.aliyuncs.com/c7n/nfs-client-provisioner:v3.1.0-k8s1.11#镜像
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes#将NFS服务器的/data目录挂载到容器内的路径
env:
- name: PROVISIONER_NAME
value: choerodon.io/nfs-client-provisioner#环境变量供应器标识
- name: NFS_SERVER
value: 192.168.2.188#NFS服务器地址
- name: NFS_PATH
value: /data#NFS共享路径
volumes:
- name: nfs-client-root
nfs:
server: 192.168.2.188
path: /data
更多推荐

所有评论(0)