Yo! We’re super excited to announce the first release of kube-scheduler-wasm-extension.
The scheduler has two extension mechanisms; extender (webhook based extension) and Scheduling Framework (Go SDK based extension).
Kube-scheduler-wasm-extension was created to provide a new Wasm-based extension that is as extensible as the Scheduling Framework, but with much less overhead (compared to extender) and maintenance/operational cost (compared to plugins).
A big shout out to
- tetratelabs/wazero, for enabling us to embed wasm runtime without CGO.
- The wazero team for their support from a wasm perspective.
- and, of course, all the awesome contributors!
This is just the beginning; let’s keep growing this project together!
This first release implements a basic function set to support all the extension points, enabling you to implement simple plugins. However, we still have things to do, especially around framework.Handle
support, and not all plugins can be ported into Wasm-based plugins yet.
What's Changed
- update(OWNERS): add reviewers by @sanposhiho in #5
- Add issue & PR template in github by @kerthcet in #2
- update(docs): update readme to explain what it is briefly by @sanposhiho in #4
- Initial proof-of-concept plugin implementation by @codefromthecrypt in #6
- Fix tools.go not exist error by @kerthcet in #10
- Fix typo in example by @gonzaloserrano in #11
- Use wire-type compatible source in TinyGo by @codefromthecrypt in #17
- feature: set up the scheduler with wasm plugin by @sanposhiho in #18
- add: add the copyright header by @sanposhiho in #20
- Add internal E2E module to benchmark realistic data by @codefromthecrypt in #22
- Add profile make target by @codefromthecrypt in #24
- feature: always assign the same instance to the same Pod by @sanposhiho in #21
- docs: adds RATIONALE.md with section on why TinyGo by @codefromthecrypt in #28
- Replace the default wasm garbage collector with nottinygc by @codefromthecrypt in #25
- extracts out pool and stubs plugin functions by @codefromthecrypt in #31
- ci: adds basic setup by @codefromthecrypt in #30
- makes guest API more similar to host by @codefromthecrypt in #32
- Reuse call stack when invoking filter by @anuraaga in #34
- implements ScorePlugin by @codefromthecrypt in #35
- deps: updates to TinyGo 0.28.1 by @codefromthecrypt in #36
- fix(host): remove lock from Score by @sanposhiho in #37
- changes benchmarks in preparation of value caching by @codefromthecrypt in #38
- allocates less buffers when decoding multiple large protos by @codefromthecrypt in #40
- Switches from UID to pointer for identifying cycle IDs by @codefromthecrypt in #39
- Updates wazero to 1.2.1 by @codefromthecrypt in #41
- Changes guest index back to UID by @codefromthecrypt in #42
- Implements prefilter and configures TinyGo unit tests by @codefromthecrypt in #43
- Add codefromthecrypt as an owner by @sanposhiho in #46
- Adds cyclestate.Pod to share unmarshalled result to all plugins by @codefromthecrypt in #45
- chore: fix comments and make the preFilter function unexported by @sanposhiho in #47
- Update k8s versions from x.26.2 to x.27.3 by @codefromthecrypt in #49
- Implements cyclestate in guest by @codefromthecrypt in #50
- Make profiler work by @pelletier in #51
- deps: updates to wazero 1.3.0 by @codefromthecrypt in #53
- Add api.Plugin as a base type for guest plugins by @codefromthecrypt in #54
- Remove kerthcet from approver by @kerthcet in #56
- Fix documenation error around preemption in RATIONALE.md by @codefromthecrypt in #57
- Implement EnqueueExtensions by @codefromthecrypt in #55
- Port NodeNumberPlugin from kube-scheduler-simulator and consolidate testdata by @codefromthecrypt in #60
- Run codec benchmarks in wasm by @codefromthecrypt in #61
- Implement PreScore and change NodeNumberPlugin to use it by @codefromthecrypt in #59
- feat: implement scheduler_perf by @sanposhiho in #63
- Add guest config and update NodeNumber plugin to use it by @codefromthecrypt in #64
- guest: inlines host.GetConfig to config.Get by @codefromthecrypt in #66
- guest: Add proto.Metadata and fix prefilter unmarshalling by @codefromthecrypt in #65
- config: add support to file:// and http(s):// URIs by @evacchi in #68
- guest: add plugin.Set for simpler example and fixes URL parsing by @codefromthecrypt in #69
- Add klog.Info/Error support by @codefromthecrypt in #67
- allow the scheduler configuration to have multi wasm plugins by @sanposhiho in #58
- support prebind and bind plugins by @Gekko0114 in #77
- misc: fix message on panic by @sanposhiho in #78
- support postfilter plugin by @Gekko0114 in #75
- support scoreExtensions by @Gekko0114 in #76
- Add test cases of mask for Reserve Plugin by @utam0k in #80
- Support postBind plugin by @Gekko0114 in #79
- fix Makefile bug by @Gekko0114 in #85
- fix: use correct guest in binding cycles by @sanposhiho in #86
- nit: change cyclestate's message by @Gekko0114 in #87
- Support Reserve plugin by @utam0k in #82
- Support EventRecorder by @Gekko0114 in #83
- doc: enrich the document for /examples by @sanposhiho in #96
- Fix minor bug about %v by @Gekko0114 in #99
- doc: add a simple tutorial to guide users by @sanposhiho in #100
- Support RejectWaitingPod by @Gekko0114 in #98
- chore: wazero v1.6.0 version bump by @evacchi in #102
- remove unnecessary code by @Gekko0114 in #104
- set up cloudbuild by @sanposhiho in #103
- deps: updates wazero to v1.7.0 by @evacchi in #105
- fix the path to the entry point by @sanposhiho in #106
- deps: updates wazero to v1.7.2 by @mathetake in #107
- Replace deprecated
experimental.FunctionListenerFactoryKey
withexperimental.WithFunctionListenerFactory
by @chansuke in #108 - make sure if there's no diff in ci by @sanposhiho in #111
- Support permit extension point by @sanposhiho in #110
- Support PrefilterExtensions by @chansuke in #92
New Contributors
- @sanposhiho made their first contribution in #5
- @kerthcet made their first contribution in #2
- @codefromthecrypt made their first contribution in #6
- @gonzaloserrano made their first contribution in #11
- @anuraaga made their first contribution in #34
- @pelletier made their first contribution in #51
- @evacchi made their first contribution in #68
- @Gekko0114 made their first contribution in #77
- @utam0k made their first contribution in #80
- @mathetake made their first contribution in #107
- @chansuke made their first contribution in #108
Full Changelog: https://github.com/kubernetes-sigs/kube-scheduler-wasm-extension/commits/v0.1.0