From cbb973550c7444bbc190c6ae25430445a9651649 Mon Sep 17 00:00:00 2001 From: Lars Scheibling Date: Sat, 23 Sep 2023 12:49:56 +0000 Subject: [PATCH] Added option to run init as a job instead of initContainers --- .gitignore | 1 + .gitlab-ci.yml | 2 +- Chart/templates/_helpers.tpl | 19 +++++ Chart/templates/deployment.yaml | 11 +-- Chart/templates/job.yaml | 129 ++++++++++++++++++++++++++++++++ Chart/values.yaml | 1 + 6 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 Chart/templates/job.yaml diff --git a/.gitignore b/.gitignore index dceaf33..39b97df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ example.yaml example*.yaml example*.yml +test-*.yaml \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5ba8581..1e12f6a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,5 @@ variables: - HELM_CHART_VERSION: "1.0.15" + HELM_CHART_VERSION: "1.0.16" stages: - deploy diff --git a/Chart/templates/_helpers.tpl b/Chart/templates/_helpers.tpl index a000fd3..7dc7aa3 100644 --- a/Chart/templates/_helpers.tpl +++ b/Chart/templates/_helpers.tpl @@ -51,3 +51,22 @@ cloudyne.systems/customer: {{ .Values.customer.legalName | replace " " "-" | rep cloudyne.systems/customer-legal-id: '{{ .Values.customer.legalId }}' cloudyne.systems/site: {{ .Values.site.domain | quote }} {{- end }} +{{- define "..affinity-labels" -}} +podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: cloudyne.systems/customer + operator: In + values: + - {{ .Values.customer.legalName | replace " " "-" | replace "," "" | trunc 63 | trimSuffix "-" | quote }} + - key: cloudyne.systems/site + operator: In + values: + - cloudyne.systems/site: {{ .Values.site.domain | quote }} + - key: cloudyne.systems/component + operator: In + values: + - "site" + topologyKey: kubernetes.io/hostname +{{- end }} diff --git a/Chart/templates/deployment.yaml b/Chart/templates/deployment.yaml index caf644a..45ff337 100644 --- a/Chart/templates/deployment.yaml +++ b/Chart/templates/deployment.yaml @@ -12,12 +12,10 @@ spec: replicas: 1 {{- end }} selector: - matchLabels: - {{- include "..selector-labels" . | nindent 6 }} + matchLabels: {{- include "..selector-labels" . | nindent 6 }} template: metadata: - labels: - {{- include "..selector-labels" . | nindent 8 }} + labels: {{- include "..selector-labels" . | nindent 8 }} spec: securityContext: fsGroup: 101 @@ -73,6 +71,7 @@ spec: {{- end }} {{- end }} {{- end }} + {{- if not .Values.init.asJob }} initContainers: {{- if and .Values.storage.cloud.active .Values.storage.local.active .Values.storage.local.cloneCloud }} - name: init-local-storage @@ -82,7 +81,7 @@ spec: image: cloudyne/ubuntu-ci:latest command: ["python3"] args: ["/usr/local/bin/storage-clone", "/mnt/cloud", "/mnt/local"] - imagePullPolicy: IfNotPresent + imagePullPolicy: Always volumeMounts: - name: cloud mountPath: /mnt/cloud @@ -118,6 +117,7 @@ spec: {{- end }} {{- end }} {{- end }} + envFrom: - configMapRef: name: {{ include "..fullname" . }}-env @@ -133,6 +133,7 @@ spec: name: {{ include "..fullname" . }}-db-auth command: ["sh"] args: ["-c", "/init-go/init-go"] + {{- end }} containers: - name: wordpress securityContext: diff --git a/Chart/templates/job.yaml b/Chart/templates/job.yaml new file mode 100644 index 0000000..6be1de1 --- /dev/null +++ b/Chart/templates/job.yaml @@ -0,0 +1,129 @@ +{{- if .Values.init.asJob }} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "..fullname" . }}-wpc-reg + labels: + {{- include "..labels" . | nindent 4 }} + cloudyne.systems/component: site-init +spec: + template: + spec: + affinity: {{ include "..affinity-labels" . | nindent 8 }} + securityContext: + fsGroup: 101 + volumes: + - name: serverconfig + configMap: + name: {{ include "..fullname" . }}-cfg + {{- if and .Values.secrets .Values.secrets.external }} + {{- range .Values.secrets.external }} + {{- if eq .type "file" }} + - name: {{ .name }} + secret: + secretName: {{- include "..fullname" $ }}-exts-{{ .name }} + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.storage.kubernetes }} + {{- range .Values.storage.kubernetes }} + - name: {{ .name }} + {{- if eq .type "secret" }} + secret: + secretName: "{{- include "..fullname" $ }}-sec-{{ .name }}" + {{- end }} + {{- if eq .type "configmap" }} + configMap: + name: "{{- include "..fullname" $ }}-sec-{{ .name }}" + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.storage.cloud.active }} + - name: cloud + persistentVolumeClaim: + claimName: pvc-{{- include "..name" . }}-cloud + {{- end }} + {{- if .Values.storage.local.active }} + - name: local + persistentVolumeClaim: + claimName: pvc-{{- include "..name" . }}-local + {{- end }} + {{- if and .Values.secrets .Values.secrets.external }} + {{- range .Values.secrets.external }} + {{- if eq .type "docker" }} + imagePullSecrets: + - name: "{{- include "..fullname" $ }}-exts-{{ .name }}" + {{- end }} + {{- end }} + {{- end }} + {{- if .Values.storage.kubernetes }} + {{- range .Values.storage.kubernetes }} + {{- if eq .type "docker" }} + imagePullSecrets: + - name: "{{- include "..fullname" $ }}-sec-{{ .name }}" + {{- end }} + {{- end }} + {{- end }} + {{- if and .Values.storage.cloud.active .Values.storage.local.active .Values.storage.local.cloneCloud }} + initContainers: + - name: init-local-storage + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + image: cloudyne/ubuntu-ci:latest + command: ["python3"] + args: ["/usr/local/bin/storage-clone", "/mnt/cloud", "/mnt/local"] + imagePullPolicy: IfNotPresent + volumeMounts: + - name: cloud + mountPath: /mnt/cloud + - name: local + mountPath: /mnt/local + {{- end }} + containers: + - name: init-site + securityContext: + allowPrivilegeEscalation: false + runAsUser: 0 + image: "{{ .Values.site.image }}" + imagePullPolicy: Always + volumeMounts: + - name: serverconfig + mountPath: /init-go/config.json + subPath: init.json + {{- if .Values.storage.local.active }} + {{- range .Values.storage.folders }} + - name: local + mountPath: "/app/web/app/{{ . }}" + subPath: "{{ . }}" + {{- end }} + {{- if .Values.storage.cloud.active }} + - name: cloud + mountPath: "/mnt/cloud" + {{- end }} + {{- else }} + {{- if .Values.storage.cloud.active }} + {{- range .Values.storage.folders }} + - name: cloud + mountPath: "/app/web/app/{{ . }}" + subPath: "{{ . }}" + {{- end }} + {{- end }} + {{- end }} + + envFrom: + - configMapRef: + name: {{ include "..fullname" . }}-env + {{- if and .Values.secrets .Values.secrets.external }} + {{- range .Values.secrets.external }} + {{- if eq .type "env" }} + - secretRef: + name: "{{- include "..fullname" $ }}-exts-{{ .name }}" + {{- end }} + {{- end }} + {{- end }} + - secretRef: + name: {{ include "..fullname" . }}-db-auth + command: ["sh"] + args: ["-c", "/init-go/init-go"] +{{- end }} \ No newline at end of file diff --git a/Chart/values.yaml b/Chart/values.yaml index 6cc7707..d4ae2f9 100644 --- a/Chart/values.yaml +++ b/Chart/values.yaml @@ -123,6 +123,7 @@ storage: - languages init: + asJob: false wp: theme: "abctheme" updatePermissions: true