Typhoon & RKE : de nouveaux outils pour installer un cluster Kubernetes

Typhoon & RKE : de nouveaux outils pour installer un cluster Kubernetes

Quand on cherche à installer un cluster Kubernetes sur un cloud provider, on se retrouve avec deux choix possibles. Soit on prend un service managé EKS/GKE/AKS, soit on décide de monter son cluster soi-même.
Pour simplifier l’installation d’un cluster Kubernetes, il existe de très nombreux outils comme kops ou kubeadm.
Cependant, le premier est relativement complexe à prendre en main, et le second ne propose pas de cluster haute disponibilité.
Une nouvelle génération d’outils est arrivée, et nous allons parler de deux d’entre eux : Typhoon et RKE.


Typhoon

Typhoon est une solution qui est inspirée très fortement de Tectonic. Elle propose d’utiliser un seul et unique outil, Terraform, pour déployer un cluster Kubernetes sur différents cloud providers (AWS / GCP / Digital Ocean) ainsi que sur des serveurs physiques.

Prérequis

Pour faire fonctionner Typhoon sur AWS ou sur un autre cloud provider, il faut répondre à quelque prérequis :

  • Terraform =< v0.10.x
  • Terraform-provider-ct
  • Disposer d’un compte AWS et des secrets API (à définir en variable d’environnement)
  • AWS Route 53
  • SSH-Agent
  • kubectl

L’ensemble des composants de Kubernetes fonctionne dans des conteneurs Docker.

Création du premier cluster

On crée un dossier main.tf qui contiendra le code suivant :

Vous devez au minimum modifier les lignes suivantes :

  • dns_zone (nom de domaine à déclarer sur Route 53)
  • dns_zone_id (ID de la zone à déclarer sur Route 53)
  • ssh_authorized_key (Clé SSH publique à configurer sur vos serveurs)
  • asset_dir (Dossier de création des fichiers ainsi que du fichier de configuration pour kubectl)

Ajouter la clé privée qui correspond à votre clé publique dans votre SSH-Agent.
Maintenant, nous allons lancer la création du cluster Kubernetes :

terraform init
terraform get --update
terraform plan
terraform apply

Une fois votre cluster déployé, pour y accéder en créant une variable locale nommée KUBECONFIG qui sera récupérée par kubectl.

export KUBECONFIG=/home/user/.secrets/clusters/tempest/auth/kubeconfig
kubectl get nodes

Vous devez modifier le répertoire où se trouve le fichier kubeconfig avec les valeurs que vous avez rentrées dans la partie Terraform.

Conclusion

Points positifs

  • Installation rapide
  • Prise en main simple

Points négatifs

  • Pas de choix de la version de Kubernetes qu’on veut déployer
  • Pas de système d’update / upgrade de Kubernetes
  • Utilisation de CoreOS forcée

RKE

Prérequis

RKE est une solution créée par les équipes de Rancher qui est totalement agnostique de l’emplacement où vous souhaitez déployer votre cluster Kubernetes. Ainsi, vous devez lui fournir un ensemble de machines, où vous allez définir le rôle de chaque machine (etcd, controlplane, worker).
RKE étant développé en Go, vous devez télécharger le binaire ici et l’installer sur votre poste / serveur.
Chaque machine que vous avez créée doit avoir un système Docker local opérationnel.
L’ensemble des composants de Kubernetes fonctionne dans des conteneurs Docker.

Création du premier cluster

Pour créer notre premier cluster, nous allons avoir besoin de créer un fichier yaml pour lui donner l’ensemble des informations nécessaires à son fonctionnement, le fichier se nommera config.yaml.

Vous avez certainement remarqué que RKE propose d’utiliser sa propre image pour Kubernetesrancher/k8s:v1.8.5-rancher3, cependant, vous pouvez utiliser sans aucun problème les images officielles de Kubernetes.
/!\ Rancher ne met pas à disposition les sources de leur image rancher/k8s, il est donc difficile de savoir quelles sont les différences avec une image officielle.
Nous allons maintenant lancer la création de notre cluster Kubernetes.

rke up --config config.yaml

Vous avez maintenant un cluster Kubernetes totalement opérationnel et fonctionnel.
Pour avoir accès au cluster, vous pouvez créer une variable locale nommée KUBECONFIG, qui sera récupérée par kubectl.

export KUBECONFIG=$(pwd)/.kube_config_online.yml
kubectl get nodes

Conclusion

Points positifs

  • La solution est totalement agnostique de l’environnement
  • Déploiement très simple
  • Configuration via un fichier yaml
  • Gestion de l’update / upgrade du cluster
  • HA natif

Points négatifs

  • Solution encore jeune
  • Manque de documentation (arrivera certainement avec la v1)
  • Pas encore de version release (encore en 0.0.9-dev)

Matrice de choix

Les deux solutions que sont Typhoon et RKE proposent des approches différentes de l’installation d’un cluster Kubernetes.
Mais elles ont des points communs :

  • Installation simple
  • Pas de long fichier de configuration à écrire

Cependant, les solutions ne sont pas encore parfaites.
De mon côté, j'ai une petite préférence pour la solution de Rancher, celle-ci me permet d'avoir plus facilement la main sur l'infrastructure que je souhaite déployer et maintenir.

Et vous, quelle solution préférez-vous ?

Maxence Maireaux

Adepte de la philosophie DevOps, ses missions ont permis à Maxence de démontrer ses compétences dans l'automatisation des SI et dans l'utilisation de docker.

Paris