From e94d6f78d7584b64115905d4d6f7959160dd1936 Mon Sep 17 00:00:00 2001 From: kaiyou Date: Sat, 29 Oct 2022 21:07:02 +0200 Subject: Enable daemonset deployment using the helm chart DaemonSet is a k8s resource that schedules one instance per node, which is useful for some garage deployment use cases, including managing garage nodes using k8s node labels --- script/helm/garage/templates/statefulset.yaml | 116 ---------------------- script/helm/garage/templates/workload.yaml | 133 ++++++++++++++++++++++++++ script/helm/garage/values.yaml | 12 ++- 3 files changed, 143 insertions(+), 118 deletions(-) delete mode 100644 script/helm/garage/templates/statefulset.yaml create mode 100644 script/helm/garage/templates/workload.yaml diff --git a/script/helm/garage/templates/statefulset.yaml b/script/helm/garage/templates/statefulset.yaml deleted file mode 100644 index bda40117..00000000 --- a/script/helm/garage/templates/statefulset.yaml +++ /dev/null @@ -1,116 +0,0 @@ -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: {{ include "garage.fullname" . }} - labels: - {{- include "garage.labels" . | nindent 4 }} -spec: - replicas: {{ .Values.replicaCount }} - selector: - matchLabels: - {{- include "garage.selectorLabels" . | nindent 6 }} - serviceName: {{ include "garage.fullname" . }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "garage.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "garage.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - initContainers: - # Copies garage.toml from configmap to temporary etc volume and replaces RPC secret placeholder - - name: {{ .Chart.Name }}-init - image: busybox:1.28 - command: ["sh", "-c", "sed \"s/__RPC_SECRET_REPLACE__/$RPC_SECRET/\" /mnt/garage.toml > /mnt/etc/garage.toml"] - env: - - name: RPC_SECRET - valueFrom: - secretKeyRef: - name: {{ include "garage.rpcSecretName" . }} - key: rpcSecret - volumeMounts: - - name: configmap - mountPath: /mnt/garage.toml - subPath: garage.toml - - name: etc - mountPath: /mnt/etc - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - containerPort: 3900 - name: s3-api - - containerPort: 3902 - name: web-api - volumeMounts: - - name: meta - mountPath: /mnt/meta - - name: data - mountPath: /mnt/data - - name: etc - mountPath: /etc/garage.toml - subPath: garage.toml - # TODO - # livenessProbe: - # httpGet: - # path: / - # port: 3900 - # readinessProbe: - # httpGet: - # path: / - # port: 3900 - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumes: - - name: configmap - configMap: - name: {{ include "garage.fullname" . }}-config - - name: etc - emptyDir: {} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- if .Values.persistence.enabled }} - volumeClaimTemplates: - - metadata: - name: meta - spec: - accessModes: [ "ReadWriteOnce" ] - {{- if hasKey .Values.persistence.meta "storageClass" }} - storageClassName: {{ .Values.persistence.meta.storageClass | quote }} - {{- end }} - resources: - requests: - storage: {{ .Values.persistence.meta.size | quote }} - - metadata: - name: data - spec: - accessModes: [ "ReadWriteOnce" ] - {{- if hasKey .Values.persistence.data "storageClass" }} - storageClassName: {{ .Values.persistence.data.storageClass | quote }} - {{- end }} - resources: - requests: - storage: {{ .Values.persistence.data.size | quote }} - {{- end }} diff --git a/script/helm/garage/templates/workload.yaml b/script/helm/garage/templates/workload.yaml new file mode 100644 index 00000000..f41eff6f --- /dev/null +++ b/script/helm/garage/templates/workload.yaml @@ -0,0 +1,133 @@ +apiVersion: apps/v1 +kind: {{ .Values.deployment.kind }} +metadata: + name: {{ include "garage.fullname" . }} + labels: + {{- include "garage.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "garage.selectorLabels" . | nindent 6 }} + {{- if eq .Values.deployment.kind "StatefulSet" }} + replicas: {{ .Values.deployment.replicaCount }} + serviceName: {{ include "garage.fullname" . }} + {{- end }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "garage.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "garage.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + initContainers: + # Copies garage.toml from configmap to temporary etc volume and replaces RPC secret placeholder + - name: {{ .Chart.Name }}-init + image: busybox:1.28 + command: ["sh", "-c", "sed \"s/__RPC_SECRET_REPLACE__/$RPC_SECRET/\" /mnt/garage.toml > /mnt/etc/garage.toml"] + env: + - name: RPC_SECRET + valueFrom: + secretKeyRef: + name: {{ include "garage.rpcSecretName" . }} + key: rpcSecret + volumeMounts: + - name: configmap + mountPath: /mnt/garage.toml + subPath: garage.toml + - name: etc + mountPath: /mnt/etc + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - containerPort: 3900 + name: s3-api + - containerPort: 3902 + name: web-api + volumeMounts: + - name: meta + mountPath: /mnt/meta + - name: data + mountPath: /mnt/data + - name: etc + mountPath: /etc/garage.toml + subPath: garage.toml + # TODO + # livenessProbe: + # httpGet: + # path: / + # port: 3900 + # readinessProbe: + # httpGet: + # path: / + # port: 3900 + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumes: + - name: configmap + configMap: + name: {{ include "garage.fullname" . }}-config + - name: etc + emptyDir: {} + {{- if eq .Values.deployment.kind "DaemonSet" }} + {{- if .Values.persistence.enabled }} + - name: meta + hostPath: + path: {{ .Values.persistence.meta.hostPath }} + - name: data + hostPath: + path: {{ .Values.persistence.data.hostPath }} + {{- else }} + {{- end }} + - name: meta + emptyDir: {} + - name: data + emptyDir: {} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- if and .Values.persistence.enabled (eq .Values.deployment.kind "StatefulSet") }} + volumeClaimTemplates: + - metadata: + name: meta + spec: + accessModes: [ "ReadWriteOnce" ] + {{- if hasKey .Values.persistence.meta "storageClass" }} + storageClassName: {{ .Values.persistence.meta.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.meta.size | quote }} + - metadata: + name: data + spec: + accessModes: [ "ReadWriteOnce" ] + {{- if hasKey .Values.persistence.data "storageClass" }} + storageClassName: {{ .Values.persistence.data.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.data.size | quote }} + {{- end }} diff --git a/script/helm/garage/values.yaml b/script/helm/garage/values.yaml index 608ee53c..52f1910a 100644 --- a/script/helm/garage/values.yaml +++ b/script/helm/garage/values.yaml @@ -29,12 +29,20 @@ persistence: meta: # storageClass: "fast-storage-class" size: 100Mi + # used only for daemon sets + hostPath: /var/lib/garage/meta data: # storageClass: "slow-storage-class" size: 100Mi + # used only for daemon sets + hostPath: /var/lib/garage/data -# Number of StatefulSet replicas/garage nodes to start -replicaCount: 3 +# Deployment configuration +deployment: + # Switchable to DaemonSet + kind: StatefulSet + # Number of StatefulSet replicas/garage nodes to start + replicaCount: 3 image: repository: dxflrs/amd64_garage -- cgit v1.2.3 From 49a138b670cf820a69b76ed8de1fa3a10d9070ff Mon Sep 17 00:00:00 2001 From: kaiyou Date: Sun, 6 Nov 2022 17:50:06 +0100 Subject: Fix volume handling and persistence flag --- script/helm/garage/templates/workload.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/helm/garage/templates/workload.yaml b/script/helm/garage/templates/workload.yaml index f41eff6f..26ff153f 100644 --- a/script/helm/garage/templates/workload.yaml +++ b/script/helm/garage/templates/workload.yaml @@ -81,16 +81,16 @@ spec: name: {{ include "garage.fullname" . }}-config - name: etc emptyDir: {} - {{- if eq .Values.deployment.kind "DaemonSet" }} {{- if .Values.persistence.enabled }} + {{- if eq .Values.deployment.kind "DaemonSet" }} - name: meta hostPath: path: {{ .Values.persistence.meta.hostPath }} - name: data hostPath: path: {{ .Values.persistence.data.hostPath }} - {{- else }} {{- end }} + {{- else }} - name: meta emptyDir: {} - name: data -- cgit v1.2.3 From e9b0068079923910819e73c76d24c58de528eeb1 Mon Sep 17 00:00:00 2001 From: kaiyou Date: Sun, 6 Nov 2022 21:54:09 +0100 Subject: Set hostPath type for volumes --- script/helm/garage/templates/workload.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/script/helm/garage/templates/workload.yaml b/script/helm/garage/templates/workload.yaml index 26ff153f..057a9858 100644 --- a/script/helm/garage/templates/workload.yaml +++ b/script/helm/garage/templates/workload.yaml @@ -86,9 +86,11 @@ spec: - name: meta hostPath: path: {{ .Values.persistence.meta.hostPath }} + type: DirectoryOrCreate - name: data hostPath: path: {{ .Values.persistence.data.hostPath }} + type: DirectoryOrCreate {{- end }} {{- else }} - name: meta -- cgit v1.2.3 From e852c91d18dc5eb82b335472de53e35420a8290a Mon Sep 17 00:00:00 2001 From: kaiyou Date: Fri, 18 Nov 2022 20:03:57 +0100 Subject: Fix documentation based on new deployment values --- doc/book/cookbook/kubernetes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/book/cookbook/kubernetes.md b/doc/book/cookbook/kubernetes.md index 9eafe3e1..dfeb3281 100644 --- a/doc/book/cookbook/kubernetes.md +++ b/doc/book/cookbook/kubernetes.md @@ -48,7 +48,8 @@ garage: replicationMode: "2" # Start 4 instances (StatefulSets) of garage -replicaCount: 4 +deployment: + replicaCount: 4 # Override default storage class and size persistence: -- cgit v1.2.3 From 559e924cc2e0887e07886374ca018dd9761c3ba5 Mon Sep 17 00:00:00 2001 From: kaiyou Date: Sun, 25 Dec 2022 13:33:44 +0100 Subject: Bump the helm chart version --- script/helm/garage/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/helm/garage/Chart.yaml b/script/helm/garage/Chart.yaml index 7fb4c531..f845cfe8 100644 --- a/script/helm/garage/Chart.yaml +++ b/script/helm/garage/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.2.0 +version: 0.3.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to -- cgit v1.2.3