Skip to content

orchestrator-kubernetes: make availability-zone node label configurable#36515

Draft
jubrad wants to merge 3 commits into
MaterializeInc:mainfrom
jubrad:jubrad/configurable-az-topology-label
Draft

orchestrator-kubernetes: make availability-zone node label configurable#36515
jubrad wants to merge 3 commits into
MaterializeInc:mainfrom
jubrad:jubrad/configurable-az-topology-label

Conversation

@jubrad
Copy link
Copy Markdown
Contributor

@jubrad jubrad commented May 11, 2026

Problem

Two related issues with the Kubernetes orchestrator's AZ scheduling:

  1. The AZ node affinity label was hardcoded as materialize.cloud/availability-zone, a proprietary label that only works in Materialize's managed cloud.

Solution

Configurable AZ label — Replace the hardcoded label with a configurable field defaulting to the standard topology.kubernetes.io/zone:

  • mz-orchestrator-kubernetes: new availability_zone_label: String on KubernetesOrchestratorConfig
  • environmentd: new --orchestrator-kubernetes-az-label flag (env: ORCHESTRATOR_KUBERNETES_AZ_LABEL), default topology.kubernetes.io/zone
  • orchestratord: new --orchestrator-kubernetes-az-label flag; forwarded to environmentd
  • Helm chart: new availabilityZoneLabel value

Supported values: topology.kubernetes.io/zone (default), topology.k8s.aws/zone-id, materialize.cloud/availability-zone (previous behavior), or any custom label.

Replace the hardcoded `materialize.cloud/availability-zone` label key
used for AZ affinity rules with a configurable field, defaulting to the
standard `topology.kubernetes.io/zone`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jubrad jubrad force-pushed the jubrad/configurable-az-topology-label branch from 3e6011b to d70a016 Compare May 11, 2026 20:44
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@jubrad jubrad requested a review from Alphadelta14 May 12, 2026 02:33
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
{{- if .Values.availabilityZoneLabel }}
- "--orchestrator-kubernetes-az-label={{ .Values.availabilityZoneLabel }}"
{{- else if eq .Values.operator.cloudProvider.type "aws" }}
- "--orchestrator-kubernetes-az-label=topology.k8s.aws/zone-id"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

this behavior [upstream] upsets me. the non-deterministic zone names are deprecated, so you'd think they could just use the only ones they support.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

yeah, it's certainly not ideal, also not ideal that we were taking it to another level.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants