diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl index 9cc9b97..f8c9c4f 100644 --- a/templates/_helpers.tpl +++ b/templates/_helpers.tpl @@ -36,9 +36,9 @@ Compute the maximum number of unavailable replicas for the PodDisruptionBudget. This defaults to (n/2)-1 where n is the number of members of the server cluster. */}} {{- define "vault.pdb.maxUnavailable" -}} -{{- if .Values.server.disruptionBudget.maxUnavailable -}} -{{ .Values.server.disruptionBudget.maxUnavailable -}} +{{- if .Values.serverHA.disruptionBudget.maxUnavailable -}} +{{ .Values.serverHA.disruptionBudget.maxUnavailable -}} {{- else -}} -{{- ceil (sub (div (int .Values.server.replicas) 2) 1) -}} +{{- ceil (sub (div (int .Values.serverHA.replicas) 2) 1) -}} {{- end -}} {{- end -}} diff --git a/templates/server-disruptionbudget.yaml b/templates/server-disruptionbudget.yaml new file mode 100644 index 0000000..e46af11 --- /dev/null +++ b/templates/server-disruptionbudget.yaml @@ -0,0 +1,20 @@ +# PodDisruptionBudget to prevent degrading the server cluster through +# voluntary cluster changes. +{{- if (and .Values.serverHA.disruptionBudget.enabled (or (and (ne (.Values.serverHA.enabled | toString) "-") .Values.serverHA.enabled) (and (eq (.Values.serverHA.enabled | toString) "-") .Values.global.enabled))) }} +apiVersion: policy/v1beta1 +kind: PodDisruptionBudget +metadata: + name: {{ template "vault.fullname" . }}-ha-server + labels: + app: {{ template "vault.name" . }} + chart: {{ template "vault.chart" . }} + heritage: {{ .Release.Service }} + release: {{ .Release.Name }} +spec: + maxUnavailable: {{ template "vault.pdb.maxUnavailable" . }} + selector: + matchLabels: + app: {{ template "vault.name" . }} + release: "{{ .Release.Name }}" + component: server +{{- end }} diff --git a/test/unit/server-disruptionbudget.bats b/test/unit/server-disruptionbudget.bats index c2f2e98..d21d772 100755 --- a/test/unit/server-disruptionbudget.bats +++ b/test/unit/server-disruptionbudget.bats @@ -6,6 +6,7 @@ load _helpers cd `chart_dir` local actual=$(helm template \ -x templates/server-disruptionbudget.yaml \ + --set 'serverHA.enabled=true' \ . | tee /dev/stderr | yq 'length > 0' | tee /dev/stderr) [ "${actual}" = "true" ] @@ -16,7 +17,7 @@ load _helpers local actual=$(helm template \ -x templates/server-disruptionbudget.yaml \ --set 'global.enabled=false' \ - --set 'server.enabled=true' \ + --set 'serverHA.enabled=true' \ . | tee /dev/stderr | yq 'length > 0' | tee /dev/stderr) [ "${actual}" = "true" ] @@ -26,7 +27,7 @@ load _helpers cd `chart_dir` local actual=$(helm template \ -x templates/server-disruptionbudget.yaml \ - --set 'server.enabled=false' \ + --set 'serverHA.enabled=false' \ . | tee /dev/stderr | yq 'length > 0' | tee /dev/stderr) [ "${actual}" = "false" ] @@ -56,7 +57,8 @@ load _helpers cd `chart_dir` local actual=$(helm template \ -x templates/server-disruptionbudget.yaml \ - --set 'server.replicas=3' \ + --set 'serverHA.enabled=true' \ + --set 'serverHA.replicas=3' \ . | tee /dev/stderr | yq '.spec.maxUnavailable' | tee /dev/stderr) [ "${actual}" = "0" ] diff --git a/values.yaml b/values.yaml index e4d6f92..298a6f7 100644 --- a/values.yaml +++ b/values.yaml @@ -128,6 +128,13 @@ serverHA: # - type: secret (or "configMap") # name: my-secret # load: false # if true, will add to `-config` to load by Vault + + disruptionBudget: + enabled: true + + # maxUnavailable will default to (n/2)-1 where n is the number of + # replicas. If you'd like a custom value, you can specify an override here. + maxUnavailable: null # Configuration for DNS configuration within the Kubernetes cluster. # This creates a service that routes to all agents (client or server)