Skip to content

[Proposal] Opt-in Tilt-based local development workflow with Kind#5060

Open
hajnalmt wants to merge 2 commits intovolcano-sh:masterfrom
hajnalmt:tilt-based-development-kind-compact
Open

[Proposal] Opt-in Tilt-based local development workflow with Kind#5060
hajnalmt wants to merge 2 commits intovolcano-sh:masterfrom
hajnalmt:tilt-based-development-kind-compact

Conversation

@hajnalmt
Copy link
Contributor

@hajnalmt hajnalmt commented Feb 25, 2026

Summary

  • Adds a design proposal document for a Tilt-based local development workflow using Kind and ctlptl
  • Implements the full workflow: Tiltfile, Dockerfiles, Makefile targets, Helm overrides, and live-reload entrypoint
  • Updates developer documentation with quick-start instructions and operational tips

Resolves #5059

Design

See docs/design/tilt-based-development.md for the full proposal covering motivation, architecture, file layout, image building strategy, live-reload mechanism, and comparison with alternative tools (Skaffold, DevSpace, manual scripts).

What's Included

Commit 1: docs: add Tilt-based local development design proposal

  • Design document at docs/design/tilt-based-development.md
  • Developer guide updates in docs/development/development.md (Tilt workflow section with tips)
  • Prerequisites update in docs/development/prepare-for-development.md

Commit 2: tilt: add Kind-based local dev workflow with live-reload

  • hack/tilt/Tiltfile — Tilt orchestration for 4 images + Helm deploy + resource grouping
  • hack/tilt/Dockerfile.tilt — Multi-component Dockerfile with Go build + live-update support
  • hack/tilt/Dockerfile.admission-init.tilt — Lightweight admission init image
  • hack/tilt/Makefiledev-up, dev-down, dev-clean targets with tool auto-install
  • hack/tilt/entrypoint.sh — File-watch loop for in-container rebuild on sync
  • hack/tilt/ctlptl-kind-registry.yaml — Declarative Kind + registry cluster config
  • hack/tilt/values-tilt-override.yaml — Dev-specific Helm value overrides
  • Root Makefile integration and hack/lib/install.sh version-aware Kind installer

Quick Start

make dev-up    # Provisions cluster + starts Tilt (first run ~20-25 min)
make dev-down  # Stops Tilt, keeps cluster for fast restart
make dev-clean # Full teardown (cluster + registry)

E2E Testing

The Tiltfile includes on-demand e2e test resources that run directly against the live Kind cluster. All test resources use TRIGGER_MODE_MANUAL with auto_init=False — they never run automatically.

Available Test Suites

Tilt Resource E2E_TYPE Dependencies
e2e-tests-all ALL install-kwok, install-ginkgo
e2e-tests-jobp JOBP install-ginkgo
e2e-tests-jobseq JOBSEQ install-ginkgo
e2e-tests-schedulingbase SCHEDULINGBASE install-ginkgo
e2e-tests-schedulingaction SCHEDULINGACTION install-ginkgo
e2e-tests-vcctl VCCTL install-ginkgo
e2e-tests-dra DRA install-ginkgo
e2e-tests-hypernode HYPERNODE install-ginkgo
e2e-tests-cronjob CRONJOB install-ginkgo

Dependency Workflow

Test dependencies (install-ginkgo, install-kwok) are also TRIGGER_MODE_MANUAL — they must be triggered manually once per Tilt session before running tests. Triggering a test while its dependency is not yet Ready will block until the dependency is manually triggered and completes.

  1. Open the Tilt UI
  2. Trigger install-ginkgo (and install-kwok if running e2e-tests-all)
  3. Wait for dependencies to reach Ready
  4. Trigger the desired test resource
  5. On subsequent runs within the same session, only the test resource needs re-triggering

Focused Test Execution

A pre-configured focused example resource is included as a template:

Tilt Resource Default E2E_FOCUS Default E2E_SKIP
e2e-tests-schedulingbase-focused-example Gang scheduling \[sig-.*\]|Full Occupied

