diff --git a/README.md b/README.md index 95a34d94..8da4d14f 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,18 @@ To note again, you must *already* have an NFS Server. +## With Helm + +Follow the instructions for the stable helm chart maintained at https://github.com/helm/charts/tree/master/stable/nfs-client-provisioner + +The tl;dr is + +```bash +$ helm install stable/nfs-client-provisioner --set nfs.server=x.x.x.x --set nfs.path=/exported/path +``` + +## Without Helm + **Step 1: Get connection information for your NFS server**. Make sure your NFS server is accessible from your Kubernetes cluster and get the information you need to connect to it. At a minimum you will need its hostname. **Step 2: Get the NFS-Client Provisioner files**. To setup the provisioner you will download a set of YAML files, edit them to add your NFS server's connection information and then apply each with the ``kubectl`` / ``oc`` command. diff --git a/deploy/objects/README.md b/deploy/objects/README.md new file mode 100644 index 00000000..2003d611 --- /dev/null +++ b/deploy/objects/README.md @@ -0,0 +1 @@ +The objects in this directory are the same as in the parent except split up into one file per object for certain users' convenience. diff --git a/deploy/objects/class.yaml b/deploy/objects/class.yaml new file mode 100644 index 00000000..4d3b4805 --- /dev/null +++ b/deploy/objects/class.yaml @@ -0,0 +1,7 @@ +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: managed-nfs-storage +provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME' +parameters: + archiveOnDelete: "false" diff --git a/deploy/objects/clusterrole.yaml b/deploy/objects/clusterrole.yaml new file mode 100644 index 00000000..d8564a7a --- /dev/null +++ b/deploy/objects/clusterrole.yaml @@ -0,0 +1,17 @@ +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: nfs-client-provisioner-runner +rules: + - 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"] diff --git a/deploy/objects/clusterrolebinding.yaml b/deploy/objects/clusterrolebinding.yaml new file mode 100644 index 00000000..0e949a27 --- /dev/null +++ b/deploy/objects/clusterrolebinding.yaml @@ -0,0 +1,12 @@ +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: run-nfs-client-provisioner +subjects: + - kind: ServiceAccount + name: nfs-client-provisioner + namespace: default +roleRef: + kind: ClusterRole + name: nfs-client-provisioner-runner + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/objects/deployment-arm.yaml b/deploy/objects/deployment-arm.yaml new file mode 100644 index 00000000..9f09acca --- /dev/null +++ b/deploy/objects/deployment-arm.yaml @@ -0,0 +1,32 @@ +kind: Deployment +apiVersion: extensions/v1beta1 +metadata: + name: nfs-client-provisioner +spec: + replicas: 1 + strategy: + type: Recreate + template: + metadata: + labels: + app: nfs-client-provisioner + spec: + serviceAccount: nfs-client-provisioner + containers: + - name: nfs-client-provisioner + image: quay.io/external_storage/nfs-client-provisioner-arm:latest + volumeMounts: + - name: nfs-client-root + mountPath: /persistentvolumes + env: + - name: PROVISIONER_NAME + value: fuseim.pri/ifs + - name: NFS_SERVER + value: 192.168.1.20 + - name: NFS_PATH + value: /mnt/kube_nfs + volumes: + - name: nfs-client-root + nfs: + server: 192.168.1.20 + path: /mnt/kube_nfs diff --git a/deploy/objects/deployment.yaml b/deploy/objects/deployment.yaml new file mode 100644 index 00000000..1b793676 --- /dev/null +++ b/deploy/objects/deployment.yaml @@ -0,0 +1,32 @@ +kind: Deployment +apiVersion: extensions/v1beta1 +metadata: + name: nfs-client-provisioner +spec: + replicas: 1 + strategy: + type: Recreate + template: + metadata: + labels: + app: nfs-client-provisioner + spec: + serviceAccountName: nfs-client-provisioner + containers: + - name: nfs-client-provisioner + image: quay.io/external_storage/nfs-client-provisioner:latest + volumeMounts: + - name: nfs-client-root + mountPath: /persistentvolumes + env: + - name: PROVISIONER_NAME + value: fuseim.pri/ifs + - name: NFS_SERVER + value: 10.10.10.60 + - name: NFS_PATH + value: /ifs/kubernetes + volumes: + - name: nfs-client-root + nfs: + server: 10.10.10.60 + path: /ifs/kubernetes diff --git a/deploy/objects/role.yaml b/deploy/objects/role.yaml new file mode 100644 index 00000000..28721e82 --- /dev/null +++ b/deploy/objects/role.yaml @@ -0,0 +1,8 @@ +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: leader-locking-nfs-client-provisioner +rules: + - apiGroups: [""] + resources: ["endpoints"] + verbs: ["get", "list", "watch", "create", "update", "patch"] diff --git a/deploy/objects/rolebinding.yaml b/deploy/objects/rolebinding.yaml new file mode 100644 index 00000000..b5faf2d8 --- /dev/null +++ b/deploy/objects/rolebinding.yaml @@ -0,0 +1,13 @@ +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: leader-locking-nfs-client-provisioner +subjects: + - kind: ServiceAccount + name: nfs-client-provisioner + # replace with namespace where provisioner is deployed + namespace: default +roleRef: + kind: Role + name: leader-locking-nfs-client-provisioner + apiGroup: rbac.authorization.k8s.io diff --git a/deploy/objects/serviceaccount.yaml b/deploy/objects/serviceaccount.yaml new file mode 100644 index 00000000..edead9ad --- /dev/null +++ b/deploy/objects/serviceaccount.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: nfs-client-provisioner