1. Livres et vidéos
  2. Kubernetes - Gérez la plateforme de déploiement de vos applications conteneurisées

Kubernetes Gérez la plateforme de déploiement de vos applications conteneurisées

  • Accès illimité 24h/24, 7J/7
  • Tous les livres en ligne, les vidéos et les cours enregistrés ENI
  • Plus de 10 nouveautés livres et vidéos chaque mois
  • Les nouveautés disponibles le jour de leur sortie
  • Accès 100% en ligne
  • En stock
  • Expédié en 24h00
  • Livraison à partir de 0,01 €
  • Version en ligne offerte
  • 1 h d'accès gratuit à tous nos livres et vidéos pour chaque commande
  • Accessible immédiatement
  • Version HTML
  • Accès illimité 24h/24, 7J/7

Présentation

Ce livre s'adresse aux administrateurs système qui souhaitent maîtriser le déploiement de Kubernetes et comprendre en quoi il répond aux nouveaux enjeux informatiques liés à l'arrivée des containers. Le lecteur découvre ainsi les différentes fonctionnalités de Kubernetes qui lui permettront de gérer des containers et leur cycle de vie et de mettre en place toutes les briques indispensables à un cluster de production.

Pour appréhender au mieux la lecture de ce livre, des notions sur l'administration d'un système Linux, sur le principe de fonctionnement des couches réseau, sur l'utilisation de Git ainsi que la connaissance d'un environnement Cloud sont recommandées. Tout au long du livre, l'auteur s'appuie sur des exemples concrets pour aider le lecteur dans sa découverte de Kubernetes et dans l'assimilation des concepts étudiés.

Après l'installation de l'environnement et des outils indispensables pour suivre les exemples du livre, l'auteur familiarise le lecteur avec les concepts propres à Kubernetes tels que le cycle de vie d'un container, les pods, les services ou le tableau de bord. Au fur et à mesure, le lecteur découvre des concepts plus avancés comme la persistance des données, l'hébergement d'applications en cluster, la mise en place de réplications entre plusieurs pods, la gestion des briques internes de Kubernetes ou le gestionnaire de paquets Helm.

Puis l'auteur présente comment installer et configurer Kubernetes afin d'aider le lecteur à mettre en place un cluster, dans le cloud ou sur des machines classiques, avant de détailler l'exposition d'une application sur Internet, les polices réseaux, la sécurisation SSL, les montées en charge ou encore la surveillance applicative. Pour finir, le lecteur trouve dans les derniers chapitres une introduction au maillage de services avec Istio, ainsi que des informations sur la gestion des droits d'accès, sur la notion d'opérateur ou encore sur la gestion de l'application dans un système d'intégration continue.



Quizinclus dans
la version en ligne !
  • Testez vos connaissances à l'issue de chaque chapitre
  • Validez vos acquis

