1
0

Compare commits

...

39 Commits

Author SHA1 Message Date
Kubernetes Prow Robot
da1c2a6e3e Merge pull request #69 from yonatankahana/helm-linter-fix
Fix the helm chart linter test failure
2021-03-09 20:17:14 -08:00
Yonatan Kahana
21815a26f4 Fix the helm chart linter test failure by disabling maintainers validation and remove trailing spaces
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-03-09 20:19:55 +02:00
Kubernetes Prow Robot
f08caa228c Merge pull request #66 from yonatankahana/helm-chart-lint
Setup chart linter as github action
2021-03-05 09:24:22 -08:00
Kubernetes Prow Robot
f491425b8b Merge pull request #61 from yonatankahana/helmchart4.0.3
Bump helm chart to 4.0.3
2021-03-05 09:22:22 -08:00
Yonatan Kahana
221db2f021 Setup chart linter as github action
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-03-04 23:51:33 +02:00
Yonatan Kahana
b7b4412004 Bump helm chart to 4.0.3
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-03-03 22:51:40 +02:00
Kubernetes Prow Robot
487b9092a6 Merge pull request #56 from ariksidney/helm-pathpattern-support
Helm pathpattern support
2021-03-03 09:29:20 -08:00
Kubernetes Prow Robot
a99f3dafb1 Merge pull request #59 from petermicuch/restore_delete_folder_name
Preserve name of the PV directory name during archiving
2021-03-03 07:55:20 -08:00
ariksidney
571aadd47e Clarify usage of pathPattern parameter 2021-02-27 11:17:33 +01:00
Peter Micuch
9b9ac9aa8d Preserve name of the PV directory name during archiving 2021-02-25 10:10:50 +01:00
Kubernetes Prow Robot
6b7372c8cd Merge pull request #58 from yonatankahana/arm
Add arm7 to multiarch build
2021-02-22 20:44:03 -08:00
Yonatan Kahana
5f8f90d71a Add arm7 to multiarch build
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-02-21 20:41:25 +02:00
Kubernetes Prow Robot
f4f3c572b2 Merge pull request #54 from rombert/origin/chart-leader-election-fix
helm chart: fix leader election flag
2021-02-17 10:59:06 -08:00
ariksidney
8da26f952b Update README to describe new pathPattern parameter 2021-02-17 13:15:45 +01:00
ariksidney
f716044142 Add pathPattern support to Helmchart 2021-02-17 13:14:59 +01:00
Robert Munteanu
54ea552d39 helm chart: fix leader election flag
env var values need to be string, not boolean.
2021-02-16 22:16:57 +01:00
Kubernetes Prow Robot
0a66252619 Merge pull request #52 from rombert/origin/chart-leader-election
Update chart to surface leader election flag
2021-02-16 12:11:09 -08:00
Robert Munteanu
11566f6795 Bump chart version 2021-02-16 11:03:59 +01:00
Robert Munteanu
8903a7c073 Document leaderElection.enabled flag for the helm chart 2021-02-16 10:21:09 +01:00
Robert Munteanu
099ddce5cc Update chart to surface leader election flag 2021-02-15 20:40:57 +01:00
Kubernetes Prow Robot
bd160c8e1c Merge pull request #49 from kmova/v4.0.0-release-prep
chore(release): update container images to 4.0.0
2021-02-12 02:28:47 -08:00
kmova
3eb80593a9 update chart readme - required K8s version
Signed-off-by: kmova <kiran.mova@mayadata.io>
2021-02-12 00:13:49 +00:00
kmova
a1927e5c2e resolve review comments on README
Signed-off-by: kmova <kiran.mova@mayadata.io>
2021-02-11 02:43:02 +00:00
kmova
607385ebee remove referances to deployment-arm
Signed-off-by: kmova <kiran.mova@mayadata.io>
2021-02-07 16:13:36 +00:00
kmova
cd45565480 chore(release): update container images to 4.0.0
- Update to the prow generated container images pushed to grc.io
- Set the tag version to 4.0.0
- Update the helm chart version to 4.0.0

