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 | [email protected] |
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 :
Vous serez ensuite inviter à choisir votre environnement :
Nous allons bien évidemment sélectionner Kubernetes.
Ensuite vous allez pouvoir paramétrer votre cluster :
Puis je vais pouvoir déployer un service, par exemple nginx pour réaliser mon test de connexion :
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 :
Une fois appliquée, vous pourrez vérifier votre installation à l'adresse suivante ( exemple ) :
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 ! 😘