Main Conference (September 5th, 2023)
A tale of two plugins: safely extending the Kubernetes Scheduler with WebAssembly
Roughly three years ago, Kubernetes introduced the Scheduling Framework, allowing customization of pod to node assignment. For example, a pod may contain an API server and a scheduler plugin may decide to pick a node based on memory requirements. The Scheduling Framework is a Go programming SDK. It succeeded in its goal to surmount problems with the former WebHooks based extender. However, a compiled SDK brings its own challenges, notably needing to recompile kube-scheduler in order to extend it. This session overviews the history and current status of an alternative plugin implementation, one that does not require recompiliing Kubernetes: WebAssembly.
We'll begin with a story about why custom schedulers are needed, from the end-user who founded the Kubernetes Scheduler WebAssembly work. You'll learn about specific use cases motivating this, including non-commodity hardware. To add balance, we'll discuss when you don't need a custom scheduler or when re-compiling can be the best route forward.
Next, we'll get into why architecturally WebAssembly is a great fit for plugins, while also covering its challenges. We'll review the “right time” concerns of starting a WebAssembly project within Kubernetes, such as the existence of the zero dependency runtime wazero. You'll hear about technical surprises implementing the plugin system in WebAssembly, such as sandbox limitations and programming concerns.
Finally, we'll take inventory of what's complete, what's left to do, as well as opportunities ahead like customizing cloud based Kubernetes schedulers.
When you leave this session, you will know first-hand how a complex WebAssembly project looks and feels, with concrete details of how WebAssembly fits into infrastructure extensibility.