This resource can be modified directly in the Tiltfile or duplicated as a base to add more focused test resources targeting specific test cases during development.

Override the defaults by setting E2E_FOCUS and E2E_SKIP environment variables before starting Tilt:

E2E_FOCUS="Job PVC" E2E_SKIP="" make dev-up

All test resources set E2E_LOCAL_ONLY=1, which mirrors the CI filtering used for local-only test suites.

Images

Képernyőkép 2026-02-26 123656 Képernyőkép 2026-02-26 123724

Copilot AI review requested due to automatic review settings February 25, 2026 13:26
@volcano-sh-bot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign k82cn for approval. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@volcano-sh-bot volcano-sh-bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Feb 25, 2026
@gemini-code-assist
Copy link

Summary of Changes

Hello @hajnalmt, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the local development experience for Volcano contributors by introducing a Tilt-based workflow. It addresses the slow feedback loop inherent in traditional Kubernetes development by enabling live-reloading of core components within a local Kind cluster. The new setup streamlines environment provisioning, image building, and deployment, making iterative development more efficient and accessible, while also providing a safer environment for AI-assisted coding.

Highlights

  • Tilt-based Local Development Workflow: Introduced a comprehensive Tilt-based local development workflow for Volcano components, enabling faster iterative development.
  • Live-Reloading for Core Components: Implemented live-reloading for the scheduler, controller-manager, and webhook-manager, significantly reducing feedback loop times.
  • Single-Command Setup: Provided a streamlined setup with a single make dev-up command to provision a Kind cluster with a local registry and deploy Volcano.
  • Enhanced Documentation: Added a detailed design document and updated developer guides to cover the new workflow, including quick-start instructions and operational tips.
  • Multi-Architecture and Testing Integration: Integrated multi-architecture support for builds and included on-demand unit and end-to-end testing within the Tilt development environment.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .dockerignore
    • Added _output to the list of ignored directories.
  • Makefile
    • Updated output directory variables to use OUTPUT_DIR.
    • Defined KIND_VERSION and included the new hack/tilt/Makefile.
    • Added a print-kind-version phony target.
    • Modified the clean target to use the new OUTPUT_DIR variable.
  • docs/design/tilt-based-development.md
    • Added a new design document detailing the motivation, architecture, and implementation of the Tilt-based local development workflow.
  • docs/development/development.md
    • Updated the development guide to include a new section on using the Tilt-based local development workflow, including tips and best practices.
  • docs/development/prepare-for-development.md
    • Updated the prerequisites document to recommend the Tilt-based quick start and provide links to detailed documentation.
  • hack/lib/install.sh
    • Refactored Kind cluster creation into a new kind-create-cluster function.
    • Updated kind-up-cluster to use the new kind-create-cluster function.
    • Enhanced check-kind to support version-aware installation and binary path configuration.
  • hack/tilt/Dockerfile.admission-init.tilt
    • Added a Dockerfile for building the lightweight admission init image, including kubectl and openssl.
  • hack/tilt/Dockerfile.tilt
    • Added a multi-stage Dockerfile for building Volcano scheduler, controller-manager, and webhook-manager images with Go build and live-reload capabilities.
  • hack/tilt/Makefile
    • Added a new Makefile containing targets for installing Tilt, Kind, and ctlptl, managing the Kind cluster, and interacting with Tilt resources.
  • hack/tilt/Tiltfile
    • Added the primary Tilt configuration file, defining image builds, Helm chart deployment with overrides, resource grouping, and manual triggers for unit and e2e tests.
  • hack/tilt/ctlptl-kind-registry.yaml
    • Added a declarative configuration file for ctlptl to provision a Kind cluster with an integrated local Docker registry.
  • hack/tilt/entrypoint.sh
    • Added a shell script to act as the entrypoint for Volcano component containers, enabling in-container Go binary rebuilds and restarts upon file changes.
  • hack/tilt/values-tilt-override.yaml
    • Added a YAML file specifying development-specific overrides for the Volcano Helm chart values, such as image pull policy, log levels, and tolerations.
  • installer/helm/chart/volcano/templates/admission-init.yaml
    • Updated the image reference for the admission init job to use the new admission_init_image_name variable.
  • installer/helm/chart/volcano/values.yaml
    • Added admission_init_image_name to the basic section to allow separate configuration of the admission init image.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a comprehensive Tilt-based local development workflow, which is a great improvement for developer productivity. The changes include a detailed design document, new Makefiles, Dockerfiles, and Tilt configuration to orchestrate the local environment. My review focuses on ensuring consistency, correctness, and efficiency in the new files. I've identified a few issues, such as inconsistencies in the Go version used, an invalid Kubernetes version for downloading kubectl, and opportunities to improve Docker layer caching. Addressing these points will make the new workflow more robust and reliable.

