Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HDDS-11618. Enable HA modes for OM and SCM #10

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 150 additions & 10 deletions charts/ozone/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -51,26 +51,166 @@ app.kubernetes.io/instance: {{ .Release.Name }}
{{- $pods | join "," }}
{{- end }}

{{/* Common configuration environment variables */}}
{{- define "ozone.configuration.env" -}}
{{/* List of comma separated om ids */}}
{{- define "ozone.om.cluster.ids" -}}
{{- $pods := list }}
{{- $replicas := .Values.om.replicas | int }}
{{- range $i := until $replicas }}
{{- $pods = append $pods (printf "%s-om-%d" $.Release.Name $i) }}
{{- end }}
{{- $pods | join "," }}
{{- end }}

{{/* List of comma separated scm ids */}}
{{- define "ozone.scm.cluster.ids" -}}
{{- $pods := list }}
{{- $replicas := .Values.scm.replicas | int }}
{{- range $i := until $replicas }}
{{- $pods = append $pods (printf "%s-scm-%d" $.Release.Name $i) }}
{{- end }}
{{- $pods | join "," }}
{{- end }}

{{/* List of decommission om nodes */}}
{{- define "ozone.om.decommissioned.nodes" -}}
{{- $nodes := list }}
{{- $statefulset := lookup "apps/v1" "StatefulSet" $.Release.Namespace (printf "%s-om" $.Release.Name) -}}
{{- if $statefulset }}
{{- $oldCount := $statefulset.spec.replicas | int -}}
{{- $newCount := .Values.om.replicas | int }}
{{- range $i := until $oldCount }}
{{- $minCount := max $newCount 1 -}}
{{- if ge $i $minCount }}
{{- $nodes = append $nodes (printf "%s-om-%d" $.Release.Name $i) }}
{{- end }}
{{- end }}
{{- end }}
{{- $nodes | join "," }}
{{- end }}

{{/* List of bootstrap om nodes */}}
{{- define "ozone.om.bootstrap.nodes" -}}
{{- $nodes := list }}
{{- $statefulset := lookup "apps/v1" "StatefulSet" $.Release.Namespace (printf "%s-om" $.Release.Name) -}}
{{- if $statefulset }}
{{- $oldCount := $statefulset.spec.replicas | int -}}
{{- $newCount := .Values.om.replicas | int }}
{{- range $i := until $newCount }}
{{- if ge $i $oldCount }}
{{- $nodes = append $nodes (printf "%s-om-%d" $.Release.Name $i) }}
{{- end }}
{{- end }}
{{- end }}
{{- $nodes | join ","}}
{{- end }}

{{/* List of decommission scm nodes */}}
{{- define "ozone.scm.decommissioned.nodes" -}}
{{- $nodes := list }}
{{- $statefulset := lookup "apps/v1" "StatefulSet" $.Release.Namespace (printf "%s-scm" $.Release.Name) -}}
{{- if $statefulset }}
{{- $oldCount := $statefulset.spec.replicas | int -}}
{{- $newCount := .Values.scm.replicas | int }}
{{- range $i := until $oldCount }}
{{- if ge $i $newCount }}
{{- $nodes = append $nodes (printf "%s-scm-%d" $.Release.Name $i) }}
{{- end }}
{{- end }}
{{- end }}
{{- $nodes | join "," -}}
{{- end }}

{{/* List of decommission data nodes */}}
{{- define "ozone.data.decommissioned.hosts" -}}
{{- $hosts := list }}
{{- $statefulset := lookup "apps/v1" "StatefulSet" $.Release.Namespace (printf "%s-datanode" $.Release.Name) -}}
{{- if $statefulset }}
{{- $oldCount := $statefulset.spec.replicas | int -}}
{{- $newCount := .Values.datanode.replicas | int }}
{{- range $i := until $oldCount }}
{{- if ge $i $newCount }}
{{- $hosts = append $hosts (printf "%s-datanode-%d.%s-datanode-headless.%s.svc.cluster.local" $.Release.Name $i $.Release.Name $.Release.Namespace) }}
{{- end }}
{{- end }}
{{- end }}
{{- $hosts | join "," -}}
{{- end }}

{{- define "ozone.configuration.env.common" -}}
- name: OZONE-SITE.XML_hdds.datanode.dir
value: /data/storage
- name: OZONE-SITE.XML_ozone.scm.datanode.id.dir
value: /data
- name: OZONE-SITE.XML_ozone.metadata.dirs
value: /data/metadata
- name: OZONE-SITE.XML_ozone.scm.block.client.address
value: {{ include "ozone.scm.pods" . }}
- name: OZONE-SITE.XML_ozone.scm.client.address
value: {{ include "ozone.scm.pods" . }}
- name: OZONE-SITE.XML_ozone.scm.names
value: {{ include "ozone.scm.pods" . }}
- name: OZONE-SITE.XML_ozone.om.address
value: {{ include "ozone.om.pods" . }}
- name: OZONE-SITE.XML_ozone.scm.ratis.enable
value: "true"
- name: OZONE-SITE.XML_ozone.scm.service.ids
value: cluster1
- name: OZONE-SITE.XML_ozone.scm.nodes.cluster1
value: {{ include "ozone.scm.cluster.ids" . }}
{{/*- name: OZONE-SITE.XML_ozone.scm.skip.bootstrap.validation*/}}
{{/* value: {{ quote .Values.scm.skipBootstrapValidation }}*/}}
{{- range $i, $val := until ( .Values.scm.replicas | int ) }}
- name: {{ printf "OZONE-SITE.XML_ozone.scm.address.cluster1.%s-scm-%d" $.Release.Name $i }}
value: {{ printf "%s-scm-%d.%s-scm-headless.%s.svc.cluster.local" $.Release.Name $i $.Release.Name $.Release.Namespace }}
{{- end }}
- name: OZONE-SITE.XML_ozone.scm.primordial.node.id
value: {{ printf "%s-scm-0" $.Release.Name }}
- name: OZONE-SITE.XML_ozone.om.ratis.enable
value: "true"
- name: OZONE-SITE.XML_ozone.om.service.ids
value: cluster1
- name: OZONE-SITE.XML_hdds.scm.safemode.min.datanode
value: "3"
- name: OZONE-SITE.XML_ozone.datanode.pipeline.limit
value: "1"
- name: OZONE-SITE.XML_dfs.datanode.use.datanode.hostname
value: "true"
{{- end }}

