This is an automated email from the ASF dual-hosted git repository.
avantgardnerio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-ballista.git
The following commit(s) were added to refs/heads/main by this push:
new b8c44a2fc docs(kubernetes): two-Service pattern for scheduler
bootstrap (#2245)
b8c44a2fc is described below
commit b8c44a2fc26b60923f9b6317bab50644b7f8df88
Author: Brent Gardner <[email protected]>
AuthorDate: Thu Aug 6 17:51:35 2026 -0600
docs(kubernetes): two-Service pattern for scheduler bootstrap (#2245)
The example cluster.yaml paired a single ClusterIP Service with the
scheduler's default `--min-ready-executors=1` /readyz gate. That's
chicken-and-egg on a fresh deploy: ClusterIP only routes to Ready
pods, so executors can't reach the scheduler to register — which
means the scheduler stays not-Ready forever. The cluster never
converges without operator intervention.
Adds a second `ballista-scheduler-registration` Service with
`publishNotReadyAddresses: true` alongside the existing one:
- `ballista-scheduler` (unchanged) — clients dial this. The /readyz
gate still protects them during rolling scheduler upgrades: a new
scheduler with 0 executors doesn't receive client traffic until
it's Ready.
- `ballista-scheduler-registration` — executors dial this. Bootstrap
registration works before /readyz flips green.
Discovered while bringing up a k8s cluster from the example yaml
verbatim. Filed in-tree since the fix is pure yaml.
Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
---
docs/source/user-guide/deployment/kubernetes.md | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/docs/source/user-guide/deployment/kubernetes.md
b/docs/source/user-guide/deployment/kubernetes.md
index 9e936abba..721f7705c 100644
--- a/docs/source/user-guide/deployment/kubernetes.md
+++ b/docs/source/user-guide/deployment/kubernetes.md
@@ -107,6 +107,30 @@ persistentvolumeclaim/data-pv-claim created
Copy the following yaml to a `cluster.yaml` file and change `<your-image>`
with the name of your Ballista Docker image.
```yaml
+# Two Services front the same scheduler pod:
+# - `ballista-scheduler-registration` sets `publishNotReadyAddresses: true`
+# so executors can dial the scheduler for registration BEFORE its
+# /readyz gate flips green. Without this, the scheduler's /readyz
+# defaults to blocking on 1+ registered executor, which keeps its
+# Endpoints empty — executors can't reach it to register in the first
+# place. Chicken-and-egg; cluster never converges.
+# - `ballista-scheduler` is the client-facing Service (respects /readyz)
+# so clients don't submit queries to a scheduler with 0 executors mid
+# rolling upgrade.
+apiVersion: v1
+kind: Service
+metadata:
+ name: ballista-scheduler-registration
+ labels:
+ app: ballista-scheduler
+spec:
+ publishNotReadyAddresses: true
+ ports:
+ - port: 50050
+ name: scheduler
+ selector:
+ app: ballista-scheduler
+---
apiVersion: v1
kind: Service
metadata:
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]