Table des matières

  • Avant-propos
    • 1. Présentation de Kubernetes
      • 1.1 Un peu d’histoire
      • 1.2 Qu’est-ce qu’un container ?
      • 1.3 Les containers avant Docker
      • 1.4 Pourquoi utiliser des containers ?
      • 1.5 Problèmes introduits avec les containers
      • 1.6 À quoi va servir Kubernetes ?
      • 1.7 Ressources externes
    • 2. Un mot sur l’application
      • 2.1 Rien ne sert de courir
      • 2.2 Les douze facteurs applicatifs
      • 2.3 Microservices vs Monolithes
  • Introduction
    • 1. Cibles et objectifs de l’ouvrage
    • 2. Prérequis techniques et ressources documentaires
      • 2.1 Prérequis techniques
      • 2.2 Ressources documentaires
      • 2.3 Récupération des fichiers d’exemples
    • 3. Présentation générale
      • 3.1 Prérequis
      • 3.2 Utilisation de Kubernetes
      • 3.3 Installation et configuration de Kubernetes
      • 3.4 Extension du cluster Kubernetes et notions avancées
      • 3.5 Déploiement et intégration continue
      • 3.6 Conventions utilisées
  • Installation de l’environnement Kubernetes
    • 1. Objectifs du chapitre et prérequis
    • 2. Alternative à l’installation en local
      • 2.1 Pourquoi ces alternatives ?
      • 2.2 Utilisation d’un service managé
      • 2.3 Service Katacoda
    • 3. Mise en place de la commande kubectl
      • 3.1 À quoi sert kubectl ?
      • 3.2 Installation de kubectl
        • 3.2.1 Installation sous Debian/Ubuntu
        • 3.2.2 Installation sous CentOS/RHEL ou Fedora
      • 3.3 Vérification de l’installation
      • 3.4 Configuration de l’autocomplétion
        • 3.4.1 Présentation du mécanisme d’auto-complétion
        • 3.4.2 Fichier profile à modifier
        • 3.4.3 Autocomplétion sur kubectl
        • 3.4.4 Utilisation de la variable SHELL
    • 4. Mise en place de Minikube
      • 4.1 Pourquoi faire appel à Minikube ?
      • 4.2 Téléchargement et installation de Minikube
      • 4.3 Vérification de l'installation de Minikube
      • 4.4 Mise en place de l’auto-complétion
    • 5. Installation du cluster Kubernetes avec Minikube
      • 5.1 Choix de l’hyperviseur
      • 5.2 Préparation de l’hyperviseur VirtualBox
        • 5.2.1 Installation de VirtualBox
      • 5.3 Préparation de l’hyperviseur KVM/libvirt
        • 5.3.1 Installation de KVM et libvirt
        • 5.3.2 Installation du driver KVM pour Minikube
      • 5.4 Configuration de l’utilisateur courant
      • 5.5 Déploiement du cluster avec Minikube
        • 5.5.1 Création de la machine Minikube
        • 5.5.2 Arrêt/démarrage de la machine Minikube
        • 5.5.3 Container runtime alternatif
        • 5.5.4 Extensions de Minikube
        • 5.5.5 Suppression de la machine Minikube
    • 6. Quelques notions sur le format YAML
      • 6.1 Déclaration de couples clés/valeurs
      • 6.2 Les tableaux en YAML
      • 6.3 Les structures clé/valeur ou table de hachage
      • 6.4 Tableau de table de hachage
  • Tableau de bord et ligne de commande
    • 1. Objectifs du chapitre et prérequis
    • 2. Préambule
      • 2.1 Origine du nom et du logo
      • 2.2 Pourquoi utiliser Kubernetes ?
      • 2.3 Origine de Kubernetes
      • 2.4 Fondation CNCF
      • 2.5 Les orchestrateurs du marché
    • 3. Le tableau de bord de Kubernetes (dashboard)
      • 3.1 Présentation
      • 3.2 Tableau de bord Kubernetes sur service managé
      • 3.3 Déploiement du dashboard sur Minikube
      • 3.4 Accès au dashboard sur Minikube
      • 3.5 Structure du tableau de bord
      • 3.6 Création d’un déploiement
        • 3.6.1 Un petit mot sur MailHog
        • 3.6.2 Lancement du déploiement
      • 3.7 État d’un déploiement
        • 3.7.1 Consultation de l’état du déploiement
        • 3.7.2 Consultation du gestionnaire de réplicats
        • 3.7.3 Consultation de l’état d’un pod
        • 3.7.4 Journal d’activité du container
        • 3.7.5 Scalabilité
        • 3.7.6 Mise à jour de l’application
        • 3.7.7 Pour résumer
    • 4. Présentation de l’outil kubectl
      • 4.1 Préambule
      • 4.2 Consultation des éléments
      • 4.3 Liste des pods
      • 4.4 Liste des machines d’un cluster
        • 4.4.1 Connexion à la machine Minikube
        • 4.4.2 Liste des nœuds d’un cluster
        • 4.4.3 Affichage des caractéristiques étendues
    • 5. Le moteur Docker de Minikube
      • 5.1 Initialisation de l'environnement
      • 5.2 Installation de Docker
      • 5.3 Vérification de la communication avec le moteur Docker
      • 5.4 Les containers associés aux pods
  • Automatisation et publication d’une application
    • 1. Objectifs du chapitre et prérequis
    • 2. Gestion par kubectl d’une application
      • 2.1 Suppression d’un déploiement
      • 2.2 Création d’un déploiement
      • 2.3 État du déploiement
      • 2.4 Mécanisme des réplicats
        • 2.4.1 Consultation des réplicats
        • 2.4.2 Description des réplicats
      • 2.5 État du pod
        • 2.5.1 Liste des pods
        • 2.5.2 Détails de l’état d’un pod
      • 2.6 Accès aux logs des containers
      • 2.7 Accéder à l’application MailHog
    • 3. Exposition de services
      • 3.1 Pourquoi utiliser un service ?
      • 3.2 Exposition d’un déploiement via un service
      • 3.3 Vérification du service mailhog
      • 3.4 Que faire en cas d’absence de shell ?
      • 3.5 Résilience et scalabilité
        • 3.5.1 Origine du besoin
        • 3.5.2 Scalabilité manuelle
        • 3.5.3 Nombre de pods associés à un déploiement
        • 3.5.4 Arrêter temporairement une application
    • 4. Automatisation de déploiement par fichier YAML
      • 4.1 Mécanisme de création et mise à jour
      • 4.2 Structure YAML d’un déploiement
        • 4.2.1 Quelques rappels
        • 4.2.2 Récupération d’une structure au format YAML
        • 4.2.3 Édition d’un déploiement
        • 4.2.4 Squelette pour un déploiement
        • 4.2.5 Création d’un déploiement à l’aide d’un fichier
        • 4.2.6 Suppression des éléments d’un fichier
        • 4.2.7 Gestion de l’idempotence et de la réentrance
      • 4.3 Création du service
        • 4.3.1 Définition du service
        • 4.3.2 Application de la définition du service
        • 4.3.3 Gestion de la réentrance
      • 4.4 Mécanisme de sélecteur et labels
      • 4.5 Regroupement de la création des éléments
        • 4.5.1 Création d’un groupe d’objets
        • 4.5.2 Consultation de l’état d’un groupe d’objets
      • 4.6 Structure des objets
        • 4.6.1 Interrogation de Kubernetes avec kubectl
        • 4.6.2 Référence de l’API en ligne
    • 5. Ingress et reverse proxy
      • 5.1 Origine du besoin
      • 5.2 Activation du contrôleur Ingress dans Minikube
      • 5.3 Déclaration d’une règle Ingress
      • 5.4 Consultation des règles Ingress
      • 5.5 Désactivation de la redirection HTTP vers HTTPS
      • 5.6 Hôte virtuel et nip.io
        • 5.6.1 Hôte virtuel par défaut
        • 5.6.2 Présentation du mécanisme de nip.io
        • 5.6.3 Création d’un hôte virtuel pour mailhog
  • Cycle de vie d’un container dans Kubernetes
    • 1. Objectifs du chapitre et prérequis
    • 2. Gestion des crashs d’application
      • 2.1 Consultation de l'état des pods
      • 2.2 Connexion au pod
      • 2.3 Container associé à MailHog
      • 2.4 Comportement en cas de crash
      • 2.5 État du container après redémarrage du pod
      • 2.6 Container vu depuis Docker (Minikube)
      • 2.7 Attention au nettoyage
    • 3. État d’un container
      • 3.1 Pourquoi scruter l’état d’un container ?
      • 3.2 Readiness vs Liveness
      • 3.3 Utilisation et bonne pratique
      • 3.4 Structure des champs de surveillance
      • 3.5 Vérification de la présence d’un port
        • 3.5.1 Définition de la surveillance
        • 3.5.2 Test d’indisponibilité sur un pod non prêt
        • 3.5.3 État des pods en cas d’indisponibilité
        • 3.5.4 Test d’indisponibilité sur un pod en mauvaise santé
        • 3.5.5 État des pods en cas de problème sur un pod
        • 3.5.6 Attention à la consistance des tests
        • 3.5.7 Uniformisation des tests
      • 3.6 Surveillance HTTP
        • 3.6.1 Pourquoi privilégier ce type de surveillance ?
        • 3.6.2 Surveillance de l’application MailHog
      • 3.7 Point d’entrée de surveillance HTTP d’une application
        • 3.7.1 Un mot sur les frameworks modernes
        • 3.7.2 Présentation de l’application Flask
        • 3.7.3 Exemple de déclaration
        • 3.7.4 Déploiement de l’application Flask
        • 3.7.5 Consultation de l’état de l’application
      • 3.8 Lancement d’un shell
        • 3.8.1 Principe de fonctionnement
        • 3.8.2 Exemple de surveillance d’une base Postgres
        • 3.8.3 Déclaration de la commande
    • 4. Définition de la capacité d’un pod
      • 4.1 Pourquoi définir une capacité ?
      • 4.2 Réservation et surallocation
      • 4.3 Allocation de ressources à un container
      • 4.4 Allocation de ressources à l’application MailHog
      • 4.5 Comportement en cas de saturation des ressources
        • 4.5.1 Demande trop importante de CPU
        • 4.5.2 Dépassement de la mémoire allouée
      • 4.6 Priorité d’un pod
        • 4.6.1 Présentation du mécanisme
        • 4.6.2 Consultation des types par défaut
        • 4.6.3 Consultation des priorités des pods
        • 4.6.4 Création d’une classe de priorité
        • 4.6.5 Affectation d’une classe de priorité personnalisée
        • 4.6.6 Remarque sur les classes de priorité par défaut
  • Persistance des données
    • 1. Objectifs du chapitre et prérequis
    • 2. Persistance des données
      • 2.1 Origine du besoin
      • 2.2 Utilisation d’un volume persistant externe
      • 2.3 Volumes persistants
        • 2.3.1 Structure du volume persistant
        • 2.3.2 Création du volume persistant
      • 2.4 Persistance de données avec MailHog
        • 2.4.1 Opérations à réaliser
        • 2.4.2 Déclaration de l’objet PersistentVolumeClaim
        • 2.4.3 État des objets de volume persistant
        • 2.4.4 État de la demande de volume persistant
        • 2.4.5 Déclaration du point de montage
        • 2.4.6 Ajout d’un point de montage sur le container
        • 2.4.7 Options de lancement de MailHog
        • 2.4.8 Déclaration entière suite aux modifications
      • 2.5 Test de la persistance
        • 2.5.1 Installation de mhsendmail
        • 2.5.2 Ouverture de la communication avec le port SMTP
        • 2.5.3 Envoi d’un mail
        • 2.5.4 Droits du répertoire de persistance des données
        • 2.5.5 Consultation de l’interface MailHog
        • 2.5.6 Suppression des pods
        • 2.5.7 Vérification du fonctionnement de la persistance
    • 3. Classes de stockage
      • 3.1 Origine du besoin
      • 3.2 Liste des classes de stockage
      • 3.3 Détail d’une classe de stockage
      • 3.4 Classe de stockage par défaut
      • 3.5 Les différentes classes de stockage
        • 3.5.1 Les différentes familles
        • 3.5.2 Origine de ces familles
      • 3.6 Caractéristiques des classes de stockage
        • 3.6.1 Modes d’accès
        • 3.6.2 Caractéristiques de certains pilotes
        • 3.6.3 Liste des pilotes chargés
      • 3.7 Déclaration d’une classe de stockage
        • 3.7.1 Structure de la déclaration
        • 3.7.2 Exemple de déclaration
      • 3.8 Test de création automatique d’un volume persistant
  • Hébergement d’application en cluster
    • 1. Objectifs du chapitre et prérequis
    • 2. Déploiement d’une base de données MariaDB
      • 2.1 Origine du besoin
      • 2.2 Déploiement
        • 2.2.1 Choix de l’image Docker
        • 2.2.2 Version initiale du fichier de déploiement
        • 2.2.3 Gestion de la réentrance
      • 2.3 Volume persistant
        • 2.3.1 Demande de volume persistant
        • 2.3.2 État de la demande de volume persistant
        • 2.3.3 Ajout d’une persistance sur le container de MariaDB
        • 2.3.4 Consultation de l'état du déploiement
      • 2.4 Configuration de la base de données
      • 2.5 Consultation de l’état du pod
        • 2.5.1 Liste des pods
        • 2.5.2 Connexion au container
      • 2.6 Surveillance de la base de données
        • 2.6.1 Définition des commandes de surveillance
        • 2.6.2 Application de la modification
        • 2.6.3 Vérification du déploiement
      • 2.7 Mécanisme de déploiement
    • 3. Mise en place d’un StatefulSet
      • 3.1 Augmentation du nombre de pods associés au déploiement
      • 3.2 Présentation du type StatefulSet
        • 3.2.1 Caractéristiques
        • 3.2.2 Limitations
      • 3.3 Déclaration du premier objet StatefulSet
        • 3.3.1 Purge de l’ancien déploiement
        • 3.3.2 Modifications à réaliser
        • 3.3.3 Création du StatefulSet
        • 3.3.4 État des volumes persistants
        • 3.3.5 Suppression des anciens objets PV/PVC
      • 3.4 Scalabilité de l’objet StatefulSet
      • 3.5 Pods et volumes persistants d’un objet StatefulSet
      • 3.6 Réduction de la taille du StatefulSet
    • 4. Base et compte de test
      • 4.1 Variables d’environnement du container
      • 4.2 ConfigMap et secret
        • 4.2.1 Pourquoi y faire appel ?
        • 4.2.2 Structure d’un objet ConfigMap
        • 4.2.3 Déclaration d’un objet Secret
        • 4.2.4 Rattachement au container
  • Mise en place d’une réplication entre pods
    • 1. Objectifs du chapitre et prérequis
    • 2. Synchronisation des pods MariaDB
      • 2.1 Exposition de la problématique
      • 2.2 Principe de fonctionnement de la synchronisation
        • 2.2.1 Opérations à réaliser
        • 2.2.2 Nombre de réplicats
      • 2.3 Identifiants des serveurs
        • 2.3.1 Connexion aux pods
        • 2.3.2 Connexion à la base de données
        • 2.3.3 Identifiants des serveurs
        • 2.3.4 ID du maître
        • 2.3.5 Création du compte de réplication sur le maître
        • 2.3.6 Configuration de l’esclave
      • 2.4 Activation de la synchronisation
        • 2.4.1 Activer les journaux pour la réplication
        • 2.4.2 Commande docker-entrypoint.sh
        • 2.4.3 Consultation de l’état du maître
        • 2.4.4 Configuration de l’esclave
      • 2.5 Test de la réplication
        • 2.5.1 Connexion au maître
        • 2.5.2 Création d’une table
        • 2.5.3 Connexion à l’esclave
    • 3. Automatisation de la synchronisation
      • 3.1 Scripts de démarrage et synchronisation
        • 3.1.1 Script de démarrage
        • 3.1.2 Configuration de la synchronisation
        • 3.1.3 Scripts SQL additionnels
        • 3.1.4 Script d’arrêt de la base
      • 3.2 Scripts et objet ConfigMap
      • 3.3 Création du ConfigMap
      • 3.4 Montage du ConfigMap
        • 3.4.1 Référencement du ConfigMap dans la liste des volumes
        • 3.4.2 Point de montage du ConfigMap
      • 3.5 Démarrage et arrêt du container
        • 3.5.1 Commande de démarrage
        • 3.5.2 Commande d’arrêt de la base
      • 3.6 Résumé des modifications
      • 3.7 État du déploiement
        • 3.7.1 État des pods
        • 3.7.2 Journaux d’activité du pod esclave
        • 3.7.3 Test de la synchronisation
        • 3.7.4 Vérification du fonctionnement de la synchronisation
  • Gestion des briques internes de Kubernetes
    • 1. Objectifs du chapitre et prérequis
    • 2. Espace de noms kube-system
      • 2.1 Pods présents dans l’espace de noms kube-system
      • 2.2 CoreDNS
      • 2.3 etcd
      • 2.4 Le gestionnaire d’extensions de Minikube
      • 2.5 Le serveur d'API
      • 2.6 Le proxy Kubernetes (kube-proxy)
      • 2.7 Le gestionnaire de tâches (scheduler)
      • 2.8 Le gestionnaire de contrôle (controller manager)
      • 2.9 Kubelet
    • 3. Configuration des serveurs maîtres
      • 3.1 Principe de lancement des pods système
      • 3.2 Contenu du répertoire /etc/kubernetes/manifests
      • 3.3 Contenu des fichiers
      • 3.4 Désactivation d’un pod système
      • 3.5 Réactivation du pod système
    • 4. Monitoring des containers du cluster avec Glances
      • 4.1 Origine du besoin
      • 4.2 Consultation des DaemonSets
      • 4.3 Présentation de Glances
      • 4.4 Définition du DaemonSet
        • 4.4.1 Structure de la déclaration
        • 4.4.2 Champ volumes
        • 4.4.3 Champ containers
      • 4.5 Création du DaemonSet
        • 4.5.1 Déclaration complète
        • 4.5.2 Création du DaemonSet
        • 4.5.3 Consultation des pods
      • 4.6 Annotations de tolérance
        • 4.6.1 Présentation du mécanisme
        • 4.6.2 Récupération des annotations taints
        • 4.6.3 Tolérances de lancement
        • 4.6.4 Modification du DaemonSet
      • 4.7 Connexion à Glances
  • Helm - Gestionnaire de package
    • 1. Objectifs du chapitre et prérequis
    • 2. Présentation de Helm
      • 2.1 Pourquoi faire appel à Helm ?
      • 2.2 Principe de fonctionnement
    • 3. Déploiement de Helm
      • 3.1 Installation du client Helm
      • 3.2 Consultation de la version de Helm
      • 3.3 Configuration du client Helm
      • 3.4 Initialisation de la partie serveur (Tiller) avec Helm 2.x
        • 3.4.1 Un mot sur la sécurité (Helm 2.x)
        • 3.4.2 Le compte de service de Tiller (Helm 2.x)
        • 3.4.3 Création du compte de service
        • 3.4.4 Attribution des droits d’administrateur au compte de service
        • 3.4.5 Initialisation de Tiller
      • 3.5 Suppression de Tiller (Helm 2)
    • 4. Déploiement d’une application avec Helm
      • 4.1 Déterminer le package à déployer
      • 4.2 Installation du package Wordpress
        • 4.2.1 Un peu de vocabulaire
        • 4.2.2 Installation avec Tiller
        • 4.2.3 Installation sans Tiller
      • 4.3 Corrections de l’installation
        • 4.3.1 Quelques remarques
        • 4.3.2 Spécification du nom et espace de noms
        • 4.3.3 Lancement de l’installation
        • 4.3.4 Mise à jour et réentrance
      • 4.4 Éléments déployés avec Helm
      • 4.5 Suppression d’un déploiement
      • 4.6 Annulation de la suppression
      • 4.7 Purge d’un chart Helm
    • 5. Cycle de vie d’une application déployée avec Helm
      • 5.1 Ouverture du port vers WordPress
      • 5.2 Connexion à WordPress
      • 5.3 Configuration d’un chart Helm
        • 5.3.1 Consultation des options d’un chart
        • 5.3.2 Configuration de la publication (Minikube)
      • 5.4 Historique de déploiement
      • 5.5 Retour arrière
      • 5.6 Portail Helm Hub
  • Contextes et outils tiers Kubernetes
    • 1. Objectifs du chapitre et prérequis
    • 2. Gestion des contextes avec kubectl
      • 2.1 Origine du besoin
      • 2.2 Lister les contextes
      • 2.3 Variable d’environnement KUBECONFIG
        • 2.3.1 Spécifier l’emplacement du fichier
        • 2.3.2 Spécifier plusieurs fichiers
      • 2.4 Changement de contexte
      • 2.5 Créer un contexte
      • 2.6 Supprimer un contexte
      • 2.7 Outils de gestion de contexte
        • 2.7.1 Présentation de kubectx et kubens
        • 2.7.2 Installation de kubectx et kubens
        • 2.7.3 Mise en place de l’autocomplétion
        • 2.7.4 Test des commandes
      • 2.8 Contexte dans le prompt utilisateur
        • 2.8.1 Pourquoi afficher le contexte ?
        • 2.8.2 Activation à l’aide de oh-my-zsh
        • 2.8.3 Activation avec bash
        • 2.8.4 Exemple d’affichage
      • 2.9 Changement des couleurs du terminal avec Konsole
        • 2.9.1 Principe de fonctionnement
        • 2.9.2 Création de la fonction
        • 2.9.3 Ajout de l’appel dans l’invite de commande
    • 3. Utilitaires Kubernetes
      • 3.1 K9s : interface texte de suivi
        • 3.1.1 Contexte
        • 3.1.2 Installation de k9s
        • 3.1.3 Lancement de k9s
      • 3.2 Kubespy : espionnage de l’activité
        • 3.2.1 Présentation de Kubespy
        • 3.2.2 Installation de Kubespy
        • 3.2.3 Observation d’un déploiement avec Kubespy
      • 3.3 Krew : gestionnaire d’extensions
        • 3.3.1 Présentation du mécanisme d’extensions
        • 3.3.2 Installation de Krew
        • 3.3.3 Test de l’extension
      • 3.4 Sniff : capture du trafic réseau d’un pod
        • 3.4.1 Principe de fonctionnement
        • 3.4.2 Installation de Sniff et Wireshark
        • 3.4.3 Lancement d’une séance de capture
      • 3.5 Kube Hunter : outil d’analyse du cluster
        • 3.5.1 Présentation de Kube Hunter
        • 3.5.2 Lancement de l’analyse
        • 3.5.3 Résultat de l’analyse
        • 3.5.4 Publication de rapports HTML
        • 3.5.5 Lancement à intervalles réguliers
  • Services managés Kubernetes
    • 1. Objectifs du chapitre et prérequis
    • 2. Service managé de Google : GKE
      • 2.1 Présentation du service Google
      • 2.2 Administration depuis la console Google
      • 2.3 Installation de la commande gcloud en local
        • 2.3.1 Installation sur Debian/Ubuntu
        • 2.3.2 Mise en place de l’autocomplétion
      • 2.4 Configuration de l'environnement
        • 2.4.1 Authentification auprès de Google Cloud
        • 2.4.2 Projet associé avec le contexte courant
        • 2.4.3 Activation de l’API
      • 2.5 Gestion du cluster GKE
        • 2.5.1 Consultation de la liste des clusters
        • 2.5.2 Versions et régions disponibles
      • 2.6 Création d’un cluster
        • 2.6.1 Options de création
        • 2.6.2 Lancement de la création du cluster
        • 2.6.3 Récupération du fichier d’accès au cluster
      • 2.7 Consultation du cluster
        • 2.7.1 Liste des nœuds
        • 2.7.2 Services démarrés
      • 2.8 Délégation des droits d’accès
        • 2.8.1 Configuration des accès
        • 2.8.2 Principe du mécanisme sous-jacent
      • 2.9 Configuration de Helm/Tiller 2.x
      • 2.10 Suppression d’un cluster GKE
    • 3. Service managé Microsoft Azure : AKS
      • 3.1 Présentation du service Azure
      • 3.2 Administration depuis la console Azure
        • 3.2.1 Présentation de la console
        • 3.2.2 Consultation du tableau de bord Kubernetes
      • 3.3 Installation de la commande az en local
        • 3.3.1 Installation sur Debian/Ubuntu
        • 3.3.2 Mise en place de l'autocomplétion
      • 3.4 Authentification auprès du service Azure
      • 3.5 Emplacement de déploiement
        • 3.5.1 Liste des emplacements
        • 3.5.2 Versions disponibles de Kubernetes
      • 3.6 Création d’un cluster
        • 3.6.1 Création d’un groupe de ressources
        • 3.6.2 Lancement de la création du cluster
        • 3.6.3 Récupération du fichier de connexion
        • 3.6.4 Zone DNS par défaut
      • 3.7 Consultation de la liste des clusters
      • 3.8 Délégation des droits d’accès
      • 3.9 Configuration de Helm/Tiller 2.x
      • 3.10 Suppression d’un cluster AKS
    • 4. Service managé d’Amazon : EKS
      • 4.1 Présentation du service Amazon AWS
      • 4.2 Introduction de la commande eksctl
      • 4.3 Configuration des accès Amazon
      • 4.4 Installation des binaires
        • 4.4.1 Installation d’eksctl à l’aide de snap
        • 4.4.2 Installation de l’outil aws cli
        • 4.4.3 Vérification de la communication avec AWS
      • 4.5 Création du cluster EKS
        • 4.5.1 Aide en ligne d’eksctl
        • 4.5.2 Options intéressantes à la création d’un cluster
        • 4.5.3 Lancement de la création du cluster
      • 4.6 Configuration des accès kubectl
      • 4.7 Installation de aws-iam-authenticator
      • 4.8 Délégation des droits d’accès
        • 4.8.1 Configuration des accès
        • 4.8.2 Principe du mécanisme sous-jacent
      • 4.9 Configuration de Helm/Tiller 2.x
      • 4.10 Suppression du cluster
    • 5. Accès en lecture-écriture multiple
      • 5.1 Origine du besoin
      • 5.2 Serveur NFS déployé dans Kubernetes
        • 5.2.1 Limitations
        • 5.2.2 Déploiement d’un serveur NFS
        • 5.2.3 Vérification du déploiement
        • 5.2.4 Test de création de volume persistant (PVC)
      • 5.3 Service managé Amazon : EFS
        • 5.3.1 Consultation des instances EFS
        • 5.3.2 Création d’une instance EFS
        • 5.3.3 Déploiement de la classe de stockage EFS
      • 5.4 Service managé Google : Filestore
        • 5.4.1 Consultation des instances Filestore
        • 5.4.2 Création d’une instance Filestore
      • 5.5 Classe de stockage NFS
        • 5.5.1 Installation du chart
        • 5.5.2 Vérification de l'installation du chart
        • 5.5.3 Test de création d’une demande de volume persistant (PVC)
      • 5.6 Classe de stockage Azure
  • Installation de Kubernetes en interne
    • 1. Objectifs du chapitre et prérequis
    • 2. Installation à l’aide de Kubespray
      • 2.1 Origine du besoin
      • 2.2 Pourquoi Kubespray ?
      • 2.3 Principe de Kubespray
      • 2.4 Prérequis des machines à administrer avec Ansible
        • 2.4.1 Échange de clés SSH
        • 2.4.2 Escalade de droits sudo
      • 2.5 Structure du cluster
        • 2.5.1 Architecture du cluster Kubespray
        • 2.5.2 Groupes de machines
      • 2.6 Préparation des éléments d’installation
        • 2.6.1 Clonage du dépôt Git
        • 2.6.2 Installation des prérequis
      • 2.7 Préparation de l’inventaire Ansible
        • 2.7.1 Qu’est-ce qu’un inventaire ?
        • 2.7.2 Fichier d’inventaire d’exemple
        • 2.7.3 Test de la communication Ansible/SSH
      • 2.8 Installation du cluster
        • 2.8.1 Configuration du cluster
        • 2.8.2 Lancement de l’installation
        • 2.8.3 Mise à jour du cluster
      • 2.9 Accès au cluster
        • 2.9.1 Configuration de l’accès au cluster
        • 2.9.2 Utilisation d’un répartiteur de charge
        • 2.9.3 Vérification de la communication avec le cluster
    • 3. Environnement embarqué avec k3s
      • 3.1 Présentation et but du projet
      • 3.2 Installation de k3s
      • 3.3 Lancement de k3s
      • 3.4 Communication avec le cluster
  • Exposition des applications sur Internet
    • 1. Objectifs du chapitre et prérequis
    • 2. Gestion des entrées DNS
      • 2.1 Principe de fonctionnement
      • 2.2 Prérequis
      • 2.3 Retour sur le fonctionnement du domaine DNS nip.io
      • 2.4 Activation du service DNS
        • 2.4.1 Console Cloud DNS Google
        • 2.4.2 Service DNS Zones d’Azure
        • 2.4.3 Service Route 53 d’AWS
      • 2.5 Configuration DNS
        • 2.5.1 Opération à réaliser
        • 2.5.2 Console DNS OVH
        • 2.5.3 Vérification de la délégation
      • 2.6 Gestionnaire de DNS
        • 2.6.1 Présentation de la brique external-dns
        • 2.6.2 Création du compte d’administration DNS de Google Cloud
        • 2.6.3 Création du compte d’administration DNS service Azure
        • 2.6.4 Création du compte d’administration DNS Amazon (Route 53)
        • 2.6.5 Création d’un secret (Google et Azure)
        • 2.6.6 Déploiement d’external-dns
        • 2.6.7 Vérification du fonctionnement d’external-dns
    • 3. Exposition de services et répartition de charge
      • 3.1 Présentation du mécanisme
      • 3.2 Retour sur la notion de service
        • 3.2.1 Rôle d’un service
        • 3.2.2 Structure d’un service
        • 3.2.3 Type ClusterIP
        • 3.2.4 Type NodePort et LoadBalancer
        • 3.2.5 Type ExternalName
      • 3.3 Service associé au proxy inverse
    • 4. Le contrôleur Ingress
      • 4.1 Principe de fonctionnement
      • 4.2 Le rôle du contrôleur Ingress
      • 4.3 Structure d’une règle Ingress
      • 4.4 Droits nécessaires pour un contrôleur
    • 5. Le contrôleur Ingress Google
      • 5.1 Prérequis
      • 5.2 Présentation du contrôleur GLBC
      • 5.3 Déploiement de MailHog
        • 5.3.1 Préparation de la règle Ingress
        • 5.3.2 Déploiement de l’application MailHog
        • 5.3.3 Consultation de l’état de l’objet Ingress
        • 5.3.4 Consultation du journal d'activité d’external-dns
        • 5.3.5 Consultation de MailHog
    • 6. Le contrôleur Ingress Nginx
      • 6.1 Pourquoi changer de contrôleur Ingress ?
      • 6.2 Présentation du logiciel Nginx
      • 6.3 Installation d’Ingress Nginx sur GKE (Google)
        • 6.3.1 Détermination du chart Helm à installer
        • 6.3.2 Espace de noms et configuration du chart
      • 6.4 Utilisation du contrôleur
        • 6.4.1 Utilisation de l’annotation kubernetes.io/ingress.class
        • 6.4.2 Vérification du déploiement
      • 6.5 Annotations Ingress Nginx
    • 7. Le contrôleur Ingress Traefik
      • 7.1 Présentation de Traefik
      • 7.2 Installation du chart Helm
      • 7.3 Utilisation du nouveau contrôleur Ingress
        • 7.3.1 Sélectionner le contrôleur Ingress Traefik
        • 7.3.2 Création de la règle Ingress faisant appel à Traefik
        • 7.3.3 État des règles Ingress
      • 7.4 Tableau de bord de Traefik
      • 7.5 Annotations Ingress Traefik
  • Sécurisation : accès aux applications
    • 1. Objectifs du chapitre et prérequis
    • 2. Mise en place de Let’s Encrypt
      • 2.1 Présentation de Let’s Encrypt
      • 2.2 Installation du chart Helm cert-manager
        • 2.2.1 Présentation du chart Helm
        • 2.2.2 Prérequis avant installation
      • 2.3 L’émetteur de certificats (issuer)
        • 2.3.1 Principe du protocole ACME
        • 2.3.2 Structure de la déclaration d’un émetteur
        • 2.3.3 Exemple de déclaration Issuer Google
        • 2.3.4 Exemple de déclaration Issuer Azure
        • 2.3.5 Exemple de déclaration Issuer Amazon
        • 2.3.6 Limitations et certificats avec joker
      • 2.4 Exemples de déclarations
        • 2.4.1 Serveur Let’s Encrypt de test
        • 2.4.2 Serveur Let’s Encrypt de production
      • 2.5 Déclaration des certificats
        • 2.5.1 État des émetteurs de certificats
        • 2.5.2 Structure d’un certificat
        • 2.5.3 Certificat de test
        • 2.5.4 État du certificat
        • 2.5.5 Journal d’activité de cert-manager
        • 2.5.6 Consultation du secret
        • 2.5.7 Certificat de production
        • 2.5.8 Marche à suivre en cas de problèmes
      • 2.6 Rattachement du certificat à la règle Ingress
      • 2.7 Automatisation de la gestion des certificats
        • 2.7.1 Certificat par défaut du contrôleur Ingress Nginx
        • 2.7.2 Mécanisme d’annotations
        • 2.7.3 Émetteur de certificats par défaut
    • 3. Protection de l’accès aux applications
      • 3.1 Origine du besoin
      • 3.2 Mot de passe simple (HTTP basic)
        • 3.2.1 Principe de fonctionnement
        • 3.2.2 Création du secret à l’aide de htpasswd
        • 3.2.3 Import du secret
        • 3.2.4 Configuration de l’authentification
    • 4. Authentification basée sur OAuth2
      • 4.1 À propos du protocole OAuth2
      • 4.2 Principe de la solution
      • 4.3 Création d’un identifiant GitHub
      • 4.4 Déploiement du proxy
        • 4.4.1 À propos du proxy
        • 4.4.2 Configuration du chart Helm
        • 4.4.3 Déploiement du chart Helm
        • 4.4.4 État du déploiement
      • 4.5 Déclaration des règles Ingress
        • 4.5.1 Description des règles Ingress
        • 4.5.2 Annotations Ingress de MailHog
        • 4.5.3 Description Ingress du proxy OAuth
        • 4.5.4 Déclaration des règles Ingress
      • 4.6 Tests de connexion
      • 4.7 Restriction des accès
        • 4.7.1 Mécanisme d’autorisation
        • 4.7.2 Restriction par domaine e-mail
        • 4.7.3 Restriction par organisation GitHub
  • Polices réseau
    • 1. Objectifs du chapitre et prérequis
    • 2. Les polices réseau (network policies)
      • 2.1 Présentation du mécanisme
      • 2.2 Kubernetes Network Plugins
      • 2.3 Polices réseau sur services managés et installation maison
      • 2.4 Installation de Calico sur Minikube
        • 2.4.1 Activation de CNI sur Minikube
        • 2.4.2 Installation de Calico
      • 2.5 Connexions entrantes
        • 2.5.1 Test de la connexion en interne
        • 2.5.2 Bloquer les accès internes
        • 2.5.3 Test de la règle
      • 2.6 Connexions sortantes
        • 2.6.1 Test des connexions externes
        • 2.6.2 Restriction sur les règles sortantes
        • 2.6.3 Test de la règle
    • 3. Protection de l’application WordPress
      • 3.1 Contexte
      • 3.2 Déploiement de WordPress
      • 3.3 Restriction des accès
        • 3.3.1 Référencement de l’ensemble des flux
        • 3.3.2 Restriction de tous les accès
        • 3.3.3 Autorisation de l'accès du contrôleur Ingress sur WordPress
        • 3.3.4 Autorisation de l'accès entre WordPress et MariaDB
        • 3.3.5 Test des règles réseau
      • 3.4 Ressources externes
  • Montée en charge automatique
    • 1. Objectifs du chapitre et prérequis
    • 2. Le serveur de métriques
      • 2.1 Présentation de la brique metrics-server
      • 2.2 Activation du serveur de métriques
        • 2.2.1 Vérification de la présence du serveur de métriques
        • 2.2.2 Activation sous Minikube
        • 2.2.3 Activation sur Amazon EKS
      • 2.3 Consultation de la consommation des pods et des nœuds
        • 2.3.1 État des nœuds d’un cluster
        • 2.3.2 État des pods
    • 3. Activation de la montée en charge automatique
      • 3.1 Test avec l’application MailHog
      • 3.2 Lancement d’un bench
        • 3.2.1 Présentation d’Apache Bench
        • 3.2.2 Installation d'Apache Bench
        • 3.2.3 Lancement du test initial
      • 3.3 Gestion de la montée en charge
      • 3.4 Lancement du test
        • 3.4.1 Test à froid : montée en charge des pods
        • 3.4.2 Test à chaud
        • 3.4.3 Diminution du nombre de pods
    • 4. Scalabilité des nœuds d’un cluster
      • 4.1 Contexte
      • 4.2 Présentation de l’autoscaler
      • 4.3 Activation de l’autoscaler avec Google Cloud
      • 4.4 Activation de l'autoscaler avec Azure AKS
      • 4.5 Activation de l'autoscaler avec Amazon EKS
        • 4.5.1 Présentation du mécanisme de l’ASG
        • 4.5.2 Affichage des tags d’un groupe ASG
        • 4.5.3 Activation de l’autoscaler
        • 4.5.4 Vérification de l'activation du mécanisme de l’autoscaler
      • 4.6 Test de montée en charge
        • 4.6.1 Déploiement de WordPress
        • 4.6.2 Pods en attente de ressources
        • 4.6.3 État des nœuds
        • 4.6.4 Démarrage du pod
        • 4.6.5 Nettoyage des déploiements
  • Surveillance à l’aide de Prometheus
    • 1. Objectifs du chapitre et prérequis
    • 2. Mise en place de Prometheus
      • 2.1 À propos de Prometheus
      • 2.2 Fonctionnement de Prometheus
        • 2.2.1 Architecture de Prometheus
        • 2.2.2 Le moteur Prometheus
        • 2.2.3 Les exporteurs Prometheus
      • 2.3 Installation de Prometheus
        • 2.3.1 Choix du chart Prometheus
        • 2.3.2 Qu’est-ce qu’un opérateur ?
        • 2.3.3 Déploiement de l’opérateur Prometheus
        • 2.3.4 Pods démarrés
        • 2.3.5 Objets déploiements
        • 2.3.6 Nouvelles ressources Prometheus
        • 2.3.7 DaemonSet : node exporter
      • 2.4 Priorisation des briques de surveillance
        • 2.4.1 Problème de la surveillance
        • 2.4.2 Déclaration des classes de priorité
        • 2.4.3 Modification du déploiement de Prometheus
    • 3. Utilisation de Prometheus
      • 3.1 Fonctionnement des métriques
        • 3.1.1 Consultation des métriques de Prometheus
        • 3.1.2 Présentation de l’interface de Prometheus
        • 3.1.3 Métriques de Kubernetes
        • 3.1.4 Déclaration des points de collecte dans Kubernetes
        • 3.1.5 Consultation des points de collecte dans Prometheus
      • 3.2 Définition des alertes
        • 3.2.1 Consultation de la liste des alertes
        • 3.2.2 Structure d’une règle d’alerte
        • 3.2.3 Définition d’alertes
      • 3.3 Gestionnaire d’alertes
        • 3.3.1 Rôle du gestionnaire d’alertes
        • 3.3.2 Consultation du gestionnaire d’alertes
        • 3.3.3 Configuration des alertes
        • 3.3.4 Désactivation des alertes scheduler et manager (clusters managés)
        • 3.3.5 Configuration de l'envoi des notifications
        • 3.3.6 Adresse de l’API de Slack
    • 4. Tableaux de bord Grafana
      • 4.1 Présentation de Grafana
      • 4.2 Configuration de Grafana
        • 4.2.1 Branchement au moteur Prometheus
        • 4.2.2 Définition des tableaux de bord
      • 4.3 Interface Grafana
      • 4.4 Sécurisation de l'accès à Grafana
    • 5. Suppression du chart de Prometheus
  • Centralisation des journaux d’activité
    • 1. Objectifs du chapitre et prérequis
    • 2. Principe de la centralisation des journaux
      • 2.1 Architecture
      • 2.2 Caractéristiques de l’agent déployé
      • 2.3 Mécanisme de centralisation des journaux
    • 3. Centralisation dans le cloud
      • 3.1 Centralisation à l’aide d’un service managé
      • 3.2 Google Stackdriver
        • 3.2.1 Présentation de Stackdriver
        • 3.2.2 Pod Fluentd (cluster GKE)
        • 3.2.3 Consultation des journaux
      • 3.3 Azure Monitor
        • 3.3.1 Présentation d'Azure Monitor
        • 3.3.2 Consultation des journaux
      • 3.4 Amazon Cloudwatch
        • 3.4.1 Présentation de Cloudwatch
        • 3.4.2 Activation de Cloudwatch sur le centre de contrôle
        • 3.4.3 Configuration de Cloudwatch
        • 3.4.4 Création de la police de communication avec Cloudwatch
        • 3.4.5 Création d’un compte et rattachement à la police
        • 3.4.6 Création d’une clé d’accès
        • 3.4.7 Envoi des journaux dans Cloudwatch
        • 3.4.8 État des pods déployés
        • 3.4.9 Consultation des journaux dans Cloudwatch
    • 4. Centralisation des journaux avec Loki
      • 4.1 Présentation de Loki
        • 4.1.1 Origine de Loki
        • 4.1.2 Loki vs Elasticsearch
        • 4.1.3 Conseil d’utilisation
      • 4.2 Installation de Loki
      • 4.3 Configuration de la source de données Grafana
      • 4.4 Consultation des journaux dans Grafana
        • 4.4.1 Vérification des sources de données
        • 4.4.2 Consultation des journaux
    • 5. Centralisation des journaux avec Elasticsearch
      • 5.1 Avertissements et limitations
      • 5.2 À propos d’Elasticsearch
      • 5.3 Déploiement des briques Elasticsearch
        • 5.3.1 Installation d’Elasticsearch
        • 5.3.2 Installation de l’agent fluent-bit
        • 5.3.3 Installation de Kibana
        • 5.3.4 Installation de Cerebro
      • 5.4 État des différentes briques
        • 5.4.1 État du moteur Elasticsearch
        • 5.4.2 Agent fluent-bit
    • 6. Gestion d’Elasticsearch
      • 6.1 Accès à l’interface Cerebro
      • 6.2 Utilisation de Kibana
        • 6.2.1 Accéder à l’interface de Kibana
        • 6.2.2 Création de l’index
      • 6.3 Branchement sur Grafana
        • 6.3.1 Source de données Elasticsearch
        • 6.3.2 Création d’un objet ConfigMap
  • Maillage de services avec Istio
    • 1. Objectifs du chapitre et prérequis
    • 2. Présentation d'Istio
      • 2.1 Micro-services et mise en réseau de services
      • 2.2 Présentation d’Istio
      • 2.3 Principe de fonctionnement
    • 3. Installation d’Istio
      • 3.1 Configuration d'external-dns
      • 3.2 Dépôt des charts Istio
      • 3.3 Installation du chart istio-init
      • 3.4 Installation du chart Istio
        • 3.4.1 Activation des tableaux de bord
        • 3.4.2 Activation du mécanisme SDS
        • 3.4.3 Configuration d'Istio
        • 3.4.4 Installation d’Istio
      • 3.5 Configuration du gateway Istio
        • 3.5.1 Présentation du mécanisme
        • 3.5.2 Configuration du gateway
        • 3.5.3 Génération du certificat
    • 4. Utilisation d’Istio
      • 4.1 Injection de pods dans le maillage de services
        • 4.1.1 Installation d’istioctl
        • 4.1.2 Injection du sidecar à l’aide d’istioctl
        • 4.1.3 Injection du sidecar par annotation
        • 4.1.4 Désactivation du sidecar par annotation
      • 4.2 Déploiement d’une application de test
        • 4.2.1 Principe de l’exposition d’application avec Istio
        • 4.2.2 Préparation du fichier de déploiement MailHog
        • 4.2.3 Déclaration du service MailHog
        • 4.2.4 Création du gateway
        • 4.2.5 Création du service virtuel (VirtualService)
      • 4.3 Sécurisation des flux
        • 4.3.1 Activation de Mutual TLS (mTLS)
        • 4.3.2 Consultation des polices du service MailHog
        • 4.3.3 Forcer l’utilisation de mTLS
    • 5. Tableaux de bord
      • 5.1 Présentation des différentes briques
      • 5.2 Interface Kiali
      • 5.3 Interface Grafana
      • 5.4 Interface Jaeger
  • Compilation et stockage d’image Docker
    • 1. Objectifs du chapitre et prérequis
    • 2. Création d’une image Docker
      • 2.1 Application d’exemple Flask Healthcheck
        • 2.1.1 Présentation de l’application
        • 2.1.2 Présentation des dépendances
        • 2.1.3 Description des dépendances
        • 2.1.4 Installation des dépendances
        • 2.1.5 Initialisation de l’application
        • 2.1.6 Fonction racine
        • 2.1.7 Lancement du programme
      • 2.2 Environnement de compilation
      • 2.3 Le fichier Dockerfile
        • 2.3.1 Présentation du format
        • 2.3.2 Création de l’image
        • 2.3.3 Compilation et tag de l’image
        • 2.3.4 Authentification sur le registre d’images Docker
        • 2.3.5 Pousser l’image sur le registre
    • 3. Image Docker multi-étape (multi-stage)
      • 3.1 Origine du besoin
      • 3.2 Exemple de compilation avec Maven
    • 4. Analyse d’images
      • 4.1 Historique des commandes
      • 4.2 Analyse de l’image : Dive
        • 4.2.1 Présentation de Dive
        • 4.2.2 Installation de Dive
        • 4.2.3 Consultation du contenu d’une image
    • 5. Utilisation de registres Docker privés
      • 5.1 Origine du besoin
      • 5.2 Déploiement d’image d’un registre privé
        • 5.2.1 Exposition de la problématique
        • 5.2.2 Création du secret
        • 5.2.3 Utilisation du secret
        • 5.2.4 Recopie d’un secret entre espaces de noms
      • 5.3 Erreurs de récupération des images
        • 5.3.1 Détection des erreurs
        • 5.3.2 Erreur sur le nom de l’image
        • 5.3.3 Secret absent ou non spécifié
        • 5.3.4 Identifiants invalides
      • 5.4 Services de registres managés
        • 5.4.1 Solutions managées
        • 5.4.2 Service Google Container Registry
        • 5.4.3 GitLab.com
  • Usine logicielle
    • 1. Objectifs du chapitre et prérequis
    • 2. Compilation à l’aide de GitLab
      • 2.1 Application à compiler
      • 2.2 Mécanisme de pipeline GitLab
      • 2.3 Adresse et contenu du dépôt
      • 2.4 Structure du fichier .gitlab-ci.yml
      • 2.5 Exemple de fichier .gitlab-ci.yml de compilation d’image
      • 2.6 Pour la suite
    • 3. Déploiement continu avec Jenkins
      • 3.1 À propos de Jenkins
      • 3.2 Installation de Jenkins
        • 3.2.1 Configuration du chart
        • 3.2.2 Vérification de l’installation
        • 3.2.3 Connexion à l’interface de Jenkins
        • 3.2.4 Installation d’extensions
    • 4. Pipeline de déploiement continu avec Jenkins
      • 4.1 Prérequis
      • 4.2 Présentation du mécanisme de déploiement continu
      • 4.3 Stockage des identifiants Docker
      • 4.4 Création de l’environnement develop
      • 4.5 Création du pipeline
        • 4.5.1 Création du pod de compilation
        • 4.5.2 Squelette du pipeline de déploiement
        • 4.5.3 Récupération du code source
        • 4.5.4 Vérifications et tests
        • 4.5.5 Compilation de l’image Docker
        • 4.5.6 Connexion au registre et publication
        • 4.5.7 Mise à jour du déploiement de test
        • 4.5.8 Programme complet
      • 4.6 Lancement de la compilation
        • 4.6.1 Création du job
        • 4.6.2 Lancement du build
      • 4.7 Compte de service
        • 4.7.1 Opérations à réaliser
        • 4.7.2 Création d’un compte de service
        • 4.7.3 Création du rôle de mise à jour
        • 4.7.4 Affectation du rôle au compte de service
        • 4.7.5 Affectation du compte de service
        • 4.7.6 Relance de la compilation
      • 4.8 Mécanisme de Webhook
        • 4.8.1 Présentation du mécanisme
        • 4.8.2 Déclenchement du Webhook
        • 4.8.3 Création du Webhook
    • 5. Un mot sur Jenkins X
  • Packager son application avec Helm
    • 1. Objectifs du chapitre et prérequis
    • 2. Helm
      • 2.1 Origine du besoin
      • 2.2 Création d’un chart
      • 2.3 Contenu d’un package
        • 2.3.1 Structure d’un package
        • 2.3.2 Variables .Values, .Chart et .Release
      • 2.4 Adaptation à l’application MailHog
        • 2.4.1 Résumé des travaux à réaliser
        • 2.4.2 Utilisation de l’image de MailHog
        • 2.4.3 Correction sur les ports de service
        • 2.4.4 Ajout d’un ConfigMap
        • 2.4.5 Ajout du volume persistant
        • 2.4.6 Montage du volume dans le container
        • 2.4.7 Test de déploiement
      • 2.5 Dépendances
        • 2.5.1 Déclaration des dépendances
        • 2.5.2 Récupération des dépendances
        • 2.5.3 Déploiement du chart avec les dépendances
    • 3. Template Go
      • 3.1 Principe de fonctionnement
      • 3.2 Substitution du contenu d’une variable
      • 3.3 Blocs conditionnels
      • 3.4 Gestion des conditions
        • 3.4.1 Les valeurs de vrai ou faux
        • 3.4.2 Opérateurs de comparaison
        • 3.4.3 Conditions multiples et négation
      • 3.5 Itération
        • 3.5.1 Affichage du contenu d’un tableau
        • 3.5.2 Suppression des sauts de lignes surnuméraires
        • 3.5.3 Itération sur un groupe fixe d’éléments
        • 3.5.4 Itération sur un tableau de hachage
        • 3.5.5 Accéder à une variable globale depuis une boucle
      • 3.6 Filtres
      • 3.7 Valeurs par défaut
      • 3.8 Fonction template
        • 3.8.1 Exemple de définition de fonction
        • 3.8.2 Passage de paramètres et contexte global
      • 3.9 Redéploiement sur changement de configuration
        • 3.9.1 Exposition de la problématique
        • 3.9.2 Principe de la solution
        • 3.9.3 Exemple d’implémentation
  • Restriction et délégation d’accès
    • 1. Objectifs du chapitre et prérequis
    • 2. Mise en place de quotas
      • 2.1 Origine du besoin
      • 2.2 Quotas par défaut sur un espace de noms
        • 2.2.1 Création d’un espace de noms
        • 2.2.2 Structure d’un objet LimitRange
        • 2.2.3 Exemple de définition de limitations
        • 2.2.4 Vérification de l’application des limitations
        • 2.2.5 Test du mécanisme
        • 2.2.6 Analyse du problème
      • 2.3 Quotas globaux sur un espace de noms
        • 2.3.1 Présentation des quotas de ressources (ResourceQuota)
        • 2.3.2 Structure d’un quota de ressources
        • 2.3.3 Exemples de restriction de consommation CPU et mémoire
        • 2.3.4 Champs pour positionner des limitations (champ hard)
        • 2.3.5 Test du mécanisme
        • 2.3.6 Nettoyage en fin d’exercice
    • 3. Authentification et autorisation
      • 3.1 Origine du besoin
      • 3.2 Prérequis
      • 3.3 Activation des accès anonymes
        • 3.3.1 Activation des accès anonymes sur Minikube
        • 3.3.2 Création du fichier d’accès
        • 3.3.3 Affectation des droits en lecture
        • 3.3.4 Suppression des droits d’accès anonymes
      • 3.4 Principe de l’authentification par certificat
      • 3.5 Problème de la révocation des certificats
      • 3.6 Génération du certificat
        • 3.6.1 Création de la clé et du certificat client
        • 3.6.2 Emplacement de la PKI
        • 3.6.3 Signature du certificat
      • 3.7 Authentification par certificat
        • 3.7.1 Récupération des informations de connexion au cluster
        • 3.7.2 Utilisation du certificat pour l’authentification
        • 3.7.3 Test de la connexion
      • 3.8 Quelques exemples d’erreurs de manipulation
        • 3.8.1 Problème d’autorité de certification
        • 3.8.2 Problème de couple clé/certificat
        • 3.8.3 Pas d’identifiant renseigné
        • 3.8.4 Utilisation de la demande de certificat à la place du certificat
      • 3.9 Attributions de droits administrateur sur le cluster
        • 3.9.1 Contexte et opérations à réaliser
        • 3.9.2 Affectation des droits administrateur à un utilisateur
        • 3.9.3 Test du nouvel administrateur
        • 3.9.4 Création de nouveaux utilisateurs
        • 3.9.5 Affectation des droits administrateur à un groupe
        • 3.9.6 Administrateur d’un espace de noms
    • 4. Mécanismes d’authentification externes
      • 4.1 Présentation du mécanisme
      • 4.2 Communication entre le fournisseur OAuth2 et le cluster
      • 4.3 Création des identifiants
      • 4.4 Modification des options de démarrage (Minikube)
      • 4.5 Configuration des accès clients
        • 4.5.1 Présentation de l’outil k8s-oidc-helper
        • 4.5.2 Installation du compilateur Go
        • 4.5.3 Installation de k8s-oidc-helper
        • 4.5.4 Génération des identifiants d’accès
        • 4.5.5 Renseignement du cluster et contexte
        • 4.5.6 Test de connexion
      • 4.6 Attribution des droits d’accès
  • Les opérateurs Kubernetes
    • 1. Objectifs du chapitre et prérequis
    • 2. Utilisation des opérateurs
      • 2.1 Présentation du principe
      • 2.2 L’opérateur de Prometheus
        • 2.2.1 Retour sur le chart prometheus-operator
        • 2.2.2 Structure d’un objet Prometheus
      • 2.3 Ressources externes sur les opérateurs existants
      • 2.4 Présentation de l’opérateur MySQL
        • 2.4.1 Justification du choix de MySQL
        • 2.4.2 Choix de l’opérateur
      • 2.5 Déploiement de l’opérateur
      • 2.6 Création d’une instance MysqlCluster
        • 2.6.1 Création d’un secret pour l’instance MysqlCluster
        • 2.6.2 Création du cluster
      • 2.7 Objets créés au déploiement du cluster
        • 2.7.1 Volumes persistants
        • 2.7.2 Services MySQL
      • 2.8 Tableau de bord de l’opérateur
      • 2.9 Test de la réplication
        • 2.9.1 Connexion aux instances maître et esclave
        • 2.9.2 Création d’une table
        • 2.9.3 Alimentation de la table
        • 2.9.4 Changement du nombre de réplicats
      • 2.10 Pour conclure
  • Annexes
    • 1. bash vs zsh
      • 1.1 Les shells Unix
      • 1.2 zsh et oh-my-zsh
      • 1.3 Tester zsh et oh-my-zsh
      • 1.4 Configurer zsh comme shell pour l’utilisateur courant
    • 2. Déploiement du tableau de bord Kubernetes
      • 2.1 Installation du tableau de bord (application dashboard)
      • 2.2 Création du compte d’accès
      • 2.3 Récupération du jeton de connexion
      • 2.4 Décodage du contenu du jeton
      • 2.5 Connexion au tableau de bord
      • Index