Signed-off-by: kmova <kiran.mova@mayadata.io>
2021-02-05 05:27:02 +00:00
Kubernetes Prow Robot
23ecb30672 Merge pull request #37 from yonatankahana/readmeandchangelog
Update examples and build updated CHANGELOG
2021-02-04 17:06:52 -08:00
Yonatan Kahana
f2e15da1e9 Change the topic of unrleased changes to Unreleased
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-02-04 20:55:23 +02:00
Kubernetes Prow Robot
73163eb740 Merge pull request #35 from yonatankahana/helm-release
Add github action to release helm charts
2021-02-04 09:34:29 -08:00
Yonatan Kahana
d9f68cefe9 Fix typo in CHANGELOG and change provisioner name to use the sigs namespace
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-02-04 17:55:08 +02:00
Yonatan Kahana
ffc0286ee6 Merge branch 'master' into helm-release 2021-01-22 18:20:46 +02:00
Kubernetes Prow Robot
d19dc6e13b Merge pull request #39 from yonatankahana/helmkubesemver
Change the helm chart kubeVersion semver to include pre-releases
2021-01-22 08:01:27 -08:00
Yonatan Kahana
3837a51db7 Change the helm chart kubeVersion semver to include pre-releases
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-19 20:11:25 +02:00
Yonatan Kahana
56edbc016b Remove changes that not affect the provisioner from the changelog
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-18 18:16:24 +02:00
Yonatan Kahana
8dd86a700b Small fixes of previous commits
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-16 15:10:11 +02:00
Yonatan Kahana
30b0f52598 Add all changes from current repository to CHANGELOG
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-16 15:02:27 +02:00
Yonatan Kahana
7483890c52 Add all changes from deprecated repository to CHANGELOG
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-16 14:42:21 +02:00
Yonatan Kahana
aea8ecafba Update the README and deploy objects with better class names as examples
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-16 14:41:38 +02:00
Yonatan Kahana
6fd46c11d4 Deleting an unnecessary step in the helm chart release action
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-12 19:12:30 +02:00
Yonatan Kahana
f44ac23c42 Add github action to release helm charts
Signed-off-by: Yonatan Kahana <yonatankahana.il@gmail.com>
2021-01-11 22:03:05 +02:00
29 changed files with 164 additions and 137 deletions

18
.github/workflows/helm-chart-lint.yml vendored Normal file
View File

@@ -0,0 +1,18 @@
name: Lint Helm Charts
on: pull_request
jobs:
lint-test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Set up chart-testing
uses: helm/chart-testing-action@v2.0.1
- name: Run chart-testing (lint)
run: ct lint --validate-maintainers=false

View File

@@ -0,0 +1,25 @@
name: Release Helm Charts
on:
push:
branches:
- master
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.1.0
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"

View File