@hajnalmt hajnalmt changed the title [Proposal] Tilt-based local development workflow with Kind WIP: [Proposal] Tilt-based local development workflow with Kind Feb 25, 2026
@volcano-sh-bot volcano-sh-bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 25, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR introduces a Tilt + Kind + ctlptl based local development workflow for Volcano, including a design proposal, developer documentation updates, and the supporting Tilt/Make/Docker/Helm plumbing needed for live-reload development against a local Kind cluster.

Changes:

  • Add a full Tilt-based local dev environment under hack/tilt/ (Tiltfile, Make targets, Dockerfiles, entrypoint, ctlptl cluster config, Helm override values).
  • Update the Helm chart to support a dedicated admission-init image override.
  • Add/extend developer docs with quick-start instructions and a detailed design proposal.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
installer/helm/chart/volcano/values.yaml Adds admission_init_image_name default value to support separate init image configuration.
installer/helm/chart/volcano/templates/admission-init.yaml Switches admission-init Job image to use admission_init_image_name.
hack/tilt/values-tilt-override.yaml Adds dev-oriented Helm overrides for Tilt (pull policy, tolerations, log levels, scheduler config).
hack/tilt/entrypoint.sh Adds in-container rebuild/restart loop triggered by Tilt live_update.
hack/tilt/ctlptl-kind-registry.yaml Declares the Kind cluster + local registry via ctlptl.
hack/tilt/Tiltfile Defines image builds, Helm deploy, resource grouping, and test resources for Tilt.
hack/tilt/Makefile Adds dev-* lifecycle and tooling install targets (Tilt/kind/ctlptl).
hack/tilt/Dockerfile.tilt Provides a Go-based dev image for scheduler/controller/webhook with live-update support.
hack/tilt/Dockerfile.admission-init.tilt Adds a lightweight admission-init image with kubectl + secret generation script.
hack/lib/install.sh Enhances kind install/version checking and makes cluster creation idempotent.
docs/development/prepare-for-development.md Adds Tilt quick-start section and pointers to the new workflow/design doc.
docs/development/development.md Documents Tilt workflow usage, tips, logging/status commands, and targets.
docs/design/tilt-based-development.md Adds a detailed design proposal covering architecture and rationale.
Makefile Adds dev workflow integration (OUTPUT_DIR/BIN_DIR refactor, includes hack/tilt/Makefile, exposes kind version).
.dockerignore Excludes _output from Docker build contexts.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@hajnalmt
Copy link
Contributor Author

hajnalmt commented Feb 25, 2026

/kind feature
/kind rfe
/area deploy