{{/* Common configuration environment variables */}}
{{- define "ozone.configuration.env" -}}
{{- $bOmNodes := ternary (splitList "," (include "ozone.om.bootstrap.nodes" .)) (list) (ne "" (include "ozone.om.bootstrap.nodes" .)) }}
{{- $dOmNodes := ternary (splitList "," (include "ozone.om.decommissioned.nodes" .)) (list) (ne "" (include "ozone.om.decommissioned.nodes" .)) }}
{{- $activeOmNodes := ternary (splitList "," (include "ozone.om.cluster.ids" .)) (list) (ne "" (include "ozone.om.cluster.ids" .)) }}
{{ include "ozone.configuration.env.common" . }}
{{- if gt (len $dOmNodes) 0 }}
{{- $decomIds := $dOmNodes | join "," }}
- name: OZONE-SITE.XML_ozone.om.decommissioned.nodes.cluster1
value: {{ $decomIds }}
{{- else}}
- name: OZONE-SITE.XML_ozone.om.decommissioned.nodes.cluster1
value: ""
{{- end }}
- name: OZONE-SITE.XML_ozone.om.nodes.cluster1
value: {{ $activeOmNodes | join "," }}
{{- range $tempId := $activeOmNodes }}
- name: {{ printf "OZONE-SITE.XML_ozone.om.address.cluster1.%s" $tempId }}
value: {{ printf "%s.%s-om-headless.%s.svc.cluster.local" $tempId $.Release.Name $.Release.Namespace }}
{{- end }}
{{- range $tempId := $dOmNodes }}
- name: {{ printf "OZONE-SITE.XML_ozone.om.address.cluster1.%s" $tempId }}
value: {{ printf "%s-helm-manager-decommission-%s-svc.%s.svc.cluster.local" $.Release.Name $tempId $.Release.Namespace }}
{{- end }}
{{- end }}

{{/* Common configuration environment variables for pre hook */}}
{{- define "ozone.configuration.env.prehook" -}}
{{- $bOmNodes := ternary (splitList "," (include "ozone.om.bootstrap.nodes" .)) (list) (ne "" (include "ozone.om.bootstrap.nodes" .)) }}
{{- $dOmNodes := ternary (splitList "," (include "ozone.om.decommissioned.nodes" .)) (list) (ne "" (include "ozone.om.decommissioned.nodes" .)) }}
{{- $activeOmNodes := ternary (splitList "," (include "ozone.om.cluster.ids" .)) (list) (ne "" (include "ozone.om.cluster.ids" .)) }}
{{- $allOmNodes := concat $activeOmNodes $dOmNodes }}
{{ include "ozone.configuration.env.common" . }}
- name: OZONE-SITE.XML_ozone.om.decommissioned.nodes.cluster1
value: ""
{{- range $tempId := $allOmNodes }}
- name: {{ printf "OZONE-SITE.XML_ozone.om.address.cluster1.%s" $tempId }}
value: {{ printf "%s.%s-om-headless.%s.svc.cluster.local" $tempId $.Release.Name $.Release.Namespace }}
{{- end }}
{{ $allOmNodes = append $allOmNodes "om-leader-transfer"}}
- name: OZONE-SITE.XML_ozone.om.nodes.cluster1
value: {{ $allOmNodes | join "," }}
- name: "OZONE-SITE.XML_ozone.om.address.cluster1.om-leader-transfer"
value: localhost
{{- end }}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ spec:
ports:
- name: ui
port: {{ .Values.datanode.service.port }}
- name: ratis-ipc
port: 9858
- name: ipc
port: 9859
Comment on lines +31 to +34
Copy link

@ptlrs ptlrs Nov 7, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can the port numbers in all the services and statefulsets be referenced from the values.yaml file? We would like to avoid hardcoding them.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes definitely! I just proposed this. This was also my personal question ^^

selector:
{{- include "ozone.selectorLabels" . | nindent 4 }}
app.kubernetes.io/component: datanode
4 changes: 4 additions & 0 deletions charts/ozone/templates/datanode/datanode-statefulset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ spec:
ports:
- name: ui
containerPort: {{ .Values.datanode.service.port }}
- name: ratis-ipc
containerPort: 9858
- name: ipc
containerPort: 9859
livenessProbe:
httpGet:
path: /
Expand Down
Loading