NFS subdir external provisioner

这个provisioner支持用已有的nfs动态的创建PV,下面记录下部署过程。

前提已经有一个k8s集群,一台nfs服务器。我的环境是1master ,2worker的k8s,用work2搭建了nfs

步骤如下:

1. 准备好nfs服务器的信息

确保你的k8s可以正常访问nfs服务器,服务器IP (192.168.157.130) , 共享目录(/public)

2. 下载 provisioner 文件


git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
#切换到nfs-subdir-external-provisioner目录下

3. 安装RBAC授权相关的账号、角色、绑定

#编辑 deploy/rbac.yaml  deployment.yaml
#我把provisioner安装在kube-system命名空间,这个可以自己定义修改
$ NAMESPACE="kube-system"
$ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/rbac.yaml ./deploy/deployment.yaml
$ kubectl create -f deploy/rbac.yaml -f deploy/deployment.yaml

4.配置provisioner

编辑deploy/deployment.yaml文件,修改image 为国内镜像,不然下载不下来(比如我的:registry.cn-hangzhou.aliyuncs.com/jimywu/nfs-subdir-external-provisioner:v4.0.0);

修改<YOUR NFS SERVER HOSTNAME> 和 <YOUR PATH>,我的分别为192.168.157.130,/public

其他的都保持默认,kubectl create -f deploy/deployment.yaml 安装

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: <YOUR NFS SERVER HOSTNAME>
            - name: NFS_PATH
              value: <YOUR PATH>
      volumes:
        - name: nfs-client-root
          nfs:
            server: <YOUR NFS SERVER HOSTNAME>
            path: <YOUR PATH>

5.部署 storage class

编辑 deploy/class.yaml 文件,增加5,6两行,把此storageclass设置为系统默认,这样创建PV时不用指明SC的名字。

  1 apiVersion: storage.k8s.io/v1
  2 kind: StorageClass
  3 metadata:
  4   name: managed-nfs-storage
  5   annotations:
  6     "storageclass.kubernetes.io/is-default-class": "true"
  7 provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
  8 parameters:
  9   archiveOnDelete: "false"

最后 kubectl create deploy/class.yaml 部署。以上没有出错,基本已经完成部署。

设置默认storageClass

kubectl patch sc managed-nfs-storage -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’

参考链接:官方git : https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

Leave a Reply

Your email address will not be published. Required fields are marked *