Déployer dynamiquement des hôtes dans un cluster Kubernetes avec Rancher 2.0 et Hetzner Cloud …

Image for post
Image for post

J’avais déjà évoqué auparavant Hetzner Cloud, un service d’hébergement localisé en Allemagne et en Finlande. Celui-çi utilise des processeurs du type Intel Skylake Xeon et on peut choisir entre du stockage local et du stockage en réseau (c’est à dire entre NVMe SSD RAID ou Ceph). Ceci à des prix très abordables (même si la taille du stockage local fournie par défaut pêche un peu) :

Image for post
Image for post

Je commence par provisionner une instance sous Ubuntu 18.04 qui va me servir de serveur Rancher 2.0 dans Hetzner Cloud :

Je rappelle que la dernière version 2.0 de Rancher met à l’honneur l’orchestrateur Kubernetes par défaut :

Image for post
Image for post

L’instance apparaît après quelques secondes dans le tableau de bord d’Hetzner Cloud :

et localisée ici dans la région de Nuremberg en Allemagne :

J’y installe la dernère version du moteur communautaire de Docker :

ainsi que le serveur Rancher :

Une interface graphique est accessible sur le port 443 (via un certificat auto-signé ici) pour commencer à ajouter un nouveau cluster Kubernetes :

J’ai déjà une liste de fournisseurs (via des “Node Drivers”) que je peux utiliser pour provisionner un nouveau cluster (y compris par exemple pour Alibaba Cloud, Packet ou OpenStack) :

Mais bien évidemment, celui qui m’intéresse ici, c’est celui fourni pour Hetzner. Je vais donc installer un nouveau “Node Driver” à partir de ce dépôt github :

avec ces paramêtres :

Le fournisseur Hetzner est accessible et je l’active depuis le tableau de bord du serveur Rancher :

J’y insère le token de l’API publique d’Hetzner que l’on génère depuis son tableau de bord :

Image for post
Image for post

dans les paramêtres du fournisseur Hetzner au sein du tableau de bord du serveur Rancher :

et je configure les paramêtres des noeuds pour ce fournisseur :

et je peux configurer le lancement d’un nouveau cluster au travers du serveur Rancher :

Je lance le tout et les instances du cluster apparaissent dans le tableau de bord d’Hetzner Cloud :

Le cluster Kubernetes est prêt :

avec ce type de flux configuré par défaut :

Image for post
Image for post

J’ai donc ici 3 noeuds au total pour ce cluster :

L’installation du client Kubectl se fait ici via Snap et il va utiliser les identifiants du cluster accessibles depuis le tableau de bord du serveur Rancher :

J’ai les namespaces suivant qui sont présents dans le cluster :

Un catalogue d’applications installables (via Helm) est présent dans le tableau de bord de Rancher et qui reprend les charts présents dans le fameux Kubeapps Hub : https://hub.kubeapps.com/

Image for post
Image for post

Helm que l’on installe par exemple de cette manière :

J’en profite pour installer HAProxy en tant qu’Ingress Controller dans le cluster :

Celui-çi est actif :

J’ai pointé le service de l’Ingress Controller vers un hostname en Wild Card DNS :

et je fais le test du déploiement “traditionnel maintenant” du démonstrateur FC Particulier mais graphiquement :

et via NodePort comme moyen de publication avec le service généré dans le déploiement :

Le démonstrateur FC particulier est accessible depuis un port fixe sur tous les noeuds générés de manière aléatoire (ici en TCP 32095) :

et je vais créer un “Ingress” pour pouvoir utiliser les services d’HAProxy installé précedemment dans le cluster :

Celui-çi va me générer de manière automatique un hostname pour accéder au démonstrateur en HTTP 80 et sur la base d’un service en Wild Card DNS :

et ce dernier devient accessible :

en automatique :

et par le biais de Weave Cloud, je peux monitorer le cluster voire initier un processus de CI/CD via un dépôt Git externe (l’approche GitOps => https://www.weave.works/blog/gitops-high-velocity-cicd-for-kubernetes ):

Image for post
Image for post

On utilise le token fourni par Weave Cloud pour y installer les agents de cette manière :

et un tableau de bord (un autre …) dans Weave Cloud permet de tracer certaines métriques du cluster :

Et je peux surveiller également le dernier déploiement que je viens de réaliser :

qui induit l’utilisation d’une stack Prometheus dans ce qui a été déployé auparavant via Weave Cloud :

Image for post
Image for post

Enfin, il est possible d’adjoindre un cluster Kubernetes existant au serveur Rancher. Test ici à partir d’Hetzner-Kube, un projet sur Github qui va permettre de provisionner très facilement un petit cluster Kubernetes via Kubeadm dans Hetzner Cloud :

Je récupère le binaire depuis le dépôt Github :

Image for post
Image for post

Le cluster créé apparait alors dans le tableau de bord d’Hetzner :

Je peux alors me connecter en SSH au noeud maître pour pouvoir utiliser le client Kubectl :

Depuis le tableau de bord du serveur Rancher, je vais importer ce nouveau cluster :

via une série d’instructions (utilisant le client Kubectl) fournie dans le tableau de bord, je procède au raccordement de ce nouveau cluster :

Il apparaît alors dans le tableau de bord du serveur Rancher :

via le catalogue d’applications, j’installe un Ingress Controller pour ce nouveau cluster :

mais en utilisant cette fois-çi Nginx :

et je fais le déploiement test d’un nouveau démonstrateur avec Apigouv :

Comme précédemment j’utilise NodePort comme moyen d’exposition du service généré lors du déploiement de ce démonstrateur :

Là encore Weave Cloud me permet de monitorer le cluster :

mais également le déploiement des services que je viens de réaliser avec ce démonstrateur :

On pourrait aller plus loin en testant par exemple nouveau système de stockage en bloc distribué pour Kubernetes nommé Longhorn et proposé depuis peu dans Rancher. Pour rappel, Longhorn met en œuvre un stockage en blocs distribués à l’aide de conteneurs et de microservices. Longhorn crée un contrôleur de stockage dédié pour chaque volume de bloc et réplique de manière synchrone le volume sur plusieurs répliques stockées au sein de plusieurs nœuds. Le contrôleur de stockage et les répliques sont eux-mêmes orchestrés à l’aide de Kubernetes. Longhorn prend en charge les snapshots, les sauvegardes et permet même de programmer des snapshots et des sauvegardes récurrents : https://rancher.com/blog/2018/2018-08-23-longhorn-v0.3.0-release/

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store