Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Multi-OS Cluster]: Windows Node Support in Minikube Proposal #18707

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Windows Node Support for Multi-OS Cluster in Minikube

* First proposed: 2017-09-28 by Ali Kahoot(@kahootali)
* Authors: Vinicius Apolinario(@vrapolinario), Ian King'ori(@iankingori), Bob Sira(@bobsira)

## Reviewer Priorities

Please review this proposal with the following priorities:

* Does this fit with minikube's [principles](https://minikube.sigs.k8s.io/docs/concepts/principles/)?
* Are there other approaches to consider?
* Could the implementation be made simpler?
* Are there usability, reliability, or technical debt concerns?

Please leave the above text in your proposal as instructions to the reader.

## Summary

Struggling with comprehensive testing for applications across Linux and Windows environments? We are proposing to enhance Minikube's capabilities by introducing Windows node support. Minikube start should have the option of setting up a multi-OS cluster with a Linux control plane and both Linux and Windows worker nodes. This is [one of the most requested features](https://github.com/kubernetes/minikube/issues/2015) among the issues opened in the minikube repository. Developers will experience a significant boost in testing capabilities, streamlined workflows, and faster deployment, contributing to a more user-friendly and developer-focused environment

## Goals

* Launching a cluster with both Windows and Linux nodes using the Hyper-V driver.
* Provide the ability to add Windows nodes to an existing Minikube cluster.

## Non-Goals

* Support for non-hyper-v drivers on Windows
* Advanced CNI configurations
* Simultaneous Multi-OS Node Addition

## Design Details

We have a working POC where we have automated joining a Windows node to a Minikube cluster using PowerShell scripts by just running one command.

Our step-by-step process involves:
* Setting up the Windows node – Create a Windows Virtual Machine and install Windows Server 2022 unattended via [Autounattend XML file](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/automate-windows-setup?view=windows-11).
* Create and configure a Minikube cluster with Flannel as CNI - Remote into the Virtual Machine (Windows node) and install containerd, NSSM, kubelet and kubeadm respectively.
* Join the Windows node into the Minikube cluster using kubeadm join command.
* Configuring Flannel CNI and Kube-Proxy - configure the networking settings as any Kubernetes cluster.

It is also worth noting that SIG Windows group exploring to bring Windows nodes on non-Windows host using KVM2 to create the nodes and as the minikube driver.

Users will be able to start multi-os clusters by specifying a windows flag as in the example below,

minikube start –windows-node-version=2022 or minikube start -windows-node-version=2019 {windows-osversion}

Users will be able to add multiple versions of Windows node through seperate `node add` commands, e.g.

minikube node add --os=windows –windows-node-version=2022 --nodes=2

## Alternatives Considered


* _[Minikube on Windows and KVM driver](https://docs.google.com/document/d/1kCmZxvwAUmfc7SVqqigC_V8L3IaOki5TXX3fX7kEUgI/edit#heading=h.9r6udsnl0rp8) There are efforts by sig-windows to implement the same idea but on Linux environment using KVM driver_