Amazon EKS Distro (EKS-D) en mode HA dans Hetzner Cloud avec LXD, Snap, Traefik et MetalLB …
Tags: aws, docker, ubuntu, kubernetes
Published: 2020-12-28 22:48:15

---
title: Amazon EKS Distro (EKS-D) en mode HA dans Hetzner Cloud avec LXD, Snap, Traefik et MetalLB …
published: true
date: 2020-12-28 22:15:45 UTC
tags: aws,docker,ubuntu,kubernetes
canonical_url: https://medium.com/@deep75/amazon-eks-distro-eks-d-en-mode-ha-dans-hetzner-cloud-avec-lxd-snap-traefik-et-metallb-e4485dbee10d
---

![](https://cdn-images-1.medium.com/max/1024/1*jgtqbLa8MWpKHS28KbJyYQ.jpeg)

Au début du mois, Amazon a annoncé EKS Distro permettant d‘initier la même distribution Kubernetes que celle disponible via EKS. Il est donc possible de déployer manuellement des clusters fiables et sécurisés sans avoir à tester et à suivre en permanence les mises à jour, les dépendances et les correctifs de sécurité de Kubernetes.

> Chaque version d’EKS Distro suit le processus d’AWS EKS de vérification de la compatibilité des nouvelles versions de Kubernetes. On peut donc reproduire des versions d’EKS Distro avec les paramètres de l’environnement de compilation. Avec EKS-D, un support étendu est fourni pour les versions de Kubernetes après expiration du support communautaire, avec des versions mises à jour des versions précédentes et avec les derniers correctifs de sécurité.

[Amazon EKS Distro - Kubernetes distribution - Amazon Web Services](https://aws.amazon.com/eks/eks-distro/)

![](https://cdn-images-1.medium.com/max/1024/0*2jwtnJ5iYh4Ukl3e.png)

[Introducing Amazon EKS Distro (EKS-D) | Amazon Web Services](https://aws.amazon.com/blogs/opensource/introducing-amazon-eks-distro/)

![](https://cdn-images-1.medium.com/max/1024/0*0jPw18AWYRQeWy_M.png)

Canonical en a profité pour transposer Amazon EKS Distro avec Snap et MicroK8s pour une installation simplifiée :

- [canonical/eks-snap](https://github.com/canonical/eks-snap)
- [Install Amazon EKS Distro anywhere | Ubuntu](https://ubuntu.com/blog/install-amazon-eks-distro-anywhere)

Cela s’appuie en effet sur la collaboration existante entre Amazon et Canonical pour assurer la qualité, la sécurité et la convivialité des clusters EKS basés sur Ubuntu sur AWS.

![](https://cdn-images-1.medium.com/max/576/0*f12gVH5yoo6xPH7H.jpg)

Je lance donc l’installation d’Amazon EKS Distro dans une instance Ubuntu 20.10 64 Bits dans Hetzner Cloud :

![](https://cdn-images-1.medium.com/max/1024/1*gdP9RvBBySfYcpHaly4zhg.jpeg)

avec ce script shell pour la personnalisation de l’instance :

![](https://cdn-images-1.medium.com/max/710/1*uh8UW1jlBQQxdMlup79hMQ.png)

![](https://cdn-images-1.medium.com/max/1024/1*4JhwECZksP40aCyOGdyeXg.jpeg)

Il y installe l’hyperviseur LXD via son Snap et l’initialise avec cette configuration par défaut :

![](https://cdn-images-1.medium.com/max/1024/1*QMKBE0K5O8xVdSCH9Xb5ow.png)

Je crée un profile par défault pour mes containers LXC qui me permet de m’y connecter via SSH :

[LXD: five easy pieces | Ubuntu](https://ubuntu.com/blog/lxd-5-easy-pieces)

![](https://cdn-images-1.medium.com/max/1024/1*yF5mMgZGHicOc1882a01MQ.png)

en partant de ce modèle en YAML :

![](https://cdn-images-1.medium.com/max/744/1*ZNjtt-HgvPgU-tM4ijcvOg.png)

Je crée un second profil pour ces containers LXC en reprenant celui créé initialement pour MicroK8s dans LXD :

[MicroK8s - MicroK8s in LXD | MicroK8s](https://microk8s.io/docs/lxd)

![](https://cdn-images-1.medium.com/max/1024/1*y78VHwSSOStiSQbNIhblfQ.png)

Il est alors temps de lancer six containers LXC qui formeront l’ossature du futur cluster Amazon EKS-D :

![](https://cdn-images-1.medium.com/max/1024/1*YsYC5R8lYlEH8gdWHEUXGA.png)

![](https://cdn-images-1.medium.com/max/638/0*mH6a0fdK3s09CIOE)

Je récupère Puppet Bolt et je l’installe dans mon instance Ubuntu :

[Installing Bolt | Puppet](https://puppet.com/docs/bolt/latest/bolt_installing.html)

![](https://cdn-images-1.medium.com/max/1024/1*JCd4bxCbjIU4YOhiZiAtAw.png)

en veillant à une connexion directe à ces containers LXC via SSH :

![](https://cdn-images-1.medium.com/max/794/1*8ipWInpLvCQtDt2k7jgpvw.png)

Via Puppet Bolt, je mets en place un fichier d’inventaire de ces containers au format YAML.

[Inventory files | Puppet](https://puppet.com/docs/bolt/latest/inventory_file_v2.html#target-object)

Et je lance un script d’installation via Bolt et Snap, d’Amazon EKS Distro dans ces containers LXC :

![](https://cdn-images-1.medium.com/max/1024/1*dGlKfxkcFbDLfx2erIMI3w.png)

Amazon EKS Distro est installé. Via la ligne de commande d’EKS-D, je crée les tokens afin de permettre de joindre ces noeuds entre eux :

![](https://cdn-images-1.medium.com/max/1024/1*5zD6zvm3sZbnLbGGviIUuw.png)

![](https://cdn-images-1.medium.com/max/1024/1*8NKtJghUqrD1E-OfWtRN_Q.png)

Les noeuds du cluster sont reliés entre eux et j’obtiens un cluster Kubernetes en mode Haute Disponibilité (sur le même principe que MicroK8s) :

[MicroK8s - High Availability (HA) | MicroK8s](https://microk8s.io/docs/high-availability)

![](https://cdn-images-1.medium.com/max/1024/1*6otSu_4f0XiSo55eqGOtKA.png)

J’ai pu récupéré simplement le fichier Kubeconfig et avec le client Kubectl installé via Snap, je suis en mesure d’interagir avec le cluster :

![](https://cdn-images-1.medium.com/max/1024/1*JpJQN7nq7ohmaDoTZeRDeA.png)

![](https://cdn-images-1.medium.com/max/1024/1*bhUkG8pDESN7TxEsfFHoJA.jpeg)

Installation par la suite de MetalLB via ses manifests YAML :

[MetalLB, bare metal load-balancer for Kubernetes](https://metallb.universe.tf/installation/)

![](https://cdn-images-1.medium.com/max/1024/1*Yt2OFkA8lJUVoAIr72_FUw.png)

J’installe Helm v3 par la suite :

[Installing Helm](https://helm.sh/docs/intro/install/)

![](https://cdn-images-1.medium.com/max/1024/1*bztmRi94CmFGifrplbc2YA.jpeg)

Un plan d’adressage IP est configuré par défaut pour l’interface en mode Bridge _lxdbr0_ . Je me base sur ce plan d’adressage et des adresses IP consommées pour créer mon fichier de configuration YAML pour MetalLB et utilisant DHCP :

[MetalLB, bare metal load-balancer for Kubernetes](https://metallb.universe.tf/configuration/#layer-2-configuration)

![](https://cdn-images-1.medium.com/max/1024/1*53Wze7AxnC9EsfdKodTF6w.png)

Dès lors avec Helm et MetalLB actifs, il est possible d’installer simplement Traefik et son Chart correspondant …

[Install Traefik - Traefik](https://doc.traefik.io/traefik/getting-started/install-traefik/#use-the-helm-chart)

Traefik prend immédiatement en tant qu’Ingress Controller au sein de ce cluster Kubernetes une adresse IP via MetalLB :

![](https://cdn-images-1.medium.com/max/1024/0*5FRfPzlZtsJtkt8E.png)

![](https://cdn-images-1.medium.com/max/1024/1*hxzo-HihCGIsZumzuCIMoQ.jpeg)

Test comme toujours du sempiternel démonstrateur FC pour s’assurer du bon fonctionnement de Traefik :

![](https://cdn-images-1.medium.com/max/1024/1*LpNyyL47ACHWASSVqelsQA.png)

via ce fichier YAML pour le déploiement du démonstrateur FC …

![](https://cdn-images-1.medium.com/max/996/1*nNSU3V-QWjWgWxj5aUkyuw.png)<figcaption>deployment2.yml</figcaption>

Je peux exposer le portail FC via ce service par exemple …

[localhost.run - Instant localhost sharing](https://localhost.run/)

![](https://cdn-images-1.medium.com/max/1024/1*WN7ZpCqMaNiiVWG-QeAq8g.png)

qui apparaît publiquement :

![](https://cdn-images-1.medium.com/max/1024/1*Ywzsq2GfIEOHUGQuxxl7nQ.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*X1ts0P0EO7GMSJAmukOhwQ.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*CcvNRY2hxU4c737FKDtYKg.jpeg)

Le dashboard de Traefik peut être exposé lui aussi …

![](https://cdn-images-1.medium.com/max/1024/1*0eR55ZnW0_dzGggm4IGgVA.png)

avec ces informations :

![](https://cdn-images-1.medium.com/max/1024/1*TP4D3jitnJxjFjWGcOWAjg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*7ZnrrOsUyiNXT5wF6rOgfA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*KdVsHCit-Pq3iMwsoQMvPg.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*98uOse4bzjYe3tg_XlY7VQ.jpeg)

Pour visualiser la structure du cluster Kubernetes, je réutilise Weave Scope …

[Installing Weave Scope](https://www.weave.works/docs/scope/latest/installing/#k8s)

![](https://cdn-images-1.medium.com/max/1024/1*XIDmFxmallF4mBcpF4HU3g.png)

et son dashboard :

![](https://cdn-images-1.medium.com/max/1024/1*8W7JEGkR7Lfdh0Fx9JfvBA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*zAbFmzGX3aaHqPIQqsJqgQ.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*k_1-82RPp9vVfPDhl3PFCA.jpeg)

avec un monitoring de base des containers LXC qui forment l’ossature de ce cluster avec Amazon EKS Distro :

![](https://cdn-images-1.medium.com/max/1024/1*5P7d9m4B9VhfFn--jnhm_g.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*XbzSHBx0B0uNRdUR9viE5Q.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*QM8vEbQdO59NsJOwP50kJA.jpeg)

![](https://cdn-images-1.medium.com/max/1024/1*pvmHLCw8XI2apuEM_2qJ3A.jpeg)

> Comme l’explique AWS, Amazon EKS Distro est une distribution Kubernetes utilisée par Amazon EKS pour aider à créer des clusters fiables et sûrs. EKS Distro comprend des fichiers binaires et des conteneurs de Kubernetes open source, Etcd (base de données de configuration des clusters), la mise en réseau, des plugins de stockage, tous testés pour la compatibilité. On peut donc déployer EKS Distro partout et y exécuter ses applications.

![](https://cdn-images-1.medium.com/max/1024/0*DzsB4z3snHZFWUaL.jpeg)

D’ailleurs Canonical n’est pas la seule entreprise à proposer Amazon EKS Distro. Rancher au travers de sa distribution orientée “Gouvernement” avec RKE2, propose également un moyen alternatif de déployer Amazon EKS Distro …

![](https://cdn-images-1.medium.com/max/1024/0*GnYo49u4D6uv9MfP.png)

- [Deploying Amazon EKS Distro with RKE2](https://rancher.com/blog/2020/rke2-supports-amazon-eks-distro)
- [RKE2 - Rancher's Next Generation Kubernetes Distribution](https://docs.rke2.io/)

![](https://cdn-images-1.medium.com/max/1000/0*20IAb-1VO2nXgnJH.jpg)

À suivre !