Install Linux subystem in Windows

There are several guides available online, describing what needs to be enabled in Windows for this to work. Good start is always Microsoft's own documentation at https://docs.microsoft.com/en-us/windows/wsl/install-win10 .

Once Linux subsystem is up and running, open the shell and install docker for linux. Stop the daemon and export DOCKER_HOST env variable

export DOCKER_HOST=tcp://localhost:2375

To make it permanent, add it to your `.bashrc` or whatever configuration file your shell is using . After we install docker on Windows and enable it, you will be able to connect to it.

Install Docker for Windows

Easiest way to do this is to follow the instructions from Docker site. Install Docker edge with Linux containers and enable Kubernetes on it. Since we will use docker from Linux subsystem, open settings for docker and make sure expose daemon on without TLS is enabled, as shown on the image.

Docker Edge has frequent updates, and they often fail to install (in my case), when docker is running, as the installer can not delete files from previous docker installation, this seems to be caused by Windows Event Log Service. Restarting this service and then trying again to install docker solved my problems.

Install Helm

Helm installation in Linux subsystem does not work out of the box. When helm install is ran, following happens:

➜  programming helm init --service-account default
$HELM_HOME has been configured at /home/edejket/.helm.
Error: error installing: Post http://localhost:8080/apis/extensions/v1beta1/namespaces/kube-system/deployments: dial tcp 127.0.0.1:8080: connect: connection refused

To fix this problem (provided that k8s is running), we need valid kubeconfig file.

mkdir $USER/.kube 
kubectl.exe config view --raw >> $USER/.kube/kubeconfig

and then init helm again

➜  programming helm init --service-account default
$HELM_HOME has been configured at /home/edejket/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!