Dans cet article je vais décrire comment installer Kubernetes sous Windows et réaliser ses premiers pas avec l'installation du Dashboard Kubernetes. Nous allons pour cela utiliser Docker Windows qui offre la possibilité d'utiliser l'orchestrateur au sein de ce système d'exploitation en quelques minutes.

WSL2 vs Hyper-V ?

Il est d'abord important de préciser que Docker Windows ne s'installe qu'à minima sous Windows PRO de façon stable.

Il est toutefois possible d'installer Docker sous Windows HOME mais il sera alors nécessaire de passer par l'utilisation du WSL2. J'ai déjà pu apporter quelques précisions à ce sujet : https://grottedubarbu.fr/wsl2-docker/

  1. Installation sous Windows HOME

Si votre poste de travail se trouve sous Windows HOME et que vous ne souhaitez pas passer par le programme insider de Microsoft, la solution que je vais présenter ici ne vous conviendra pas.

Pour ceux décidés à franchir le cap, vous pouvez suivre cet excellent tutoriel à ce sujet : https://docs.microsoft.com/en-us/windows/wsl/wsl2-install?WT.mc_id=-blog-scottha

La vidéo décrit parfaitement le processus.

2. Installation sous Windows PRO

En travaillant sous Windows PRO, vous aurez le choix entre l'utilisation classique avec Hyper-V ou WSL2.

De mon côté, je conseille l'utilisation de WSL2 rien que pour ne pas attendre le lancement de Docker lorsque mon démarre !

🚩 Attention, j'ai tout de même apporté cette précision sur Twitter que je remets ici, car ce problème est parfois désagréable :

3. Installer Docker Windows

Peu importe votre choix, pour aller plus loin il faudra installer Docker ! Vous pouvez récupérer l'exécutable à l'adresse suivante : https://hub.docker.com/editions/community/docker-ce-desktop-windows/ et réaliser l'installation.

Il est également possible de réaliser l'installation à l'aide de Chocolatey :

choco install docker-desktop

🚩Sur mon build de Windows ( version 2004 ) , je dois utiliser la version 2.2.0.3 de Docker Windows sinon le daemon refuse de se lancer. 🚩

