Vous avez découvert toutes les fonctionnalités proposées par Kubernetes et vous en êtes convaincu ?
C’est exactement ce qu’il vous faut pour votre site Web !
Mais maintenant, il faut se lancer. Et par où commencer quand on part de zéro ? Dans cet article, nous vous proposons un socle de base permettant de débuter sereinement avec une solution structurée, lisible et donc facile à maintenir. Attention, pour bien suivre cet article et surtout pour mettre en œuvre cette proposition, il est recommandé de bien avoir compris les notions de base de Kubernetes.
Les outils de base
Tout d’abord, voici les principaux outils que nous allons utiliser :
- kubectl
- helm (secrets/diff)
- sops
- helmfile
- git
Pour versionner facilement vos configurations et pouvoir suivre nos déploiements, nous utilisons helmfile qui permet, comme docker compose, de déclarer des environnements. C’est bien plus simple que de réécrire entièrement toutes les commandes helm (en re-spécifiant le namespace, le fichier values etc…) !
Architecture
Avec kubernetes, lorsqu’on démarre avec un cluster « vide », il n’y a de base que les pods servant à faire tourner les nœuds, tout ça dans les namespaces kube-*.
Afin de bien organiser nos ressources, nous utiliserons plusieurs namespaces comme reverse-proxy, monitoring, logging… Ce qui nous permettra d’accorder aisément des droits plus fins aux utilisateurs connectés au cluster.
Il faut donc commencer par découper nos configurations en plusieurs repositories git :
- Kubernetes Common :
Permet l’instanciation d’éléments devant être unique au cluster entier. On peut y retrouver notamment le kubernetes dashboard, le reverse-proxy, monitoring ou autres… - Kubernetes votre-site deployments :
Contient de quoi déployer les différents environnements de votre site. Si vous voulez livrer une nouvelle version de votre site, c’est via un commit dans ce repository que ça se passera. - Helm Chart frontend :
Celui-ci définira tous les composants nécessaires pour déployer votre site. Cela peut être lesdeployments, lesservices, lessecrets… - Helm Chart xxx :
Toutes vos autres chart personnalisées comme une api ou autre…
À quoi ça ressemble ?
Kubernetes common
On commence par un fichier helmfile.yaml qui contiendra la liste de nos releases helm. ex :
releases:
- name: traefik
chart: traefik/traefik
version: x.x.x
namespace: reverse-proxy
secrets:
- ./traefik.values.encrypted.yml
- name: cert-manager
chart: jetstack/cert-manager
version: x.x.x
namespace: reverse-proxy
values:
- ./cert-manager.values.yml
cert-manager.yaml
crds:
enabled: true
keep: true
En configurant nos values pour les différents outils, il ne reste plus qu’à exécuter la commande helmfile apply.
Il est parfois nécessaire d’inclure des données sensibles dans les fichiers values, comme une clé privée par exemple. On peut donc passer par le chiffrement de ces fichiers à l’aide sops et de helm secrets, ce qui permettra à helm de bien déchiffrer ces fichiers avant de les appliquer.
Kubernetes votre-site deployments
Ce fichier sera différent du common, car il aura une dimension de plus : l’environnement.
helmfile.yaml
environments:
preprod: {}
prod: {}
repositories:
- name: ma-stack
url: https://url-du-repo
releases:
- name: frontend
chart: ma-stack/frontend
version: 1.0.0
namespace: "{{ .Environment.Name }}"
secrets:
- ./{{ .Environment.Name }}/frontend.values.encrypted.yaml
- name: api
chart: ma-stack/api
version: 1.0.0
namespace: prod
secrets:
- ./prod/api.values.encrypted.yaml
- name: api
chart: ma-stack/api
version: 2.0.0
namespace: preprod
secrets:
- ./preprod/api.values.encrypted.yaml
Apporter la notion d’environnement à ce helmfile permet de déployer une version spécifique par environnement.
Dans cet exemple, la version 1.0.0 de la chart du frontend est déployée deux fois : une fois sur l’environnement de prod et l’autre sur l’environnement de preprod. La différence peut se jouer sur le fichier values qui contiendra des paramétrages différents en fonction de l’environnement cible.
Par exemple dans les fichiers values, on spécifie généralement le tag de l’image docker déployée, ce qui, dans ce cas, permet de déployer deux versions différentes du site sur chaque environnement.
Concernant l’api, celle-ci a une nouvelle version de la chart en preprod. Cela permet d’ajouter un nouvel élément kubernetes comme un nouveau service ou autre… D’où l’intérêt d’extraire la chart de votre front/api dans un autre repository.
Après tout ça, nous pouvons appliquer cette configuration avec helmfile apply et ça nous livre toutes les modifications nécessaires sur tous les environnements !
Ensuite ?
Avec cette répartition entre différents projets, il ne reste plus qu’à implémenter la CD.
Le déploiement de configurations pourra donc être automatique et nos repositories seront la source de vérité de l’état de votre cluster.
Dans votre chaine d’intégration, mettre à jour un applicatif consistera à faire un commit sur ces repositories.



