Skip to content

Running k0s worker nodes in Windows#

Experimental status#

Windows support feature is under active development and MUST BE considered as experemential.


The cluster must have at least one worker node and control plane running on Linux. Windows can be used for running additional worker nodes.


make clean k0s.exe

This should create k0s.exe with staged kubelet.exe and kube-proxy.exe


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.


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:// --cidr-range=<cidr_range> --cluster-dns=<clusterdns> --api-server=<k0s api> <token>

Cluster control plane must be inited with proper config (see section below)



To run windows node we need to have strict affinity enabled.

There is a configuration field, 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

kind: IPAMConfig
  name: default
  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.


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
  name: iis
  - name: iis
    imagePullPolicy: IfNotPresent