Add OpenEBS v4.6.1 with images repointed to ghcr.io/wrktalk-tech - Loki and Alloy disabled
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
OpenEBS Mayastor has been installed. Check its status by running:
|
||||
$ kubectl get pods -n {{ .Release.Namespace }}
|
||||
|
||||
For more information or to view the documentation, visit our website at https://openebs.io/docs/.
|
||||
@@ -0,0 +1,767 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
|
||||
{{/*
|
||||
Renders a value that contains template.
|
||||
Usage:
|
||||
{{ include "render" ( dict "value" .Values.path.to.the.Value "context" $) }}
|
||||
*/}}
|
||||
{{- define "render" -}}
|
||||
{{- if typeIs "string" .value }}
|
||||
{{- tpl .value .context }}
|
||||
{{- else }}
|
||||
{{- tpl (.value | toYaml) .context }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the CORE server init container, if enabled
|
||||
Usage:
|
||||
{{ include "base_init_core_containers" . }}
|
||||
*/}}
|
||||
{{- define "base_init_core_containers" -}}
|
||||
{{- if .Values.base.initCoreContainers.enabled }}
|
||||
{{- include "render_init_containers" (dict "value" .Values.base.initCoreContainers.containers "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the HA NODE AGENT init container, if enabled
|
||||
Usage:
|
||||
{{ include "base_init_ha_node_containers" . }}
|
||||
*/}}
|
||||
{{- define "base_init_ha_node_containers" -}}
|
||||
{{- if .Values.base.initHaNodeContainers.enabled }}
|
||||
{{- include "render_init_containers" (dict "value" .Values.base.initHaNodeContainers.containers "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the base init containers for all deployments, if any
|
||||
Usage:
|
||||
{{ include "base_init_containers" . }}
|
||||
*/}}
|
||||
{{- define "base_init_containers" -}}
|
||||
{{- if .Values.base.initContainers.enabled }}
|
||||
{{- include "render_init_containers" (dict "value" .Values.base.initContainers.containers "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- include "jaeger_collector_init_container" . }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the jaeger agent init container, if enabled
|
||||
Usage:
|
||||
{{ include "jaeger_collector_init_container" . }}
|
||||
*/}}
|
||||
{{- define "jaeger_collector_init_container" -}}
|
||||
{{- if .Values.base.jaeger.enabled }}
|
||||
{{- if .Values.base.jaeger.initContainer }}
|
||||
{{- if .Values.base.jaeger.collector }}
|
||||
{{- include "render_init_containers" (dict "value" .Values.base.jaeger.collector.initContainer "context" $) | nindent 8 }}
|
||||
{{- else }}
|
||||
- name: jaeger-probe
|
||||
image: busybox:latest
|
||||
command: [ 'sh', '-c', 'trap "exit 1" TERM; until nc -vzw 5 -u jaeger-collector:4317; do date; echo "Waiting for jaeger..."; sleep 1; done;' ]
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the csi node init containers, if enabled
|
||||
Usage:
|
||||
{{ include "csi_node_init_containers" . }}
|
||||
*/}}
|
||||
{{- define "csi_node_init_containers" -}}
|
||||
{{- if (.Values.csi.node.initContainers).enabled }}
|
||||
{{- include "render_init_containers" (dict "value" .Values.csi.node.initContainers.containers "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the base image pull secrets for all deployments, if any
|
||||
Usage:
|
||||
{{ include "base_pull_secrets" . }}
|
||||
*/}}
|
||||
{{- define "base_pull_secrets" -}}
|
||||
{{- if (not (empty .Values.global.imagePullSecrets)) }}
|
||||
{{- range .Values.global.imagePullSecrets | uniq -}}
|
||||
{{- if kindIs "map" . -}}
|
||||
{{ nindent 8 "- name:" }} {{ .name }}
|
||||
{{- else -}}
|
||||
{{ nindent 8 "- name:" }} {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if (not (empty .Values.image.pullSecrets)) }}
|
||||
{{- range .Values.image.pullSecrets | uniq -}}
|
||||
{{- if kindIs "map" . -}}
|
||||
{{ nindent 8 "- name:" }} {{ .name }}
|
||||
{{- else -}}
|
||||
{{ nindent 8 "- name:" }} {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else -}}
|
||||
{{- if .Values.base.imagePullSecrets }}
|
||||
{{- if .Values.base.imagePullSecrets.enabled }}
|
||||
{{- if (empty .Values.base.imagePullSecrets.secrets) }}
|
||||
{{ nindent 8 "- name: login" }}
|
||||
{{- else -}}
|
||||
{{- include "render" (dict "value" .Values.base.imagePullSecrets.secrets "context" $) | nindent 8 }}
|
||||
{{- end}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Concatenates imagepullsecrets for preupgradehook and handles different formats (example - secret or - name: secret)
|
||||
*/}}
|
||||
{{- define "mayastor.preUpgradeHook.pullSecrets" -}}
|
||||
{{- $names := list -}}
|
||||
{{- with .Values.global.imagePullSecrets -}}
|
||||
{{- range . -}}
|
||||
{{- if kindIs "map" . }}
|
||||
{{- if and (hasKey . "name") (not (empty .name)) -}}
|
||||
{{ $names = append $names .name }}
|
||||
{{- end -}}
|
||||
{{- else if not (empty .) -}}
|
||||
{{ $names = append $names . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- with .Values.preUpgradeHook.imagePullSecrets -}}
|
||||
{{- range . }}
|
||||
{{- if kindIs "map" . -}}
|
||||
{{- if and (hasKey . "name") (not (empty .name)) -}}
|
||||
{{- $names = append $names .name }}
|
||||
{{- end -}}
|
||||
{{- else if not (empty .) -}}
|
||||
{{- $names = append $names . -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $names = uniq $names -}}
|
||||
{{- if $names -}}
|
||||
{{- range $names }}
|
||||
- name: {{ . }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the REST server init container, if enabled
|
||||
Usage:
|
||||
{{- include "rest_agent_init_container" . }}
|
||||
*/}}
|
||||
{{- define "rest_agent_init_container" -}}
|
||||
{{- if .Values.base.initRestContainer.enabled }}
|
||||
{{- include "render_init_containers" (dict "value" .Values.base.initRestContainer.initContainer "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders the jaeger scheduling rules, if any
|
||||
Usage:
|
||||
{{ include "jaeger_scheduling" . }}
|
||||
*/}}
|
||||
{{- define "jaeger_scheduling" -}}
|
||||
{{- if index .Values "jaeger-operator" "affinity" }}
|
||||
affinity:
|
||||
{{- include "render" (dict "value" (index .Values "jaeger-operator" "affinity") "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if index .Values "jaeger-operator" "tolerations" }}
|
||||
tolerations:
|
||||
{{- include "render" (dict "value" (index .Values "jaeger-operator" "tolerations") "context" $) | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Generate Core list specification (-l param of io-engine) */}}
|
||||
{{- define "cpuFlag" -}}
|
||||
{{- include "coreListUniq" . -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Get the number of cores from the coreList */}}
|
||||
{{- define "coreCount" -}}
|
||||
{{- include "coreListUniq" . | split "," | len -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "logFormat" -}}
|
||||
{{- if (regexMatch "^((json|pretty|compact))$" .Values.base.logging.format) -}}
|
||||
{{- print .Values.base.logging.format -}}
|
||||
{{- else -}}
|
||||
{{- fail "invalid logging format. valid values are json, pretty, compact" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Get a list of cores as a comma-separated list */}}
|
||||
{{- define "coreListUniq" -}}
|
||||
{{- if .Values.io_engine.coreList -}}
|
||||
{{- $cores_pre := .Values.io_engine.coreList -}}
|
||||
{{- if not (kindIs "slice" .Values.io_engine.coreList) -}}
|
||||
{{- $cores_pre = list $cores_pre -}}
|
||||
{{- end -}}
|
||||
{{- $cores := list -}}
|
||||
{{- range $index, $value := $cores_pre | uniq -}}
|
||||
{{- $value = $value | toString | replace " " "" }}
|
||||
{{- if eq ($value | int | toString) $value -}}
|
||||
{{- $cores = append $cores $value -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- $first := first $cores | required (print "At least one core must be specified in io_engine.coreList") -}}
|
||||
{{- $cores | join "," -}}
|
||||
{{- else -}}
|
||||
{{- if gt 1 (.Values.io_engine.cpuCount | int) -}}
|
||||
{{- fail ".Values.io_engine.cpuCount must be >= 1" -}}
|
||||
{{- end -}}
|
||||
{{- untilStep 1 (add 1 .Values.io_engine.cpuCount | int) 1 | join "," -}}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Adds the project domain to labels
|
||||
Usage:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
*/}}
|
||||
{{- define "label_prefix" -}}
|
||||
{{ $product := .Files.Get "product.yaml" | fromYaml }}
|
||||
{{- print $product.domain -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Creates the tolerations based on the global and component wise tolerations, with early eviction
|
||||
Usage:
|
||||
{{ include "_tolerations_with_early_eviction" (dict "template" . "localTolerations" .Values.path.to.local.tolerations) }}
|
||||
*/}}
|
||||
{{- define "_tolerations_with_early_eviction" -}}
|
||||
{{- toYaml .template.Values.earlyEvictionTolerations | nindent 8 }}
|
||||
{{- if .localTolerations }}
|
||||
{{- toYaml .localTolerations | nindent 8 }}
|
||||
{{- else if .template.Values.tolerations }}
|
||||
{{- toYaml .template.Values.tolerations | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Creates the tolerations based on the global and component wise tolerations
|
||||
Usage:
|
||||
{{ include "tolerations" (dict "template" . "localTolerations" .Values.path.to.local.tolerations) }}
|
||||
*/}}
|
||||
{{- define "tolerations" -}}
|
||||
{{- if .localTolerations }}
|
||||
{{- toYaml .localTolerations | nindent 8 }}
|
||||
{{- else if .template.Values.tolerations }}
|
||||
{{- toYaml .template.Values.tolerations | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Creates the node selector based on the global and component wise node selectors
|
||||
Usage:
|
||||
{{ include "node_selector" (dict "template" . "localNodeSelector" .Values.path.to.local.nodeSelector) }}
|
||||
*/}}
|
||||
{{- define "node_selector" -}}
|
||||
{{- if .localNodeSelector }}
|
||||
{{- toYaml .localNodeSelector | nindent 8 }}
|
||||
{{- else if .template.Values.nodeSelector }}
|
||||
{{- toYaml .template.Values.nodeSelector | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Generates the priority class name, with the given `template` and the `localPriorityClass`
|
||||
Usage:
|
||||
{{ include "priority_class" (dict "template" . "localPriorityClass" .Values.path.to.local.priorityClassName) }}
|
||||
*/}}
|
||||
{{- define "priority_class" -}}
|
||||
{{- if typeIs "string" .localPriorityClass }}
|
||||
{{- if .localPriorityClass -}}
|
||||
{{ printf "%s" .localPriorityClass -}}
|
||||
{{- else if .template.Values.priorityClassName -}}
|
||||
{{ printf "%s" .template.Values.priorityClassName -}}
|
||||
{{- else -}}
|
||||
{{ printf "" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Generates the priority class name, with the given `template` and the `localPriorityClass`, sets to mayastor default priority class
|
||||
if both are empty
|
||||
Usage:
|
||||
{{ include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.path.to.local.priorityClassName) }}
|
||||
*/}}
|
||||
{{- define "priority_class_with_default" -}}
|
||||
{{- if typeIs "string" .localPriorityClass }}
|
||||
{{- if .localPriorityClass -}}
|
||||
{{ printf "%s" .localPriorityClass -}}
|
||||
{{- else if .template.Values.priorityClassName -}}
|
||||
{{ printf "%s" .template.Values.priorityClassName -}}
|
||||
{{- else -}}
|
||||
{{ printf "%s-cluster-critical" .template.Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Generate the default StorageClass parameters.
|
||||
This is required because StorageClass parameters cannot be patched after creation.
|
||||
If the StorageClass already exists, the default StorageClass carries the parameters and values
|
||||
of that StorageClass. Else, it carries the default parameters and values.
|
||||
*/}}
|
||||
{{- define "storageClass.parameters" -}}
|
||||
{{- $scName := index . 0 -}}
|
||||
{{- $valuesParams := index . 1 -}}
|
||||
|
||||
{{/* Check to see if a default StorageClass already exists */}}
|
||||
{{- $sc := lookup "storage.k8s.io/v1" "StorageClass" "" $scName -}}
|
||||
|
||||
{{- if $sc -}}
|
||||
{{/* Existing defaults */}}
|
||||
{{ range $param, $val := $sc.parameters }}
|
||||
{{ $param | quote }}: {{ $val | quote }}
|
||||
{{- end -}}
|
||||
|
||||
{{- else -}}
|
||||
{{/* Current defaults */}}
|
||||
{{ range $param, $val := $valuesParams }}
|
||||
{{ $param | quote }}: {{ $val | quote }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Adds the image prefix to image name
|
||||
*/}}
|
||||
{{- define "image_prefix" -}}
|
||||
{{ $product := .Files.Get "product.yaml" | fromYaml }}
|
||||
{{- print $product.imagePrefix -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Get the Jaeger URL
|
||||
*/}}
|
||||
{{- define "jaeger_url" -}}
|
||||
{{- if $collector := .Values.base.jaeger.collector }}
|
||||
{{- $collector.name }}:{{ $collector.port }}
|
||||
{{- else }}
|
||||
{{- print "jaeger-collector:4317" -}}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a normalized etcd name based on input parameters
|
||||
*/}}
|
||||
{{- define "etcdUrl" -}}
|
||||
{{- if eq (.Values.etcd.enabled) false }}
|
||||
{{- if .Values.etcd.externalUrl }}
|
||||
{{- .Values.etcd.externalUrl }}
|
||||
{{- else }}
|
||||
{{- fail "etcd.externalUrl must be set" }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{- .Release.Name }}-etcd:{{ .Values.etcd.service.ports.client }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Check if etcd is explicitly enabled/disabled or implicitly enabled (for upgrades where enabled key was absent)
|
||||
*/}}
|
||||
{{- define "etcdEnabled" -}}
|
||||
{{- if eq (.Values.etcd.enabled) false }}
|
||||
{{- "false" -}}
|
||||
{{- else if eq (.Values.etcd.enabled) true }}
|
||||
{{- "true" -}}
|
||||
{{- else if .Values.etcd.externalUrl }}
|
||||
{{- "false" -}}
|
||||
{{- else }}
|
||||
{{- "true" -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Renders init containers. If unset it sets the container image.
|
||||
*/}}
|
||||
{{- define "render_init_containers" -}}
|
||||
{{- $containers := list }}
|
||||
{{- $image := .context.Values.base.initContainers.image }}
|
||||
{{- $values_image := .context.Values.image }}
|
||||
{{- $global := .context.Values.global }}
|
||||
{{- $ctx := .context }}
|
||||
{{- range .value -}}
|
||||
{{ $container := deepCopy . }}
|
||||
{{- if hasKey $container "command" }}
|
||||
{{- $renderedCmd := list }}
|
||||
{{- range $container.command }}
|
||||
{{- $renderedCmd = append $renderedCmd (tpl . $ctx) }}
|
||||
{{- end }}
|
||||
{{- $_ := set $container "command" $renderedCmd }}
|
||||
{{- end }}
|
||||
{{- if not (hasKey $container "imagePullPolicy") }}
|
||||
{{- $pullPolicy := $global.imagePullPolicy | default $image.pullPolicy | default $values_image.pullPolicy }}
|
||||
{{- $_ := set $container "imagePullPolicy" $pullPolicy }}
|
||||
{{- end }}
|
||||
{{- if not (hasKey $container "image") }}
|
||||
{{- $_ := set $container "image" (include "render_init_container_image" $ctx ) }}
|
||||
{{- end }}
|
||||
{{- $containers = append $containers $container }}
|
||||
{{- end -}}
|
||||
{{- $containers | toYaml }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "render_init_container_image" -}}
|
||||
{{- $image := .Values.base.initContainers.image }}
|
||||
{{- $values_image := .Values.image }}
|
||||
{{- $global := .Values.global }}
|
||||
{{- $registry := $global.imageRegistry | default $image.registry | default $values_image.registry }}
|
||||
{{- $namespace := $image.namespace | default $values_image.repo }}
|
||||
{{- $name := $image.name | default "alpine-sh" }}
|
||||
{{- $tag := $image.tag | default "4.1.0" }}
|
||||
{{- printf "%s/%s/%s:%s" $registry $namespace $name $tag }}
|
||||
{{- end -}}
|
||||
|
||||
|
||||
{{/*
|
||||
Get the Events Jetstream Replica Count
|
||||
*/}}
|
||||
{{- define "events_replicas" -}}
|
||||
{{- if .Values.nats.cluster.enabled }}
|
||||
{{- min .Values.nats.cluster.replicas 3 }}
|
||||
{{- else }}
|
||||
{{- print "1" -}}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns matched if the Etcd StatefulSet is of v8.6.0
|
||||
Usage:
|
||||
{{- if include "etcd_is_8.6.0" . }}
|
||||
Do something
|
||||
{{- end }}
|
||||
*/}}
|
||||
{{- define "etcd_is_8.6.0" -}}
|
||||
{{- $sts := lookup "apps/v1" "StatefulSet" .Release.Namespace (printf "%s-etcd" .Release.Name) -}}
|
||||
{{/*
|
||||
If no STS exists, erring on the side of caution and assuming there is one
|
||||
and we made a mistake in finding it --> matched
|
||||
*/}}
|
||||
{{- if not $sts -}}
|
||||
matched
|
||||
{{- else -}}
|
||||
{{- if and $sts.metadata $sts.metadata.labels -}}
|
||||
{{/* Grab value of chart label (or default to "") */}}
|
||||
{{- $chart_name := index $sts.metadata.labels "helm.sh/chart" | default "" -}}
|
||||
{{/* If it’s exactly "etcd-8.6.0" --> matched */}}
|
||||
{{- if eq $chart_name "etcd-8.6.0" -}}
|
||||
matched
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{/*
|
||||
$sts exists, but doesn't have .metadata or .metadata.labels for some reason.
|
||||
This may happen in a dry-run due to how lookup behaves. Erring on the side of caution and matching.
|
||||
*/}}
|
||||
matched
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Validates tls settings and fails with a clear message on invalid combinations.
|
||||
Usage: {{ include "validate_tls_mode" . }}
|
||||
*/}}
|
||||
{{- define "validate_tls_mode" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $globalTls.mutualAuth $restTls -}}
|
||||
{{- $ag := $globalTls.autoGenerated -}}
|
||||
{{- if and $globalTls.enabled (not $ag.enabled) -}}
|
||||
{{- if not $restTls.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.existingSecret must be set when tls.autoGenerated.enabled is false" -}}
|
||||
{{- end -}}
|
||||
{{- if $mutualAuth -}}
|
||||
{{- $clients := $restTls.clients -}}
|
||||
{{- if not $clients.csiController.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.clients.csiController.existingSecret must be set when tls.autoGenerated.enabled is false and mutualAuth is true" -}}
|
||||
{{- end -}}
|
||||
{{- if not $clients.csiNode.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.clients.csiNode.existingSecret must be set when tls.autoGenerated.enabled is false and mutualAuth is true" -}}
|
||||
{{- end -}}
|
||||
{{- if not $clients.callhome.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.clients.callhome.existingSecret must be set when tls.autoGenerated.enabled is false and mutualAuth is true" -}}
|
||||
{{- end -}}
|
||||
{{- if not $clients.metricsExporter.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.clients.metricsExporter.existingSecret must be set when tls.autoGenerated.enabled is false and mutualAuth is true" -}}
|
||||
{{- end -}}
|
||||
{{- if not $clients.diskpoolOperator.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.clients.diskpoolOperator.existingSecret must be set when tls.autoGenerated.enabled is false and mutualAuth is true" -}}
|
||||
{{- end -}}
|
||||
{{- if not $clients.plugin.existingSecret -}}
|
||||
{{- fail "tls: apis.rest.security.tls.clients.plugin.existingSecret must be set when tls.autoGenerated.enabled is false and mutualAuth is true" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{- if not (has $ag.engine (list "pod" "helm" "cert-manager")) -}}
|
||||
{{- fail (printf "tls.autoGenerated.engine must be pod, helm, or cert-manager (got: %q)" $ag.engine) -}}
|
||||
{{- end -}}
|
||||
{{- if and $globalTls.enabled (eq $ag.engine "pod") $mutualAuth -}}
|
||||
{{- fail "tls: engine=pod cannot be used with mutualAuth — pod TLS uses a transient cert with no client verification" -}}
|
||||
{{- end -}}
|
||||
{{- if and $globalTls.enabled (eq $ag.engine "cert-manager") -}}
|
||||
{{- if not (.Capabilities.APIVersions.Has "cert-manager.io/v1") -}}
|
||||
{{- fail "tls.autoGenerated.engine=cert-manager requires cert-manager CRDs. Install cert-manager first." -}}
|
||||
{{- end -}}
|
||||
{{- if and $ag.certManager.existingIssuer (not (or (eq $ag.certManager.existingIssuerKind "Issuer") (eq $ag.certManager.existingIssuerKind "ClusterIssuer"))) -}}
|
||||
{{- fail (printf "tls.autoGenerated.certManager.existingIssuerKind must be Issuer or ClusterIssuer (got: %q)" $ag.certManager.existingIssuerKind) -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns the REST API endpoint URL for in-cluster clients.
|
||||
TLS disabled: plain HTTP on port 8081. TLS enabled: HTTPS on port 8080.
|
||||
*/}}
|
||||
{{- define "rest_api_endpoint" -}}
|
||||
{{- if .Values.security.tls.enabled -}}
|
||||
{{- printf "https://%s-api-rest:8080" .Release.Name -}}
|
||||
{{- else -}}
|
||||
{{- printf "http://%s-api-rest:8081" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns the Secret name for the api-rest server TLS certificate and key.
|
||||
Used when tls.enabled=true and engine != pod.
|
||||
*/}}
|
||||
{{- define "rest_api_tls_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- if $globalTls.enabled }}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $restTls.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $restTls.certManager.secretName | default (printf "%s-api-rest-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "rest_api_tls_csi_controller_client_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $client := .Values.apis.rest.security.tls.clients.csiController -}}
|
||||
{{- if $globalTls.enabled -}}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $client.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $client.certManager.secretName | default (printf "%s-api-rest-csi-controller-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-csi-controller-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "rest_api_tls_csi_node_client_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $client := .Values.apis.rest.security.tls.clients.csiNode -}}
|
||||
{{- if $globalTls.enabled -}}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $client.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $client.certManager.secretName | default (printf "%s-api-rest-csi-node-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-csi-node-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "rest_api_tls_callhome_client_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $client := .Values.apis.rest.security.tls.clients.callhome -}}
|
||||
{{- if $globalTls.enabled -}}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $client.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $client.certManager.secretName | default (printf "%s-api-rest-callhome-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-callhome-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "rest_api_tls_metrics_exporter_client_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $client := .Values.apis.rest.security.tls.clients.metricsExporter -}}
|
||||
{{- if $globalTls.enabled -}}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $client.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $client.certManager.secretName | default (printf "%s-api-rest-metrics-exporter-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-metrics-exporter-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "rest_api_tls_diskpool_operator_client_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $client := .Values.apis.rest.security.tls.clients.diskpoolOperator -}}
|
||||
{{- if $globalTls.enabled -}}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $client.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $client.certManager.secretName | default (printf "%s-api-rest-diskpool-operator-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-diskpool-operator-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "rest_api_tls_plugin_client_secret_name" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $client := .Values.apis.rest.security.tls.clients.plugin -}}
|
||||
{{- if $globalTls.enabled -}}
|
||||
{{- if not $globalTls.autoGenerated.enabled -}}
|
||||
{{- $client.existingSecret -}}
|
||||
{{- else if eq $globalTls.autoGenerated.engine "cert-manager" -}}
|
||||
{{- $client.certManager.secretName | default (printf "%s-api-rest-plugin-crt" .Release.Name) -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-api-rest-plugin-crt" .Release.Name -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns the pod annotation value for kubectl-plugin TLS auto-discovery.
|
||||
Format: "{mode}:{secretName}". Empty when TLS is disabled or engine is pod.
|
||||
mtls mode: references the plugin client cert (used for port-forward with localhost SAN).
|
||||
server-verify mode: references the server cert (plugin only needs ca.crt; no client cert exists).
|
||||
Usage: {{ include "rest_api_tls_annotation" . }}
|
||||
*/}}
|
||||
{{- define "rest_api_tls_annotation" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $globalTls.mutualAuth $restTls -}}
|
||||
{{- if and $globalTls.enabled (or (not $globalTls.autoGenerated.enabled) (ne $globalTls.autoGenerated.engine "pod")) -}}
|
||||
{{- if $mutualAuth -}}
|
||||
{{- printf "mtls:%s" (include "rest_api_tls_plugin_client_secret_name" .) -}}
|
||||
{{- else -}}
|
||||
{{- printf "server-verify:%s" (include "rest_api_tls_secret_name" .) -}}
|
||||
{{- end -}}
|
||||
{{- else if and $globalTls.enabled $globalTls.autoGenerated.enabled (eq $globalTls.autoGenerated.engine "pod") }}
|
||||
{{- print "auto" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns TLS CLI args for in-cluster REST API clients (metrics-exporter, callhome, CSI, pool operator).
|
||||
disabled or engine=pod: empty
|
||||
server-only (not mutualAuth): --tls-ca-file
|
||||
mutualAuth: --tls-ca-file + --tls-cert-file + --tls-key-file
|
||||
Usage: {{- include "rest_api_tls_client_args" . | nindent N }}
|
||||
*/}}
|
||||
{{- define "rest_api_tls_client_args" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $globalTls.mutualAuth $restTls -}}
|
||||
{{- if and $globalTls.enabled (or (not $globalTls.autoGenerated.enabled) (ne $globalTls.autoGenerated.engine "pod")) -}}
|
||||
{{- if $mutualAuth }}
|
||||
- "--tls-ca-file=/etc/tls/ca.crt"
|
||||
- "--tls-cert-file=/etc/tls/tls.crt"
|
||||
- "--tls-key-file=/etc/tls/tls.key"
|
||||
{{- else }}
|
||||
- "--tls-ca-file=/etc/tls/ca.crt"
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns the volumeMount block for in-cluster REST API clients.
|
||||
Usage: {{- include "rest_api_tls_client_volume_mount" . | nindent N }}
|
||||
*/}}
|
||||
{{- define "rest_api_tls_client_volume_mount" -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- if and $globalTls.enabled (or (not $globalTls.autoGenerated.enabled) (ne $globalTls.autoGenerated.engine "pod")) -}}
|
||||
- name: api-rest-tls
|
||||
mountPath: /etc/tls
|
||||
readOnly: true
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Returns the volume declaration for in-cluster REST API clients.
|
||||
Accepts either the plain chart context (.) for backwards compat, or a dict of the form:
|
||||
(dict "ctx" . "secretName" "the-per-client-secret-name")
|
||||
When secretName is provided and mutualAuth is true, it is used directly.
|
||||
Otherwise the server TLS secret (ca.crt only) is used.
|
||||
Usage: {{- include "rest_api_tls_client_volume" . | nindent N }}
|
||||
{{- include "rest_api_tls_client_volume" (dict "ctx" . "secretName" (include "rest_api_tls_csi_controller_client_secret_name" .)) | nindent N }}
|
||||
*/}}
|
||||
{{- define "rest_api_tls_client_volume" -}}
|
||||
{{- $ctx := . -}}
|
||||
{{- $secretName := "" -}}
|
||||
{{- if hasKey . "ctx" -}}
|
||||
{{- $ctx = .ctx -}}
|
||||
{{- $secretName = .secretName -}}
|
||||
{{- end -}}
|
||||
{{- $globalTls := $ctx.Values.security.tls -}}
|
||||
{{- $restTls := $ctx.Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $globalTls.mutualAuth $restTls -}}
|
||||
{{- if and $globalTls.enabled (or (not $globalTls.autoGenerated.enabled) (ne $globalTls.autoGenerated.engine "pod")) -}}
|
||||
- name: api-rest-tls
|
||||
secret:
|
||||
secretName: {{ if and $mutualAuth $secretName -}}
|
||||
{{- $secretName }}
|
||||
{{- else -}}
|
||||
{{- include "rest_api_tls_secret_name" $ctx }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Resolves and emits a single helm-engine TLS Secret.
|
||||
Reuses the existing secret if it was signed by the current CA; otherwise generates a fresh leaf cert.
|
||||
Args (dict):
|
||||
ctx — root context (.)
|
||||
ca — CA struct from genCA / buildCustomCert
|
||||
caExists — bool: whether the CA secret was found in the cluster
|
||||
certDuration — leaf cert validity in days
|
||||
secretName — Kubernetes Secret name to look up and emit
|
||||
cn — X.509 common name for the generated cert
|
||||
dnsSANs — list of DNS SANs (empty list for client certs, ["localhost"] for plugin)
|
||||
app — value for the "app" label
|
||||
*/}}
|
||||
{{- define "tls_helm_leaf_secret" -}}
|
||||
{{- $ctx := .ctx -}}
|
||||
{{- $ca := .ca -}}
|
||||
{{- $existing := lookup "v1" "Secret" $ctx.Release.Namespace .secretName -}}
|
||||
{{- $existingCaCrt := "" -}}
|
||||
{{- if and $existing $existing.data (index $existing.data "ca.crt") -}}
|
||||
{{- $existingCaCrt = index $existing.data "ca.crt" -}}
|
||||
{{- end -}}
|
||||
{{- $cert := "" -}}
|
||||
{{- $key := "" -}}
|
||||
{{- if and .caExists $existing $existing.data (index $existing.data "tls.crt") (eq $existingCaCrt ($ca.Cert | b64enc)) -}}
|
||||
{{- $cert = index $existing.data "tls.crt" | b64dec -}}
|
||||
{{- $key = index $existing.data "tls.key" | b64dec -}}
|
||||
{{- else -}}
|
||||
{{- $g := genSignedCert .cn (list) .dnsSANs .certDuration $ca -}}
|
||||
{{- $cert = $g.Cert -}}
|
||||
{{- $key = $g.Key -}}
|
||||
{{- end -}}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .secretName }}
|
||||
namespace: {{ $ctx.Release.Namespace }}
|
||||
labels:
|
||||
app: {{ .app }}
|
||||
{{ include "label_prefix" $ctx }}/release: {{ $ctx.Release.Name }}
|
||||
{{ include "label_prefix" $ctx }}/version: {{ $ctx.Chart.Version }}
|
||||
type: kubernetes.io/tls
|
||||
data:
|
||||
ca.crt: {{ $ca.Cert | b64enc }}
|
||||
tls.crt: {{ $cert | b64enc }}
|
||||
tls.key: {{ $key | b64enc }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,16 @@
|
||||
{{ if and (eq (include "etcdEnabled" .) "true") (and .Values.etcd.localpvScConfig.enabled .Values.etcd.persistence.enabled) }}
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
annotations:
|
||||
cas.openebs.io/config: |
|
||||
- name: StorageType
|
||||
value: "hostpath"
|
||||
- name: BasePath
|
||||
value: {{ tpl (.Values.etcd.localpvScConfig.basePath | quote) . }}
|
||||
openebs.io/cas-type: local
|
||||
name: {{ (tpl (.Values.etcd.localpvScConfig.name) .) | required (print "StorageClass name for etcd localpv storage cannot be empty") }}
|
||||
provisioner: openebs.io/local
|
||||
reclaimPolicy: {{ .Values.etcd.localpvScConfig.reclaimPolicy }}
|
||||
volumeBindingMode: {{ .Values.etcd.localpvScConfig.volumeBindingMode }}
|
||||
{{ end }}
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
{{ if and (eq (include "etcdEnabled" .) "true") (and .Values.etcd.persistence.enabled (eq .Values.etcd.persistence.storageClass "manual")) }}
|
||||
{{- range $index, $end := until (.Values.etcd.replicaCount | int) }}
|
||||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: etcd-volume-{{ $index }}
|
||||
labels:
|
||||
statefulset.kubernetes.io/pod-name: {{ print $.Release.Name }}-etcd-{{ $index }}
|
||||
spec:
|
||||
storageClassName: manual
|
||||
# You must also delete the hostpath on the node
|
||||
persistentVolumeReclaimPolicy: {{ $.Values.etcd.persistentVolumeClaimRetentionPolicy.whenDeleted }}
|
||||
capacity:
|
||||
storage: {{ $.Values.etcd.persistence.size | quote }}
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
hostPath:
|
||||
path: "/var/local/{{ $.Release.Name }}/etcd/pod-{{ $index }}"
|
||||
---
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,23 @@
|
||||
{{- if .Values.base.jaeger.enabled }}
|
||||
apiVersion: jaegertracing.io/v1
|
||||
kind: Jaeger
|
||||
metadata:
|
||||
name: jaeger
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
strategy: allInOne
|
||||
ingress:
|
||||
enabled: false
|
||||
{{- include "jaeger_scheduling" . }}
|
||||
query:
|
||||
serviceType: NodePort
|
||||
nodePort: 30012
|
||||
storage:
|
||||
type: memory
|
||||
options:
|
||||
memory:
|
||||
max-traces: 100000
|
||||
{{- end }}
|
||||
@@ -0,0 +1,33 @@
|
||||
{{- if and (.Values.loki.localpvScConfig.enabled) (.Values.loki.singleBinary.persistence.enabled) (.Values.loki.enabled) }}
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
annotations:
|
||||
cas.openebs.io/config: |
|
||||
- name: StorageType
|
||||
value: "hostpath"
|
||||
- name: BasePath
|
||||
value: {{ tpl ( .Values.loki.localpvScConfig.loki.basePath | quote ) . }}
|
||||
openebs.io/cas-type: local
|
||||
name: {{ tpl .Values.loki.localpvScConfig.loki.name . | required "StorageClass name for loki localpv storage cannot be empty" }}
|
||||
provisioner: openebs.io/local
|
||||
reclaimPolicy: {{ .Values.loki.localpvScConfig.loki.reclaimPolicy }}
|
||||
volumeBindingMode: {{ .Values.loki.localpvScConfig.loki.volumeBindingMode }}
|
||||
{{- end }}
|
||||
---
|
||||
{{- if and (.Values.loki.localpvScConfig.enabled) (.Values.loki.minio.persistence.enabled) (.Values.loki.enabled) }}
|
||||
apiVersion: storage.k8s.io/v1
|
||||
kind: StorageClass
|
||||
metadata:
|
||||
annotations:
|
||||
cas.openebs.io/config: |
|
||||
- name: StorageType
|
||||
value: "hostpath"
|
||||
- name: BasePath
|
||||
value: {{ tpl ( .Values.loki.localpvScConfig.minio.basePath | quote ) . }}
|
||||
openebs.io/cas-type: local
|
||||
name: {{ tpl .Values.loki.localpvScConfig.minio.name . | required "StorageClass name for loki localpv storage cannot be empty" }}
|
||||
provisioner: openebs.io/local
|
||||
reclaimPolicy: {{ .Values.loki.localpvScConfig.minio.reclaimPolicy }}
|
||||
volumeBindingMode: {{ .Values.loki.localpvScConfig.minio.volumeBindingMode }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,134 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-agent-core
|
||||
labels:
|
||||
app: agent-core
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: agent-core
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: agent-core
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
initContainers:
|
||||
{{- include "base_init_core_containers" . }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.agents.core.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.agents.core.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "_tolerations_with_early_eviction" (dict "template" . "localTolerations" .Values.agents.core.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: agent-core
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.agents.core.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.agents.core.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.agents.core.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.agents.core.resources.requests.memory | quote }}
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-agent-core:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
args:
|
||||
- "--store={{ include "etcdUrl" . }}"
|
||||
- "--request-timeout={{ default .Values.base.default_req_timeout .Values.agents.core.requestTimeout }}"
|
||||
{{- if not .Values.agents.core.minTimeouts }}
|
||||
- "--no-min-timeouts"
|
||||
{{- end }}
|
||||
- "--cache-period={{ .Values.base.cache_poll_period }}"{{ if .Values.base.jaeger.enabled }}
|
||||
- "--jaeger={{ include "jaeger_url" . }}"{{ end }}
|
||||
- "--grpc-server-addr=[::]:50051"
|
||||
- "--pool-commitment={{ .Values.agents.core.capacity.thin.poolCommitment }}"
|
||||
- "--snapshot-commitment={{ .Values.agents.core.capacity.thin.snapshotCommitment }}"
|
||||
- "--volume-commitment-initial={{ .Values.agents.core.capacity.thin.volumeCommitmentInitial }}"
|
||||
- "--volume-commitment={{ .Values.agents.core.capacity.thin.volumeCommitment }}"{{ if .Values.eventing.enabled }}
|
||||
- "--events-url=nats://{{ .Release.Name }}-nats:4222"
|
||||
- "--events-replicas={{ include "events_replicas" . }}"{{ end }}{{ if not .Values.agents.ha.enabled }}
|
||||
- "--disable-ha"{{ end }}
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--create-volume-limit={{ .Values.agents.core.maxCreateVolume }}"
|
||||
{{- if $wait := default ((.Values.agents.core.rebuild).partial).waitPeriod .Values.agents.core.partialRebuildWaitPeriod }}
|
||||
- "--faulted-child-wait-period={{ $wait }}"{{ end }}
|
||||
{{- if (.Values.agents.core.rebuild).maxConcurrent }}
|
||||
- "--max-rebuilds={{ .Values.agents.core.rebuild.maxConcurrent }}"{{ end }}
|
||||
{{- if eq ((.Values.agents.core.rebuild).partial).enabled false }}
|
||||
- "--disable-partial-rebuild"{{ end }}
|
||||
{{- if not (default false .Values.agents.core.volumeHealth) }}
|
||||
- "--no-volume-health"{{ end }}
|
||||
{{- if eq .Values.agents.core.encryptedPoolsSoftScheduling true }}
|
||||
- "--encrypted-pools-soft-scheduling"{{- end }}
|
||||
{{- if eq .Values.agents.core.allowNonPersistentDevlink true}}
|
||||
- "--allow-non-persistent-devlink"{{- end }}
|
||||
{{- with .Values.agents.core.poolClusterSize }}
|
||||
- "--pool-cluster-size={{ . }}"{{- end }}
|
||||
|
||||
ports:
|
||||
- containerPort: 50051
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.agents.core.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.agents.core.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.base.logging.silenceLevel .Values.agents.core.logSilenceLevel }}
|
||||
{{- end }}
|
||||
- name: MY_POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: MY_POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
- name: agent-ha-cluster
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.agents.ha.cluster.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.agents.ha.cluster.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.agents.ha.cluster.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.agents.ha.cluster.resources.requests.memory | quote }}
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-agent-ha-cluster:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
args:
|
||||
- "-g=[::]:50052"
|
||||
- "--store=http://{{ include "etcdUrl" . }}"
|
||||
- "--core-grpc=https://{{ .Release.Name }}-agent-core:50051"{{ if .Values.base.jaeger.enabled }}
|
||||
- "--jaeger={{ include "jaeger_url" . }}"{{ end }}{{ if .Values.eventing.enabled }}
|
||||
- "--events-url=nats://{{ .Release.Name }}-nats:4222"
|
||||
- "--events-replicas={{ include "events_replicas" . }}"{{ end }}
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
ports:
|
||||
- containerPort: 50052
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.agents.core.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.agents.core.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.logging.silenceLevel .Values.agents.core.logSilenceLevel }}
|
||||
{{- end }}
|
||||
- name: MY_POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: MY_POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
||||
@@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-agent-core
|
||||
labels:
|
||||
app: agent-core
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
selector:
|
||||
app: agent-core
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
ports:
|
||||
- name: grpc
|
||||
port: 50051
|
||||
- name: ha-cluster
|
||||
port: 50052
|
||||
@@ -0,0 +1,118 @@
|
||||
{{- if .Values.agents.ha.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-agent-ha-node
|
||||
labels:
|
||||
app: agent-ha-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: agent-ha-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxUnavailable: 1
|
||||
minReadySeconds: 10
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: agent-ha-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
hostNetwork: true
|
||||
dnsPolicy: ClusterFirstWithHostNet
|
||||
initContainers:
|
||||
{{- include "base_init_ha_node_containers" . }}
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.agents.ha.node.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
nodeSelector:
|
||||
{{- include "node_selector" (dict "template" . "localNodeSelector" .Values.agents.ha.node.nodeSelector) }}
|
||||
{{- if .Values.csi.node.topology.nodeSelector }}
|
||||
{{- range $key, $val := .Values.csi.node.topology.segments }}
|
||||
{{ $key }}: {{ $val }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "tolerations" (dict "template" . "localTolerations" .Values.agents.ha.node.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: agent-ha-node
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-agent-ha-node:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
securityContext:
|
||||
privileged: true
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.agents.ha.node.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.agents.ha.node.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.base.logging.silenceLevel .Values.agents.ha.node.logSilenceLevel }}
|
||||
{{- end }}
|
||||
- name: MY_NODE_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: MY_POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.podIP
|
||||
- name: RUST_BACKTRACE
|
||||
value: "1"
|
||||
args:
|
||||
- "--node-name=$(MY_NODE_NAME)"
|
||||
- "--csi-socket={{ default .Values.csi.node.pluginMountPath .Values.csi.node.pluginMounthPath }}/{{ .Values.csi.node.socketPath }}"
|
||||
- "--grpc-ip=$(MY_POD_IP)"
|
||||
- "--grpc-port={{ default 50053 .Values.agents.ha.node.port }}"
|
||||
- "--cluster-agent=https://{{ .Release.Name }}-agent-core:50052"{{ if .Values.base.jaeger.enabled }}
|
||||
- "--jaeger={{ include "jaeger_url" . }}"{{ end }}{{ if .Values.eventing.enabled }}
|
||||
- "--events-url=nats://{{ .Release.Name }}-nats:4222"
|
||||
- "--events-replicas={{ include "events_replicas" . }}"{{ end }}
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
volumeMounts:
|
||||
- name: device
|
||||
mountPath: /dev
|
||||
- name: sys
|
||||
mountPath: /sys
|
||||
- name: run-udev
|
||||
mountPath: /run/udev
|
||||
- name: plugin-dir
|
||||
mountPath: {{ default .Values.csi.node.pluginMountPath .Values.csi.node.pluginMounthPath }}
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.agents.ha.node.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.agents.ha.node.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.agents.ha.node.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.agents.ha.node.resources.requests.memory | quote }}
|
||||
ports:
|
||||
- containerPort: {{ default 50053 .Values.agents.ha.node.port }}
|
||||
protocol: TCP
|
||||
name: ha-node
|
||||
volumes:
|
||||
- name: device
|
||||
hostPath:
|
||||
path: /dev
|
||||
type: Directory
|
||||
- name: sys
|
||||
hostPath:
|
||||
path: /sys
|
||||
type: Directory
|
||||
- name: run-udev
|
||||
hostPath:
|
||||
path: /run/udev
|
||||
type: Directory
|
||||
- name: plugin-dir
|
||||
hostPath:
|
||||
path: {{ .Values.csi.node.kubeletDir }}/plugins/io.openebs.mayastor/
|
||||
type: DirectoryOrCreate
|
||||
{{- end }}
|
||||
@@ -0,0 +1,39 @@
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $duration := $globalTls.autoGenerated.certManager.duration -}}
|
||||
{{- $renewBefore := $globalTls.autoGenerated.certManager.renewBefore -}}
|
||||
{{- if and $globalTls.enabled $globalTls.autoGenerated.enabled (eq $globalTls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-api-rest-crt
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest.%s.svc.%s" .Release.Name .Release.Namespace ( default "cluster.local" .Values.global.clusterDomain) }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
dnsNames:
|
||||
- localhost
|
||||
- {{ .Release.Name }}-api-rest
|
||||
- {{ .Release.Name }}-api-rest.{{ .Release.Namespace }}.svc
|
||||
- {{ .Release.Name }}-api-rest.{{ .Release.Namespace }}.svc.cluster.local
|
||||
{{- if .Values.global.clusterDomain }}
|
||||
- {{ .Release.Name }}-api-rest.{{ .Release.Namespace }}.svc.{{ .Values.global.clusterDomain }}
|
||||
{{- end }}
|
||||
usages:
|
||||
- server auth
|
||||
privateKey:
|
||||
algorithm: {{ $globalTls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $globalTls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $duration }}
|
||||
renewBefore: {{ $renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,121 @@
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $globalTls.mutualAuth $restTls -}}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-api-rest
|
||||
labels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
replicas: {{ .Values.apis.rest.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
{{- if $globalTls.enabled }}
|
||||
annotations:
|
||||
openebs.io/rest-tls: {{ include "rest_api_tls_annotation" . }}
|
||||
{{- end }}
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
initContainers:
|
||||
{{- include "base_init_containers" . }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.apis.rest.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.apis.rest.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "_tolerations_with_early_eviction" (dict "template" . "localTolerations" .Values.apis.rest.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: api-rest
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.apis.rest.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.apis.rest.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.apis.rest.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.apis.rest.resources.requests.memory | quote }}
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-api-rest:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy}}
|
||||
args:
|
||||
{{- if not $globalTls.enabled }}
|
||||
- "--dummy-certificates"
|
||||
- "--http=[::]:8081"
|
||||
{{- else if and $globalTls.autoGenerated.enabled (eq $globalTls.autoGenerated.engine "pod") }}
|
||||
- "--auto-tls"
|
||||
- "--http-probes=[::]:8081"
|
||||
{{- else }}
|
||||
- "--http-probes=[::]:8081"
|
||||
- "--tls-cert-file=/etc/tls/server/tls.crt"
|
||||
- "--tls-key-file=/etc/tls/server/tls.key"
|
||||
{{- if $mutualAuth }}
|
||||
- "--tls-ca-file=/etc/tls/server/ca.crt"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
- "--no-auth"
|
||||
- "--request-timeout={{ .Values.base.default_req_timeout }}"{{ if .Values.base.jaeger.enabled }}
|
||||
- "--jaeger={{ include "jaeger_url" . }}"{{ end }}
|
||||
- "--core-grpc=https://{{ .Release.Name }}-agent-core:50051"
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
{{- if .Values.apis.rest.healthProbes.readiness.enabled }}
|
||||
- "--core-health-freq={{ .Values.apis.rest.healthProbes.readiness.agentCoreProbeFreq }}"
|
||||
{{- end }}
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
{{- if not .Values.security.tls.enabled }}
|
||||
- containerPort: 8081
|
||||
{{- end }}
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.apis.rest.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.apis.rest.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.base.logging.silenceLevel .Values.apis.rest.logSilenceLevel }}
|
||||
{{- end }}
|
||||
{{- if .Values.apis.rest.healthProbes.readiness.enabled }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /ready
|
||||
port: 8081
|
||||
failureThreshold: {{ .Values.apis.rest.healthProbes.readiness.failureThreshold }}
|
||||
initialDelaySeconds: {{ .Values.apis.rest.healthProbes.readiness.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.apis.rest.healthProbes.readiness.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.apis.rest.healthProbes.readiness.timeoutSeconds }}
|
||||
{{- end }}
|
||||
{{- if .Values.apis.rest.healthProbes.liveness.enabled }}
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /live
|
||||
port: 8081
|
||||
failureThreshold: {{ .Values.apis.rest.healthProbes.liveness.failureThreshold }}
|
||||
initialDelaySeconds: {{ .Values.apis.rest.healthProbes.liveness.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.apis.rest.healthProbes.liveness.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.apis.rest.healthProbes.liveness.timeoutSeconds }}
|
||||
{{- end }}
|
||||
{{- if and $globalTls.enabled (or (not $globalTls.autoGenerated.enabled) (ne $globalTls.autoGenerated.engine "pod")) }}
|
||||
volumeMounts:
|
||||
- name: api-rest-ca-crt
|
||||
mountPath: /etc/tls/server
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- if and $globalTls.enabled (or (not $globalTls.autoGenerated.enabled) (ne $globalTls.autoGenerated.engine "pod")) }}
|
||||
volumes:
|
||||
- name: api-rest-ca-crt
|
||||
secret:
|
||||
secretName: {{ include "rest_api_tls_secret_name" . }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,28 @@
|
||||
{{- if .Values.security.networkPolicy.enabled }}
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-api-rest
|
||||
labels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
podSelector:
|
||||
matchLabels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
ingress:
|
||||
# Allow inbound traffic
|
||||
- ports:
|
||||
# Allow HTTPS traffic
|
||||
- port: 8080
|
||||
protocol: TCP
|
||||
{{- if not .Values.security.tls.enabled }}
|
||||
# Allow HTTP traffic
|
||||
- port: 8081
|
||||
protocol: TCP
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,33 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled $mutualAuth (eq $tls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ include "rest_api_tls_plugin_client_secret_name" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: plugin
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_plugin_client_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest-plugin" .Release.Name }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
dnsNames:
|
||||
- localhost
|
||||
usages:
|
||||
- client auth
|
||||
privateKey:
|
||||
algorithm: {{ $tls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $tls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $tls.autoGenerated.certManager.duration }}
|
||||
renewBefore: {{ $tls.autoGenerated.certManager.renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,30 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-api-rest
|
||||
labels:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
type: {{ .Values.apis.rest.service.type }}
|
||||
selector:
|
||||
app: api-rest
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
ports:
|
||||
- port: 8080
|
||||
name: https
|
||||
targetPort: 8080
|
||||
protocol: TCP
|
||||
{{- if eq .Values.apis.rest.service.type "NodePort" }}
|
||||
nodePort: {{ .Values.apis.rest.service.nodePorts.https }}
|
||||
{{- end }}
|
||||
{{- if not .Values.security.tls.enabled }}
|
||||
- port: 8081
|
||||
name: http
|
||||
targetPort: 8081
|
||||
protocol: TCP
|
||||
{{- if eq .Values.apis.rest.service.type "NodePort" }}
|
||||
nodePort: {{ .Values.apis.rest.service.nodePorts.http }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,31 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled $mutualAuth (eq $tls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ include "rest_api_tls_csi_controller_client_secret_name" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: csi-controller
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_csi_controller_client_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest-csi-controller" .Release.Name }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
usages:
|
||||
- client auth
|
||||
privateKey:
|
||||
algorithm: {{ $tls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $tls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $tls.autoGenerated.certManager.duration }}
|
||||
renewBefore: {{ $tls.autoGenerated.certManager.renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,147 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-csi-controller
|
||||
labels:
|
||||
app: csi-controller
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: csi-controller
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: csi-controller
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
hostNetwork: true
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
dnsPolicy: ClusterFirstWithHostNet
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
initContainers:
|
||||
{{- include "jaeger_collector_init_container" . }}
|
||||
{{- include "rest_agent_init_container" . }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.csi.controller.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.csi.controller.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "_tolerations_with_early_eviction" (dict "template" . "localTolerations" .Values.csi.controller.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: csi-controller
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.csi.controller.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.csi.controller.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.csi.controller.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.csi.controller.resources.requests.memory | quote }}
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-csi-controller:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
args:
|
||||
- "--csi-socket=/var/lib/csi/sockets/pluginproxy/csi.sock"
|
||||
- "--rest-endpoint={{ include "rest_api_endpoint" . }}"{{ if .Values.base.jaeger.enabled }}
|
||||
- "--jaeger={{ include "jaeger_url" . }}"{{ end }}
|
||||
{{- range $key, $val := .Values.csi.node.topology.segments }}
|
||||
- "--node-selector={{ $key }}={{ $val }}"
|
||||
{{- end }}
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
- "--create-volume-limit={{ .Values.csi.controller.maxCreateVolume }}"
|
||||
- "--enable-orphan-vol-gc={{- .Values.csi.controller.enableDangerousRetainGC | default false }}"
|
||||
{{- include "rest_api_tls_client_args" . | nindent 12 }}
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.csi.controller.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.csi.controller.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.base.logging.silenceLevel .Values.csi.controller.logSilenceLevel }}
|
||||
{{- end }}
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
{{- include "rest_api_tls_client_volume_mount" . | nindent 12 }}
|
||||
- name: csi-provisioner
|
||||
image: "{{ default .Values.csi.image.registry .Values.global.imageRegistry }}/{{ .Values.csi.image.repo }}/csi-provisioner:{{ .Values.csi.image.provisionerTag }}"
|
||||
args:
|
||||
- "--v=2"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--feature-gates=Topology=true"
|
||||
- "--strict-topology=false"
|
||||
- "--default-fstype=ext4"
|
||||
- "--extra-create-metadata" # This is needed for volume group feature to work
|
||||
- "--timeout=36s"
|
||||
- "--worker-threads={{ .Values.csi.controller.maxCreateVolume }}" # 10 for create and 10 for delete
|
||||
{{- if default .Values.csi.controller.preventVolumeModeConversion }}
|
||||
- "--prevent-volume-mode-conversion"
|
||||
{{- end }}
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
imagePullPolicy: {{ default .Values.csi.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: csi-attacher
|
||||
image: "{{ default .Values.csi.image.registry .Values.global.imageRegistry }}/{{ .Values.csi.image.repo }}/csi-attacher:{{ .Values.csi.image.attacherTag }}"
|
||||
args:
|
||||
- "--v=2"
|
||||
- "--timeout=36s"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
imagePullPolicy: {{ default .Values.csi.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
- name: csi-snapshotter
|
||||
image: "{{ default .Values.csi.image.registry .Values.global.imageRegistry }}/{{ .Values.csi.image.repo }}/csi-snapshotter:{{ .Values.csi.image.snapshotterTag }}"
|
||||
args:
|
||||
- "--v=2"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
imagePullPolicy: {{ default .Values.csi.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
{{- if .Values.csi.controller.snapshotController.enabled }}
|
||||
- name: csi-snapshot-controller
|
||||
args:
|
||||
- "--v=2"
|
||||
- "--leader-election=false" # since we are running single container
|
||||
{{- if default .Values.csi.controller.preventVolumeModeConversion }}
|
||||
- "--prevent-volume-mode-conversion"
|
||||
{{- end }}
|
||||
image: "{{ default .Values.csi.image.registry .Values.global.imageRegistry }}/{{ .Values.csi.image.repo }}/snapshot-controller:{{ .Values.csi.image.snapshotControllerTag }}"
|
||||
imagePullPolicy: {{ default .Values.csi.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
{{- end }}
|
||||
- name: csi-resizer
|
||||
args:
|
||||
- "--v=2"
|
||||
- "--csi-address=$(ADDRESS)"
|
||||
- "--handle-volume-inuse-error=false"
|
||||
env:
|
||||
- name: ADDRESS
|
||||
value: /var/lib/csi/sockets/pluginproxy/csi.sock
|
||||
image: "{{ default .Values.csi.image.registry .Values.global.imageRegistry }}/{{ .Values.csi.image.repo }}/csi-resizer:{{ .Values.csi.image.resizerTag }}"
|
||||
imagePullPolicy: {{ default .Values.csi.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
volumeMounts:
|
||||
- name: socket-dir
|
||||
mountPath: /var/lib/csi/sockets/pluginproxy/
|
||||
volumes:
|
||||
- name: socket-dir
|
||||
emptyDir:
|
||||
{{- include "rest_api_tls_client_volume" (dict "ctx" . "secretName" (include "rest_api_tls_csi_controller_client_secret_name" .)) | nindent 8 }}
|
||||
@@ -0,0 +1,31 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled $mutualAuth (eq $tls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ include "rest_api_tls_csi_node_client_secret_name" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: csi-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_csi_node_client_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest-csi-node" .Release.Name }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
usages:
|
||||
- client auth
|
||||
privateKey:
|
||||
algorithm: {{ $tls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $tls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $tls.autoGenerated.certManager.duration }}
|
||||
renewBefore: {{ $tls.autoGenerated.certManager.renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,177 @@
|
||||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-csi-node
|
||||
labels:
|
||||
app: csi-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{- range $key, $val := .Values.csi.node.topology.segments }}
|
||||
{{ $key }}: {{ $val }}
|
||||
{{- end }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: csi-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
updateStrategy:
|
||||
type: RollingUpdate
|
||||
rollingUpdate:
|
||||
maxUnavailable: 1
|
||||
minReadySeconds: 10
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: csi-node
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
hostNetwork: true
|
||||
dnsPolicy: ClusterFirstWithHostNet
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.csi.node.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
nodeSelector:
|
||||
{{- include "node_selector" (dict "template" . "localNodeSelector" .Values.csi.node.nodeSelector) }}
|
||||
{{- if .Values.csi.node.topology.nodeSelector }}
|
||||
{{- range $key, $val := .Values.csi.node.topology.segments }}
|
||||
{{ $key }}: {{ $val }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "tolerations" (dict "template" . "localTolerations" .Values.csi.node.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
initContainers:
|
||||
{{- include "csi_node_init_containers" . }}
|
||||
# NOTE: Each container must have mem/cpu limits defined in order to
|
||||
# belong to Guaranteed QoS class, hence can never get evicted in case of
|
||||
# pressure unless they exceed those limits. limits and requests must be
|
||||
# the same.
|
||||
containers:
|
||||
- name: csi-node
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-csi-node:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
# we need privileged because we mount filesystems and use mknod
|
||||
securityContext:
|
||||
privileged: true
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.csi.node.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.csi.node.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.base.logging.silenceLevel .Values.csi.node.logSilenceLevel }}
|
||||
{{- end }}
|
||||
- name: MY_NODE_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: MY_POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.podIP
|
||||
- name: RUST_BACKTRACE
|
||||
value: "1"
|
||||
{{- if (.Values.csi.node.mkfs_args).xfs }}
|
||||
- name: MKFS_XFS_ARGS
|
||||
value: {{ .Values.csi.node.mkfs_args.xfs | quote }}
|
||||
{{- end }}
|
||||
{{- if $safeMount := .Values.base.safeMount }}
|
||||
- name: USE_SAFE_MOUNT
|
||||
value: {{ $safeMount | quote }}
|
||||
{{- end }}
|
||||
args:
|
||||
- "--csi-socket={{ default .Values.csi.node.pluginMountPath .Values.csi.node.pluginMounthPath }}/{{ .Values.csi.node.socketPath }}"
|
||||
- "--node-name=$(MY_NODE_NAME)"
|
||||
- "--rest-endpoint={{ include "rest_api_endpoint" . }}"{{ if .Values.csi.node.restClient.enabled }}
|
||||
- "--enable-rest"{{ end }}
|
||||
- "--enable-registration"
|
||||
- "--grpc-ip=$(MY_POD_IP)"
|
||||
- "--grpc-port={{ default 10199 .Values.csi.node.port }}"{{ if .Values.csi.node.nvme.io_timeout }}
|
||||
- "--nvme-io-timeout={{ .Values.csi.node.nvme.io_timeout }}"
|
||||
- "--nvme-core-io-timeout={{ .Values.csi.node.nvme.io_timeout }}"{{ else }}
|
||||
- "--nvme-io-timeout={{ .Values.io_engine.nvme.ioTimeout }}10s"
|
||||
- "--nvme-core-io-timeout={{ .Values.io_engine.nvme.ioTimeout }}10s"{{ end }}{{ if .Values.csi.node.nvme.ctrl_loss_tmo }}
|
||||
- "--nvme-ctrl-loss-tmo={{ .Values.csi.node.nvme.ctrl_loss_tmo }}"{{ end }}{{ if .Values.csi.node.nvme.keep_alive_tmo }}
|
||||
- "--nvme-keep-alive-tmo={{ .Values.csi.node.nvme.keep_alive_tmo }}"{{ end }}
|
||||
- "--nvme-nr-io-queues={{ include "coreCount" . }}"
|
||||
- "--nvme-connect-fallback={{ .Values.csi.node.nvme.tcpFallback }}"
|
||||
- "--kubelet-path={{ .Values.csi.node.kubeletDir }}"
|
||||
{{- range $key, $val := .Values.csi.node.topology.segments }}
|
||||
- "--node-selector={{ $key }}={{ $val }}"
|
||||
{{- end }}
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
{{- include "rest_api_tls_client_args" . | nindent 8 }}
|
||||
volumeMounts:
|
||||
- name: device
|
||||
mountPath: /dev
|
||||
- name: sys
|
||||
mountPath: /sys
|
||||
- name: run-udev
|
||||
mountPath: /run/udev
|
||||
- name: plugin-dir
|
||||
mountPath: {{ default .Values.csi.node.pluginMountPath .Values.csi.node.pluginMounthPath }}
|
||||
- name: kubelet-dir
|
||||
mountPath: {{ .Values.csi.node.kubeletDir }}
|
||||
mountPropagation: "Bidirectional"
|
||||
{{- include "rest_api_tls_client_volume_mount" . | nindent 8 }}
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.csi.node.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.csi.node.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.csi.node.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.csi.node.resources.requests.memory | quote }}
|
||||
- name: csi-driver-registrar
|
||||
image: "{{ default .Values.csi.image.registry .Values.global.imageRegistry }}/{{ .Values.csi.image.repo }}/csi-node-driver-registrar:{{ .Values.csi.image.registrarTag }}"
|
||||
imagePullPolicy: {{ default .Values.csi.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
args:
|
||||
- "--csi-address={{ default .Values.csi.node.pluginMountPath .Values.csi.node.pluginMounthPath }}/{{ .Values.csi.node.socketPath }}"
|
||||
- "--kubelet-registration-path={{ .Values.csi.node.kubeletDir }}/plugins/io.openebs.mayastor/csi.sock"
|
||||
volumeMounts:
|
||||
- name: plugin-dir
|
||||
mountPath: {{ default .Values.csi.node.pluginMountPath .Values.csi.node.pluginMounthPath }}
|
||||
- name: registration-dir
|
||||
mountPath: /registration
|
||||
resources:
|
||||
limits:
|
||||
cpu: "100m"
|
||||
memory: "50Mi"
|
||||
requests:
|
||||
cpu: "100m"
|
||||
memory: "50Mi"
|
||||
# Mayastor node plugin gRPC server
|
||||
ports:
|
||||
- containerPort: {{ default 10199 .Values.csi.node.port }}
|
||||
protocol: TCP
|
||||
name: mayastor-node
|
||||
volumes:
|
||||
- name: device
|
||||
hostPath:
|
||||
path: /dev
|
||||
type: Directory
|
||||
- name: sys
|
||||
hostPath:
|
||||
path: /sys
|
||||
type: Directory
|
||||
- name: run-udev
|
||||
hostPath:
|
||||
path: /run/udev
|
||||
type: Directory
|
||||
- name: registration-dir
|
||||
hostPath:
|
||||
path: {{ .Values.csi.node.kubeletDir }}/plugins_registry/
|
||||
type: Directory
|
||||
- name: plugin-dir
|
||||
hostPath:
|
||||
path: {{ .Values.csi.node.kubeletDir }}/plugins/io.openebs.mayastor/
|
||||
type: DirectoryOrCreate
|
||||
- name: kubelet-dir
|
||||
hostPath:
|
||||
path: {{ .Values.csi.node.kubeletDir }}
|
||||
type: Directory
|
||||
{{- include "rest_api_tls_client_volume" (dict "ctx" . "secretName" (include "rest_api_tls_csi_node_client_secret_name" .)) | nindent 6 }}
|
||||
@@ -0,0 +1,31 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled $mutualAuth (eq $tls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ include "rest_api_tls_metrics_exporter_client_secret_name" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: io-engine
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_metrics_exporter_client_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest-metrics-exporter" .Release.Name }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
usages:
|
||||
- client auth
|
||||
privateKey:
|
||||
algorithm: {{ $tls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $tls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $tls.autoGenerated.certManager.duration }}
|
||||
renewBefore: {{ $tls.autoGenerated.certManager.renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,232 @@
|
||||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-io-engine
|
||||
labels:
|
||||
app: io-engine
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: io-engine
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
updateStrategy:
|
||||
type: OnDelete
|
||||
minReadySeconds: 10
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: io-engine
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
hostNetwork: true
|
||||
# To resolve services in the namespace
|
||||
dnsPolicy: ClusterFirstWithHostNet
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.io_engine.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.io_engine.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if .Values.runtimeClassName }}
|
||||
runtimeClassName: {{ .Values.runtimeClassName | quote }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "tolerations" (dict "template" . "localTolerations" .Values.io_engine.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
initContainers:
|
||||
{{- include "base_init_containers" . }}
|
||||
containers:
|
||||
- name: io-engine
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-io-engine:{{ default .Values.image.tag .Values.image.repoTags.dataPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.io_engine.logLevel }}
|
||||
- name: NVMF_TCP_NUM_SHARED_BUF
|
||||
value: "{{ .Values.io_engine.nvme.tcp.numSharedBuf }}"
|
||||
- name: NVMF_TCP_BUF_CACHE_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.tcp.bufCacheSize }}"
|
||||
- name: NVMF_TCP_MAX_QPAIRS_PER_CTRL
|
||||
value: "{{ .Values.io_engine.nvme.tcp.maxQpairsPerCtrl }}"
|
||||
- name: NVMF_TCP_MAX_QUEUE_DEPTH
|
||||
value: "{{ .Values.io_engine.nvme.tcp.maxQueueDepth }}"
|
||||
- name: NVMF_TCP_IN_CAPSULE_DATA_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.tcp.inCapsuleDataSize }}"
|
||||
- name: NVMF_TCP_MAX_IO_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.tcp.maxIoSize }}"
|
||||
- name: NVMF_TCP_IO_UNIT_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.tcp.ioUnitSize }}"
|
||||
{{- if .Values.io_engine.target.nvmf.rdma.enabled }}
|
||||
- name: NVMF_RDMA_NUM_SHARED_BUF
|
||||
value: "{{ .Values.io_engine.nvme.rdma.numSharedBuf }}"
|
||||
- name: NVMF_RDMA_BUF_CACHE_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.rdma.bufCacheSize }}"
|
||||
- name: NVMF_RDMA_DATA_WR_POOL_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.rdma.dataWrPoolSize }}"
|
||||
- name: NVMF_RDMA_MAX_IO_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.rdma.maxIoSize }}"
|
||||
- name: NVMF_RDMA_IO_UNIT_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.rdma.ioUnitSize }}"
|
||||
- name: NVMF_RDMA_IN_CAPSULE_DATA_SIZE
|
||||
value: "{{ .Values.io_engine.nvme.rdma.inCapsuleDataSize }}"
|
||||
{{- end }}
|
||||
- name: NVME_TIMEOUT
|
||||
value: "{{ .Values.io_engine.nvme.ioTimeout }}"
|
||||
- name: NVME_TIMEOUT_ADMIN
|
||||
value: "{{ .Values.io_engine.nvme.adminTimeout }}"
|
||||
- name: NVME_KATO
|
||||
value: "{{ .Values.io_engine.nvme.keepAliveTimeout }}"
|
||||
- name: NVME_MAX_NAMESPACES
|
||||
value: "{{ default 4096 .Values.io_engine.target.nvmf.maxNamespaces }}"
|
||||
- name: MY_NODE_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: MY_POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.podIP
|
||||
- name: NEXUS_NVMF_ANA_ENABLE
|
||||
value: "1"
|
||||
- name: NEXUS_NVMF_RESV_ENABLE
|
||||
value: "1"
|
||||
{{- if .Values.io_engine.nvme.transportTos }}
|
||||
- name: NVME_TRANSPORT_TOS
|
||||
value: "{{ .Values.io_engine.nvme.transportTos }}"
|
||||
{{- end }}
|
||||
{{- if $safeMount := .Values.base.safeMount }}
|
||||
- name: USE_SAFE_MOUNT
|
||||
value: {{ $safeMount | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.io_engine.interruptMode.enabled }}
|
||||
- name: ENABLE_INTERRUPT_MODE
|
||||
value: "true"
|
||||
- name: NVME_IOQ_POLL_PERIOD
|
||||
value: {{ .Values.io_engine.interruptMode.nvmeIoQueuePollPeriod | quote }}
|
||||
{{- end }}
|
||||
{{- if .Values.io_engine.pool.diskHandleRescan.enabled }}
|
||||
- name: POOL_HANDLE_RESCAN_PERIOD
|
||||
value: {{ default "5m" .Values.io_engine.pool.diskHandleRescan.period | quote }}
|
||||
{{- end }}
|
||||
args:
|
||||
# The -l argument accepts cpu-list. Indexing starts at zero.
|
||||
# For example -l 1,2,10-20 means use core 1, 2, 10 to 20.
|
||||
# Note: Ensure that the CPU resources are updated accordingly.
|
||||
# If you use 2 CPUs, the CPU: field should also read 2.
|
||||
- "--grpc-ip=$(MY_POD_IP)"
|
||||
- "--grpc-port={{ default 10124 .Values.io_engine.port }}"
|
||||
- "-N$(MY_NODE_NAME)"
|
||||
- "-Rhttps://{{ .Release.Name }}-agent-core:50051"
|
||||
- "-y/var/local/{{ .Release.Name }}/io-engine/config.yaml"
|
||||
- "-l{{ include "cpuFlag" . }}"
|
||||
- "-p={{ include "etcdUrl" . }}"{{ if .Values.io_engine.target.nvmf.ptpl }}
|
||||
- "--ptpl-dir=/var/local/{{ .Release.Name }}/io-engine/ptpl/"{{ end }}
|
||||
- "--api-versions={{ .Values.io_engine.api }}"{{ if .Values.io_engine.target.nvmf.rdma.enabled }}
|
||||
- "--enable-rdma"{{ end }}{{ if .Values.io_engine.target.nvmf.iface }}
|
||||
- "-T={{ .Values.io_engine.target.nvmf.iface }}"{{ end }}{{ if .Values.io_engine.envcontext }}
|
||||
- "--env-context=--{{ .Values.io_engine.envcontext }}"{{ end }}{{ if .Values.io_engine.reactorFreezeDetection.enabled }}
|
||||
- "--reactor-freeze-detection"{{ end }}
|
||||
- "--tgt-crdt={{ .Values.io_engine.target.nvmf.hostCmdRetryDelay.crdt1 }}"{{ if .Values.eventing.enabled }}
|
||||
- "--events-url=nats://{{ .Release.Name }}-nats:4222"
|
||||
- "--events-replicas={{ include "events_replicas" . }}"{{ end }}
|
||||
- "--ps-retries={{ default 300 .Values.io_engine.pstorRetries }}"
|
||||
- "--pool-io-error-threshold={{ default 64 .Values.io_engine.pool.ioAlerts.errorThreshold }}"
|
||||
- "--pool-io-stall-deadline={{ default (printf "%s%s" .Values.io_engine.nvme.ioTimeout .Values.io_engine.nvme.ioTimeout) .Values.io_engine.pool.ioAlerts.stallDeadline }}"
|
||||
- "--pool-io-stall-transition-threshold={{ default 3 .Values.io_engine.pool.ioAlerts.stallTransitionThreshold }}"
|
||||
- "--pool-io-stall-transition-window={{ default "3h" .Values.io_engine.pool.ioAlerts.stallTransitionWindow }}"
|
||||
command:
|
||||
- io-engine
|
||||
securityContext:
|
||||
privileged: true
|
||||
volumeMounts:
|
||||
- name: device
|
||||
mountPath: /dev
|
||||
- name: udev
|
||||
mountPath: /run/udev
|
||||
- name: dshm
|
||||
mountPath: /dev/shm
|
||||
- name: configlocation
|
||||
mountPath: /var/local/{{ .Release.Name }}/io-engine/
|
||||
- name: hugepages-2mi
|
||||
mountPath: /dev/hugepages-2mi
|
||||
{{- if .Values.io_engine.resources.requests.hugepages1Gi }}
|
||||
- name: hugepages-1gi
|
||||
mountPath: /dev/hugepages-1gi
|
||||
{{- end }}
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.io_engine.resources.limits.cpu | default (include "coreCount" .) | quote }}
|
||||
memory: {{ .Values.io_engine.resources.limits.memory | quote }}
|
||||
hugepages-2Mi: {{ .Values.io_engine.resources.limits.hugepages2Mi | quote }}
|
||||
hugepages-1Gi: {{ .Values.io_engine.resources.requests.hugepages1Gi | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.io_engine.resources.requests.cpu | default (include "coreCount" .) | quote }}
|
||||
memory: {{ .Values.io_engine.resources.requests.memory | quote }}
|
||||
hugepages-2Mi: {{ .Values.io_engine.resources.requests.hugepages2Mi | quote }}
|
||||
hugepages-1Gi: {{ .Values.io_engine.resources.requests.hugepages1Gi | quote }}
|
||||
ports:
|
||||
- containerPort: {{ default 10124 .Values.io_engine.port }}
|
||||
protocol: TCP
|
||||
name: io-engine
|
||||
{{- if .Values.base.metrics.enabled }}
|
||||
- name: metrics-exporter-io-engine
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-metrics-exporter-io-engine:{{ default .Values.image.tag .Values.image.repoTags.extensions }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
env:
|
||||
- name: MY_NODE_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: spec.nodeName
|
||||
- name: MY_POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.podIP
|
||||
ports:
|
||||
- containerPort: {{ default 9502 .Values.base.metrics.port }}
|
||||
protocol: TCP
|
||||
name: metrics
|
||||
args:
|
||||
- "--metrics-endpoint=[::]:{{ default 9502 .Values.base.metrics.port }}"
|
||||
- "--grpc-port={{ default 10124 .Values.io_engine.port }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--rest-endpoint={{ include "rest_api_endpoint" . }}"
|
||||
{{- include "rest_api_tls_client_args" . | nindent 10 }}
|
||||
{{- if and .Values.security.tls.enabled (or (not .Values.security.tls.autoGenerated.enabled) (ne .Values.security.tls.autoGenerated.engine "pod")) }}
|
||||
volumeMounts:
|
||||
{{- include "rest_api_tls_client_volume_mount" . | nindent 10 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: device
|
||||
hostPath:
|
||||
path: /dev
|
||||
type: Directory
|
||||
- name: udev
|
||||
hostPath:
|
||||
path: /run/udev
|
||||
type: Directory
|
||||
- name: dshm
|
||||
emptyDir:
|
||||
medium: Memory
|
||||
sizeLimit: "1Gi"
|
||||
- name: hugepages-2mi
|
||||
emptyDir:
|
||||
medium: HugePages-2Mi
|
||||
{{- if .Values.io_engine.resources.requests.hugepages1Gi }}
|
||||
- name: hugepages-1gi
|
||||
emptyDir:
|
||||
medium: HugePages-1Gi
|
||||
{{- end }}
|
||||
- name: configlocation
|
||||
hostPath:
|
||||
path: /var/local/{{ .Release.Name }}/io-engine/
|
||||
type: DirectoryOrCreate
|
||||
{{- include "rest_api_tls_client_volume" (dict "ctx" . "secretName" (include "rest_api_tls_metrics_exporter_client_secret_name" .)) | nindent 6 }}
|
||||
@@ -0,0 +1,19 @@
|
||||
{{- if .Values.base.metrics.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-metrics-exporter-io-engine
|
||||
labels:
|
||||
app: metrics-exporter-io-engine
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
ports:
|
||||
- name: metrics
|
||||
port: 9502
|
||||
targetPort: 9502
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: io-engine
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,77 @@
|
||||
{{- if and .Values.eventing.enabled .Values.eventing.aggregator.enabled }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-eventing-aggregator
|
||||
labels:
|
||||
app: eventing-aggregator
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: Recreate
|
||||
selector:
|
||||
matchLabels:
|
||||
app: eventing-aggregator
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: eventing-aggregator
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
{{- if $pcName := include "priority_class" (dict "template" . "localPriorityClass" .Values.eventing.aggregator.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.eventing.aggregator.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "tolerations" (dict "template" . "localTolerations" .Values.eventing.aggregator.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
{{- if (.Values.eventing.aggregator.initContainers).enabled }}
|
||||
initContainers:
|
||||
{{- include "render_init_containers" (dict "value" .Values.eventing.aggregator.initContainers.containers "context" $) | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: eventing-aggregator
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-eventing-aggregator:{{ default .Values.image.tag .Values.image.repoTags.extensions }}"
|
||||
args:
|
||||
- "--nats-url=nats://{{ .Release.Name }}-nats:4222"
|
||||
- "--jetstream-enabled={{ .Values.nats.nats.jetstream.enabled }}"
|
||||
- "--loki-enabled={{ .Values.loki.enabled }}"
|
||||
- "--subject-filter=events.>"
|
||||
- "--events-replicas={{ include "events_replicas" . }}"
|
||||
{{- if not .Values.loki.enabled }}
|
||||
- "--events-dir=/var/events"
|
||||
- "--dir-size-limit={{ .Values.eventing.aggregator.dirSizeLimit }}"
|
||||
{{- end }}
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.eventing.aggregator.logLevel }}
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.eventing.aggregator.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.eventing.aggregator.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.eventing.aggregator.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.eventing.aggregator.resources.requests.memory | quote }}
|
||||
{{- if not .Values.loki.enabled }}
|
||||
volumeMounts:
|
||||
- name: events-store
|
||||
mountPath: /var/events
|
||||
{{- end }}
|
||||
{{- if not .Values.loki.enabled }}
|
||||
volumes:
|
||||
- name: events-store
|
||||
emptyDir:
|
||||
sizeLimit: {{ .Values.eventing.aggregator.dirSizeLimit }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,31 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled $mutualAuth (eq $tls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ include "rest_api_tls_callhome_client_secret_name" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: obs-callhome
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_callhome_client_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest-callhome" .Release.Name }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
usages:
|
||||
- client auth
|
||||
privateKey:
|
||||
algorithm: {{ $tls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $tls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $tls.autoGenerated.certManager.duration }}
|
||||
renewBefore: {{ $tls.autoGenerated.certManager.renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,102 @@
|
||||
{{- $analytics := false }}
|
||||
{{- if kindIs "bool" .Values.global.analytics.enabled }}
|
||||
{{- $analytics = .Values.global.analytics.enabled }}
|
||||
{{- else }}
|
||||
{{- $analytics = .Values.obs.callhome.enabled }}
|
||||
{{- end }}
|
||||
{{- if $analytics }}
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-obs-callhome
|
||||
labels:
|
||||
app: obs-callhome
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: obs-callhome
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: obs-callhome
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
{{- if $pcName := include "priority_class" (dict "template" . "localPriorityClass" .Values.obs.callhome.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.obs.callhome.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "tolerations" (dict "template" . "localTolerations" .Values.obs.callhome.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: obs-callhome
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-obs-callhome:{{ default .Values.image.tag .Values.image.repoTags.extensions }}"
|
||||
args:
|
||||
- "-e {{ include "rest_api_endpoint" . }}"
|
||||
- "-n {{ .Release.Namespace }}"{{ if .Values.eventing.enabled }}
|
||||
- "--aggregator-url=http://{{ .Release.Name }}-obs-callhome-stats:9090/stats"{{ end }}
|
||||
{{ if .Values.obs.callhome.sendReport }}
|
||||
- "--send-report"
|
||||
{{ end }}
|
||||
{{- include "rest_api_tls_client_args" . | nindent 12 }}
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.obs.callhome.logLevel }}
|
||||
{{- if .Values.obs.callhome.productName }}
|
||||
- name: CALLHOME_PRODUCT_NAME
|
||||
value: {{ .Values.obs.callhome.productName | quote }}
|
||||
{{- end }}
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
{{- if and .Values.security.tls.enabled (or (not .Values.security.tls.autoGenerated.enabled) (ne .Values.security.tls.autoGenerated.engine "pod")) }}
|
||||
volumeMounts:
|
||||
{{- include "rest_api_tls_client_volume_mount" . | nindent 12 }}
|
||||
{{- end }}
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.obs.callhome.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.obs.callhome.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.obs.callhome.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.obs.callhome.resources.requests.memory | quote }}
|
||||
{{- if .Values.eventing.enabled }}
|
||||
- name: obs-callhome-stats
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-obs-callhome-stats:{{ default .Values.image.tag .Values.image.repoTags.extensions }}"
|
||||
args:
|
||||
- "--namespace={{ .Release.Namespace }}"
|
||||
- "--release-name={{ .Release.Name }}"
|
||||
- "--events-url=nats://{{ .Release.Name }}-nats:4222"
|
||||
- "--events-replicas={{ include "events_replicas" . }}"
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
ports:
|
||||
- containerPort: 9090
|
||||
protocol: TCP
|
||||
name: stats
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.obs.stats.logLevel }}
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.obs.stats.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.obs.stats.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.obs.stats.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.obs.stats.resources.requests.memory | quote }}
|
||||
{{- end }}
|
||||
{{- if and .Values.security.tls.enabled (or (not .Values.security.tls.autoGenerated.enabled) (ne .Values.security.tls.autoGenerated.engine "pod")) }}
|
||||
volumes:
|
||||
{{- include "rest_api_tls_client_volume" (dict "ctx" . "secretName" (include "rest_api_tls_callhome_client_secret_name" .)) | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,35 @@
|
||||
{{- $analytics := false }}
|
||||
{{- if kindIs "bool" .Values.global.analytics.enabled }}
|
||||
{{- $analytics = .Values.global.analytics.enabled }}
|
||||
{{- else }}
|
||||
{{- $analytics = .Values.obs.callhome.enabled }}
|
||||
{{- end }}
|
||||
{{- if $analytics }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-obs-callhome-stats
|
||||
labels:
|
||||
app: obs-callhome
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
ports:
|
||||
- port: 9090
|
||||
name: https
|
||||
targetPort: 9090
|
||||
protocol: TCP
|
||||
{{- if eq .Values.obs.stats.service.type "NodePort" }}
|
||||
nodePort: {{ .Values.obs.stats.service.nodePorts.https }}
|
||||
{{- end }}
|
||||
- port: 9091
|
||||
name: http
|
||||
targetPort: 9091
|
||||
protocol: TCP
|
||||
{{- if eq .Values.obs.stats.service.type "NodePort" }}
|
||||
nodePort: {{ .Values.obs.stats.service.nodePorts.http }}
|
||||
{{- end }}
|
||||
selector:
|
||||
app: obs-callhome
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,31 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled $mutualAuth (eq $tls.autoGenerated.engine "cert-manager") }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ include "rest_api_tls_diskpool_operator_client_secret_name" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app: operator-diskpool
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ include "rest_api_tls_diskpool_operator_client_secret_name" . }}
|
||||
commonName: {{ printf "%s-api-rest-diskpool-operator" .Release.Name }}
|
||||
issuerRef:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
kind: Issuer
|
||||
subject:
|
||||
organizations:
|
||||
- "OpenEBS"
|
||||
usages:
|
||||
- client auth
|
||||
privateKey:
|
||||
algorithm: {{ $tls.autoGenerated.certManager.keyAlgorithm }}
|
||||
size: {{ int $tls.autoGenerated.certManager.keySize }}
|
||||
duration: {{ $tls.autoGenerated.certManager.duration }}
|
||||
renewBefore: {{ $tls.autoGenerated.certManager.renewBefore }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,75 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-operator-diskpool
|
||||
labels:
|
||||
app: operator-diskpool
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: operator-diskpool
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: operator-diskpool
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
{{ include "label_prefix" . }}/logging: "true"
|
||||
spec:
|
||||
serviceAccountName: {{ .Release.Name }}-service-account
|
||||
imagePullSecrets:
|
||||
{{- include "base_pull_secrets" . }}
|
||||
initContainers:
|
||||
{{- include "base_init_containers" . }}
|
||||
{{- if $pcName := include "priority_class_with_default" (dict "template" . "localPriorityClass" .Values.operators.pool.priorityClassName) }}
|
||||
priorityClassName: {{ $pcName }}
|
||||
{{- end }}
|
||||
{{- if $nodeSelector := include "node_selector" (dict "template" . "localNodeSelector" .Values.operators.pool.nodeSelector) }}
|
||||
nodeSelector: {{ $nodeSelector }}
|
||||
{{- end }}
|
||||
{{- if $tolerations := include "_tolerations_with_early_eviction" (dict "template" . "localTolerations" .Values.operators.pool.tolerations) }}
|
||||
tolerations: {{ $tolerations }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: operator-diskpool
|
||||
resources:
|
||||
limits:
|
||||
cpu: {{ .Values.operators.pool.resources.limits.cpu | quote }}
|
||||
memory: {{ .Values.operators.pool.resources.limits.memory | quote }}
|
||||
requests:
|
||||
cpu: {{ .Values.operators.pool.resources.requests.cpu | quote }}
|
||||
memory: {{ .Values.operators.pool.resources.requests.memory | quote }}
|
||||
image: "{{ default .Values.image.registry .Values.global.imageRegistry }}/{{ .Values.image.repo }}/{{ include "image_prefix" . }}-operator-diskpool:{{ default .Values.image.tag .Values.image.repoTags.controlPlane }}"
|
||||
imagePullPolicy: {{ default .Values.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
args:
|
||||
- "-e {{ include "rest_api_endpoint" . }}"
|
||||
- "-n{{ .Release.Namespace }}"
|
||||
- "--request-timeout={{ .Values.base.default_req_timeout }}"
|
||||
- "--interval={{ .Values.base.cache_poll_period }}"{{ if .Values.base.jaeger.enabled }}
|
||||
- "--jaeger={{ include "jaeger_url" . }}"{{ end }}
|
||||
- "--ansi-colors={{ .Values.base.logging.color }}"
|
||||
- "--fmt-style={{ include "logFormat" . }}"
|
||||
{{- include "rest_api_tls_client_args" . | nindent 12 }}
|
||||
env:
|
||||
- name: RUST_LOG
|
||||
value: {{ .Values.operators.pool.logLevel }}
|
||||
{{- if default .Values.base.logging.silenceLevel .Values.operators.pool.logSilenceLevel }}
|
||||
- name: RUST_LOG_SILENCE
|
||||
value: {{ default .Values.base.logging.silenceLevel .Values.operators.pool.logSilenceLevel }}
|
||||
{{- end }}
|
||||
- name: MY_POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
{{- if and .Values.security.tls.enabled (or (not .Values.security.tls.autoGenerated.enabled) (ne .Values.security.tls.autoGenerated.engine "pod")) }}
|
||||
volumeMounts:
|
||||
{{- include "rest_api_tls_client_volume_mount" . | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if and .Values.security.tls.enabled (or (not .Values.security.tls.autoGenerated.enabled) (ne .Values.security.tls.autoGenerated.engine "pod")) }}
|
||||
volumes:
|
||||
{{- include "rest_api_tls_client_volume" (dict "ctx" . "secretName" (include "rest_api_tls_diskpool_operator_client_secret_name" .)) | nindent 8 }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,7 @@
|
||||
apiVersion: scheduling.k8s.io/v1
|
||||
description: Used for critical pods that must run in the cluster, which can be moved to another node if necessary.
|
||||
kind: PriorityClass
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-cluster-critical
|
||||
preemptionPolicy: PreemptLowerPriority
|
||||
value: 1000000000
|
||||
@@ -0,0 +1,131 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-service-account
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-cluster-role
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
rules:
|
||||
# must create mayastor crd if it doesn't exist, replace if exist,
|
||||
# merge schema to existing CRD.
|
||||
- apiGroups: ["apiextensions.k8s.io"]
|
||||
resources: ["customresourcedefinitions"]
|
||||
verbs: ["create", "get", "update", "list", "patch", "replace"]
|
||||
# must update stored_version in status to include new schema only.
|
||||
- apiGroups: ["apiextensions.k8s.io"]
|
||||
resources: ["customresourcedefinitions/status"]
|
||||
verbs: ["get", "update", "patch"]
|
||||
# must read mayastorpools info. This is needed to handle upgrades from v1.
|
||||
- apiGroups: [ "openebs.io" ]
|
||||
resources: [ "mayastorpools" ]
|
||||
verbs: ["get", "list", "patch", "delete", "deletecollection"]
|
||||
# must read diskpool info
|
||||
- apiGroups: ["openebs.io"]
|
||||
resources: ["diskpools"]
|
||||
verbs: ["get", "list", "watch", "update", "replace", "patch", "create"]
|
||||
# must update diskpool status
|
||||
- apiGroups: ["openebs.io"]
|
||||
resources: ["diskpools/status"]
|
||||
verbs: ["update", "patch"]
|
||||
# must read cm info
|
||||
- apiGroups: [""]
|
||||
resources: ["configmaps"]
|
||||
verbs: ["create", "get", "update", "patch"]
|
||||
# must get deployments info
|
||||
- apiGroups: ["apps"]
|
||||
resources: ["deployments"]
|
||||
verbs: ["get", "list"]
|
||||
# external provisioner & attacher
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumes"]
|
||||
verbs: ["get", "list", "watch", "update", "create", "delete", "patch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["nodes"]
|
||||
verbs: ["get", "list", "watch", "patch"]
|
||||
|
||||
# external provisioner
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumeclaims"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: ["storage.k8s.io"]
|
||||
resources: ["storageclasses"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["events"]
|
||||
verbs: ["list", "watch", "create", "update", "patch"]
|
||||
|
||||
# external-resizer
|
||||
- apiGroups: [""]
|
||||
resources: ["pods"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: [""]
|
||||
resources: ["persistentvolumeclaims/status"]
|
||||
verbs: ["patch"]
|
||||
|
||||
# external snapshotter and snapshot-controller
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotclasses"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotcontents"]
|
||||
verbs: ["create","get", "list", "watch", "update", "patch", "delete"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshotcontents/status"]
|
||||
verbs: ["update", "patch"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshots"]
|
||||
verbs: ["get", "list", "watch", "update", "patch", "delete"]
|
||||
- apiGroups: ["snapshot.storage.k8s.io"]
|
||||
resources: ["volumesnapshots/status"]
|
||||
verbs: ["update", "patch"]
|
||||
|
||||
- apiGroups: [""]
|
||||
resources: ["nodes"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
|
||||
# external attacher
|
||||
- apiGroups: ["storage.k8s.io"]
|
||||
resources: ["volumeattachments"]
|
||||
verbs: ["get", "list", "watch", "update", "patch"]
|
||||
- apiGroups: ["storage.k8s.io"]
|
||||
resources: ["volumeattachments/status"]
|
||||
verbs: ["patch"]
|
||||
# CSI nodes must be listed
|
||||
- apiGroups: ["storage.k8s.io"]
|
||||
resources: ["csinodes"]
|
||||
verbs: ["get", "list", "watch"]
|
||||
# get kube-system namespace to retrieve Uid
|
||||
- apiGroups: [""]
|
||||
resources: ["namespaces"]
|
||||
verbs: ["get"]
|
||||
|
||||
# get secrets for encryption
|
||||
- apiGroups: [""]
|
||||
resources: ["secrets"]
|
||||
verbs: ["get", "list"]
|
||||
---
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-cluster-role-binding
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: {{ .Release.Name }}-service-account
|
||||
namespace: {{ .Release.Namespace }}
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: {{ .Release.Name }}-cluster-role
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
@@ -0,0 +1,45 @@
|
||||
{{- include "validate_tls_mode" . -}}
|
||||
{{- $globalTls := .Values.security.tls -}}
|
||||
{{- if and $globalTls.enabled $globalTls.autoGenerated.enabled (eq $globalTls.autoGenerated.engine "cert-manager") }}
|
||||
{{- if empty $globalTls.autoGenerated.certManager.existingIssuer }}
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Issuer
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-tls-clusterissuer
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
selfSigned: {}
|
||||
---
|
||||
{{- end }}
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-tls-ca-crt
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
secretName: {{ .Release.Name }}-tls-ca-root
|
||||
duration: {{ $globalTls.autoGenerated.certManager.caDuration | quote }}
|
||||
isCA: true
|
||||
commonName: {{ .Release.Name }}-tls-ca-root
|
||||
issuerRef:
|
||||
name: {{ default (printf "%s-tls-clusterissuer" .Release.Name) $globalTls.autoGenerated.certManager.existingIssuer }}
|
||||
kind: {{ default "Issuer" $globalTls.autoGenerated.certManager.existingIssuerKind }}
|
||||
---
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Issuer
|
||||
metadata:
|
||||
name: {{ printf "%s-tls-ca-issuer" .Release.Name }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
spec:
|
||||
ca:
|
||||
secretName: {{ .Release.Name }}-tls-ca-root
|
||||
{{- end }}
|
||||
@@ -0,0 +1,58 @@
|
||||
{{- $tls := .Values.security.tls -}}
|
||||
{{- $restTls := .Values.apis.rest.security.tls -}}
|
||||
{{- if and $tls.enabled $tls.autoGenerated.enabled (eq $tls.autoGenerated.engine "helm") -}}
|
||||
{{- $mutualAuth := dig "mutualAuth" $tls.mutualAuth $restTls -}}
|
||||
{{- $caCertDuration := int ($tls.autoGenerated.helm.caCertDuration | default 3650) -}}
|
||||
{{- $certDuration := $tls.autoGenerated.helm.certDuration | default 365 | int -}}
|
||||
|
||||
{{- /* Look up or generate the shared CA.
|
||||
The CA secret stores both cert and key so it can be reused across upgrades and when
|
||||
new services (gRPC, etc.) need leaf certs signed by the same CA.
|
||||
buildCustomCert reconstructs the CA struct that genSignedCert expects from the stored PEM.
|
||||
Note: Kubernetes secret data is already base64-encoded, so no b64dec is needed here.
|
||||
genCA is only called when no CA exists — never generate-then-maybe-overwrite, because
|
||||
if the overwrite were skipped for any reason the fresh random CA would silently replace
|
||||
the stored one, regenerating all leaf certs and breaking mTLS on the next server restart. */ -}}
|
||||
{{- $caSecret := lookup "v1" "Secret" .Release.Namespace (printf "%s-tls-ca" .Release.Name) -}}
|
||||
{{- $caExists := and $caSecret $caSecret.data (index $caSecret.data "ca.crt") (index $caSecret.data "ca.key") -}}
|
||||
{{- $ca := "" -}}
|
||||
{{- if $caExists -}}
|
||||
{{- $ca = buildCustomCert (index $caSecret.data "ca.crt") (index $caSecret.data "ca.key") -}}
|
||||
{{- else -}}
|
||||
{{- $ca = genCA (printf "%s-tls-ca" .Release.Name) $caCertDuration -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- /* Shared args passed to every tls_helm_leaf_secret call. */ -}}
|
||||
{{- $shared := dict "ca" $ca "caExists" $caExists "certDuration" $certDuration "ctx" . -}}
|
||||
|
||||
{{- /* DNS SANs cover all the ways the REST service is addressed inside the cluster. */ -}}
|
||||
{{- $dnsSANs := list "localhost"
|
||||
(printf "%s-api-rest" .Release.Name)
|
||||
(printf "%s-api-rest.%s.svc" .Release.Name .Release.Namespace)
|
||||
(printf "%s-api-rest.%s.svc.cluster.local" .Release.Name .Release.Namespace)
|
||||
(printf "%s-api-rest.%s.svc.%s" .Release.Name .Release.Namespace .Values.clusterDomain) -}}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-tls-ca
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "label_prefix" . }}/release: {{ .Release.Name }}
|
||||
{{ include "label_prefix" . }}/version: {{ .Chart.Version }}
|
||||
type: Opaque
|
||||
data:
|
||||
ca.crt: {{ $ca.Cert | b64enc }}
|
||||
ca.key: {{ $ca.Key | b64enc }}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_secret_name" .) "cn" (printf "%s-api-rest" .Release.Name) "dnsSANs" $dnsSANs "app" "api-rest") $shared) | nindent 0 }}
|
||||
{{- if $mutualAuth }}
|
||||
{{- /* All client certs are emitted here (not in per-client files) so the CA variable is in scope
|
||||
on the very first install — lookup cannot see secrets created in the same render pass. */ -}}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_csi_controller_client_secret_name" .) "cn" (printf "%s-api-rest-csi-controller" .Release.Name) "dnsSANs" (list) "app" "csi-controller") $shared) | nindent 0 }}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_csi_node_client_secret_name" .) "cn" (printf "%s-api-rest-csi-node" .Release.Name) "dnsSANs" (list) "app" "csi-node") $shared) | nindent 0 }}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_callhome_client_secret_name" .) "cn" (printf "%s-api-rest-callhome" .Release.Name) "dnsSANs" (list) "app" "obs-callhome") $shared) | nindent 0 }}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_metrics_exporter_client_secret_name" .) "cn" (printf "%s-api-rest-metrics-exporter" .Release.Name) "dnsSANs" (list) "app" "io-engine") $shared) | nindent 0 }}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_diskpool_operator_client_secret_name" .) "cn" (printf "%s-api-rest-diskpool-operator" .Release.Name) "dnsSANs" (list) "app" "operator-diskpool") $shared) | nindent 0 }}
|
||||
{{- include "tls_helm_leaf_secret" (merge (dict "secretName" (include "rest_api_tls_plugin_client_secret_name" .) "cn" (printf "%s-api-rest-plugin" .Release.Name) "dnsSANs" (list "localhost") "app" "plugin") $shared) | nindent 0 }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -0,0 +1,143 @@
|
||||
{{- if .Values.preUpgradeHook.enabled }}
|
||||
{{- if .Release.IsUpgrade }}
|
||||
{{- if include "etcd_is_8.6.0" . }}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: mayastor-pre-upgrade-hook
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name | quote }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
annotations:
|
||||
"helm.sh/hook": pre-upgrade
|
||||
"helm.sh/hook-weight": "-9999"
|
||||
{{- with .Values.preUpgradeHook.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
---
|
||||
kind: ClusterRole
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: mayastor-pre-upgrade-hook
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name | quote }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
annotations:
|
||||
"helm.sh/hook": pre-upgrade
|
||||
"helm.sh/hook-weight": "-9999"
|
||||
{{- with .Values.preUpgradeHook.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
rules:
|
||||
- apiGroups: [""]
|
||||
resources: ["pods"]
|
||||
verbs: ["list", "patch"]
|
||||
- apiGroups: ["apps"]
|
||||
resources: ["statefulsets"]
|
||||
verbs: ["get", "create", "delete", "list", "watch"]
|
||||
---
|
||||
kind: ClusterRoleBinding
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
metadata:
|
||||
name: mayastor-pre-upgrade-hook
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name | quote }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
annotations:
|
||||
"helm.sh/hook": pre-upgrade
|
||||
"helm.sh/hook-weight": "-9998"
|
||||
{{- with .Values.preUpgradeHook.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: mayastor-pre-upgrade-hook
|
||||
namespace: {{ .Release.Namespace }}
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: mayastor-pre-upgrade-hook
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: "mayastor-pre-upgrade-hook"
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name | quote }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
annotations:
|
||||
"helm.sh/hook": pre-upgrade
|
||||
"helm.sh/hook-weight": "-9999"
|
||||
{{- with .Values.preUpgradeHook.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
data:
|
||||
label-etcd-for-helm-release.sh: |-
|
||||
{{- .Files.Get "label-etcd-for-helm-release.sh" | nindent 4 }}
|
||||
---
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: "mayastor-pre-upgrade-hook"
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name | quote }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion }}
|
||||
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
annotations:
|
||||
"helm.sh/hook": pre-upgrade
|
||||
"helm.sh/hook-weight": "-9997"
|
||||
{{- with .Values.preUpgradeHook.annotations }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
name: "mayastor-pre-upgrade-hook"
|
||||
labels:
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name | quote }}
|
||||
helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
|
||||
{{- with .Values.preUpgradeHook.podLabels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
serviceAccountName: "mayastor-pre-upgrade-hook"
|
||||
{{- with .Values.preUpgradeHook.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
restartPolicy: Never
|
||||
volumes:
|
||||
- name: scripts
|
||||
configMap:
|
||||
name: "mayastor-pre-upgrade-hook"
|
||||
defaultMode: 0777
|
||||
containers:
|
||||
- name: mayastor-pre-upgrade-hook
|
||||
image: "{{ default .Values.preUpgradeHook.image.registry .Values.global.imageRegistry }}/{{ .Values.preUpgradeHook.image.repo }}:{{ .Values.preUpgradeHook.image.tag }}"
|
||||
imagePullPolicy: {{ default .Values.preUpgradeHook.image.pullPolicy .Values.global.imagePullPolicy }}
|
||||
command:
|
||||
- "sh"
|
||||
- "-c"
|
||||
args:
|
||||
- "/scripts/label-etcd-for-helm-release.sh {{ .Release.Name }} -n {{ .Release.Namespace }} --rollout-timeout {{ .Values.preUpgradeHook.rolloutTimeout }}"
|
||||
volumeMounts:
|
||||
- name: scripts
|
||||
mountPath: /scripts
|
||||
{{- if or .Values.global.imagePullSecrets .Values.preUpgradeHook.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- include "mayastor.preUpgradeHook.pullSecrets" . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,22 @@
|
||||
{{ if .Values.storageClass.enabled }}
|
||||
{{- $scName := (printf "%s-%s" .Release.Name .Values.storageClass.nameSuffix | trunc 63) }}
|
||||
kind: StorageClass
|
||||
apiVersion: storage.k8s.io/v1
|
||||
metadata:
|
||||
name: {{ $scName }}
|
||||
{{- if .Values.storageClass.default }}
|
||||
annotations:
|
||||
storageclass.kubernetes.io/is-default-class: "true"
|
||||
{{- end }}
|
||||
allowVolumeExpansion: {{ .Values.storageClass.allowVolumeExpansion }}
|
||||
parameters:
|
||||
{{/*
|
||||
Set StorageClass parameters by adding to the values.yaml 'storageClass.parameters' map.
|
||||
Don't add the parameters to this template directly.
|
||||
This is done so that during an upgrade, an existing default StorageClass's config can
|
||||
be given preference over this chart's defaults.
|
||||
*/}}
|
||||
{{ $valuesParams := .Values.storageClass.parameters }}
|
||||
{{ (include "storageClass.parameters" (list $scName $valuesParams)) | indent 2 }}
|
||||
provisioner: io.openebs.csi-mayastor
|
||||
{{ end }}
|
||||
Reference in New Issue
Block a user