@@ -1,3 +1,40 @@
# v4.0.0
- Remove redundant field in the rbac.yaml (https://github.com/kubernetes-retired/external-storage/pull/970)
- Use `kubernetes-sigs/sig-storage-lib-external-provisioner` instead of `incubator/external-storage/lib` (https://github.com/kubernetes-retired/external-storage/pull/1026)
- Fill in rbac.yaml with ServiceAccount manifest (https://github.com/kubernetes-retired/external-storage/pull/1060, https://github.com/kubernetes-retired/external-storage/pull/1179)
- Make ARM deployment consistent with regular deployment (https://github.com/kubernetes-retired/external-storage/pull/1090)
- Update Deployment apiVersion (from `extensions/v1beta1` to `apps/v1`) and added selector field (https://github.com/kubernetes-retired/external-storage/pull/1230/, https://github.com/kubernetes-retired/external-storage/pull/1231/, https://github.com/kubernetes-retired/external-storage/pull/1283/, https://github.com/kubernetes-retired/external-storage/pull/1294/)
- Fix namespace in deployments (https://github.com/kubernetes-retired/external-storage/pull/1087, https://github.com/kubernetes-retired/external-storage/pull/1279)
- Update path creation and implemented possibility save data after removing PV (https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/pull/7/)
- Support for running controller outside of cluster (https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/pull/9)
- Add a flag to disable leader election (https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/pull/22)
- Switched to kubernetes `v1.18.0` to be compatible with `>=1.20` selfLink removal (https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/pull/26/)
- Enable mountOptions from StorageClass to PersistentVolume (https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/pull/28)
# v3.1.0
- Make leader-election configurable: default endpoints object namespace to controller's instead of kube-system (https://github.com/kubernetes-retired/external-storage/pull/957)
# v3.0.1
- Fix archiveOnDelete parsing (https://github.com/kubernetes-retired/external-storage/pull/929)
# v3.0.0
- Adds archiveOnDelete parameter to provisioner (https://github.com/kubernetes-retired/external-storage/pull/905)
- Change all clusterroles to have endpoints permissions and reduced events permissions, consolidate where possible (https://github.com/kubernetes-retired/external-storage/pull/892)
# v2.1.2
- Propagate StorageClass MountOptions to PVs (https://github.com/kubernetes-retired/external-storage/pull/835)
- Skip deletion if the corresponding directory is not found (https://github.com/kubernetes-retired/external-storage/pull/859)
# v2.1.1
- Revert "Add namespace extended attributes to directory" (https://github.com/kubernetes-retired/external-storage/pull/816)
# v2.1.0
- Change the storage apiVersion from `storage.k8s.io/v1beta1` to `storage.k8s.io/v1` (https://github.com/kubernetes-retired/external-storage/pull/599)
- Fix Makefile to build on OSX (https://github.com/kubernetes-retired/external-storage/pull/661)
- Change the RBAC apiVersion from `rbac.authorization.k8s.io/v1alpha1` to `rbac.authorization.k8s.io/v1` (https://github.com/kubernetes-retired/external-storage/pull/656)
- Add serviceAccount to deployment (https://github.com/kubernetes-retired/external-storage/pull/653)
- Add namespace extended attributes to directory (https://github.com/kubernetes-retired/external-storage/pull/672)
# v2.0.1
- Add support for ARM (Raspberry PI). Image at `quay.io/external_storage/nfs-client-provisioner-arm`. (https://github.com/kubernetes-incubator/external-storage/pull/275)
@@ -5,4 +42,4 @@
- Fix issue 149 - nfs-client-provisioner create folder with 755, not 777 (https://github.com/kubernetes-incubator/external-storage/pull/150)
# v1
- Initial release
- Initial release

View File

@@ -17,4 +17,4 @@ all: build
include release-tools/build.make
BUILD_PLATFORMS=linux amd64; linux arm64 -arm64; linux ppc64le -ppc64le; linux s390x -s390x
BUILD_PLATFORMS=linux amd64; linux arm -arm; linux arm64 -arm64; linux ppc64le -ppc64le; linux s390x -s390x

View File

@@ -1,34 +1,25 @@
# Kubernetes NFS-Client Provisioner
# Kubernetes NFS Subdir External Provisioner
NFS subdir external provisioner is an automatic provisioner that use your _existing and already configured_ NFS server to support dynamic provisioning of Kubernetes Persistent Volumes via Persistent Volume Claims. Persistent volumes are provisioned as `${namespace}-${pvcName}-${pvName}`.
**NFS subdir external provisioner** is an automatic provisioner that use your _existing and already configured_ NFS server to support dynamic provisioning of Kubernetes Persistent Volumes via Persistent Volume Claims. Persistent volumes are provisioned as `${namespace}-${pvcName}-${pvName}`.
Note: This repository is being migrated from https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client. Some of the following instructions will be updated once the migration is completed. To test container image built from this repository, you will have to build and push the nfs-client-provisioner image using the following instructions.
Note: This repository is migrated from https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client. As part of the migration:
- The container image name and repository has changed to `gcr.io/k8s-staging-sig-storage` and `nfs-subdir-external-provisioner` respectively.
- To maintain backward compatibility with earlier deployment files, the naming of NFS Client Provisioner is retained as `nfs-client-provisioner` in the deployment YAMLs.
- One of the pending areas for development on this repository is to add automated e2e tests. If you would like to contribute, please raise an issue or reach us on the Kubernetes slack #sig-storage channel.
```sh
make build
make container
# `nfs-subdir-external-provisioner:latest` will be created.
# To upload this to your customer registry, say `quay.io/myorg`, you can use
# docker tag nfs-subdir-external-provisioner:latest quay.io/myorg/nfs-subdir-external-provisioner:latest
# docker push quay.io/myorg/nfs-subdir-external-provisioner:latest
```
## How to deploy nfs-client to your cluster
**nfs-client** is an automatic provisioner that use your _existing and already configured_ NFS server to support dynamic provisioning of Kubernetes Persistent Volumes via Persistent Volume Claims. Persistent volumes are provisioned as `${namespace}-${pvcName}-${pvName}`.
## How to deploy NFS Subdir External Provisioner to your cluster
To note again, you must _already_ have an NFS Server.
### With Helm
Follow the instructions from the helm chart [README](deploy/helm/README.md).
Follow the instructions from the helm chart [README](charts/nfs-subdir-external-provisioner/README.md).
The tl;dr is
```console
$ git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
$ cd nfs-subdir-external-provisioner/deploy/helm/
$ helm install nfs-subdir-external-provisioner . \
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/exported/path
```
@@ -39,7 +30,7 @@ $ helm install nfs-subdir-external-provisioner . \
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**
**Step 2: Get the NFS Subdir External 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.
@@ -73,11 +64,9 @@ $ oc create role use-scc-hostmount-anyuid --verb=use --resource=scc --resource-n
$ oc adm policy add-role-to-user use-scc-hostmount-anyuid system:serviceaccount:$NAMESPACE:nfs-client-provisioner
```
**Step 4: Configure the NFS-Client provisioner**
**Step 4: Configure the NFS subdir external provisioner**
Note: To deploy to an ARM-based environment, use: `deploy/deployment-arm.yaml` instead, otherwise use `deploy/deployment.yaml`.
You must edit the provisioner's deployment file to specify the correct location of your nfs-client-provisioner container image.
If you would like to use a custom built nfs-subdir-external-provisioner image, you must edit the provisioner's deployment file to specify the correct location of your `nfs-client-provisioner` container image.
Next you must edit the provisioner's deployment file to add connection information for your NFS server. Edit `deploy/deployment.yaml` and replace the two occurences of <YOUR NFS SERVER HOSTNAME> with your server's hostname.
@@ -101,13 +90,13 @@ spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
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: fuseim.pri/ifs
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: <YOUR NFS SERVER HOSTNAME>
- name: NFS_PATH
@@ -119,7 +108,7 @@ spec:
path: /var/nfs
```
You may also want to change the PROVISIONER_NAME above from `fuseim.pri/ifs` to something more descriptive like `nfs-storage`, but if you do remember to also change the PROVISIONER_NAME in the storage class definition below.
Note: If you want to change the PROVISIONER_NAME above from `k8s-sigs.io/nfs-subdir-external-provisioner` to something else like `myorg/nfs-storage`, remember to also change the PROVISIONER_NAME in the storage class definition below.
To disable leader election, define an env variable named ENABLE_LEADER_ELECTION and set its value to false.
@@ -129,18 +118,18 @@ To disable leader election, define an env variable named ENABLE_LEADER_ELECTION
| Name | Description | Default |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------: |
| onDelete | If it exists and has a delete value, delete the directory, if it exists and has a retain value, save the directory. | will be archived with name on the share: `archived-+volume.Name` |
| archiveOnDelete | If it exists and has a false value, delete the directory. if `onDelete` exists, `archiveOnDelete` will be ignored. | will be archived with name on the share: `archived-+volume.Name` |
| pathPattern | Specifies a template for creating a directory path via PVC metadata's such as labels, annotations, name or namespace. To specify metadata use `${.PVC.}`: `${PVC.namespace}` | n/a |
| onDelete | If it exists and has a delete value, delete the directory, if it exists and has a retain value, save the directory. | will be archived with name on the share: `archived-<volume.Name>` |
| archiveOnDelete | If it exists and has a false value, delete the directory. if `onDelete` exists, `archiveOnDelete` will be ignored. | will be archived with name on the share: `archived-<volume.Name>` |
| pathPattern | Specifies a template for creating a directory path via PVC metadata's such as labels, annotations, name or namespace. To specify metadata use `${.PVC.<metadata>}`. Example: If folder should be named like `<pvc-namespace>-<pvc-name>`, use `${.PVC.namespace}-${.PVC.name}` as pathPattern. | n/a |
This is `deploy/class.yaml` which defines the NFS-Client's Kubernetes Storage Class:
This is `deploy/class.yaml` which defines the NFS subdir external provisioner's Kubernetes Storage Class:
```yaml
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'
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
pathPattern: "${.PVC.namespace}/${.PVC.annotations.nfs.io/storage-path}" # waits for nfs.io/storage-path annotation, if not specified will accept as empty string.
onDelete: delete
@@ -148,7 +137,7 @@ parameters:
**Step 6: Finally, test your environment!**
Now we'll test your NFS provisioner.
Now we'll test your NFS subdir external provisioner.
Deploy:
@@ -166,7 +155,7 @@ Now check the folder has been deleted.
**Step 7: Deploying your own PersistentVolumeClaims**
To deploy your own PVC, make sure that you have the correct `storage-class` as indicated by your `deploy/class.yaml` file.
To deploy your own PVC, make sure that you have the correct `storageClassName` as indicated by your `deploy/class.yaml` file.
For example:
@@ -176,9 +165,9 @@ apiVersion: v1
metadata:
name: test-claim
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
nfs.io/storage-path: "test-path" # not required, depending on whether this annotation was shown in the storage class description
spec:
storageClassName: managed-nfs-storage
accessModes:
- ReadWriteMany
resources:
@@ -186,6 +175,20 @@ spec:
storage: 1Mi
```
# Build and publish your own container image
To build your own custom container image from this repository, you will have to build and push the nfs-subdir-external-provisioner image using the following instructions.
```sh
make build
make container
# `nfs-subdir-external-provisioner:latest` will be created.
# Note: This will build a single-arch image that matches the machine on which container is built.
# To upload this to your custom registry, say `quay.io/myorg` and arch as amd64, you can use
# docker tag nfs-subdir-external-provisioner:latest quay.io/myorg/nfs-subdir-external-provisioner-amd64:latest
# docker push quay.io/myorg/nfs-subdir-external-provisioner-amd64:latest
```
# Build and publish with GitHub Actions
In a forked repository you can use GitHub Actions pipeline defined in [.github/workflows/release.yml](.github/workflows/release.yml). The pipeline builds Docker images for `linux/amd64`, `linux/arm64`, and `linux/arm/v7` platforms and publishes them using a multi-arch manifest. The pipeline is triggered when you add a tag like `gh-v{major}.{minor}.{patch}` to your commit and push it to GitHub. The tag is used for generating Docker image tags: `latest`, `{major}`, `{major}:{minor}`, `{major}:{minor}:{patch}`.
@@ -202,3 +205,6 @@ The pipeline adds several labels:
**Important:**
* The pipeline performs the docker login command using `REGISTRY_USERNAME` and `REGISTRY_TOKEN` secrets, which have to be provided.
* You also need to provide the `DOCKER_IMAGE` secret specifying your Docker image name, e.g., `quay.io/[username]/nfs-subdir-external-provisioner`.

View File

@@ -1,10 +1,10 @@
apiVersion: v1
appVersion: 3.1.0
appVersion: 4.0.0
description: nfs-subdir-external-provisioner is an automatic provisioner that used your *already configured* NFS server, automatically creating Persistent Volumes.
name: nfs-subdir-external-provisioner
home: https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
version: 3.0.0
kubeVersion: ">=1.9.0 <1.20.0"
version: 4.0.4
kubeVersion: ">=1.9.0-0"
sources:
- https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
keywords:

View File

@@ -5,22 +5,19 @@ The [NFS subdir external provisioner](https://github.com/kubernetes-sigs/nfs-sub
## TL;DR;
```console
$ git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
$ cd nfs-subdir-external-provisioner/deploy/helm/
$ helm install nfs-subdir-external-provisioner . \
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
$ helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/exported/path
```
For **arm** deployments set `image.repository` to `--set image.repository=quay.io/external_storage/nfs-client-provisioner-arm`
## Introduction
This charts installs custom [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/) into a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. It also installs a [NFS client provisioner](https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner) into the cluster which dynamically creates persistent volumes from single NFS share.
## Prerequisites
- Kubernetes >=1.9, <1.20
- Kubernetes >=1.9
- Existing NFS Share
## Installing the Chart
@@ -28,9 +25,9 @@ This charts installs custom [storage class](https://kubernetes.io/docs/concepts/
To install the chart with the release name `my-release`:
```console
$ helm install my-release . \
$ helm install my-release nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=x.x.x.x \
--set nfs.path=/exported/path```
--set nfs.path=/exported/path
```
The command deploys the given storage class in the default configuration. It can be used afterswards to provision persistent volumes. The [configuration](#configuration) section lists the parameters that can be configured during installation.
@@ -55,8 +52,8 @@ The following tables lists the configurable parameters of this chart and their d
| ----------------------------------- | ----------------------------------------------------------- | ------------------------------------------------- |
| `replicaCount` | Number of provisioner instances to deployed | `1` |
| `strategyType` | Specifies the strategy used to replace old Pods by new ones | `Recreate` |
| `image.repository` | Provisioner image | `quay.io/external_storage/nfs-client-provisioner` |
| `image.tag` | Version of provisioner image | `v3.1.0-k8s1.11` |
| `image.repository` | Provisioner image | `gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner` |
| `image.tag` | Version of provisioner image | `v4.0.0` |
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `storageClass.name` | Name of the storageClass | `nfs-client` |
| `storageClass.defaultClass` | Set as the default StorageClass | `false` |
@@ -64,7 +61,9 @@ The following tables lists the configurable parameters of this chart and their d
| `storageClass.reclaimPolicy` | Method used to reclaim an obsoleted volume | `Delete` |
| `storageClass.provisionerName` | Name of the provisionerName | null |
| `storageClass.archiveOnDelete` | Archive pvc when deleting | `true` |
| `storageClass.pathPattern` | Specifies a template for the directory name | null |
| `storageClass.accessModes` | Set access mode for PV | `ReadWriteOnce` |
| `leaderElection.enabled` | Enables or disables leader election | `true` |
| `nfs.server` | Hostname of the NFS server (required) | null (ip or hostname) |
| `nfs.path` | Basepath of the mount point to be used | `/nfs-storage` |
| `nfs.mountOptions` | Mount options (e.g. 'nfsvers=3') | null |

View File

@@ -55,6 +55,10 @@ spec:
value: {{ .Values.nfs.server }}
- name: NFS_PATH
value: {{ .Values.nfs.path }}
{{- if eq .Values.leaderElection.enabled false }}
- name: ENABLE_LEADER_ELECTION
value: "false"
{{- end }}
{{- with .Values.resources }}
resources:
{{ toYaml . | indent 12 }}

View File

@@ -17,6 +17,9 @@ allowVolumeExpansion: {{ .Values.storageClass.allowVolumeExpansion }}
reclaimPolicy: {{ .Values.storageClass.reclaimPolicy }}
parameters:
archiveOnDelete: "{{ .Values.storageClass.archiveOnDelete }}"
{{- if .Values.storageClass.pathPattern }}
pathPattern: "{{ .Values.storageClass.pathPattern }}"
{{- end }}
{{- if .Values.nfs.mountOptions }}
mountOptions:
{{- range .Values.nfs.mountOptions }}

View File

@@ -2,8 +2,8 @@ replicaCount: 1
strategyType: Recreate
image:
repository: quay.io/external_storage/nfs-client-provisioner
tag: v3.1.0-k8s1.11
repository: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner
tag: v4.0.0
pullPolicy: IfNotPresent
nfs:
@@ -35,9 +35,17 @@ storageClass:
# When set to false your PVs will not be archived by the provisioner upon deletion of the PVC.
archiveOnDelete: true
# Specifies a template for creating a directory path via PVC metadata's such as labels, annotations, name or namespace.
# Ignored if value not set.
pathPattern:
# Set access mode - ReadWriteOnce, ReadOnlyMany or ReadWriteMany
accessModes: ReadWriteOnce
leaderElection:
# When set to false leader election will be disabled
enabled: true
## For RBAC support:
rbac:
# Specifies whether RBAC resources should be created

View File

@@ -139,8 +139,8 @@ func (p *nfsProvisioner) Provision(ctx context.Context, options controller.Provi
func (p *nfsProvisioner) Delete(ctx context.Context, volume *v1.PersistentVolume) error {
path := volume.Spec.PersistentVolumeSource.NFS.Path
relativePath := strings.Replace(path, p.path, "", 1)
oldPath := filepath.Join(mountPath, relativePath)
basePath := filepath.Base(path)
oldPath := filepath.Join(mountPath, basePath)
if _, err := os.Stat(oldPath); os.IsNotExist(err) {
glog.Warningf("path %s does not exist, deletion skipped", oldPath)
@@ -179,7 +179,7 @@ func (p *nfsProvisioner) Delete(ctx context.Context, volume *v1.PersistentVolume
}
}
archivePath := filepath.Join(mountPath, "archived-"+volume.Name)
archivePath := filepath.Join(mountPath, "archived-"+basePath)
glog.V(4).Infof("archiving path %s to %s", oldPath, archivePath)
return os.Rename(oldPath, archivePath)
}

View File

@@ -2,6 +2,6 @@ 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'
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
archiveOnDelete: "false"

View File

@@ -1,39 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
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-arm: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

View File

@@ -21,19 +21,19 @@ spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
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: fuseim.pri/ifs
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: 10.10.10.60
value: 10.3.243.101
- name: NFS_PATH
value: /ifs/kubernetes
volumes:
- name: nfs-client-root
nfs:
server: 10.10.10.60
server: 10.3.243.101
path: /ifs/kubernetes

View File

@@ -2,6 +2,6 @@ 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'
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
archiveOnDelete: "false"

View File

@@ -1,32 +0,0 @@
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-arm: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

View File

@@ -14,13 +14,13 @@ spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
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: fuseim.pri/ifs
value: k8s-sigs.io/nfs-subdir-external-provisioner
- name: NFS_SERVER
value: 10.10.10.60
- name: NFS_PATH

View File

@@ -2,8 +2,6 @@ kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
storageClassName: managed-nfs-storage
accessModes:

2
go.mod
View File

@@ -41,4 +41,4 @@ replace (
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.18.0
k8s.io/metrics => k8s.io/metrics v0.18.0
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.18.0
)
)