Kubernetes
Mise en oeuvre d'un cluster et déploiement de microservices
2e éditions
Éditions eni
Chapitre 1
Fonctionnement de Kubernetes
1. Contenu du livre9
1.1 Objectifs9
1.2 Prérequis de lecture10
1.3 Avertissement sur les versions de Kubernetes10
1.4 Kubernetes et Azure11
2. À quoi sert Kubernetes ?12
2.1 Les besoins en déploiement applicatif12
2.1.1 Montée en charge par répartition12
2.1.2 Mises à jour progressives13
2.1.3 Composition applicative robuste13
2.2 Structuration du système d'information14
2.2.1 Principes14
2.2.2 Découplage obtenu par Kubernetes16
3. Historique de Kubernetes18
3.1 Aux origines : Google Borg18
3.2 Transfert à la Cloud Native Computing Foundation19
3.3 Et la concurrence ?19
4. Principes d'architecture de Kubernetes21
4.1 Mise en cluster21
4.1.1 Principes21
4.1.2 Les masters et leurs composants22
4.1.3 Les nodes et leurs composants -25
4.2 Concepts liés à Kubernetes27
4.2.1 Pods27
4.2.2 Namespaces29
4.2.3 Services30
4.2.4 IngressController33
4.2.5 Volumes39
4.2.6 Persistent Volume et Persistent Volume Claim42
4.2.7 ConfigMap44
4.2.8 Secrets49
4.2.9 Deployment52
4.2.10 ReplicaSet55
4.2.11 DaemonSet56
4.2.12 Résumé des concepts57
4.3 Role Based Access Control58
4.3.1 Principe58
4.3.2 Role60
4.3.3 Cluster Role60
4.3.4 Role Binding61
4.3.5 Cluster Role Binding63
4.4 Notion de réseau64
4.5 Kubernetes et Docker65
Chapitre 2
Création et gestion d'un cluster Kubernetes
1. Méthodes d'installation d'une plateforme Kubernetes67
1.1 Plusieurs façons de faire67
1.2 Environnement de développement68
1.3 Environnement on premise69
1.4 Environnement cloud70
2. Installation d'une plateforme Kubernetes72
2.1 Généralités et préparation72
2.1.1 Description du mode stacked73
2.1.2 Description du mode external75
2.1.3 Prérequis techniques77
2.2 Installation avec Kubeadm78
2.2.1 Initialisation des machines proxy78
2.2.2 Configuration logicielle des machines proxy81
2.2.3 Configuration de Keepalived82
2.2.4 Validation du fonctionnement de Keepalived86
2.2.5 Configuration de HAProxy87
2.2.6 Initialisation des machines master89
2.2.7 Configuration des machines master91
2.2.8 Configuration de Docker92
2.2.9 Installation des paquets pour Kubernetes95
2.2.10 Préparation de la configuration réseau97
2.2.11 Installation du cluster99
2.2.12 Gestion des certificats102
2.2.13 Jointure des autres serveurs master104
2.2.14 Option de récupération automatique des certificats105
2.2.15 Vérification de fonctionnement du cluster106
2.2.16 Déploiement applicatif pour validation108
2.2.17 Suppression du cluster118
2.3 Installation avec Kubespray118
2.3.1 Description de l'outil118
2.3.2 Opérations préparatoires119
2.3.3 Création éventuelle des machines proxy120
2.3.4 Création des machines master122
2.3.5 Paramétrage divers124
2.3.6 Installation du cluster126
2.3.7 Vérification de fonctionnement du cluster127
3. Mise en ouvre d'un cluster Kubernetes132
3.1 Connexion au cluster132
3.1.1 Les utilisateurs132
3.1.2 Modes de connexion133
3.1.3 Le fichier KUBECONFIG133
3.1.4 Gestion des contextes134
3.1.5 Ajout du contexte pour les développeurs136
3.1.6 Test du contexte pour les développeurs140
3.1.7 Ajout du contexte pour les administrateurs141
3.1.8 Test du contexte pour les administrateurs142
3.1.9 Ajustement des autorisations pour les administrateurs143
3.1.10 Ajustement des autorisations pour les développeurs145
3.2 Exploitation du cluster149
3.2.1 Binaire kubectl149
3.2.2 Commandes de base150
3.2.3 Commandes de déploiement154
3.2.4 Commandes de gestion155
3.2.5 Commandes de débogage156
3.2.6 Commandes de paramétrage157
3.3 Exposition des applications159
3.3.1 Installation de l'Ingress Controller Nginx159
3.3.2 Paramétrage d'une Ingress Rule162
3.3.3 Validation du fonctionnement166
3.3.4 Mise en place de la haute disponibilité166
3.3.5 Passage à l'échelle de l'application168
3.3.6 Gestion de versions170
4. Maintien en condition opérationnelle d'un cluster Kubernetes174
4.1 Surveillance de l'écosystème Kubernetes174
4.1.1 Surveillance du cluster174
4.1.2 Surveillance des pods176
4.1.3 Présentation des outils de supervision176
4.1.4 Architecture de supervision proposée177
4.1.5 Mise en place de l'architecture178
4.1.6 Paramétrage d'un tableau de bord182
4.1.7 Utilisation des outils déployés183
4.2 Filtrage réseau avec les Network Policies186
4.2.1 Présentation des Network Policies186
4.2.2 Exemple de Network Policy187
4.2.3 Network Policies-standards189
4.2.4 Mise en pratique des Network Policies190
4.3 Quelques bonnes pratiques193
4.3.1 Recommandations sur les créations de ressources Kubernetes193
4.3.2 Recommandations sur les infrastructures cloud194
4.3.3 Stratégie de téléchargement des images195
Chapitre 3
Déploiement d'applications avec Kubernetes
1. Contexte197
1.1 Objectifs généraux197
1.1.1 Exploiter la plateforme Kubernetes mise en place197
1.1.2 Remarque sur l'approche DevOps198
1.1.3 Principaux enseignements à attendre200
1.2 Outillage201
1.2.1 Cluster Azure Kubernetes Services201
1.2.2 Kubectl217
1.2.3 Azure CLI217
1.2.4 Paramétrage de kubectl219
1.2.5 Docker pour Windows220
2. Premier déploiement par ligne de commande222
2.1 Contexte222
2.2 Création du déploiement223
2.3 Vérification du déploiement223
2.4 Présence d'un pod224
2.5 Exposition par un service225
2.6 Test de l'application226
2.7 Nettoyage227
3. Second déploiement à l'aide d'un fichier de configuration228
3.1 Objectifs228
3.2 Application exemple229
3.2.1 Présentation de l'application229
3.2.2 Limites logicielles230
3.2.3 Pourquoi des microservices ?231
3.2.4 API232
3.2.5 Scénarios d'utilisation234
3.3 Développement logiciel238
3.3.1 Code source et paramétrage238
3.3.2 Intégration continue242
3.4 Déploiement de l'application248
3.4.1 Structure du projet de déploiement249
3.4.2 Namespace250
3.4.3 Fichier de paramétrage251
3.4.4 Fichiers liés aux bases de données253
3.4.5 Fichiers liés aux services256
3.4.6 Définition de l'ingress259
3.4.7 Lancement d'un seul coup264
3.5 Vérification du déploiement265
3.6 Paramétrage de l'application268
3.6.1 Avec Postman268
3.6.2 Avec curb278
3.6.3 Modification des variables d'environnement278
3.7 Test de l'application280
3.8 Supervision du cluster281
3.8.1 Azure Monitor Insights.282
3.8.2 Azure Monitor logs286
3.8.3 Kubernetes dashboard287
3.8.4 Azure Monitor295
3.8.5 Autres méthodes de monitoring298
3.9 Scalabilité298
3.9.1 Mode statique298
3.9.2 Mode dynamique302
3.10 Fonctionnement du déploiement continu308
3.11 Mise à jour des versions applicatives317
3.11.1 Commande de mise à jour317
3.11.2 Fonctionnement en rolling updates319
3.11.3 Amélioration du fonctionnement par les sondes323
3.11.4 Historique de mises à jour330
3.12 Gestion de la persistance333
3.12.1 Kubernetes et les volumes333
3.12.2 Utilisation d'un disque Azure334
3.12.3 Remarque sur les bases de données en Kubernetes348
3.12.4 Sauvegarde de bases de données349
3.13 Utilisation de Secrets361
3.14 Suppression de l'application368
3.14.1 Suppression dans Kubernetes368
3.14.2 Cas particulier sur l'ingress370
3.14.3 Suppression des ressources Azure372
Index373