Running k0s worker nodes in Windows
Experimental status
Windows support feature is under active development and MUST BE considered as experemential.
Requirements
The cluster must have at least one worker node and control plane running on Linux. Windows can be used for running additional worker nodes.
Build
make clean k0s.exe
This should create k0s.exe with staged kubelet.exe and kube-proxy.exe
Description
the k0s.exe supervises kubelet.exe and kube-proxy.exe During the first run calico install script created as C:\bootstrap.ps1
The bootstrap script downloads the calico binaries, builds pause container and set ups vSwitch settings.
Running
It is expected to have docker EE installed on the windows node (we need it during the initial calico set up)
C:\>k0s.exe worker --cri-socket=docker:tcp://127.0.0.1:2375 --cidr-range=<cidr_range> --cluster-dns=<clusterdns> --api-server=<k0s api> <token>
Cluster control plane must be inited with proper config (see section below)
Configuration
Strict-affinity
To run windows node we need to have strict affinity enabled.
There is a configuration field spec.network.calico.withWindowsNodes
, equals false by default. If set to the true, the additional calico related manifest /var/lib/k0s/manifests/calico/calico-IPAMConfig-ipamconfig.yaml
would be created with the following values
---
apiVersion: crd.projectcalico.org/v1
kind: IPAMConfig
metadata:
name: default
spec:
strictAffinity: true
Another way is to use calicoctl manually:
calicoctl ipam configure --strictaffinity=true
Network connectivity in AWS
The network interface attached to your EC2 instance MUST have disabled “Change Source/Dest. Check” option. In AWS console option can be found on the Actions menu for a selected network interface.
Hacks
We need to figure out proper way to pass cluster settings from controller plane to worker.
While we don’t have it, there are CLI arguments: - cidr-range - cluster-dns - api-server
Some useful commands
Run pod with cmd.exe shell
kubectl run win --image=hello-world:nanoserver --command=true -i --attach=true -- cmd.exe
Manifest for pod with IIS web-server
apiVersion: v1
kind: Pod
metadata:
name: iis
spec:
containers:
- name: iis
image: mcr.microsoft.com/windows/servercore/iis
imagePullPolicy: IfNotPresent