Skip to content

Add Lang-SDK KubernetesExecutor system test#68709

Draft
jason810496 wants to merge 2 commits into
apache:mainfrom
jason810496:feature/lang-sdk/k8s-system-test
Draft

Add Lang-SDK KubernetesExecutor system test#68709
jason810496 wants to merge 2 commits into
apache:mainfrom
jason810496:feature/lang-sdk/k8s-system-test

Conversation

@jason810496

@jason810496 jason810496 commented Jun 18, 2026

Copy link
Copy Markdown
Member

Why

The Lang-SDK (Multi-Lang) feature is executor-agnostic, the best way to verify whether Lang-SDK is executor-agnostic or not is adding k8s system test. We use CeleryExecutor for E2E test in docker-compose, the LocalExecutor is used for normal breeze start-airflow setup.

How

We haven't settle down the Artifact deployment for Lang-SDK (e.g. How does *.jars and binaries being sync to worker). We intentionally defer this part to users to figure out the most comfortable way for them, then stabilize as best practice.

The current k8s test add a small utility script (stage_artifacts.py) which leverages S3DagBundle in the initContainer section to provision the artifacts in the pod that KubernetesExecutor created. See more details in kubernetes-tests/lang_sdk/README.md.

What

Add k8s test for Lang-SDK feature that trigger a Dag with both Python, Java, and Go Tasks in it with KubernetesExecutor.


Was generative AI tooling used to co-author this PR?

…netesExecutor

Add an optional pod_template_file to each [sdk] coordinators entry so a queue
routed to a non-Python coordinator launches its worker pod from a
coordinator-specific template (e.g. an image bundling the JVM for a Java
coordinator). The KubernetesExecutor resolves the template by queue when the
task's executor_config does not set one; a per-task executor_config template
still wins.
…Executor

Adds a kind-based system test that runs one Dag (lang_sdk_combined) whose
tasks span the Python task-runner and the Go/Java coordinators on the
KubernetesExecutor. The golang/java queues route to their coordinators,
each carrying a pod_template_file (the worktree-1 feature). Each worker
pod's init container stages the queue's artifact (Go binary / Java jar)
from a per-language localstack S3 bucket through the DagBundle interface
into a shared emptyDir that is the coordinator's executables_root/jars_root.
The Go queue runs on the prod image (self-contained static binary); the
Java queue runs on the CI image (bundles the JVM the JavaCoordinator needs).

New k8s-test-only bundles: go-sdk/example/k8s_combined and
java-sdk/k8s-example. Provisioning is a new breeze command,
`breeze k8s setup-lang-sdk-test`, which builds the artifacts, deploys
localstack, uploads artifacts and the Python stub Dag, renders the
pod-template image placeholders, and installs the Helm release.

func main() {
if err := bundlev1server.Serve(&combinedBundle{}); err != nil {
log.Fatal(err)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants