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]

Reply via email to