Run k0s worker nodes in Windows#
IMPORTANT: Windows support for k0s is under active development and must be considered experimental.
Prerequisites#
The cluster must be running at least one worker node and control plane on Linux. You ca use Windows to run additional worker nodes.
Build k0s.exe#
Invoke the make clean k0s.exe
command to create k0s.exe with staged kubelet.exe and kube-proxy.exe.
Note: The k0s.exe supervises kubelet.exe and kube-proxy.exe.
During the first run, the calico install script is creaated as C:\bootstrap.ps1
. This bootstrap script downloads the calico binaries, builds pause container and set ups vSwitch settings.
Run k0s#
Install Mirantis Container Runtime on the Windows node(s), as it is required for the initial Calico set up).
k0s worker --cri-socket=docker:tcp://127.0.0.1:2375 --cidr-range=<cidr_range> --cluster-dns=<clusterdns> --api-server=<k0s api> <token>
You must initiate the Cluster control with the correct config.
Configuration#
Strict-affinity#
You must enable strict affinity to run the windows node.
If the spec.network.calico.withWindowsNodes
field is set to true
(it is set to false
by default) the additional calico related manifest /var/lib/k0s/manifests/calico/calico-IPAMConfig-ipamconfig.yaml
is created with the following values:
---
apiVersion: crd.projectcalico.org/v1
kind: IPAMConfig
metadata:
name: default
spec:
strictAffinity: true
Alternately, you can manually execute calicoctl:
calicoctl ipam configure --strictaffinity=true
Network connectivity in AWS#
Disable the Change Source/Dest. Check
option for the network interface attached to your EC2 instance. In AWS, the console option for the network interface is in the Actions menu.
Hacks#
k0s offers the following CLI arguments in lieu of a formal means for passing cluster settings from controller plane to worker:
- cidr-range
- cluster-dns
- api-server
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