From 8c6cc4c0ad5569d7de3615463f7d8c4dd7429e63 Mon Sep 17 00:00:00 2001 From: Thiago Brito Date: Thu, 22 Apr 2021 20:00:51 -0300 Subject: [PATCH] Add Helm v2 client initialization using tiller postStart exec This adds helm v2 client initialization using the tiller container postStart exec to access helm v2 binary. This will perform 'helm init', removes the default repos 'stable' and 'local', and add valid repos that were provided as overrides. Note that helm will only add repos that exist. This expects overrides in this format: conf: tiller: charts_url: 'http://192.168.204.1:8080/helm_charts' repo_names: - 'starlingx' - 'stx-platform' repos: stable: https://kubernetes-charts.storage.googleapis.com This gives the following result: helmv2-cli -- helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com starlingx http://192.168.204.1:8080/helm_charts/starlingx stx-platform http://192.168.204.1:8080/helm_charts/stx-platform Signed-off-by: Jim Gauld Signed-off-by: Thiago Brito --- charts/armada/templates/deployment-api.yaml | 33 +++++++++++++++++++++ charts/armada/values.yaml | 10 +++++++ 2 files changed, 43 insertions(+) diff --git a/charts/armada/templates/deployment-api.yaml b/charts/armada/templates/deployment-api.yaml index 562e3d0..483ec0b 100644 --- a/charts/armada/templates/deployment-api.yaml +++ b/charts/armada/templates/deployment-api.yaml @@ -186,6 +186,39 @@ spec: - -trace {{- end }} lifecycle: + postStart: + exec: + command: + - sh + - "-c" + - | + /bin/sh <<'EOF' + # Delay initialization since postStart handler runs asynchronously and there + # is no guarantee it is called before the Container’s entrypoint. + sleep 5 + # Initialize Helm v2 client. + export HELM_HOST=:{{ .Values.conf.tiller.port }} + /helm init --client-only --skip-refresh + + # Moving the ln up so eventual errors on the next commands doesn't prevent + # having helm available + ln -s -f /helm /tmp/helm + + # Removes all repos available so we don't get an error removing what + # doesn't exist anymore or error re-adding an existing repo + /helm repo list | awk '(NR>1){print $1}' | xargs --no-run-if-empty /helm repo rm +{{- if .Values.conf.tiller.repos }} + {{- range $name, $repo := .Values.conf.tiller.repos }} + /helm repo add {{ $name }} {{ $repo }} + {{- end }} +{{- end }} +{{- if .Values.conf.tiller.repo_names }} + {{- range .Values.conf.tiller.repo_names }} + /helm repo add {{ . }} {{ $envAll.Values.conf.tiller.charts_url }}/{{ . }} + {{- end }} +{{- end }} + exit 0 + EOF preStop: exec: command: diff --git a/charts/armada/values.yaml b/charts/armada/values.yaml index 3a4427e..da45810 100644 --- a/charts/armada/values.yaml +++ b/charts/armada/values.yaml @@ -220,6 +220,10 @@ conf: # Note: Defaulting to the (default) kubernetes grace period, as anything # greater than that will have no effect. prestop_sleep: 30 + # Helm v2 initialization + charts_url: null + repo_names: [] + repos: {} monitoring: prometheus: @@ -325,7 +329,13 @@ pod: volumes: - name: kubernetes-client-cache emptyDir: {} + - name: tiller-tmp + emptyDir: {} volumeMounts: + - name: tiller-tmp + # /tmp is now readOnly due to the security_context on L288, so + # mounting an emptyDir + mountPath: /tmp - name: kubernetes-client-cache # Should be the `$HOME/.kube` of the `runAsUser` above # as this is where tiller's kubernetes client roots its cache dir. -- 2.17.1