Haute disponibilité sous Linux: De l’infrastructure à l’orchestration de services (Heartbeat, Docker, Ansible, Kubernetes…)

39916 CFA

Plus que jamais, dans un monde ultraconnecté où tant de choses dépendent de l’informatique et d’Internet, il est primordial de disposer d’environnements hautement disponibles, redondants et fiables. L’objectif de ce livre est de fournir aux ingénieurs système toutes les bases permettant de construire des environnements de Haute Disponibilité, tant du point de vue de l’infrastructure que du point de vue des services, basés sur le système d’exploitation Linux.

Selon les principes et les outils DevOps, les auteurs présentent un exemple d’application fil rouge permettant d’étudier la façon de faire évoluer de concert une application et l’infrastructure sous-jacente, pour les rendre les plus fiables et les plus accessibles possibles, en s’appuyant sur les dernières technologies.

Tous les éléments de conception d’une plateforme et d’une application redondantes sont ainsi abordés.

Le lecteur peut ainsi appréhender concrètement la définition d’une application écrite en Java et tournant sous Tomcat, la mise en place d’une architecture matérielle fonctionnelle pour la supporter, la redondance des services système et réseau de base (RAID, agrégats réseau, DNS…), l’automatisation de la construction et du déploiement des images de l’application avec Docker et Ansible ou encore la haute disponibilité du réseau, des répartiteurs de charge et des adresses IP avec NGINXHAProxy, le protocole VRRP et Quagga.

Dans la suite du livre, les auteurs décrivent le passage à l’orchestration avec un cluster Kubernetes, le déploiement d’un cluster avec une solution de stockage réseau redondant basée sur un cluster NFS et XFS, ainsi que la création de clusters de bases de données MariaDB et les affinités de sessions.

Chaque chapitre du livre est agrémenté d’exemples pratiques dont l’ensemble du code est proposé en téléchargement sur l’espace GitHub des auteurs.

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
    • 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
  • 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
  • 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
    • 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
  • 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
    • 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
  • 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
    • 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
Poids 0,8 kg

Avis des clients

Il n'y a pas encore d'avis.

Soyez le premier à donner votre avis sur “Haute disponibilité sous Linux: De l’infrastructure à l’orchestration de services (Heartbeat, Docker, Ansible, Kubernetes…)”

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Plus d'offres pour ce produit!

Questions et demandes générales

Il n'y a pas encore de demandes de renseignements.