Portainer est un outil open source pour créer et gérer facilement des environnements Docker.  Il a été largement adopté par la communauté au fil du temps avec plus de 2 milliards de téléchargements.

Depuis maintenant quelques temps, il est également possible d'utiliser Portainer.io dans un environnement Kubernetes ! Plusieurs solutions existent afin de faciliter cette mise en place et de permettre aux développeurs de se concentrer sur l'essentiel. Je ne vais pas détailler ici la solution la plus rapide ( même si elle va déjà très vite ! 😂). Mais une "autre" solution qui offre, pour moi, un compromis entre une rapidité de mise en œuvre et la compréhension technique de cette mise en place !

Portainer.io

Portainer.io est donc une interface de gestion légère qui vous permet de manager vos différents environnements Docker ( Hôte Docker ou cluster Swarm ). Conçu pour être simple à déployer et à utiliser, l'application consiste en un conteneur qui peut tourner sur un hôte Docker, Linux  comme Windows d'ailleurs.

L'interface permet donc de gérer toutes ces ressources ( conteneurs, images, volumes, réseaux, secrets, etc ... ) au sein d'une unique interface. Et depuis peu, tout ceci fonctionne également dans un environnement Kubernetes !

Je vais donc installer cette interface sur mon serveur avec K3S et bien évidement Traefik pour gérer mes requêtes !

Pré-requis

Il sera bien sûr nécessaire d'avoir un serveur avec K3S d'installer. Sur un VPS OVH, cela donne en quelques minutes :

$ sudo apt update && sudo apt install curl -y
$ curl -sfL https://get.k3s.io | sh -s - --no-deploy=traefik

Quelques secondes plus tard, on peut valider son installation de K3S :

$ sudo kubectl get nodes
NAME        STATUS   ROLES    AGE   VERSION
s1-2-gra7   Ready    master   19s   v1.17.4+k3s1

Enfin je vais déployer Traefik avec l'aide de mon dépôt :

$ sudo apt install git -y
$ git clone https://github.com/lfache/awesome-traefik-kubernetes
$ cd awesome-traefik-kubernetes/traefik-kustomize-sample/production

Voici les éléments que vous devez modifier avant d'appliquer ces fichiers à votre environnement. Ces éléments doivent être changés dans traefik-kustomize-sample/production  :

Variable Fichier à modifier Example
email traefik-configmap.yaml foo.bar@mydomain.com
storage traefik-volumeclaim.yaml 20Gi

Enfin vous pouvez appliquez les configurations :

$ sudo kubectl apply -k ./

Nous voila prêt à déployer Portainer !

Déploiement

En réalité notre déploiement est presque déjà terminé ! 😀

Portainer.io fournit directement trois solutions pour un déploiement rapide du conteneur sous kubernetes :

  • Déploiement dans votre cluster et accès au travers d'un load balancer externe,
  • Accès à l'interface directement via le Node Port,
  • Enfin un déploiement via HELM.

Il existe un fichier YAML présent sur le dépôt de la bêta :

https://raw.githubusercontent.com/portainer/portainer-k8s/master/portainer.yaml

Je vais toutefois le modifier un peu ( vraiment un peu ! ) , pour l'intégration avec Traefik. Vous trouverez tout ceci dans mon dépôt git nommé awesome-traefik-kubernetes .

On va tout d'abord récupérer les fichiers YAML pour le déploiement :

$ git clone https://github.com/lfache/awesome-traefik-kubernetes
$ cd awesome-traefik-kubernetes/portainer.io

Enfin :

sudo kubectl apply -f portainer.yaml

Il ne me reste alors qu'à créer la route Ingress afin d’accéder à la ressource !

J'ai mis dans le dossier un exemple de route Ingress, pensez à modifier le fichier avec vos informations :

Variable Fichier à modifier Example
Host portainer-ingress.yaml portainer.mydomain.com

Ensuite appliquez la configuration :

$ sudo kubectl apply -f portainer-ingress.yaml

Vous pourrez alors accéder à votre interface : https://portainer.mydomain.com !

Voyons ensemble la première connexion à l'interface.

Exemple d'utilisation

Lors de la première connexion, il sera nécessaire de mettre un mot de passe sur l'interface :

password

Vous serez ensuite inviter à choisir votre environnement :

choose kubernetes

Nous allons bien évidemment sélectionner Kubernetes.

Ensuite vous allez pouvoir paramétrer votre cluster :

first dashboard

Puis je vais pouvoir déployer un service, par exemple nginx pour réaliser mon test de connexion :

add app
add nginx app

Je laisse la publication de l'application sur Internal. Et je vais renseigner le port sur lequel mon conteneur écoute, ici le port 80 pour l'image nginx.

Je n'ai trouvé aucune solution clé en main pour déployer la route Ingress de Traefik sans passer par un déploiement avancé pour gérer la route :

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: ingressroutetls-nginx
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`nginx.mydomain.com`)
    kind: Rule
    services:
    - name: nginx
      port: 80

Vous trouverez le bouton dans la section Application :

advance deploy
advance deploy 2

Une fois appliquée, vous pourrez vérifier votre installation à l'adresse suivante ( exemple ) :

nginx

Portainer.io offre donc une interface facile à mettre en œuvre ( installation en quelques minutes maximum ) et qui vous permettra de gérer vos ressources Kubernetes en quelques clics.

Je vais être honnête, j'utilise moi même rarement ce type d'interface pour diverses raisons. Mais je trouve tout de même ces outils indispensables ! Pourquoi ?

Car aujourd'hui, tout le monde n'a pas le temps d'apprendre les moindres arcanes d'un environnement Docker ou Kubernetes. Ce type de solution permet de faciliter l'intégration de ces environnements et facilite la vie des développeurs et/ou des petites structures !

Pour le moment cette version est en bêta et ne propose pas encore les nombreux éléments qui font maintenant le charme de la version Docker, comme par exemple les templates d'applications. Mais je ne doute pas que l'application va évoluer et ainsi offrir de plus en plus d'options !

Même si il s'agit là d'une version bêta, cette version me laisse une très bonne impression et j'ai hâte de voir ce que la suite donnera !

En tout cas, j'espère que  cette présentation vous permettra de vous faire votre propre avis !

Et vous, utilisez-vous ce type d'interface afin de gérer vos environnements ? Ou au contraire êtes-vous plus perplexe quant à leur utilisation ?

P.S : Si vous souhaitez essayer l'installation en moins de 60 secondes, je vous invite à consulter l'excellent article sur le site de portainer.io :

https://www.portainer.io/2020/04/portainer-for-kubernetes-in-less-than-60-seconds/
En tout cas  n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter ! C'est toujours un plaisir d'avoir des retours ! 😘