Nous avons vu récemment ici comment mettre en place un cluster Docker et déployer sur celui-ci un service Kubernetes grâce à l’interface web Rancher.

Nous allons voir maintenant comment mettre en place un cluster Kubernetes sans utiliser Rancher. Pour cela, nous avons simplement besoin d’une machine ayant accès à internet. Tous les paquets requis seront automatiquement installés.

Installation du Master :

On commence par mettre à jour notre machine.

$ apt-get update --yes

Puis on récupère l’outil kubectl :

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

Ensuite on modifie les droits sur le fichier puis on le déplace afin qu’il soit reconnu par noter système :

$ chmod +x ./kubectl
$ mv ./kubectl /usr/local/bin/kubectl

On peut vérifier que l’outil est bien installé en entrant la commande suivante.

$ kubectl cluster-info

Si votre système vous renvoie des informations sur le cluster alors l’outil est correctement installé, sinon recommencez.

Il faut, pour continuer, récupérer le projet GitHub contenant les scripts d’initialisation de Kubernetes.

$ git clone https://github.com/data-8/kubeadm-bootstrap

On lance ensuite le premier script d’installation de Kubernetes :

$ ./kubeadm-bootstrap/install-kubeadm.bash

Une fois que le script s’est exécuté, il faut préparer les pré-requis pour le second qui initialisera la machine en tant que Master du cluster.

On définit le nom de notre machine dans le fichier hosts :

$ echo "127.0.0.1 `hostname`" >> /etc/hosts

Dans mon cas, je rentre toute les variables d’environnement liées aux proxys de mon réseau, comme par exemple pour le téléchargement d’images Docker et la communication entre mes machines.

On finalise en lançant la commande suivante :

$ sudo -E ./kubeadm-bootstrap/init-master.bash

Il faut absolument laisser l’option -E de sudo afin de prendre en compte les variables d’environnement entrée dans le shell auparavant sinon le script risque d’échouer.

Une fois terminé on vérifie que tout a fonctionné en regardant les machines disponibles dans le cluster.

$ kubectl get nodes

Normalement votre Master devrait être la seule machine présente, et devrait être « Ready ». Si elle est « NotReady » alors attendez quelques minutes le temps qu’elle termine son initialisation. Si elle est en « Error » alors quelque chose n’a pas bien fonctionné.

Installation d’un Worker :

L’installation d’un worker (un slave dans le jargon kubernetes) est similaire à l’installation du Master, à la différence que nous n’initialisons pas la machine comme un master mais que nous la relions à celle déjà présente.

On commence par installer l’outil kubectl :

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ mv ./kubectl /usr/local/bin/kubectl

Et on récupère le projet GitHub comme pour le Master !

$ git clone https://github.com/data-8/kubeadm-bootstrap

Maintenant on lance le script d’installation des packages Kubernetes :

$ ./kubeadm-bootstrap/install-kubeadm.bash

Puis on paramètre notre machine, avec l’ajout des hôtes dans le fichier.

$ echo "127.0.0.1 `hostname`" >> /etc/hosts
$ echo "AdresseIPMaster HostnameMaster" >>  /etc/hosts

A savoir qu’il peut être nécessaire de rajouter également une entrée dans le fichier host du master pour préciser l’adresse du worker.

Maintenant on vérifie que tout est correctement installé sur notre worker avec la commande suivante :

$ kubectl cluster-info

Normalement votre machine vous retourne un message indiquant que votre machine est prête.

Enregistrement du Worker :

Maintenant que nous avons notre master configuré et un worker prêt à rejoindre notre cluster, nous allons générer depuis le master un token permettant de se synchroniser au cluster.

Sur le master on génère un token :

$ kubeadm token create --print-join-command

On copie la commande qui nous est retourné, et on la colle dans notre worker. Après quelques secondes on peut voir apparaitre notre nouvelle machine au sein du cluster en exécutant la commande suivante depuis le master :

$ kubectl get nodes

Si votre nouvelle machine est en statut « NotReady » attendez quelques secondes le temps qu’elle soit totalement configurée.

Votre cluster est donc opérationnel, et vous pouvez rajouter autant de worker que vous le souhaitez de la même manière.