Fix bucket creation issues with Minio chart (#3470)

- Also update to latest Minio release

Fixes #3128
This commit is contained in:
Nitish Tiwari
2018-01-31 06:52:13 -08:00
committed by k8s-ci-robot
parent 65cdc689d5
commit 5fa9ef5e2e
8 changed files with 147 additions and 75 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
apiVersion: v1
description: Distributed object storage server built for cloud applications and devops.
name: minio
version: 0.4.3
version: 0.5.0
keywords:
- storage
- object-storage
+5 -5
View File
@@ -75,7 +75,7 @@ The following tables lists the configurable parameters of the Minio chart and th
| Parameter | Description | Default |
|----------------------------|-------------------------------------|---------------------------------------------------------|
| `image` | Minio image name | `minio/minio` |
| `imageTag` | Minio image tag. Possible values listed [here](https://hub.docker.com/r/minio/minio/tags/).| `RELEASE.2017-12-28T01-21-00Z`|
| `imageTag` | Minio image tag. Possible values listed [here](https://hub.docker.com/r/minio/minio/tags/).| `RELEASE.2018-01-18T20-33-21Z`|
| `imagePullPolicy` | Image pull policy | `Always` |
| `mode` | Minio server mode (`standalone`, `shared` or `distributed`)| `standalone` |
| `replicas` | Number of nodes (applicable only for Minio distributed mode). Should be 4 <= x <= 16 | `4` |
@@ -92,10 +92,10 @@ The following tables lists the configurable parameters of the Minio chart and th
| `persistence.subPath` | Mount a sub directory of the persistent volume if set | `""` |
| `resources` | CPU/Memory resource requests/limits | Memory: `256Mi`, CPU: `100m` |
| `nodeSelector` | Node labels for pod assignment | `{}` |
| `defaultBucket.enabled` | If true, a bucket will be created after minio
install | `false` |
| `defaultBucket.name` | Bucket name | `nil` |
| `defaultBucket.policy` | Bucket policy | `download` |
| `defaultBucket.enabled` | If set to true, a bucket will be created after minio install | `false` |
| `defaultBucket.name` | Bucket name | `bucket` |
| `defaultBucket.policy` | Bucket policy | `none` |
| `defaultBucket.purge` | Purge the bucket if already exists | `false` |
Some of the parameters above map to the env variables defined in the [Minio DockerHub image](https://hub.docker.com/r/minio/minio/).
@@ -0,0 +1,75 @@
#!/bin/sh
set -e ; # Have script exit in the event of a failed command.
# connectToMinio
# Use a check-sleep-check loop to wait for Minio service to be available
connectToMinio() {
ATTEMPTS=0 ; LIMIT=29 ; # Allow 30 attempts
set -e ; # fail if we can't read the keys.
ACCESS=$(cat /config/accesskey) ; SECRET=$(cat /config/secretkey) ;
set +e ; # The connections to minio are allowed to fail.
echo "Connecting to Minio server: http://$MINIO_ENDPOINT:$MINIO_PORT" ;
MC_COMMAND="mc config host add myminio http://$MINIO_ENDPOINT:$MINIO_PORT $ACCESS $SECRET" ;
$MC_COMMAND ;
STATUS=$? ;
until [ $STATUS = 0 ]
do
ATTEMPTS=`expr $ATTEMPTS + 1` ;
echo \"Failed attempts: $ATTEMPTS\" ;
if [ $ATTEMPTS -gt $LIMIT ]; then
exit 1 ;
fi ;
sleep 2 ; # 1 second intervals between attempts
$MC_COMMAND ;
STATUS=$? ;
done ;
set -e ; # reset `e` as active
return 0
}
# checkBucketExists ($bucket)
# Check if the bucket exists, by using the exit code of `mc ls`
checkBucketExists() {
BUCKET=$1
CMD=$(/usr/bin/mc ls myminio/$BUCKET > /dev/null 2>&1)
return $?
}
# createBucket ($bucket, $policy, $purge)
# Ensure bucket exists, purging if asked to
createBucket() {
BUCKET=$1
POLICY=$2
PURGE=$3
# Purge the bucket, if set & exists
# Since PURGE is user input, check explicitly for `true`
if [ $PURGE = true ]; then
if checkBucketExists $BUCKET ; then
echo "Purging bucket '$BUCKET'."
set +e ; # don't exit if this fails
/usr/bin/mc rm -r --force myminio/$BUCKET
set -e ; # reset `e` as active
else
echo "Bucket '$BUCKET' does not exist, skipping purge."
fi
fi
# Create the bucket if it does not exist
if ! checkBucketExists $BUCKET ; then
echo "Creating bucket '$BUCKET'"
/usr/bin/mc mb myminio/$BUCKET
else
echo "Bucket '$BUCKET' already exists."
fi
# At this point, the bucket should exist, skip checking for existance
# Set policy on the bucket
echo "Setting policy of bucket '$BUCKET' to '$POLICY'."
/usr/bin/mc policy $POLICY myminio/$BUCKET
}
# Try connecting to Minio instance
connectToMinio
# Create the bucket
createBucket {{ .Values.defaultBucket.name }} {{ .Values.defaultBucket.policy }} {{ .Values.defaultBucket.purge }}
@@ -104,14 +104,11 @@ spec:
volumeClaimTemplates:
- metadata:
name: export
annotations:
{{- if .Values.persistence.storageClass }}
volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.storageClass }}
{{- else }}
volume.alpha.kubernetes.io/storage-class: default
{{- end }}
spec:
accessModes: [ {{ .Values.persistence.accessMode | quote }} ]
{{- if .Values.persistence.storageClass }}
storageClassName: {{ .Values.persistence.storageClass }}
{{- end }}
resources:
requests:
storage: {{ .Values.persistence.size }}
@@ -8,9 +8,11 @@ metadata:
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
data:
initialize: |-
{{ include (print $.Template.BasePath "/_helper_create_bucket.txt") . | indent 4 }}
config.json: |-
{
"version": "20",
"version": "22",
"credential": {
"accessKey": {{ .Values.accessKey | quote }},
"secretKey": {{ .Values.secretKey | quote }}
@@ -18,14 +20,9 @@ data:
"region": {{ .Values.minioConfig.region | quote }},
"browser": {{ .Values.minioConfig.browser | quote }},
"domain": {{ .Values.minioConfig.domain | quote }},
"logger": {
"console": {
"enable": {{ .Values.minioConfig.logger.console.enable }}
},
"file": {
"enable": {{ .Values.minioConfig.logger.file.enable }},
"fileName": {{ .Values.minioConfig.logger.file.filename | quote }}
}
"storageclass": {
"standard": {{ .Values.minioConfig.standardStorageClass | quote }},
"rrs": {{ .Values.minioConfig.reducedRedundancyStorageClass | quote }}
},
"notify": {
"amqp": {
@@ -0,0 +1,46 @@
{{- if .Values.defaultBucket.enabled }}
apiVersion: batch/v1
kind: Job
metadata:
name: {{ template "minio.fullname" . }}-make-bucket-job
labels:
app: {{ template "minio.fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
annotations:
"helm.sh/hook": post-install,post-upgrade
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
metadata:
labels:
app: {{ template "minio.fullname" . }}
release: {{ .Release.Name }}
spec:
restartPolicy: OnFailure
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 4 }}
{{- end }}
volumes:
- name: minio-configuration
projected:
sources:
- configMap:
name: {{ template "minio.fullname" . }}-config-cm
- secret:
name: {{ template "minio.fullname" . }}-user
containers:
- name: minio-mc
image: minio/mc
command: ["/bin/sh", "/config/initialize"]
env:
- name: MINIO_ENDPOINT
value: {{ template "minio.fullname" . }}-svc
- name: MINIO_PORT
value: {{ .Values.servicePort | quote }}
volumeMounts:
- name: minio-configuration
mountPath: /config
{{- end }}
@@ -1,41 +0,0 @@
{{- if .Values.defaultBucket.enabled }}
apiVersion: v1
kind: Pod
metadata:
name: {{ template "minio.fullname" . }}-create-bucket
labels:
app: {{ template "minio.fullname" . }}
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
release: "{{ .Release.Name }}"
heritage: "{{ .Release.Service }}"
annotations:
"helm.sh/hook": post-install
"helm.sh/hook-delete-policy": hook-succeeded
spec:
restartPolicy: OnFailure
{{- if .Values.nodeSelector }}
nodeSelector:
{{ toYaml .Values.nodeSelector | indent 4 }}
{{- end }}
containers:
- name: minio-mc
image: minio/mc
command: ["/bin/sh", "-c",
"/usr/bin/mc config host add myminio http://$MINIO_ENDPOINT:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY;
/usr/bin/mc rm -r --force myminio/{{ .Values.defaultBucket.name }};
/usr/bin/mc mb myminio/{{ .Values.defaultBucket.name }};
/usr/bin/mc policy {{ .Values.defaultBucket.policy }} myminio/{{ .Values.defaultBucket.name }};"]
env:
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ template "minio.fullname" . }}-user
key: accesskey
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
name: {{ template "minio.fullname" . }}-user
key: secretkey
- name: MINIO_ENDPOINT
value: {{ template "minio.fullname" . }}-svc
{{- end }}
+11 -13
View File
@@ -3,7 +3,7 @@
## Distributed Minio ref: https://docs.minio.io/docs/distributed-minio-quickstart-guide
##
image: "minio/minio"
imageTag: "RELEASE.2017-12-28T01-21-00Z"
imageTag: "RELEASE.2018-01-18T20-33-21Z"
imagePullPolicy: "Always"
mode: "standalone"
@@ -39,10 +39,10 @@ persistence:
accessMode: ReadWriteOnce
size: 10Gi
## If subPath is set mount a sub folder of a volume instead of the root of the volume.
## This is especially handy for volume plugins that don't natively support sub mounting (like glusterfs).
##
subPath: ""
## If subPath is set mount a sub folder of a volume instead of the root of the volume.
## This is especially handy for volume plugins that don't natively support sub mounting (like glusterfs).
##
subPath: ""
## Expose the Minio service to be accessed from outside the cluster (LoadBalancer service).
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
@@ -69,9 +69,11 @@ resources:
defaultBucket:
enabled: false
## If enabled, must be a string with length > 0
# name: example
name: bucket
## Can be one of none|download|upload|public
# policy: download
policy: none
## Purge if bucket exists already
purge: false
## https://docs.minio.io/docs/minio-bucket-notification-guide
##
@@ -79,12 +81,8 @@ minioConfig:
region: "us-east-1"
browser: "on"
domain: ""
logger:
console:
enable: true
file:
enable: false
filename: ""
standardStorageClass: ""
reducedRedundancyStorageClass: ""
aqmp:
enable: false
url: ""