TABLE DES MATIÈRES
- Avant-propos
- 1. Introduction
- 2. Contenu de ce livre
- Application standalone
- 1. L’application fil rouge
- 1.1 L’architecture de l’application web
- 1.2 Le code
- 1.2.1 L’objet TodoItem
- 1.2.2 Les noms des classes
- 1.2.3 Le modèle MVC
- 1.2.4 La gestion des fichiers téléchargés
- 1.2.5 La configuration (Spring profile)
- 2. Construction du serveur tout-en-un
- 2.1 Installation de l’application
- 2.1.1 Apache Tomcat
- 2.1.2 MariaDB
- 2.1.3 Construction de l’application
- 2.2 Exposition Internet
- 2.3 Critique du design applicatif
- 2.1 Installation de l’application
- 3. Quelques problèmes de ce modèle tout-en-un
- 3.1 Partage des ressources
- 3.2 Configuration hardware non optimale
- 3.3 Tous ses œufs dans le même panier
- 1. L’application fil rouge
- Infrastructure et services de base
- 1. Qu’est-ce que la haute disponibilité ?
- 1.1 Tolérance aux pannes
- 1.2 Taux de disponibilité
- 1.3 Éléments à prendre en compte
- 1.4 Rôles et responsabilités
- 2. Infrastructure en haute disponibilité
- 2.1 Exemple d’architecture
- 2.2 Caractéristiques matérielles d’un serveur
- 2.3 Répartition des serveurs
- 2.4 Serveurs physiques ou virtuels
- 2.5 Tester sans serveurs
- 2.6 Besoins et plan d’adressage
- 2.6.1 Serveurs
- 2.6.2 Réseau
- 2.6.3 Détails
- 3. Installation de base
- 3.1 Réseau VirtualBox
- 3.2 Installation standard
- 3.2.1 Image Ubuntu
- 3.2.2 Disques
- 3.2.3 Réseau Netplan
- 3.2.4 Utilisateurs
- 3.2.5 Installation d’Ansible
- 3.3 Clonage
- 4. Agrégats réseau
- 4.1 Vitesse et tolérance aux pannes
- 4.2 Considérations matérielles
- 4.3 Modes de fonctionnement
- 4.4 Configuration
- 4.4.1 Configuration manuelle
- 4.4.2 Utiliser Netplan
- 4.4.3 État de l’agrégat
- 5. Serveur DNS
- 5.1 Comment Linux résout-il les adresses ?
- 5.2 DNS primaires et secondaires
- 5.3 Configuration
- 5.3.1 DNS primaire
- 5.3.2 DNS secondaire
- 5.3.3 Test
- 5.3.4 Resolver Systemd
- 5.3.5 Automatisation
- 1. Qu’est-ce que la haute disponibilité ?
- Les containers
- 1. Cahier des charges
- 2. Isolation et container
- 2.1 Principe
- 2.2 Container et machine virtuelle
- 2.3 Namespace
- 2.4 Cgroup
- 2.5 Montage en union
- 2.6 Image applicative
- 2.7 Couches d’images
- 2.8 Docker
- 2.9 Le projet OCI
- 3. Préparer l’environnement
- 3.1 Installer Docker
- 3.2 Installer un registry Docker
- 3.2.1 Créer le stockage
- 3.2.2 Obtenir une clé et un certificat
- 3.2.3 Démarrer le registry
- 3.2.4 Tester
- 3.2.5 Automatiser
- 4. Construire l’image
- 4.1 Adaptation du code
- 4.2 Dockerfiles
- 4.2.1 Builder
- 4.2.2 Tomcat
- 4.2.3 Image applicative
- 4.3 Build
- 4.4 Premier test
- 4.5 Utiliser le registry
- 4.6 Automatisation
- 4.6.1 Image pour MariaDB
- 4.6.2 Image h2
- 5. Déployer les containers
- 5.1 MariaDB
- 5.1.1 Stockage
- 5.1.2 Démarrage
- 5.2 eni-todo
- 5.2.1 Emplacement des fichiers téléchargés
- 5.2.2 Démarrage manuel
- 5.3 Automatisation
- 5.3.1 Configuration YAML
- 5.3.2 Déploiement
- 5.1 MariaDB
- 6. Bilan
- Exposition et répartition
- 1. Exposer ses services
- 1.1 Problématique
- 1.2 Architecture de base
- 2. Reverse proxy
- 2.1 Pourquoi utiliser un reverse proxy ?
- 2.2 Choix du reverse proxy
- 2.3 Installation
- 2.4 Configuration
- 2.4.1 nginx.conf
- 2.4.2 Certificats
- 2.5 Automatisation
- 2.5.1 Configuration YAML
- 2.5.2 Certificats
- 2.5.3 Déploiement
- 2.5.4 Test
- 2.5.5 Reboot
- 3. Répartition de charge
- 3.1 Présentation
- 3.2 Objectifs
- 3.3 Architecture en haute disponibilité
- 4. Solution de répartition de charge
- 4.1 Choix des produits
- 4.2 HAProxy
- 4.2.1 Présentation
- 4.2.2 Architecture
- 4.2.3 Exemple
- 4.3 VRRP avec Keepalived
- 4.3.1 Présentation de Keepalived
- 4.3.2 Présentation de VRRP
- 4.3.3 Exemple
- 4.4 Installation manuelle
- 4.4.1 installation des packages
- 4.4.2 Paramétrer le noyau et les limites
- 4.4.3 Configuration du pare-feu
- 4.5 Automatisation
- 4.5.1 Installation et paramétrage des composants
- 4.5.2 Vérification des arborescences
- 4.5.3 Contrôle des services
- 4.5.4 Configuration des VIP
- 4.5.5 Test final
- 4.6 Bilan
- 5. Exposition Internet
- 6. Solution d’exposition Internet avec Quagga
- 6.1 Implémentation
- 6.2 Installation et configuration
- 6.3 Test
- 6.4 Automatisation
- 1. Exposer ses services
- Orchestration
- 1. Introduction
- 2. Abstractions d’orchestration
- 2.1 Abstraction du serveur
- 2.2 Abstraction de l’application
- 2.3 Abstraction du réseau
- 2.4 Abstraction du stockage
- 2.5 Rappel à la réalité
- 3. Automatisation ou orchestration ?
- 4. Bataille des orchestrateurs
- 5. Mécanismes des environnements distribués
- 5.1 Consensus
- 5.2 Paxos
- 5.3 Raft
- 6. Scheduler
- 7. Premiers pas avec Kubernetes
- 7.1 Architecture
- 7.2 Version allégée : Minikube
- 7.2.1 Installation
- 7.2.2 Add-ons
- 7.2.3 minikube dashboard
- 7.2.4 minikube docker-env
- 7.2.5 minikube logs
- 7.2.6 minikube IP
- 7.2.7 minikube service
- 7.2.8 minikube update-context
- 8. Initiation à Kubernetes
- 8.1 kubectl
- 8.2 Appels à l’API
- 8.3 Configuration du client
- 8.4 Manipulation des ressources
- 8.5 Traces du pod
- Déploiement avec Kubernetes
- 1. Introduction
- 2. Du pod aux déploiements
- 2.1 Pod
- 2.1.1 Sondes et contrôle de santé
- 2.1.2 Classes de qualité de service, limits et requests
- 2.2 ReplicaSet
- 2.3 Déploiement
- 2.1 Pod
- 3. Services et Endpoints
- 3.1 Service de type ClusterIP
- 3.2 Service de type NodePort
- 3.3 Endpoints
- 4. Secret et ConfigMap
- 4.1 Monter des ConfigMaps et des secrets
- 4.2 Utilisation des ConfigMap et Secret dans les variables d’environnement
- 5. StatefulSet
- 6. PersistentVolume
- 7. PersistentVolumeClaim
- 8. StorageClass
- 9. Routes ingress
- 9.1 Le contrôleur des flux entrant (ingress controller)
- 9.2 Objet ingress
- 10. Job et CronJob
- 11. DaemonSet
- Stockage en haute disponibilité
- 1. Disponibilité du stockage
- 1.1 Problématique
- 1.2 Cahier des charges
- 1.3 Solution
- 1.4 Architecture
- 1.4.1 DRBD et cluster
- 1.4.2 XFS, quotas et NFSv4
- 2. RAID
- 2.1 Principe
- 2.2 RAID matériel vs RAID logiciel
- 2.3 RAID-0, RAID-1 et RAID-5
- 2.4 Manipulation d’un RAID-5
- 3. Cluster NFS-HA
- 3.1 Installation des packages
- 3.2 Configuration du réseau
- 3.3 Création du cluster
- 3.4 Vérification
- 3.5 Configuration du stockage
- 3.5.1 LVM
- 3.5.2 DRBD
- 3.6 Ressources Pacemaker
- 3.6.1 DRBD
- 3.6.2 LVM
- 3.6.3 Système de fichiers
- 3.6.4 NFS
- 3.6.5 Adresse IP
- 3.7 Contraintes Pacemaker
- 3.8 Test de bascule
- 4. Projets XFS
- 4.1 Ajout manuel
- 4.2 Test NFS
- 4.3 Split-brain
- 4.4 Automatisation
- 1. Disponibilité du stockage
- Mise en place d’un cluster Kubernetes
- 1. Introduction
- 2. Topologie
- 2.1 Composants de base
- 2.2 Répartition
- 2.2.1 Quorum et performances
- 2.2.2 Masters
- 2.2.3 Nodes
- 2.2.4 Positionnement
- 2.2.5 Topologie pour eni-todo
- 3. Préparation
- 3.1 Rappels
- 3.2 HAProxy
- 3.3 Préparation des serveurs
- 3.3.1 Configuration système
- 3.3.2 Configuration du pare-feu
- 3.3.3 Automatisation
- 4. Construction
- 4.1 Images de Kubernetes
- 4.2 Premier master
- 4.2.1 Bootstrap
- 4.2.2 Flannel
- 4.3 Deuxième et troisième masters
- 4.4 Modification du contrôleur
- 4.5 Ajout des nodes
- 4.6 Test
- 4.6.1 Premier déploiement
- 4.6.2 Première exposition
- 4.6.3 Ajout des pods
- 4.6.4 Résolution DNS interne
- 4.7 Routeur ingress
- 4.7.1 Principe
- 4.7.2 Installation
- 4.7.3 Premier ingress
- 4.7.4 Mode host network
- 5. Procédures additionnelles
- 5.1 Crash ou arrêt sale d’un node
- 5.2 Arrêt propre d’un node
- 5.3 Destruction d’un cluster
- Intégration finale
- 1. Introduction
- 2. Volumes persistants
- 2.1 Cluster NFS-HA
- 2.2 Approvisionner des volumes persistants
- 3. Registry Docker
- 3.1 Architecture
- 3.2 Génération d’un secret
- 3.3 Déploiement
- 3.3.1 Demande de volume persistant
- 3.3.2 Création d’un déploiement
- 3.3.3 Création d’un service
- 3.4 Exposition
- 3.4.1 Ajout d’une route ingress
- 3.4.2 Exposition via HAProxy
- 3.4.3 Test
- 4. Base de données
- 4.1 Problématique
- 4.2 Galera
- 4.3 Déploiement
- 4.4 Création de db-todo
- 4.5 Problème de redémarrage
- 5. eni-todo
- 5.1 Adaptations
- 5.2 Construction de l’image
- 5.3 Création d’un compte de service
- 5.4 Déploiement
- 5.4.1 Demande de volume persistant
- 5.4.2 Création du service
- 5.4.3 Déploiement
- 5.5 Exposition
- 5.5.1 Affinité et persistance
- 5.5.2 Création d’une configuration ingress
- 5.5.3 Configuration de HAProxy
- 5.6 Test final
- 6. Bilan
- Aller plus loin
- 1. Introduction
- 2. Plan de reprise d’activité
- 2.1 Quand le désastre arrive
- 2.2 Définition
- 2.3 Mesures
- 2.4 Pratiques DevOps
- 3. Sauvegardes
- 3.1 Redondance vs sauvegarde
- 3.2 Que sauvegarder ?
- 3.3 GitOps
- 3.4 SaaS
- 4. Sécurité
- 4.1 Container et root
- 4.1.1 Exemple d’exploit
- 4.1.2 Solutions
- 4.1.3 Le contexte de sécurité (securityContext)
- 4.2 Réseau Kubernetes
- 4.3 Utilisateurs et droits
- 4.3.1 RBAC
- 4.3.2 Utilisateurs
- 4.4 Mises à jour
- 4.5 Firewalls, proxies, routeurs
- 4.6 Applications
- 4.1 Container et root
- 5. Surveillance
- 5.1 Métriques
- 5.2 Traces
- 6. Stockage
- 7. PaaS
- 7.1 Installer OKD
- 7.2 Instancier des images Docker
- 7.3 Du build au déploiement de eni-todo
- Index
Soyez le premier à donner votre avis sur “Haute disponibilité sous Linux: De l’infrastructure à l’orchestration de services (Heartbeat, Docker, Ansible, Kubernetes…)”