-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5 from troyfontaine/add-local-path-provisioner
NO-TICKET - Add Rancher Local-Provisioner Chart
- Loading branch information
Showing
15 changed files
with
558 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
.DS_Store | ||
.lefthook-local |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Patterns to ignore when building packages. | ||
# This supports shell glob matching, relative path matching, and | ||
# negation (prefixed with !). Only one pattern per line. | ||
.DS_Store | ||
# Common VCS dirs | ||
.git/ | ||
.gitignore | ||
.bzr/ | ||
.bzrignore | ||
.hg/ | ||
.hgignore | ||
.svn/ | ||
# Common backup files | ||
*.swp | ||
*.bak | ||
*.tmp | ||
*~ | ||
# Various IDEs | ||
.project | ||
.idea/ | ||
*.tmproj | ||
.vscode/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
apiVersion: v1 | ||
description: Use HostPath for persistent local storage with Kubernetes | ||
name: local-path-provisioner | ||
version: 0.0.20 | ||
appVersion: "v0.0.20" | ||
keywords: | ||
- storage | ||
- hostpath | ||
kubeVersion: ">=1.12.0-r0" | ||
home: https://github.com/rancher/local-path-provisioner | ||
sources: | ||
- https://github.com/rancher/local-path-provisioner.git | ||
maintainers: | ||
- name: troyfontaine | ||
email: tfontaine@troyfontaine.com |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
# Local Path Provisioner | ||
|
||
[Local Path Provisioner](https://github.com/rancher/local-path-provisioner) provides a way for the Kubernetes users to | ||
utilize the local storage in each node. Based on the user configuration, the Local Path Provisioner will create | ||
`hostPath` based persistent volume on the node automatically. It utilizes the features introduced by Kubernetes [Local | ||
Persistent Volume feature](https://kubernetes.io/blog/2018/04/13/local-persistent-volumes-beta/), but make it a simpler | ||
solution than the built-in `local` volume feature in Kubernetes. | ||
|
||
## TL;DR; | ||
|
||
```console | ||
$ git clone https://github.com/rancher/local-path-provisioner.git | ||
$ cd local-path-provisioner | ||
$ helm install --name local-path-storage --namespace local-path-storage ./deploy/chart/ | ||
``` | ||
|
||
## Introduction | ||
|
||
This chart bootstraps a [Local Path Provisioner](https://github.com/rancher/local-path-provisioner) deployment on a | ||
[Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. | ||
|
||
## Prerequisites | ||
|
||
- Kubernetes 1.12+ with Beta APIs enabled | ||
|
||
## Installing the Chart | ||
|
||
To install the chart with the release name `local-path-storage`: | ||
|
||
```console | ||
$ git clone https://github.com/rancher/local-path-provisioner.git | ||
$ cd local-path-provisioner | ||
$ helm install ./deploy/chart/ --name local-path-storage --namespace local-path-storage | ||
``` | ||
|
||
The command deploys Local Path Provisioner on the Kubernetes cluster in the default configuration. The | ||
[configuration](#configuration) section lists the parameters that can be configured during installation. | ||
|
||
> **Tip**: List all releases using `helm list` | ||
## Uninstalling the Chart | ||
|
||
To uninstall/delete the `local-path-storage` deployment: | ||
|
||
```console | ||
$ helm delete --purge local-path-storage | ||
``` | ||
|
||
The command removes all the Kubernetes components associated with the chart and deletes the release. | ||
|
||
## Configuration | ||
|
||
The following table lists the configurable parameters of the Local Path Provisioner for Kubernetes chart and their | ||
default values. | ||
|
||
| Parameter | Description | Default | | ||
| ----------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | | ||
| `image.repository` | Local Path Provisioner image name | `rancher/local-path-provisioner` | | ||
| `image.tag` | Local Path Provisioner image tag | `v0.0.20` | | ||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` | | ||
| `storageClass.create` | If true, create a `StorageClass` | `true` | | ||
| `storageClass.provisionerName` | The provisioner name for the storage class | `nil` | | ||
| `storageClass.defaultClass` | If true, set the created `StorageClass` as the cluster's default `StorageClass` | `false` | | ||
| `storageClass.name` | The name to assign the created StorageClass | local-path | | ||
| `storageClass.reclaimPolicy` | ReclaimPolicy field of the class | Delete | | ||
| `nodePathMap` | Configuration of where to store the data on each node | `[{node: DEFAULT_PATH_FOR_NON_LISTED_NODES, paths: [/opt/local-path-provisioner]}]` | | ||
| `resources` | Local Path Provisioner resource requests & limits | `{}` | | ||
| `rbac.create` | If true, create & use RBAC resources | `true` | | ||
| `serviceAccount.create` | If true, create the Local Path Provisioner service account | `true` | | ||
| `serviceAccount.name` | Name of the Local Path Provisioner service account to use or create | `nil` | | ||
| `nodeSelector` | Node labels for Local Path Provisioner pod assignment | `{}` | | ||
| `tolerations` | Node taints to tolerate | `[]` | | ||
| `affinity` | Pod affinity | `{}` | | ||
| `configmap.setup` | Configuration of script to execute setup operations on each node | #!/bin/sh<br>while getopts "m:s:p:" opt<br>do<br> case $opt in <br>  p)<br>  absolutePath=$OPTARG<br>  ;;<br>  s)<br>  sizeInBytes=$OPTARG<br>  ;;<br>  m)<br>  volMode=$OPTARG<br>  ;;<br> esac<br>done<br>mkdir -m 0777 -p ${absolutePath} | | ||
| `configmap.teardown` | Configuration of script to execute teardown operations on each node | #!/bin/sh<br>while getopts "m:s:p:" opt<br>do<br> case $opt in <br>  p)<br>  absolutePath=$OPTARG<br>  ;;<br>  s)<br>  sizeInBytes=$OPTARG<br>  ;;<br>  m)<br>  volMode=$OPTARG<br>  ;;<br> esac<br>done<br>rm -rf ${absolutePath} | | ||
| `configmap.name` | configmap name | `local-path-config` | | ||
| `configmap.helperPod` | helper pod yaml file | apiVersion: v1<br>kind: Pod<br>metadata:<br> name: helper-pod<br>spec:<br> containers:<br> - name: helper-pod<br>  image: busybox | | ||
|
||
|
||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example, | ||
|
||
```console | ||
$ helm install ./deploy/chart/ --name local-path-storage --namespace local-path-storage --set storageClass.provisionerName=rancher.io/local-path | ||
``` | ||
|
||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the | ||
chart. For example, | ||
|
||
```console | ||
$ helm install --name local-path-storage --namespace local-path-storage ./deploy/chart/ -f values.yaml | ||
``` | ||
|
||
> **Tip**: You can use the default [values.yaml](values.yaml) | ||
## RBAC | ||
|
||
By default the chart will install the recommended RBAC roles and rolebindings. | ||
|
||
You need to have the flag `--authorization-mode=RBAC` on the api server. See the following document for how to enable | ||
[RBAC](https://kubernetes.io/docs/admin/authorization/rbac/). | ||
|
||
To determine if your cluster supports RBAC, run the following command: | ||
|
||
```console | ||
$ kubectl api-versions | grep rbac | ||
``` | ||
|
||
If the output contains "beta", you may install the chart with RBAC enabled (see below). | ||
|
||
### Enable RBAC role/rolebinding creation | ||
|
||
To enable the creation of RBAC resources (On clusters with RBAC). Do the following: | ||
|
||
```console | ||
$ helm install ./deploy/chart/ --name local-path-storage --namespace local-path-storage --set rbac.create=true | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
You can create a hostpath-backed persistent volume with a persistent volume claim like this: | ||
|
||
apiVersion: v1 | ||
kind: PersistentVolumeClaim | ||
metadata: | ||
name: local-path-pvc | ||
spec: | ||
accessModes: | ||
- ReadWriteOnce | ||
storageClassName: {{ .Values.storageClass.name }} | ||
resources: | ||
requests: | ||
storage: 2Gi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
{{/* vim: set filetype=mustache: */}} | ||
{{/* | ||
Expand the name of the chart. | ||
*/}} | ||
{{- define "local-path-provisioner.name" -}} | ||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create a default fully qualified app name. | ||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | ||
If release name contains chart name it will be used as a full name. | ||
*/}} | ||
{{- define "local-path-provisioner.fullname" -}} | ||
{{- if .Values.fullnameOverride -}} | ||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} | ||
{{- else -}} | ||
{{- $name := default .Chart.Name .Values.nameOverride -}} | ||
{{- if contains $name .Release.Name -}} | ||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}} | ||
{{- else -}} | ||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} | ||
{{- end -}} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create chart name and version as used by the chart label. | ||
*/}} | ||
{{- define "local-path-provisioner.chart" -}} | ||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Common labels | ||
*/}} | ||
{{- define "local-path-provisioner.labels" -}} | ||
app.kubernetes.io/name: {{ include "local-path-provisioner.name" . }} | ||
helm.sh/chart: {{ include "local-path-provisioner.chart" . }} | ||
app.kubernetes.io/instance: {{ .Release.Name }} | ||
{{- if .Chart.AppVersion }} | ||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} | ||
{{- end }} | ||
app.kubernetes.io/managed-by: {{ .Release.Service }} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create the name of the service account to use. | ||
*/}} | ||
{{- define "local-path-provisioner.serviceAccountName" -}} | ||
{{- if .Values.serviceAccount.create -}} | ||
{{ default (include "local-path-provisioner.fullname" .) .Values.serviceAccount.name }} | ||
{{- else -}} | ||
{{ default "default" .Values.serviceAccount.name }} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{/* | ||
Create the name of the provisioner to use. | ||
*/}} | ||
{{- define "local-path-provisioner.provisionerName" -}} | ||
{{- if .Values.storageClass.provisionerName -}} | ||
{{- printf .Values.storageClass.provisionerName -}} | ||
{{- else -}} | ||
cluster.local/{{ template "local-path-provisioner.fullname" . -}} | ||
{{- end -}} | ||
{{- end -}} | ||
|
||
{{- define "local-path-provisioner.secret" }} | ||
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.privateRegistry.registryUrl (printf "%s:%s" .Values.privateRegistry.registryUser .Values.privateRegistry.registryPasswd | b64enc) | b64enc }} | ||
{{- end }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
{{- if .Values.rbac.create -}} | ||
apiVersion: rbac.authorization.k8s.io/v1 | ||
kind: ClusterRole | ||
metadata: | ||
name: {{ include "local-path-provisioner.fullname" . }} | ||
labels: | ||
{{ include "local-path-provisioner.labels" . | indent 4 }} | ||
rules: | ||
- apiGroups: [""] | ||
resources: ["nodes", "persistentvolumeclaims", "configmaps"] | ||
verbs: ["get", "list", "watch"] | ||
- apiGroups: [""] | ||
resources: ["endpoints", "persistentvolumes", "pods"] | ||
verbs: ["*"] | ||
- apiGroups: [""] | ||
resources: ["events"] | ||
verbs: ["create", "patch"] | ||
- apiGroups: ["storage.k8s.io"] | ||
resources: ["storageclasses"] | ||
verbs: ["get", "list", "watch"] | ||
{{- end -}} |
16 changes: 16 additions & 0 deletions
16
charts/local-path-provisioner/templates/clusterrolebinding.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{{- if .Values.rbac.create -}} | ||
apiVersion: rbac.authorization.k8s.io/v1 | ||
kind: ClusterRoleBinding | ||
metadata: | ||
name: {{ include "local-path-provisioner.fullname" . }} | ||
labels: | ||
{{ include "local-path-provisioner.labels" . | indent 4 }} | ||
roleRef: | ||
apiGroup: rbac.authorization.k8s.io | ||
kind: ClusterRole | ||
name: {{ template "local-path-provisioner.fullname" . }} | ||
subjects: | ||
- kind: ServiceAccount | ||
name: {{ template "local-path-provisioner.serviceAccountName" . }} | ||
namespace: {{ .Release.Namespace }} | ||
{{- end -}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
apiVersion: v1 | ||
kind: ConfigMap | ||
metadata: | ||
name: {{ .Values.configmap.name }} | ||
labels: | ||
{{ include "local-path-provisioner.labels" . | indent 4 }} | ||
data: | ||
config.json: |- | ||
{ | ||
"nodePathMap": {{ .Values.nodePathMap | toPrettyJson | nindent 8 }} | ||
} | ||
setup: |- | ||
{{ .Values.configmap.setup | nindent 4 }} | ||
teardown: |- | ||
{{ .Values.configmap.teardown | nindent 4 }} | ||
helperPod.yaml: |- | ||
{{ .Values.configmap.helperPod | nindent 4 }} | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
apiVersion: apps/v1 | ||
kind: Deployment | ||
metadata: | ||
name: {{ include "local-path-provisioner.fullname" . }} | ||
labels: | ||
{{ include "local-path-provisioner.labels" . | indent 4 }} | ||
spec: | ||
replicas: {{ .Values.replicaCount }} | ||
selector: | ||
matchLabels: | ||
app.kubernetes.io/name: {{ include "local-path-provisioner.name" . }} | ||
app.kubernetes.io/instance: {{ .Release.Name }} | ||
template: | ||
metadata: | ||
labels: | ||
app.kubernetes.io/name: {{ include "local-path-provisioner.name" . }} | ||
app.kubernetes.io/instance: {{ .Release.Name }} | ||
spec: | ||
{{- with .Values.imagePullSecrets }} | ||
imagePullSecrets: | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} | ||
serviceAccountName: {{ template "local-path-provisioner.serviceAccountName" . }} | ||
containers: | ||
- name: {{ .Chart.Name }} | ||
{{- if .Values.privateRegistry.registryUrl }} | ||
image: "{{ .Values.privateRegistry.registryUrl }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" | ||
{{- else }} | ||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" | ||
{{- end }} | ||
imagePullPolicy: {{ .Values.image.pullPolicy }} | ||
command: | ||
- local-path-provisioner | ||
- --debug | ||
- start | ||
- --config | ||
- /etc/config/config.json | ||
- --service-account-name | ||
- {{ template "local-path-provisioner.serviceAccountName" . }} | ||
- --provisioner-name | ||
- {{ template "local-path-provisioner.provisionerName" . }} | ||
- --helper-image | ||
{{- if .Values.privateRegistry.registryUrl }} | ||
- "{{ .Values.privateRegistry.registryUrl }}/{{ .Values.helperImage.repository }}:{{ .Values.helperImage.tag }}" | ||
{{- else }} | ||
- "{{ .Values.helperImage.repository }}:{{ .Values.helperImage.tag }}" | ||
{{- end }} | ||
- --configmap-name | ||
- {{ .Values.configmap.name }} | ||
volumeMounts: | ||
- name: config-volume | ||
mountPath: /etc/config/ | ||
env: | ||
- name: POD_NAMESPACE | ||
value: {{ .Release.Namespace }} | ||
resources: | ||
{{- toYaml .Values.resources | nindent 12 }} | ||
volumes: | ||
- name: config-volume | ||
configMap: | ||
name: {{ .Values.configmap.name }} | ||
{{- with .Values.nodeSelector }} | ||
nodeSelector: | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} | ||
{{- with .Values.affinity }} | ||
affinity: | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} | ||
{{- with .Values.tolerations }} | ||
tolerations: | ||
{{- toYaml . | nindent 8 }} | ||
{{- end }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{{- if .Values.defaultSettings.registrySecret }} | ||
apiVersion: v1 | ||
kind: Secret | ||
metadata: | ||
name: {{ .Values.defaultSettings.registrySecret }} | ||
type: kubernetes.io/dockerconfigjson | ||
data: | ||
.dockerconfigjson: {{ template "local-path-provisioner.secret" . }} | ||
{{- end }} |
Oops, something went wrong.