rancher-partner-charts/charts/cockroachdb/templates/job.init.yaml

158 lines
5.9 KiB
YAML
Raw Normal View History

2020-09-25 18:35:57 +00:00
{{- if not (index .Values.conf `single-node`) }}
kind: Job
apiVersion: batch/v1
metadata:
name: {{ template "cockroachdb.fullname" . }}-init
namespace: {{ .Release.Namespace | quote }}
labels:
helm.sh/chart: {{ template "cockroachdb.chart" . }}
app.kubernetes.io/name: {{ template "cockroachdb.name" . }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
{{- with .Values.init.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
template:
metadata:
labels:
app.kubernetes.io/name: {{ template "cockroachdb.name" . }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
{{- with .Values.init.labels }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.init.annotations }}
annotations: {{- toYaml . | nindent 8 }}
{{- end }}
spec:
restartPolicy: OnFailure
terminationGracePeriodSeconds: 0
{{- if or .Values.image.credentials (and .Values.tls.enabled .Values.tls.init.image.credentials (not .Values.tls.certs.provided)) }}
imagePullSecrets:
{{- if .Values.image.credentials }}
- name: {{ template "cockroachdb.fullname" . }}.db.registry
{{- end }}
{{- if and .Values.tls.enabled .Values.tls.init.image.credentials (not .Values.tls.certs.provided) }}
- name: {{ template "cockroachdb.fullname" . }}.init-certs.registry
{{- end }}
{{- end }}
{{- if and .Values.tls.enabled (not .Values.tls.certs.provided)}}
serviceAccountName: {{ template "cockroachdb.tls.serviceAccount.name" . }}
initContainers:
# The init-certs container sends a CSR (certificate signing request) to
# the Kubernetes cluster.
# You can see pending requests using:
# kubectl get csr
# CSRs can be approved using:
# kubectl certificate approve <csr-name>
#
# In addition to the Node certificate and key, the init-certs entrypoint
# will symlink the cluster CA to the certs directory.
- name: init-certs
image: "{{ .Values.tls.init.image.repository }}:{{ .Values.tls.init.image.tag }}"
imagePullPolicy: {{ .Values.tls.init.image.pullPolicy | quote }}
command:
- /bin/ash
- -ecx
- >-
/request-cert
-namespace=${POD_NAMESPACE}
-certs-dir=/cockroach-certs/
-symlink-ca-from=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
-type=client
-user=root
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- name: client-certs
mountPath: /cockroach-certs/
{{- end }}
{{- with .Values.init.affinity }}
affinity: {{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.init.nodeSelector }}
nodeSelector: {{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.init.tolerations }}
tolerations: {{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: cluster-init
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy | quote }}
# Run the command in an `while true` loop because this Job is bound
# to come up before the CockroachDB Pods (due to the time needed to
# get PersistentVolumes attached to Nodes), and sleeping 5 seconds
# between attempts is much better than letting the Pod fail when
# the init command does and waiting out Kubernetes' non-configurable
# exponential back-off for Pod restarts.
# Command completes either when cluster initialization succeeds,
# or when cluster has been initialized already.
command:
- /bin/bash
- -c
- >-
while true; do
initOUT=$(set -x;
/cockroach/cockroach init
{{- if .Values.tls.enabled }}
--certs-dir=/cockroach-certs/
{{- else }}
--insecure
{{- end }}
{{- with index .Values.conf "cluster-name" }}
--cluster-name={{.}}
{{- end }}
--host={{ template "cockroachdb.fullname" . }}-0.{{ template "cockroachdb.fullname" . -}}
:{{ .Values.service.ports.grpc.internal.port | int64 }}
2>&1);
initRC="$?";
echo $initOUT;
[[ "$initRC" == "0" ]] && exit 0;
[[ "$initOUT" == *"cluster has already been initialized"* ]] && exit 0;
sleep 5;
done
{{- if .Values.tls.enabled }}
volumeMounts:
- name: client-certs
mountPath: /cockroach-certs/
{{- end }}
{{- with .Values.init.resources }}
resources: {{- toYaml . | nindent 12 }}
{{- end }}
{{- if .Values.tls.enabled }}
volumes:
- name: client-certs
{{- if .Values.tls.certs.provided }}
{{- if .Values.tls.certs.tlsSecret }}
projected:
sources:
- secret:
name: {{ .Values.tls.certs.clientRootSecret }}
items:
- key: ca.crt
path: ca.crt
mode: 0400
- key: tls.crt
path: client.root.crt
mode: 0400
- key: tls.key
path: client.root.key
mode: 0400
{{- else }}
secret:
secretName: {{ .Values.tls.certs.clientRootSecret }}
defaultMode: 0400
{{- end }}
{{- else }}
emptyDir: {}
{{- end }}
{{- end }}
{{- end }}