I have been using tilt succefully for nearly 5 month now to debug volcano issues and understand various behaviours. (originally I have used k3d, but as kind is volcano's main testing framework, I have ported the feature to kind filed this proposal.)

If the proposal is not accepted, it can still be a good baseline for people who want to use it on their clusters (I do that too) 😊 As tilt fully supports remote development, and used by several big projects like ClusterAPI, Crossplane and Cilium.

@volcano-sh-bot volcano-sh-bot added kind/feature Categorizes issue or PR as related to a new feature. kind/RFE Categorizes issue or PR as related to design. area/deploy Issues or PRs related to deploy/helm/build/scripts changes labels Feb 25, 2026
@hajnalmt hajnalmt changed the title WIP: [Proposal] Tilt-based local development workflow with Kind WIP: [Proposal] Opt-in Tilt-based local development workflow with Kind Feb 25, 2026
@JesseStutler
Copy link
Member

It's a great enhancement! I haven't used ctlptl or tilt before, they look great. I often get frustrated with having to recompile the image and run kind load, replacing the image after changing the code, as the process is just too slow. Never think that there is a tool like this. Mate hope you can demonstrate it for us 😄

@hajnalmt hajnalmt force-pushed the tilt-based-development-kind-compact branch 5 times, most recently from df6b1a8 to 1c1c4fd Compare February 27, 2026 12:14
@hajnalmt hajnalmt requested a review from Copilot February 27, 2026 12:15
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 17 out of 17 changed files in this pull request and generated 8 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@hajnalmt hajnalmt changed the title WIP: [Proposal] Opt-in Tilt-based local development workflow with Kind [Proposal] Opt-in Tilt-based local development workflow with Kind Feb 27, 2026
@volcano-sh-bot volcano-sh-bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 27, 2026
@hajnalmt hajnalmt changed the title [Proposal] Opt-in Tilt-based local development workflow with Kind WIP: [Proposal] Opt-in Tilt-based local development workflow with Kind Feb 27, 2026
@volcano-sh-bot volcano-sh-bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 27, 2026
@hajnalmt hajnalmt force-pushed the tilt-based-development-kind-compact branch from 1c1c4fd to ca3c48c Compare February 28, 2026 11:00
@hajnalmt hajnalmt changed the title WIP: [Proposal] Opt-in Tilt-based local development workflow with Kind [Proposal] Opt-in Tilt-based local development workflow with Kind Feb 28, 2026
@volcano-sh-bot volcano-sh-bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 28, 2026
@hajnalmt hajnalmt force-pushed the tilt-based-development-kind-compact branch from ca3c48c to bc56170 Compare February 28, 2026 11:38
Add design document covering motivation, architecture, detailed design,
tool comparison (Tilt vs Skaffold, DevSpace, Telepresence), and agentic
workflow safety considerations for the Kind + ctlptl + Tilt local
development workflow.

Update prepare-for-development.md and development.md with Tilt-based
quick start and full workflow reference.

Signed-off-by: Hajnal Máté <hajnalmt@gmail.com>
Add Tilt-based local development environment using Kind (via ctlptl)
with a local container registry. Provides single-command setup
(make dev-up) with live-reload for scheduler, controller-manager,
and webhook-manager components.

Key features:
- ctlptl-managed Kind cluster with local Docker registry
- Tilt live-update with in-container Go rebuilds via entrypoint.sh
- Multi-architecture support (amd64/arm64) for tool downloads,
  Docker builds, and in-container rebuilds
- Integrated monitoring (Prometheus, Grafana) with port-forwards
- On-demand unit and e2e test triggers via Tilt resources
- All dev tooling self-contained in _output/bin

Includes Helm chart fix: use dedicated admission_init_image_name
variable for admission init Job image.

Signed-off-by: Hajnal Máté <hajnalmt@gmail.com>
@hajnalmt hajnalmt force-pushed the tilt-based-development-kind-compact branch from bc56170 to 5b65f6e Compare February 28, 2026 13:03
@hajnalmt
Copy link
Contributor Author

hajnalmt commented Mar 2, 2026

I have finished every work on this one @JesseStutler

It works like charm 😊 moved it from WIP, I can demonstrate it at any meeting.

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

Labels

area/deploy Issues or PRs related to deploy/helm/build/scripts changes kind/feature Categorizes issue or PR as related to a new feature. kind/RFE Categorizes issue or PR as related to design. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Proposal] Tilt-based local development workflow with Kind

4 participants