Dans tous les cas il sera nécessaire d'activer Kubernetes, accédez tout d'abord au paramètre de Docker ( un clic droit sur la petite baleine en bas à droite, à coté de l'heure )   :

K8S activation

et enfin activez K8S :

Vous pouvez noter que Kubernetes est en version 1.15.5 sur la version 2.2.03. Il est possible d'avoir la version 1.16.5 en passant par le canal de diffusion edge de Docker : https://docs.docker.com/docker-for-windows/edge-release-notes/

Dans le cadre de notre essai, cela ne pose aucun soucis.

Ouvrez un onglet powershell et vérifions l'installation :

kubectl get po --all-namespaces

Voici le retour de la commande :

kubectl get po

Nous allons pouvoir installer le dashboard de Kubernetes !

Installation du dashboard Kubernetes

Pour réaliser cette installation, je vais utiliser le template fourni sur le dépôt github de Kubernetes : https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml

Il ne reste qu'à appliquer ce fichier YAML :

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml

Voici le retour de la commande :

apply dashboard yaml

Vous pouvez noter que ce fichier va créer :

  • 2 services et 2 déploiements : Le dashboard et les metrics
  • 3 volumes secrets pour les certificats
  • Les rôles, comptes autorisations pour le dashboard.

Vérifions que nos pods sont lancés :

kubectl get pod --namespace=kubernetes-dashboard 

Avant d’accéder à l'interface et pour pouvoir nous connecter, nous allons avoir besoin d'un token. Ce n'est pas la seule solution pour s'authentifier mais c'est la plus rapide. Ce token est stocké dans les volumes secrets du dashboard :

kubectl describe secret kubernetes-dashboard --namespace=kubernetes-dashboard

Copiez votre Token, il va nous servir dans quelques secondes.

C'est déjà presque terminé ! Il faut maintenant se connecter à l'interface web. Il est nécessaire pour cela de forward le port du dashboard sur votre interface loopback si vous souhaitez y accéder sur https://127.0.0.1:8443 :

kubectl port-forward -n kubernetes-dashboard $(kubectl -n kubernetes-dashboard get pod -l k8s-app=kubernetes-dashboard -o jsonpath='{.items[0].metadata.name}') 8443:8443

Connectez-vous maintenant sur https://127.0.0.1:8443, le token que nous avons récupéré précédemment va nous servir pour la connexion :

token dashboard

Et là :

MAGIC

Vous avez maintenant accès au dashboard de Kubernetes depuis votre installation Docker Windows :

Bien évidement ce n'est pas la seule solution pour installer le dashboard. Il s'agit de la version la plus simple et rapide à ma connaissance. Nous aurions par exemple pu utiliser un reverse proxy afin de ne pas forward le port 8443 manuellement : Exemple Traefik ! 😅

Traefik !

Vous pouvez réinitialiser le cluster Kubernetes directement depuis les options de Docker Windows "Reset Kubernetes Cluster". Pour mon exemple, je vais le faire afin de repartir de zéro :

reset cluster K8s

Ensuite je vais utiliser les configurations habituelles de Traefik pour K8S :

  • RBAC.yaml
  • ConfigMap.yaml
  • Deployment.yaml

Toutes ces configurations sont disponibles sur Github, dans le dossier kubernetes-dashboard-with-traefik :

lfache/K3S-stackfiles
Contribute to lfache/K3S-stackfiles development by creating an account on GitHub.

Le fichier ConfigMap.yaml :

apiVersion: v1
kind: ConfigMap
metadata:
  name: traefik-config-static
  namespace: default
  labels:
    app: traefik
data:
  traefik.yml: |
    entryPoints:
      web:
        address: :80
    
      websecure:
        address: :443
    
    api:
      insecure: true
    
    providers:
      kubernetesCRD: {} 

Je déclare donc deux entrypoints :

  • web, sur le port 80
  • websecure, sur le port 443

J'utilise comme providers : Kubernetes. Pour le moment rien ne vous semble particulier mais ... maintenant regardons la déclaration de la route Ingress qui va rediriger le trafic vers notre dashboard :

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: ingressroutetcpfoo
  namespace: kubernetes-dashboard

spec:
  entryPoints:                  
    - websecure
  routes:                      
  - match: HostSNI(`*`)         
    services:                   
    - name: kubernetes-dashboard                 
      port: 443             

  tls:                              
    passthrough: true         

Vous pouvez constater que j'utilise le routage TCP et non une route HTTPS. Pourquoi ?

L'option tls passthrough permet de se connecter avec le certificat SSL du dashboard qui est auto-signé sans rencontrer aucun soucis ! Et avec moins de configuration qu'en utilisant le routage HTTPS.

Appliquons donc ces fichiers :

kubectl apply -f RBAC.yaml
kubectl apply -f ConfigMap.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml
kubectl apply -f Deployment.yaml

Une fois ces fichiers appliqués, rendez-vous maintenant sur https://127.0.0.1 et vous devriez avoir accès au dashboard ! 😘

Il est également possible de modifier la directive HostSNI si vous souhaitez ne pas rediriger tout le trafic 443 vers le dashboard de Kubernetes :

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRouteTCP
metadata:
  name: ingressroutetcpfoo
  namespace: kubernetes-dashboard

spec:
  entryPoints:                  
    - websecure
  routes:                      
  - match: HostSNI(`dashboard.k8s.local`)         
    services:                   
    - name: kubernetes-dashboard                 
      port: 443             

  tls:                              
    passthrough: true         

Résultat :


Nous venons donc d'installer Kubernetes sur Windows à l'aide de Docker Windows. La version de Kubernetes proposée par cette solution n'est certes pas la dernière en date ! Cela peut poser par exemple quelques soucis avec le Dashboard qui est compatible dans sa dernière version avec la 1.17 de Kubernetes.

Mais cette installation peut vous permettre de réaliser quelques tests d'intégration et vous permettre de découvrir k8s avant un éventuel passage en production. Encore plus  si votre infrastructure tourne déjà sous Kubernetes, cette solution peut être intéressante pour les développeurs ou SysAdmin souhaitant réaliser des tests en amont.

Et de plus, nous avons eu l'occasion d'essayer le routage TCP qui est arrivé avec la version 2 de Traefik !

Docker Windows, avec notamment l'apport de WSL2 qui améliore ses performances, et son intégration facile de Kubernetes devient un outil réellement intéressant si vous souhaitez découvrir l'univers de k8s !

En tout cas  n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter ! C'est toujours un plaisir d'avoir des retours ! 😇