Explorar el Código

Merge pull request #11 from truenas/minio-chart

Add Minio Chart
Waqar Ahmed hace 4 años
padre
commit
63b3aee66b

+ 23 - 0
test/minio/8.0.5/.helmignore

@@ -0,0 +1,23 @@
+# 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
+# OWNERS file for Kubernetes
+OWNERS

+ 13 - 0
test/minio/8.0.5/Chart.yaml

@@ -0,0 +1,13 @@
+apiVersion: v1
+description: High Performance, Kubernetes Native Object Storage
+name: minio
+version: 8.0.5
+appVersion: master
+keywords:
+- storage
+- object-storage
+- S3
+home: https://min.io
+icon: https://min.io/resources/img/logo/MINIO_wordmark.png
+sources:
+- https://github.com/minio/minio

+ 48 - 0
test/minio/8.0.5/README.md

@@ -0,0 +1,48 @@
+MinIO
+=====
+
+[MinIO](https://min.io) is a High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.
+
+MinIO supports [distributed mode](https://docs.minio.io/docs/distributed-minio-quickstart-guide). In distributed mode, you can pool multiple drives (even on different machines) into a single object storage server.
+
+For more detailed documentation please visit [here](https://docs.minio.io/)
+
+Introduction
+------------
+
+This chart bootstraps MinIO deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.
+
+
+Configuration
+-------------
+
+The following table lists the configurable parameters of the MinIO chart and their default values.
+
+| Parameter                                        | Description                                                                                                                             | Default                          |
+|:-------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------|:---------------------------------|
+| `image.repository`                               | Image repository                                                                                                                        | `minio/minio`                    |
+| `image.tag`                                      | MinIO image tag. Possible values listed [here](https://hub.docker.com/r/minio/minio/tags/).                                             | `RELEASE.2020-11-06T23-17-07Z`   |
+| `image.pullPolicy`                               | Image pull policy                                                                                                                       | `IfNotPresent`                   |
+| `extraArgs`                                      | Additional command line arguments to pass to the MinIO server                                                                           | `[]`                             |
+| `accessKey`                                      | Default access key (5 to 20 characters)                                                                                                 | random 20 chars                  |
+| `secretKey`                                      | Default secret key (8 to 40 characters)                                                                                                 | random 40 chars                  |
+| `persistence.enabled`                            | Use persistent volume to store data                                                                                                     | `true`                           |
+| `persistence.size`                               | Size of persistent volume claim                                                                                                         | `500Gi`                          |
+| `persistence.existingClaim`                      | Use an existing PVC to persist data                                                                                                     | `nil`                            |
+| `persistence.storageClass`                       | Storage class name of PVC                                                                                                               | `nil`                            |
+| `persistence.accessMode`                         | ReadWriteOnce or ReadOnly                                                                                                               | `ReadWriteOnce`                  |
+| `persistence.subPath`                            | Mount a sub directory of the persistent volume if set                                                                                   | `""`                             |
+| `environment`                                    | Set MinIO server relevant environment variables in `values.yaml` file. MinIO containers will be passed these variables when they start. | `MINIO_STORAGE_CLASS_STANDARD: EC:4"` |
+
+Some parameters above map to the env variables defined in the [MinIO DockerHub image](https://hub.docker.com/r/minio/minio/).
+
+Pass environment variables to MinIO containers
+----------------------------------------------
+
+To pass environment variables to MinIO containers when deploying via Helm chart, use the below command line format
+
+```bash
+$ helm install --set environment.MINIO_BROWSER=on,environment.MINIO_DOMAIN=domain-name minio/minio
+```
+
+You can add as many environment variables as required, using the above format. Just add `environment.<VARIABLE_NAME>=<value>` under `set` flag.

+ 1 - 0
test/minio/8.0.5/app-readme.md

@@ -0,0 +1 @@
+[MinIO](https://min.io) is a High Performance Object Storage released under Apache License v2.0. It is API compatible with Amazon S3 cloud storage service. Use MinIO to build high performance infrastructure for machine learning, analytics and application data workloads.

+ 158 - 0
test/minio/8.0.5/questions.yaml

@@ -0,0 +1,158 @@
+groups:
+  - name: "Container Images"
+    description: "Image to be used for container"
+  - name: "Workload Configuration"
+    description: "Configure workload deployment"
+  - name: "Storage"
+    description: "Configure Storage for Nextcloud"
+  - name: "Minio Configuration"
+    description: "Configure Minio credentials"
+
+portals:
+  web_portal:
+    protocols:
+      - "http"
+    host:
+      - "$node_ip"
+    ports:
+      - "$variable-service.nodePort"
+
+questions:
+  # Image related
+  - variable: image
+    description: "Docker Image Details"
+    label: "Docker Image"
+    group: "Container Images"
+    schema:
+      type: dict
+      required: true
+      attrs:
+        - variable: repository
+          description: "Docker image repository"
+          label: "Image repository"
+          schema:
+            type: string
+            default: "minio/minio"
+            required: true
+        - variable: tag
+          description: "Tag to use for specified image"
+          label: "Image Tag"
+          schema:
+            type: string
+            default: "RELEASE.2020-11-19T23-48-16Z"
+        - variable: pullPolicy
+          description: "Docker Image Pull Policy"
+          label: "Image Pull Policy"
+          schema:
+            type: string
+            default: "IfNotPresent"
+            enum:
+              - value: "IfNotPresent"
+                description: "Only pull image if not present on host"
+              - value: "Always"
+                description: "Always pull image even if present on host"
+              - value: "Never"
+                description: "Never pull image even if it's not present on host"
+
+  - variable: updateStrategy
+    label: "Minio update strategy"
+    group: "Workload Configuration"
+    schema:
+      type: string
+      default: "RollingUpdate"
+      enum:
+        - value: "RollingUpdate"
+          description: "Create new pods and then kill old ones"
+        - value: "Recreate"
+          description: "Kill existing pods before creating new ones"
+
+  - variable: extraArgs
+    label: "Minio Extra Arguments"
+    group: "Minio Configuration"
+    schema:
+      type: list
+      default: []
+      items:
+        - variable: arg
+          label: "Argument"
+          schema:
+            type: string
+
+  - variable: accessKey
+    label: "Access Key"
+    group: "Minio Configuration"
+    schema:
+      type: string
+      required: true
+      min_length: 5
+      max_length: 20
+
+  - variable: secretKey
+    label: "Secret Key"
+    group: "Minio Configuration"
+    schema:
+      type: string
+      required: true
+      min_length: 8
+      max_length: 40
+
+  - variable: environment
+    label: "Minio image environment"
+    group: "Minio Configuration"
+    schema:
+      type: dict
+      additional_attrs: true
+      attrs: []
+
+  - variable: service
+    description: "Minio Service Configuration"
+    label: "Minio Service Configuration"
+    group: "Minio Configuration"
+    schema:
+      type: dict
+      required: true
+      attrs:
+        - variable: nodePort
+          label: "Node Port to use for Minio"
+          schema:
+            type: int
+            min: 9000
+            max: 65535
+            default: 9000
+            required: true
+
+  - variable: minioHostPathEnabled
+    label: "Configure Host Path for Minio data"
+    group: "Storage"
+    schema:
+      type: boolean
+      default: false
+      show_subquestions_if: true
+      subquestions:
+        - variable: minioHostPath
+          label: "Specify HostPath for Minio data"
+          schema:
+            type: hostpath
+
+  - variable: minioDataVolume
+    label: "Configure iXVolume"
+    group: "Storage"
+    schema:
+      type: dict
+      $ref:
+        - "normalize/ixVolume"
+      show_if: [["minioHostPathEnabled", "=", false]]
+      attrs:
+        - variable: mountPath
+          label: "Mount Path"
+          description: "Path where the volume will be mounted inside the pod"
+          schema:
+            type: path
+            editable: false
+            default: "/export"
+        - variable: datasetName
+          label: "Dataset Name"
+          schema:
+            type: string
+            default: "ix-minio"
+            editable: false

+ 2 - 0
test/minio/8.0.5/templates/NOTES.txt

@@ -0,0 +1,2 @@
+Minio can be accessed from the following URL:
+http://$node_ip:{{ .Values.service.nodePort }}/

+ 84 - 0
test/minio/8.0.5/templates/_helpers.tpl

@@ -0,0 +1,84 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "minio.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 "minio.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 "minio.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Return the appropriate apiVersion for deployment.
+*/}}
+{{- define "minio.deployment.apiVersion" -}}
+{{- if semverCompare "<1.9-0" .Capabilities.KubeVersion.Version -}}
+{{- print "apps/v1beta2" -}}
+{{- else -}}
+{{- print "apps/v1" -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Return the appropriate apiVersion for statefulset.
+*/}}
+{{- define "minio.statefulset.apiVersion" -}}
+{{- if semverCompare "<1.17-0" .Capabilities.KubeVersion.Version -}}
+{{- print "apps/v1beta2" -}}
+{{- else -}}
+{{- print "apps/v1" -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Determine secret name.
+*/}}
+{{- define "minio.secretName" -}}
+{{- include "minio.fullname" . -}}
+{{- end -}}
+
+{{/*
+Determine service account name for deployment or statefulset.
+*/}}
+{{- define "minio.serviceAccountName" -}}
+{{- (include "minio.fullname" .) | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Determine name for scc role and rolebinding
+*/}}
+{{- define "minio.sccRoleName" -}}
+{{- printf "%s-%s" "scc" (include "minio.fullname" .) | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Properly format optional additional arguments to Minio binary
+*/}}
+{{- define "minio.extraArgs" -}}
+{{- range .Values.extraArgs -}}
+{{ " " }}{{ . }}
+{{- end -}}
+{{- end -}}

+ 23 - 0
test/minio/8.0.5/templates/_storage.tpl

@@ -0,0 +1,23 @@
+{{/*
+Retrieve host path from ix volumes based on dataset name
+*/}}
+{{- define "retrieveHostPathFromiXVolume" -}}
+{{- range $index, $hostPathConfiguration := $.ixVolumes }}
+{{- $dsName := base $hostPathConfiguration.hostPath -}}
+{{- if eq $.datasetName $dsName -}}
+{{- $hostPathConfiguration.hostPath -}}
+{{- end -}}
+{{- end }}
+{{- end -}}
+
+{{/*
+Retrieve host path for minio
+*/}}
+{{- define "configuredMinioHostPath" -}}
+{{- if .Values.minioHostPathEnabled -}}
+{{- .Values.minioHostPath -}}
+{{- else -}}
+{{- $volDict := dict "datasetName" $.Values.minioDataVolume.datasetName "ixVolumes" $.Values.ixVolumes -}}
+{{- include "retrieveHostPathFromiXVolume" $volDict -}}
+{{- end -}}
+{{- end -}}

+ 67 - 0
test/minio/8.0.5/templates/deployment.yaml

@@ -0,0 +1,67 @@
+{{ $scheme := "http" }}
+apiVersion: {{ template "minio.deployment.apiVersion" . }}
+kind: Deployment
+metadata:
+  name: {{ template "minio.fullname" . }}
+  labels:
+    app: {{ template "minio.name" . }}
+    chart: {{ template "minio.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+spec:
+  strategy:
+    type: {{ .Values.updateStrategy }}
+  selector:
+    matchLabels:
+      app: {{ template "minio.name" . }}
+      release: {{ .Release.Name }}
+  template:
+    metadata:
+      name: {{ template "minio.fullname" . }}
+      labels:
+        app: {{ template "minio.name" . }}
+        release: {{ .Release.Name }}
+      annotations:
+        checksum/secrets: {{ include (print $.Template.BasePath "/secrets.yaml") . | sha256sum }}
+    spec:
+      serviceAccountName: {{ include "minio.serviceAccountName" . | quote }}
+      containers:
+        - name: {{ .Chart.Name }}
+          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+          imagePullPolicy: {{ .Values.image.pullPolicy }}
+          command:
+            - "/bin/sh"
+            - "-ce"
+            - "/usr/bin/docker-entrypoint.sh minio server /export {{- template "minio.extraArgs" . }}"
+          volumeMounts:
+            - name: export
+              mountPath: /export
+          ports:
+            - name: {{ $scheme }}
+              containerPort: 9000
+          env:
+            - name: MINIO_ACCESS_KEY
+              valueFrom:
+                secretKeyRef:
+                  name: {{ template "minio.secretName" . }}
+                  key: accesskey
+            - name: MINIO_SECRET_KEY
+              valueFrom:
+                secretKeyRef:
+                  name: {{ template "minio.secretName" . }}
+                  key: secretkey
+            {{- range $key, $val := .Values.environment }}
+            - name: {{ $key }}
+              value: {{ $val | quote }}
+            {{- end}}
+      volumes:
+        - name: export
+        {{- if .Values.emptyDirVolumes }}
+          emptyDir: {}
+        {{- else }}
+          hostPath:
+            path: {{ template "configuredMinioHostPath" . }}
+        {{- end }}
+        - name: minio-user
+          secret:
+            secretName: {{ template "minio.secretName" . }}

+ 13 - 0
test/minio/8.0.5/templates/secrets.yaml

@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: {{ template "minio.secretName" . }}
+  labels:
+    app: {{ template "minio.name" . }}
+    chart: {{ template "minio.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+type: Opaque
+data:
+  accesskey: {{ if .Values.accessKey }}{{ .Values.accessKey | toString | b64enc | quote }}{{ else }}{{ randAlphaNum 20 | b64enc | quote }}{{ end }}
+  secretkey: {{ if .Values.secretKey }}{{ .Values.secretKey | toString | b64enc | quote }}{{ else }}{{ randAlphaNum 40 | b64enc | quote }}{{ end }}

+ 21 - 0
test/minio/8.0.5/templates/service.yaml

@@ -0,0 +1,21 @@
+{{ $scheme := "http" }}
+apiVersion: v1
+kind: Service
+metadata:
+  name: {{ template "minio.fullname" . }}
+  labels:
+    app: {{ template "minio.name" . }}
+    chart: {{ template "minio.chart" . }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+spec:
+  type: "NodePort"
+  ports:
+    - name: {{ $scheme }}
+      port: {{ .Values.service.nodePort }}
+      protocol: TCP
+      nodePort: {{ .Values.service.nodePort }}
+      targetPort: 9000
+  selector:
+    app: {{ template "minio.name" . }}
+    release: {{ .Release.Name }}

+ 9 - 0
test/minio/8.0.5/templates/serviceaccount.yaml

@@ -0,0 +1,9 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "minio.serviceAccountName" . | quote }}
+  namespace: {{ .Release.Namespace | quote }}
+  labels:
+    app: {{ template "minio.name" . }}
+    chart: {{ template "minio.chart" . }}
+    release: "{{ .Release.Name }}"

+ 19 - 0
test/minio/8.0.5/test_values.yaml

@@ -0,0 +1,19 @@
+## Set default image, imageTag, and imagePullPolicy. mode is used to indicate the
+##
+image:
+  repository: minio/minio
+  tag: RELEASE.2020-11-19T23-48-16Z
+  pullPolicy: IfNotPresent
+
+## Additional arguments to pass to minio binary
+extraArgs: []
+
+updateStrategy: RollingUpdate
+
+service:
+  nodePort: 32000
+
+environment:
+  ## Please refer for comprehensive list https://docs.minio.io/docs/minio-server-configuration-guide.html
+
+emptyDirVolumes: true

+ 17 - 0
test/minio/8.0.5/values.yaml

@@ -0,0 +1,17 @@
+## Set default image, imageTag, and imagePullPolicy. mode is used to indicate the
+##
+image:
+  repository: minio/minio
+  tag: RELEASE.2020-11-19T23-48-16Z
+  pullPolicy: IfNotPresent
+
+## Additional arguments to pass to minio binary
+extraArgs: []
+
+updateStrategy: RollingUpdate
+
+service:
+  nodePort: 9000
+
+environment:
+  ## Please refer for comprehensive list https://docs.minio.io/docs/minio-server-configuration-guide.html

+ 4 - 0
test/minio/item.yaml

@@ -0,0 +1,4 @@
+categories:
+  - storage
+  - S3
+icon_url: https://min.io/resources/img/logo/MINIO_wordmark.png

+ 1 - 1
test/nextcloud/2.3.2/questions.yaml

@@ -116,7 +116,7 @@ questions:
             type: int
             min: 9000
             max: 65535
-            default: 9000
+            default: 9001
             required: true
 
   - variable: nextcloudDataHostPathEnabled

+ 1 - 1
test/nextcloud/2.3.2/values.yaml

@@ -14,4 +14,4 @@ nextcloud:
   strategy: "Recreate"
 
 service:
-  nodePort: 9000
+  nodePort: 9001