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

更多推荐