Pilotage de Kubernetes à l’aide d’Ansible
Objectifs du chapitre et prérequis
Kubernetes est un outil de gestion du cycle de vie de containers Docker. Ce dernier s’assure que les containers sont en bonne santé, qu’ils sont démarrés ou qu’ils utilisent la dernière version d’une application.
La mise en place de Kubernetes réclame énormément de savoir-faire. Pour la suite de l’exercice, tous les prérequis d’accès à un cluster devront avoir été remplis préalablement. Ces prérequis couvriront les aspects suivants :
-
Droits d’administrateur sur le cluster Kubernetes (ou au moins sur un espace de noms).
-
Présence du binaire kubectl préconfiguré pour l’accès au cluster.
Pour les lecteurs désireux d’approfondir sur ce sujet, n’hésitez pas à consulter le livre du même auteur dédié à Kubernetes, disponible aux Éditions ENI.
Une première partie couvrira un exemple simple de déploiement. Le reste du chapitre sera ensuite consacré à la création d’un opérateur Kubernetes. Ce mécanisme permet de définir de nouveaux types de ressources (bases de données, middleware de messagerie, etc.).
L’ensemble de ces exercices s’appuiera sur l’application Keycloak.
Introduction au déploiement d’éléments dans Kubernetes
1. Containers et pods
Pour fonctionner, Kubernetes s’appuie sur la notion de containers. Toutefois, il n’utilise pas directement ce mécanisme et fait appel à la notion de pods. Cette notion représente l’unité minimale de traitement sur laquelle Kubernetes s’appuie.
2. Mécanismes de déploiement dans Kubernetes
Les pods ne sont jamais créés directement. Ces derniers sont gérés à l’aide de ressources de plus haut niveau parmi lesquelles :
-
Les déploiements (objet Deployment) pour les containers applicatifs classiques.
-
Les ensembles à état (objet StatefulSet) pour les bases de données ou middlewares de messagerie.
-
Les ensembles de démons (objet DaemonSet) pour les agents de surveillance ou de gestion du réseau (à déployer sur tous les nœuds d’un cluster).
3. Déploiement de pods dans Kubernetes
a. À propos de Keycloak
Keycloak est un portail de gestion d’identités, une de ses caractéristiques étant de supporter de nombreux fournisseurs de type OAuth2 (Google, Facebook, LinkedIn). Il supporte également l’interfaçage avec des technologies plus traditionnelles comme un annuaire LDAP/Active Directory.
Pour en savoir plus sur ce programme, n’hésitez pas à consulter l’adresse suivante : https://www.keycloak.org/
b. Configuration de Keycloak
Red Hat fournit une image officielle de Keycloak sous le nom de quay.io/keycloak/keycloak. Pour la suite de l’exercice, la dernière version sera utilisée (20.0.0).
Au lancement...
Test de l’opérateur
1. Contexte
L’opérateur est terminé. Reste maintenant à le lancer. Pour cela, l’utilisateur va devoir réaliser les opérations suivantes :
-
Application des définitions de l’opérateur.
-
Construction de l’image de l’opérateur.
-
Déploiement de l’opérateur.
Ces opérations sont relativement nombreuses et complexes et sont source d’erreurs. Afin de simplifier au maximum les choses, l’utilisateur va aborder plusieurs techniques permettant de tester son opérateur sans nécessairement procéder au déploiement complet.
2. Définition du nouveau type d’objet
Un opérateur est conçu pour se lancer à l’intérieur d’un cluster Kubernetes. Toutefois, pour sa mise au point, il est souhaitable de le lancer directement depuis un poste de développement.
La première chose sera de créer l’objet CRD (Custom Resource Definition) afin de définir un nouveau type. L’opérateur viendra ensuite surveiller ce nouveau type : à chaque modification, création ou suppression, l’opérateur réalisera les opérations nécessaires.
Comme évoqué au préalable, cette définition est présente dans le fichier keycloak.eni-editions.com_keycloaks_crd.yaml dans le répertoire keycloak-operator/config/crd/bases.
Ci-dessous le contenu de ce fichier :
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: keycloaks.keycloak.eni-editions.com
spec:
group: keycloak.eni-editions.com ...
Déploiement de l’opérateur
1. Contexte
L’opérateur fonctionne correctement en dehors du cluster. Il est maintenant temps de procéder à son déploiement. Ce déploiement comprend les étapes suivantes :
-
Configuration du registre Docker.
-
Construction et publication de l’image de l’opérateur.
-
Déploiement de l’opérateur.
-
Test du déploiement.
À noter que pour la suite, l’utilisateur devra disposer d’un registre d’images Docker. Les exemples qui suivent s’appuieront sur le registre d’images de container quay.io. La configuration de cet espace de stockage ne sera pas abordée.
2. Configuration du registre Docker
Pour la suite, l’image sera stockée dans l’espace quay.io/yannig/keycloak-operator.
Afin de pouvoir déposer l’image, il est nécessaire de se connecter au registre. Cette opération se fait à l’aide de la commande docker suivie des options suivantes :
-
L’instruction login.
-
L’option -u suivie du compte à utiliser.
-
L’option -p suivie du mot de passe de l’utilisateur.
-
Enfin, l’emplacement où se connecter.
Ci-dessous la commande à utiliser pour connecter l’utilisateur yannig au registre quay.io :
$ docker login -u="yannig" -p="my-password" quay.io
En cas de succès, la commande renverra la sortie suivante :
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/yannig/.docker/
config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/...