Auteur

Yannig PERRÉEn savoir plus

Administrateur système depuis de nombreuses années, Yannig PERRÉ est aujourd'hui spécialiste de la gestion d'applications développées en microservices à l'aide de containers. Il associe naturellement à ce savoir-faire différents outils pour gérer les problématiques d'installation, de résilience, de scalabilité ainsi que de publication des applications sur Internet. Associée à sa longue expérience du monde open source, cette expertise lui permet de transmettre aux lecteurs des livres réellement efficaces sur la mise en œuvre de Kubernetes ou d'Ansible.

Revue de presse

par xavki08/12/2019

Caractéristiques

  • Niveau Expert
  • Nombre de pages 771 pages
  • Parution octobre 2019
    • Livre (broché) - 17 x 21 cm
    • ISBN : 978-2-409-02106-0
    • EAN : 9782409021060
    • Ref. ENI : EPKUB
  • Niveau Expert
  • Parution octobre 2019
    • HTML
    • ISBN : 978-2-409-02107-7
    • EAN : 9782409021077
    • Ref. ENI : LNEPKUB

Téléchargements

En complétant ce formulaire, vous acceptez d'être contacté afin de recevoir des informations sur nos produits et services ainsi que nos communications marketing. Vous aurez la possibilité de vous désabonner de nos communications à tout moment. Pour plus d'informations sur notre politique de protection des données, cliquez ici.
  • Des fichiers complémentaires - Partie 1 (10,4 Ko)
  • Des fichiers complémentaires - Partie 2 (35,5 Ko)