Quel outil choisir pour installer Kubernetes ?

Publié le

L'installation d'un cluster Kubernetes peut sembler intimidante à première vue. La popularité de Kubernetes aidant, de nombreux outils sont apparus pour faciliter, voir automatiser complètement cette tâche.

Parmi ces outils, j'ai eu l'occasion d'en utiliser quelques-uns en production. Voici mon retour d'expérience.

Kubespray

Kubespray est depuis longtemps un des outils parmi les plus complets pour installer son cluster Kubernetes en production. Il repose en grande partie sur Ansible. Son point fort, c'est qu'il propose un très grand nombre de paramètres à l'installation. Par exemple, on peut très facilement définir le CNI (Container Network Interface) ou le CRI (Container Runtime Interface) qu'on veut utiliser. Avec Kubespray, on peut aussi installer son cluster en mode HA (highly available). Le projet est aussi très bien documenté. On peut l'installer à peu près n'importe où : chez un cloud provider ou « on premise ».

Le problème avec Kubespray, c'est qu'il est basé en grande partie sur Ansible. Ansible est un outil vraiment génial, mais il a quand même l'inconvénient de travailler principalement de façon séquentielle, et Kubespray définit un très grand nombre de tâches à exécuter. En fin de compte, on se retrouve généralement à devoir attendre des dizaines de minutes pour installer ou modifier son cluster Kubernetes. Ce n'est pas très réactif... C'est pour cette raison que j'ai rapidement décidé de ne plus utiliser Kubespray pour mes clients.

rke

rke est l'outil d'installation de Kubernetes que nous propose Rancher. Il se présente sous la forme d'**un simple binaire **développé en Golang. Une image de container est disponible, on peut donc aussi l'utiliser via Docker, Podman, etc. Au contraire de Kubespray, rke est très rapide pour installer Kubernetes. On notera que rke ne permet pas d'utiliser une autre CRI (Container Runtime Interface) que Docker, et les composants du cluster vont être eux-mêmes déployés sous forme de containers. Pour fonctionner, rke a juste besoin qu'on lui fournisse un fichier de configuration, au format yaml. Ce fichier peut être très court ; il permet principalement de définir la topologie de notre cluster (combien de machines pour chaque composants, est ce qu'on provisionne etcd sur les mêmes machines que le control plane, etc.). Pour installer un cluster Kubernetes mono-nœud, par exemple il se résume à ça (exemple tiré de la documentation) :

nodes:
  - address: 1.2.3.4
    user: ubuntu
    role:
      - controlplane
      - etcd
      - worker

Configuration de rke pour un cluster mono-nœud (cluster.yaml)
L'ensemble des options de configuration est assez limité mais bien choisi par l'équipe de Rancher. On peut, là encore, en avoir un aperçu dans la documentation officielle. C'est un outil que j'ai utilisé en production pendant plusieurs années, et je n'ai pas vraiment ressenti de « manque d'options » ; je pense qu'il conviendra à la plupart des utilisateurs. C'est un des outils les plus simples à utiliser si on veut installer son cluster Kubernetes soi-même.

On peut quand même lui reprocher les points suivants :

  • Le passage quasi-obligé par rke pour modifier la configuraiton du cluster.
  • On ne sait pas trop comment rke fonctionne en coulisse quand on l'utilise. Le niveau d'abstraction de l'outil est peut être un peu trop élevé pour certains utilisateurs. C'est la contrepartie de sa facilité d'utilisation.

En résumé, rke est une solution très facile d'utilisation si on a besoin d'un cluster Kubernetes « qui ne sort pas des sentiers battus ».

Kubeadm

Kubeadm est mon outil préféré actuellement. Il part du principe que les binaires nécessaires au fonctionnement de Kubernetes sont déjà installés sur la machine, généralement depuis le package manager de la distribution Linux qu'on utilise. Cette partie de l'installation n'est pas très compliquée à mettre en place. Les choses sérieuses commencent après...

L'installation de Kubernetes avec Kubeadm nécessite que l'administrateur fasse des choix techniques sur les différents composants du cluster. Kubeadm de son côté va faire le lien entre les différents éléments du cluster.

Avant d'utiliser Kubeadm, il faudra se poser quelques bonnes questions. Entre autres :

  • Quelle CRI (Container Runtime Interface) je vais utiliser ?
  • Quelle CNI (Container Network Interface) je vais utiliser ?
  • Est-ce que j'ai besoin d'un ingress-controller ? Si oui, lequel ?
  • etc.

Il faut savoir que tous ces composants devront être installés séparément de Kubeadm. Pas de panique, la documentation est très complète, et est même disponible en français.

Un des gros avantages de Kubeadm est qu'il suit de très près les évolutions de Kubernetes. Il est donc généralement possible d'installer la toute dernière version de Kubernetes dès sa sortie.

Conclusion

Nous avons fait un petit tour d'horizon de différentes solutions permettant d'installer Kubernetes en production. Il existe bien évidemment d'autres installateurs, mais ces trois-là sont déjà bien représentatifs du marché. On aurait pu aussi citer Kops ou Typhoon, ou encore la distribution k3s, par exemple.

Quel que soit l'outil utilisé pour installer Kubernetes, il est facile d'automatiser encore plus le provisionning de son cluster avec de l'IaC (Infrastructure as Code). On peut très bien imaginer provisionner l'infrastructure nécessaire avec Terraform, puis installer Kubernetes ensuite, toujours via Terraform. Il suffira alors de générer l'inventory pour Kubespray, ou la configuration nécessaire au tooling pour rke ou Kubeadm. On abordera cette stratégie dans un autre article prochainement.

Dans tous les cas, il reste bien sûr à choisir la solution la plus adaptée à vos besoins, et surtout l'implémenter.

PHILIPPE CHEPY

Administrateur Système et Développeur