Do180 4.14 Student Guide FR
Do180 4.14 Student Guide FR
Do180 4.14 Student Guide FR
Auteurs: Guy Bianco IV, Christopher Caillouet, Alex Corcoles, Natalie Lind,
Maria Ordonez, Randy Thomas, Hervé Quatremain, Manna Kong
Architecte du cours: Fernando Lozano
Ingénieurs DevOps: Benjamin Marco, Zach Gutterman
Éditeur: Julian Cable
© 2024 Red Hat, Inc.
The contents of this course and all its modules and related materials, including handouts to audience members, are ©
2024 Red Hat, Inc.
No part of this publication may be stored in a retrieval system, transmitted or reproduced in any way, including, but
not limited to, photocopy, photograph, magnetic, electronic or other record, without the prior written permission of
Red Hat, Inc.
This instructional program, including all material provided herein, is supplied without any guarantees from Red Hat,
Inc. Red Hat, Inc. assumes no liability for damages or legal action arising from the use or misuse of contents or details
contained herein.
If you believe Red Hat training materials are being used, copied, or otherwise improperly distributed, please send
email to training@redhat.com [mailto:training@redhat.com] or phone toll-free (USA) +1 (866) 626-2994 or +1 (919)
754-3700.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, JBoss, OpenShift, Fedora, Hibernate, Ansible, RHCA, RHCE,
RHCSA, Ceph, and Gluster are trademarks or registered trademarks of Red Hat, Inc. or its subsidiaries in the United
States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
XFS® is a registered trademark of Hewlett Packard Enterprise Development LP or its subsidiaries in the United
States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is a trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open
source or commercial project.
The OpenStack word mark and the Square O Design, together or apart, are trademarks or registered trademarks
of OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's
permission. Red Hat, Inc. is not affiliated with, endorsed by, or sponsored by the OpenStack Foundation or the
OpenStack community.
Introduction xi
Red Hat OpenShift Administration I: Operating a Production Cluster ................................ xi
Organisation de l’environnement de la classe .............................................................. xiii
Exécution des exercices pratiques ............................................................................. xix
DO180-OCP4.14-fr-2-20240530 vii
5. Gestion du stockage pour les données et la configuration de l’application 297
Externalisation de la configuration des applications ................................................... 298
Exercice guidé: Externalisation de la configuration des applications ............................... 310
Approvisionnement de volumes de données persistants ............................................. 317
Exercice guidé: Approvisionnement de volumes de données persistants ....................... 327
Sélection d’une classe de stockage pour une application ........................................... 334
Exercice guidé: Sélection d’une classe de stockage pour une application ...................... 340
Gestion du stockage non partagé avec des ensembles avec état ................................ 348
Exercice guidé: Gestion du stockage non partagé avec des ensembles avec état ............ 355
Open Lab: Gestion du stockage pour les données et la configuration de l’application ...... 363
Résumé .............................................................................................................. 377
6. Configuration des applications sur le plan de la fiabilité 379
Haute disponibilité des applications avec Kubernetes ................................................ 380
Exercice guidé: Haute disponibilité des applications avec Kubernetes ........................... 382
Sondes d’intégrité des applications ........................................................................ 388
Exercice guidé: Sondes d’intégrité des applications ................................................... 393
Réservation de capacité de calcul pour les applications ............................................. 399
Exercice guidé: Réservation de capacité de calcul pour les applications ........................ 403
Limitation de la capacité de calcul pour les applications ............................................ 408
Exercice guidé: Limitation de la capacité de calcul pour les applications ......................... 415
Mise à l’échelle automatique des applications ........................................................... 419
Exercice guidé: Mise à l’échelle automatique des applications ...................................... 422
Open Lab: Configuration des applications sur le plan de la fiabilité ............................... 429
Quiz: Configuration des applications sur le plan de la fiabilité ....................................... 438
Résumé .............................................................................................................. 440
7. Gestion des mises à jour des applications 441
Identité et balises d’images de conteneur ................................................................ 442
Exercice guidé: Identité et balises d’images de conteneur .......................................... 449
Mise à jour des paramètres et de l’image de l’application ........................................... 459
Exercice guidé: Mise à jour des paramètres et de l’image de l’application ...................... 468
Déploiements reproductibles avec des flux d’images OpenShift ................................. 475
Exercice guidé: Déploiements reproductibles avec des flux d’images OpenShift ............ 484
Mises à jour automatiques des images avec les déclencheurs de changement d’image
OpenShift ............................................................................................................ 488
Exercice guidé: Mises à jour automatiques des images avec les déclencheurs de
changement d’image OpenShift ............................................................................. 493
Open Lab: Gestion des mises à jour des applications ................................................. 498
Résumé .............................................................................................................. 503
8. Révision complète 505
Révision complète ............................................................................................... 506
Open Lab: Déploiement d’applications Web ............................................................. 509
Open Lab: Résolution des problèmes et mise à l’échelle des applications ....................... 518
viii DO180-OCP4.14-fr-2-20240530
Conventions de la documentation
Avertissements
Les cours de la formation Red Hat font appel aux avertissements suivants :
Références
Consignes indiquant où trouver de la documentation externe se
rapportant à un sujet.
Note
Une « remarque » est un conseil, un raccourci ou une approche
alternative pour la tâche en cours. Ignorer une remarque ne devrait pas
entraîner de conséquences négatives, mais vous pourriez passer à côté
d’une astuce qui vous faciliterait la vie.
Important
Les sections importantes détaillent des éléments qui pourraient
aisément être négligés : des changements de configuration qui ne
s'appliquent qu’à la session en cours ou des services qui doivent
être redémarrés pour qu’une mise à jour soit appliquée. Ignorer ces
avertissements ne vous fera perdre aucune donnée, mais cela pourrait
être source de frustration et d’irritation.
Mise en garde
N’ignorez pas les avertissements. Ignorer ces avertissements entraînera
très probablement une perte de données.
DO180-OCP4.14-fr-2-20240530 ix
Langage inclusif
Red Hat Training examine actuellement son langage dans divers domaines pour aider à supprimer
tout terme potentiellement offensant. Il s’agit d’un processus continu qui doit être appliqué aux
produits et services couverts dans les cours de la formation Red Hat. Red Hat vous remercie pour
votre patience tout au long du processus.
x DO180-OCP4.14-fr-2-20240530
Introduction
Objectifs du cours
Public
Conditions préalables
DO180-OCP4.14-fr-2-20240530 xi
Introduction
deploying-containerized-applications-technical-overview ou
connaissance équivalente des conteneurs Linux.
• Pour ce cours, il n'est pas nécessaire de posséder une connaissance
approfondie de Linux. Des compétences de base en matière
d’exploitation d’un shell Bash sont suffisantes.
xii DO180-OCP4.14-fr-2-20240530
Introduction
Organisation de l’environnement de la
classe
Dans ce cours, le système informatique principal qui est utilisé pour les travaux pratiques est
workstation. Les systèmes appelés bastion et classroom doivent toujours être en cours
d’exécution pour une utilisation correcte de l’environnement d’atelier.
Une installation d’UPI sur système nu Red Hat OpenShift Container Platform (RHOCP) 4.14 à
nœud unique (SNO) est utilisée dans ce cours. Les systèmes d’infrastructure du cluster RHOCP
se trouvent dans le domaine DNS ocp4.example.com.
Tous les systèmes informatiques des stagiaires possèdent un compte utilisateur standard,
student, protégé par le mot de passe student. Le mot de passe root est redhat sur tous les
systèmes des stagiaires.
DO180-OCP4.14-fr-2-20240530 xiii
Introduction
La fonction principale de bastion est de servir de routeur entre le réseau sur lequel sont
connectées les machines des stagiaires et le réseau de la salle de classe. Si le système bastion
est arrêté, alors les autres machines des stagiaires ne fonctionnent pas correctement, ou peuvent
même se bloquer lors du lancement.
Le système utility agit comme un routeur entre le réseau qui relie les machines de cluster
RHOCP et le réseau des stagiaires. Si utility est arrêté, le cluster RHOCP ne fonctionnera pas
correctement ou risque de se bloquer lors du lancement.
Plusieurs systèmes dans la salle de classe proposent des services d’assistance. Le serveur
classroom héberge les logiciels et les supports d’atelier utilisés pour les activités pratiques.
Le serveur registry est un registre de conteneurs Red Hat Quay privé qui héberge les images
de conteneur pour les activités pratiques. Les informations sur l’utilisation de ces serveurs sont
fournies dans les instructions de ces activités.
Le système master01 fait office de plan de contrôle et de nœud de calcul pour le cluster RHOCP.
Le cluster utilise le système registry comme son propre serveur GitLab et registre d’images
de conteneur privé. Le système idm fournit des services LDAP au cluster RHOCP pour la prise en
charge de l’authentification et de l’autorisation.
Les stagiaires utilisent la machine workstation pour accéder à un cluster RHOCP dédié, pour
lequel ils disposent de privilèges d’administrateur de cluster.
API https://api.ocp4.example.com:6443
Le cluster RHOCP a un compte d’utilisateur standard, developer, dont le mot de passe est
developer. Le compte administratif, admin, a le mot de passe redhatocp.
xiv DO180-OCP4.14-fr-2-20240530
Introduction
Le tableau ci-dessous répertorie les référentiels d’images de conteneur utilisés dans ce cours et
leurs référentiels publics.
redhattraining/docker-nginx docker.io/library/nginx
quay.io/redhattraining/docker-
nginx
redhattraining/bitnami-mysql docker.io/bitnami/mysql
quay.io/redhattraining/bitnami-
mysql
redhattraining/do180-dbinit quay.io/redhattraining/do180-
dbinit
redhattraining/do180-httpd-app quay.io/redhattraining/do180-
httpd-app
redhattraining/do180-roster quay.io/redhattraining/do180-
roster
redhattraining/famous-quotes quay.io/redhattraining/famous-
quotes
redhattraining/hello-world-nginx quay.io/redhattraining/hello-
world-nginx
redhattraining/httpd-noimage quay.io/redhattraining/httpd-
noimage
redhattraining/long-load quay.io/redhattraining/long-load
redhattraining/loadtest quay.io/redhattraining/loadtest
redhattraining/mysql-app quay.io/redhattraining/mysql-app
redhattraining/php-ssl quay.io/redhattraining/php-ssl
redhattraining/php-webapp quay.io/redhattraining/php-webapp
DO180-OCP4.14-fr-2-20240530 xv
Introduction
redhattraining/php-webapp-mysql quay.io/redhattraining/php-webapp-
mysql
redhattraining/versioned-hello quay.io/redhattraining/versioned-
hello
redhattraining/webphp quay.io/redhattraining/webphp
rhel8/mysql-80 registry.redhat.io/rhel8/mysql-80
rhel9/mysql-80 registry.redhat.io/rhel9/mysql-80
ubi8/httpd-24 registry.access.redhat.com/ubi8/
httpd-24
ubi8/ubi registry.access.redhat.com/ubi8/
ubi
ubi9/ubi registry.access.redhat.com/ubi9/
ubi
xvi DO180-OCP4.14-fr-2-20240530
Introduction
États de la machine
CREATE Permet de créer la salle de classe ROLE. Crée et démarre toutes les
machines virtuelles nécessaires pour cette salle de classe.
DO180-OCP4.14-fr-2-20240530 xvii
Introduction
Actions de la machine
ACTION > Power Arrêter de force la machine virtuelle, tout en préservant le contenu du
Off disque. Cela équivaut à couper l’alimentation d’une machine physique.
ACTION > Reset Force l’arrêt de la machine virtuelle et réinitialise le stockage associé
à son état initial. Tout le travail enregistré sur les disques de ce
système est perdu.
Au début d’un exercice, si vous êtes invité à réinitialiser un seul nœud de machine virtuelle, cliquez
sur ACTION > Reset pour la machine virtuelle concernée.
Au début d’un exercice, si vous êtes invité à réinitialiser l’ensemble des machines virtuelles, cliquez
sur ACTION > Reset sur chaque machine virtuelle figurant dans la liste.
Si vous souhaitez que l’environnement de formation retourne à son état d’origine du début du
cours, cliquez sur DELETE pour supprimer l’ensemble de l’environnement de formation. Une fois
l’atelier supprimé, cliquez sur CREATE pour déployer un nouvel ensemble de systèmes de salle de
classe.
Mise en garde
L’opération DELETE ne peut pas être annulée. Tous les travaux que vous aurez
terminés dans l’environnement de formation seront perdus.
Pour régler ces compteurs, localisez les deux boutons + en bas de la page de gestion du cours.
Cliquez sur le bouton d’arrêt automatique + pour ajouter une nouvelle heure au compteur d’arrêt
automatique. Cliquez sur le bouton de destruction automatique + pour ajouter un nouveau jour au
compteur de destruction automatique. Le maximum autorisé pour le bouton d’arrêt automatique
est 11 heures, et 14 jours pour la destruction automatique. Veillez à ce que les compteurs restent
définis pendant que vous travaillez, afin d’éviter que votre environnement ne s’arrête de manière
inattendue. Veillez à ne pas régler les compteurs de façon inutilement élevée, ce qui pourrait
gaspiller le temps d’abonnement qui vous a été alloué.
xviii DO180-OCP4.14-fr-2-20240530
Introduction
• Un exercice guidé est un exercice pratique qui suit une section de présentation. Il vous guide à
travers une procédure à exécuter, étape par étape.
• Un quiz est généralement utilisé lors de la vérification de l’apprentissage axé sur les
connaissances ou si, pour une quelconque raison, une activité pratique n’est pas appropriée.
• Un atelier de fin de chapitre est une activité pratique notée dont le but est de vous aider à
vérifier les connaissances que vous avez acquises. Vous effectuez un ensemble d’étapes de haut
niveau en fonction des exercices guidés de ce chapitre. Cependant, les étapes ne décrivent pas
chacune des commandes. Une solution est fournie avec une procédure étape par étape.
• Un atelier de révision complète est utilisé à la fin du cours. Il s’agit également d’une activité
pratique notée qui peut porter sur l’ensemble du contenu du cours. Vous allez examiner une
spécification qui détaille les procédures à accomplir dans le cadre de l’activité, sans connaître
les étapes spécifiques pour y parvenir. Ici encore, vous recevez une solution qui fournit une
procédure étape par étape qui répond à la spécification.
Pour préparer votre environnement d’atelier au début de chaque activité pratique, exécutez la
commande lab start avec un nom d’activité issu des instructions de l’activité. De même, à la fin
de chaque activité pratique, exécutez la commande lab finish avec ce même nom d’activité
pour effectuer un nettoyage après l’activité. Chaque activité pratique porte un nom unique au sein
d’un cours.
L’action est à choisir entre start, grade ou finish. Tous les exercices prennent en charge
start et finish. Seuls les ateliers de fin de chapitre et de révision complète prennent en charge
grade.
start
L’action start vérifie les ressources requises pour commencer un exercice. Il peut s’agir
notamment de configurer des paramètres, de créer des ressources, de valider les services
prérequis et de vérifier les résultats nécessaires des exercices précédents. Vous pouvez
effectuer un exercice à tout moment, même sans avoir réalisé les exercices précédents.
grade
Pour les activités notées, l’action grade indique à la commande lab d’évaluer votre travail.
Elle affiche également une liste de critères de notation, avec un statut PASS ou FAIL pour
chacun d’eux. Pour obtenir le statut PASS pour tous les critères, corrigez les erreurs et
exécutez à nouveau l’action grade.
finish
L’action finish réinitialise les ressources configurées pendant l’exercice. Vous pouvez
effectuer un exercice autant de fois que vous le souhaitez.
DO180-OCP4.14-fr-2-20240530 xix
Introduction
La commande lab prend en charge la saisie semi-automatique via la touche de tabulation. Par
exemple, pour lister tous les exercices que vous pouvez commencer, saisissez lab start, puis
appuyez deux fois sur la touche Tab.
Pour bénéficier d'une expérience d'affichage optimale, réglez votre visionneuse de manière à
éviter le retour à la ligne. Si vous utilisez un navigateur Web, vous pouvez ajuster le pourcentage de
zoom. Pour une visionneuse EPUB, vous pouvez ajuster l’orientation et la taille de la police.
================================================================================
Le script lab copie les fichiers nécessaires pour chaque activité du cours dans le répertoire de
l’espace de travail.
Par exemple, la commande lab start updates-rollout effectue les tâches suivantes :
• Elle crée un répertoire updates-rollout dans l’espace de travail : espace de travail /home/
student/DO180/labs/updates-rollout.
• /tmp/log/labs : ce répertoire contient des fichiers journaux. Le script lab crée un fichier
journal unique pour chaque activité. Par exemple, le fichier journal de la commande lab start
updates-rollout est /tmp/log/labs/updates-rollout.
Les commandes lab start vérifient généralement si le cluster Red Hat OpenShift Container
Platform (RHOCP) est prêt et accessible. Si vous exécutez la commande lab start juste après
avoir créé l’environnement de formation, des erreurs peuvent être générées lorsque la commande
vérifie l’API du cluster ou les informations d’identification. Ces erreurs se produisent, car il peut
s’écouler jusqu’à 15 minutes avant que le cluster RHOCP ne soit disponible. Une solution pratique
consiste à exécuter la commande lab finish pour nettoyer le scénario, à attendre quelques
minutes, puis à exécuter à nouveau la commande lab start.
xx DO180-OCP4.14-fr-2-20240530
Introduction
Important
Dans le cadre de ce cours, les scripts lab start créent normalement un projet
RHOCP spécifique pour chaque exercice. Les scripts lab finish suppriment le
projet RHOCP spécifique à l’exercice.
DO180-OCP4.14-fr-2-20240530 xxi
xxii DO180-OCP4.14-fr-2-20240530
chapitre 1
Présentation de Kubernetes et
d’OpenShift
Objectif Identifier les principaux services de cluster
Kubernetes et de plateforme OpenShift, et les
surveiller à l’aide de la console Web.
DO180-OCP4.14-fr-2-20240530 1
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Résultats
• Décrire les principales caractéristiques des conteneurs et de Kubernetes.
Kubernetes fournit de nombreuses fonctionnalités pour créer des clusters de serveurs qui
exécutent des applications en conteneur. Cependant, Kubernetes n’a pas l’intention de fournir une
solution complète, mais fournit plutôt des points d’extension afin que les administrateurs système
puissent compléter Kubernetes. OpenShift s’appuie sur les points d’extension de Kubernetes pour
fournir une plateforme complète.
Figure 1.1: Applications dans des conteneurs et sur le système d’exploitation hôte
Les conteneurs utilisent des fonctionnalités du noyau Linux, telles que les espaces de noms et les
groupes de contrôle (cGroups). Par exemple, les conteneurs utilisent des cGroups pour la gestion
de ressources, comme l’allocation de temps processeur et la mémoire système. Les espaces de
noms isolent les processus et les ressources d’un conteneur des autres conteneurs et du système
hôte.
2 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
L’OCI (Open Container Initiative) maintient des normes sur les conteneurs, les images de
conteneur et les environnements d’exécution de conteneur. Étant donné que la plupart des
implémentations de moteur de conteneur sont conçues pour se conformer aux spécifications OCI,
les applications qui sont empaquetées conformément à la spécification peuvent s’exécuter sur
n’importe quelle plateforme conforme.
Vous pouvez exécuter des conteneurs sur n’importe quel système Linux à l’aide d’outils tels que
Podman. Des travaux supplémentaires sont nécessaires pour créer des services conteneurisés qui,
par exemple, peuvent s’exécuter sur un cluster à des fins de redondance.
Kubernetes crée un cluster qui exécute des applications sur plusieurs nœuds. En cas de défaillance
d’un nœud, Kubernetes peut redémarrer une application sur un autre nœud.
Kubernetes définit les charges de travail en termes de pods. Un pod est un ou plusieurs
conteneurs qui s’exécutent dans le même nœud de cluster. Les pods avec plusieurs conteneurs
sont utiles dans certaines situations, lorsque deux conteneurs doivent s’exécuter dans le même
nœud de cluster pour partager une ressource. Par exemple, une tâche est une charge de travail qui
exécute une tâche dans un pod jusqu’à ce qu’elle soit terminée.
Fonctions de Kubernetes
Kubernetes offre les fonctions suivantes en plus d’une infrastructure de conteneur :
Kubernetes configure automatiquement la mise en réseau et fournit un service DNS pour les
pods. Grâce à ces fonctionnalités, les pods peuvent communiquer avec les services d’autres
pods de manière transparente sur les nœuds en utilisant uniquement des noms d’hôte au lieu
d’adresses IP. Plusieurs pods peuvent soutenir un service pour les performances et la fiabilité.
Par exemple, Kubernetes peut répartir uniformément les requêtes entrantes vers un serveur
Web NGINX en tenant compte de la disponibilité des pods NGINX.
Autoréparation
Si les applications déclarent des procédures de vérification de l’état, Kubernetes
peut surveiller, redémarrer et replanifier les applications défaillantes ou indisponibles.
L’autoréparation protège les applications contre les défaillances internes (l’application s’arrête
de manière inattendue) ou externes (le nœud qui exécute l’application devient indisponible).
DO180-OCP4.14-fr-2-20240530 3
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Déploiement automatisé
Kubernetes peut progressivement appliquer des mises à jour aux conteneurs de votre
application. En cas de problème lors du déploiement, Kubernetes peut revenir à la version
précédente du déploiement. Kubernetes achemine les demandes vers la version déployée de
l’application et supprime les pods de la version précédente une fois le déploiement terminé.
Note
Kubernetes ne chiffre pas les secrets.
Opérateurs
Les opérateurs sont des applications Kubernetes empaquetées qui peuvent gérer les charges
de travail Kubernetes de manière déclarative. Par exemple, un opérateur peut définir une
ressource de serveur de base de données. Si l’utilisateur crée une ressource de base de
données, l’opérateur crée les charges de travail nécessaires pour déployer la base de données,
configurer la réplication et effectuer une sauvegarde automatique.
Les nœuds du plan de contrôle assurent la coordination globale du cluster pour la planification des
charges de travail déployées. Ces nœuds gèrent également l’état de la configuration du cluster en
réponse aux événements et aux demandes du cluster.
4 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Bien qu’un serveur puisse agir à la fois comme nœud de plan de contrôle et comme nœud de
calcul, les deux rôles sont généralement séparés pour une stabilité, une sécurité et une gérabilité
accrues. Les clusters Kubernetes peuvent aller des petits clusters à nœud unique aux grands
clusters comportant jusqu’à 5 000 nœuds.
Tous les types de ressources fonctionnent de la même manière, avec une API uniforme. Des outils
tels que la commande kubectl peuvent gérer des ressources de tous types, même des types de
ressources personnalisés.
Kubernetes peut importer et exporter des ressources sous forme de fichiers texte. En travaillant
avec des définitions de ressources au format texte, les administrateurs peuvent décrire leurs
charges de travail au lieu d’effectuer la séquence d’opérations appropriée pour les créer. Cette
approche est appelée gestion déclarative des ressources.
La gestion déclarative des ressources peut réduire le travail de création de charges de travail
et améliorer la maintenabilité. En outre, lorsqu’ils utilisent des fichiers texte pour décrire des
ressources, les administrateurs peuvent utiliser des outils génériques tels que des systèmes de
contrôle de version pour obtenir d’autres avantages, comme le suivi des modifications.
Pour prendre en charge la gestion déclarative des ressources, Kubernetes utilise des contrôleurs
qui suivent en permanence l’état du cluster et effectuent les étapes nécessaires pour maintenir
le cluster dans l’état prévu. Ce processus signifie que les modifications apportées aux ressources
nécessitent souvent un certain temps pour être efficaces. Cependant, Kubernetes peut appliquer
automatiquement des modifications complexes. Par exemple, si vous augmentez les besoins en
RAM d’une application qui ne peuvent pas être satisfaits sur le nœud actuel, Kubernetes peut
déplacer l’application vers un nœud disposant de suffisamment de RAM. Kubernetes redirige le
trafic vers la nouvelle instance uniquement lorsque le déplacement est terminé.
Kubernetes prend également en charge les espaces de noms. Les administrateurs peuvent créer
des espaces de noms, et la plupart des ressources doivent être créées à l’intérieur d’un espace
de noms. En plus d’aider à organiser de grandes quantités de ressources, les espaces de noms
DO180-OCP4.14-fr-2-20240530 5
chapitre 1 | Présentation de Kubernetes et d’OpenShift
fournissent les bases de fonctionnalités telles que l’accès aux ressources. Les administrateurs
peuvent définir des autorisations pour les espaces de noms, afin de permettre à des utilisateurs
spécifiques d’afficher ou de modifier des ressources.
Références
Containers
https://kubernetes.io/docs/concepts/containers/
(Conteneurs)
Kubernetes Concepts Overview
https://kubernetes.io/docs/concepts/overview/
(Vue d’ensemble des concepts de Kubernetes)
What Kubernetes Is Not
https://kubernetes.io/docs/concepts/overview/#what-kubernetes-is-not
(Ce que Kubernetes n’est pas)
Considerations for Large Clusters
https://kubernetes.io/docs/setup/best-practices/cluster-large/
(Considérations relatives aux clusters de grande taille)
6 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Quiz
Concept Description
Découverte de service et
équilibrage de charge
Mise à l’échelle
horizontale
Autoréparation
Déploiement automatisé
Secrets et gestion de la
configuration
Images de conteneur
DO180-OCP4.14-fr-2-20240530 7
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Solution
Concept Description
8 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Résultats
• Décrire la relation entre OpenShift, Kubernetes et d’autres projets Open Source, et lister les
principales fonctions des produits et éditions de Red Hat OpenShift.
OpenShift utilise l’extensibilité de Kubernetes pour créer une solution complète en ajoutant les
fonctionnalités suivantes à un cluster Kubernetes :
Observabilité
Pour atteindre la fiabilité, les performances et la disponibilité attendues des applications, les
administrateurs de cluster peuvent avoir besoin d’outils supplémentaires pour prévenir et
résoudre les problèmes. OpenShift inclut des services de surveillance et de journalisation pour
vos applications et le cluster.
OpenShift fournit des procédures d’installation et de mise à jour pour de nombreux scénarios.
En outre, les hôtes d’un cluster RHOCP utilisent Red Hat Enterprise Linux CoreOS
(RHEL CoreOS) comme système d’exploitation sous-jacent. RHEL CoreOS est un système
d’exploitation immuable, optimisé pour l’exécution d’applications en conteneur. RHEL CoreOS
utilise le même noyau et les mêmes paquetages que Red Hat Enterprise Linux. OpenShift
fournit également des fonctionnalités pour gérer RHEL CoreOS selon le modèle de
configuration Kubernetes.
OpenShift apporte également des outils unifiés et une console Web graphique pour gérer toutes
les différentes fonctionnalités, ainsi que des améliorations supplémentaires telles que des mesures
de sécurité améliorées.
Ce diagramme présente un grand nombre des projets qui fournissent les différentes fonctions au
sein de chaque cluster OpenShift :
DO180-OCP4.14-fr-2-20240530 9
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Étant donné que les fonctionnalités OpenShift reposent sur l’extensibilité de Kubernetes, les
administrateurs peuvent souvent exploiter ces fonctionnalités en utilisant leurs connaissances
Kubernetes existantes. Outre leurs connaissances sur Kubernetes, les administrateurs OpenShift
peuvent utiliser la plupart des produits existants conçus pour Kubernetes.
Lorsque vous êtes prêt à adopter Red Hat OpenShift pour des charges de travail de production,
diverses éditions sont disponibles pour répondre à toutes les exigences de l’entreprise en matière
de déploiement de clusters.
Les partenaires de cloud public, comme Amazon Web Services, Microsoft Azure, IBM Cloud et
Google Cloud, offrent tous un accès rapide à un déploiement Red Hat OpenShift à la demande.
Ces déploiements gérés permettent un accès rapide à un cluster sur une infrastructure fiable à
partir d’un fournisseur de cloud Red Hat approuvé.
10 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Vous pouvez également déployer un cluster Red Hat OpenShift en utilisant les programmes
d’installation disponibles sur une infrastructure physique ou virtuelle, sur site ou dans un cloud
public. Ces offres autogérées sont disponibles sous plusieurs formes.
Le choix des méthodes de déploiement dépend de nombreux facteurs. Lorsque vous utilisez les
services gérés, davantage de responsabilités sont déléguées à Red Hat et au fournisseur de cloud.
Étant donné que le processus d’installation s’intègre au fournisseur de cloud, le service géré crée
et gère toutes les ressources cloud nécessaires.
Lorsque vous utilisez les programmes d’installation, vous pouvez toujours déléguer la gestion
du matériel à un fournisseur de cloud ou utiliser le vôtre. Cependant, vous gérez le reste de la
solution. Avec les éditions autogérées, vous bénéficiez d’un contrôle et d’une flexibilité accrus,
mais vous assumez également de plus grandes responsabilités sur le service.
Par exemple, avec les services gérés, les équipes d’ingénierie de fiabilité des sites Red Hat
mettent à jour les clusters et résolvent les problèmes de mise à jour (même si vous participez
toujours à la planification des mises à jour). Sur les éditions autogérées, vous mettez à jour les
clusters et résolvez les problèmes de mise à jour. En revanche, sur les éditions autogérées, vous
disposez d’un contrôle total sur des aspects tels que l’authentification, lorsque les éditions gérées
peuvent restreindre certaines options.
Chaque édition gérée documente les responsabilités des clients, de Red Hat et du fournisseur de
cloud.
En outre, pour vous aider à gérer des clusters, Red Hat Insights Advisor est disponible sur la
console Red Hat Hybrid Cloud. Insights Advisor aide les administrateurs à identifier et à résoudre
les problèmes de cluster en analysant les données fournies par Insights Operator. Les données
de l’opérateur sont téléchargées vers la console Red Hat Hybrid Cloud, où vous examinez plus en
détail les recommandations et leur impact sur le cluster.
Le contenu de ce cours s’applique à la fois aux services gérés et aux éditions autogérées.
Red Hat OpenShift Kubernetes Engine inclut la dernière version de la plate-forme Kubernetes
avec le renforcement supplémentaire de la sécurité et la stabilité d’entreprise que Red Hat est
célèbre pour. Ce déploiement s’exécute sur le système d’exploitation de conteneur immuable
Red Hat Enterprise Linux CoreOS, en utilisant Red Hat OpenShift Virtualization pour la gestion
des machines virtuelles, et fournit une console d’administration pour faciliter le support
opérationnel.
Red Hat OpenShift Container Platform s’appuie sur les fonctions d’OpenShift Kubernetes Engine
pour améliorer la gestion, la sécurité et la stabilité des clusters, ainsi que le développement
d’applications pour les entreprises. Les fonctions supplémentaires de ce niveau incluent une
console de développement, ainsi que des informations de mesure, de gestion des journaux
et de gestion des coûts. Cette offre ajoute Red Hat OpenShift Serverless (Knative), Red Hat
OpenShift Service Mesh (Istio), Red Hat OpenShift Pipelines (Tekton) et Red Hat OpenShift
GitOps (Argo CD) au déploiement.
Red Hat OpenShift Platform Plus élargit davantage encore l’offre, de manière à proposer les
fonctionnalités les plus performantes et les plus robustes du marché. Cette offre comprend
Red Hat Advanced Cluster Management for Kubernetes, Red Hat Advanced Cluster Security for
Kubernetes et la plateforme de registre privé Red Hat Quay. Pour bénéficier de l’expérience la plus
complète dans le domaine des conteneurs, optez pour Red Hat OpenShift Platform Plus. Cette
solution regroupe tous les outils nécessaires sur le plan du développement et de l’administration
pour la gestion des plateformes d’applications en conteneur.
Toutes les éditions d’OpenShift utilisent le même code. La plupart des contenus de ce cours
s’appliquent à toutes les éditions d’OpenShift.
DO180-OCP4.14-fr-2-20240530 11
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Références
What Kubernetes Is Not
https://kubernetes.io/docs/concepts/overview/#what-kubernetes-is-not
(Ce que Kubernetes n’est pas)
Pour plus d’informations, reportez-vous à la section About Red Hat OpenShift Local
dans le chapitre Introducing Red Hat OpenShift Local de la documentation Red Hat
Red Hat OpenShift Local 2.30 Getting Started Guide, disponible à l’adresse
https://access.redhat.com/documentation/en-us/red_hat_openshift_local/2.30/
html-single/getting_started_guide/index#about_gsg
Vue d’ensemble des responsabilités du service Red Hat OpenShift sur AWS
https://docs.aws.amazon.com/ROSA/latest/userguide/rosa-responsibilities.html
12 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Quiz
Offres OpenShift dans lesquelles Red Hat et les fournisseurs de cloud assument des
responsabilités
Un système pour déployer OpenShift sur un ordinateur local à des fins de test et
d’exploration
Une plateforme d’applications basée sur des conteneurs qui ne fournit pas de
fonctionnalités telles que la création d’applications
DO180-OCP4.14-fr-2-20240530 13
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Concept Description
Kubernetes
Red Hat
OpenShift Container Platform
Services gérés
OpenShift
Offres OpenShift
autogérées
14 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Solution
Concept Description
Red Hat OpenShift Une offre étendue qui inclut un registre de conteneurs
Platform Plus
Red Hat OpenShift Local Un système pour déployer OpenShift sur un ordinateur
local à des fins de test et d’exploration
DO180-OCP4.14-fr-2-20240530 15
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Résultats
• Naviguer dans la console Web OpenShift pour identifier les applications et les services de
cluster en cours d’exécution.
Kubernetes fournit un tableau de bord Web qui n’est pas déployé par défaut dans un cluster.
Le tableau de bord Kubernetes fournit des autorisations de sécurité minimales et accepte
uniquement l’authentification basée sur des tokens. Ce tableau de bord nécessite également une
configuration de proxy qui ne permet d’accéder à la console Web qu’à partir du terminal système
qui crée le proxy. Contrairement aux limitations indiquées pour la console Web Kubernetes,
OpenShift inclut une console Web plus complète.
La console Web OpenShift n’est pas liée au tableau de bord Kubernetes, mais constitue un outil
distinct pour la gestion des clusters OpenShift. De plus, les opérateurs peuvent étendre les
fonctions de la console Web pour inclure davantage de menus, de vues et de formulaires afin de
faciliter l’administration du cluster.
...output omitted...
16 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Pour terminer, utilisez un navigateur Web pour accéder à l’URL qui affiche la page
d’authentification :
L’utilisation des informations d’identification pour l’accès au cluster ouvre la page d’accueil de la
console Web.
DO180-OCP4.14-fr-2-20240530 17
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Chaque perspective présente à l’utilisateur des pages et des catégories de menus qui répondent
aux besoins spécifiques de ces deux personas. La perspective Administrator se concentre sur
la configuration du cluster, les déploiements, et les opérations du cluster et des charges de travail
en cours d’exécution. Les pages de la perspective Developer se concentrent sur la création et
l’exécution d’applications.
Note
Lors de la connexion initiale à la console Web, une option vous propose d’effectuer
une courte visite informative. Cliquez sur Skip Tour si vous préférez ignorer l’option
de visite à ce stade.
Par défaut, la console affiche la page Home > Overview qui fournit un aperçu rapide des
configurations initiales du cluster, de la documentation et de l’état général du cluster. Accédez à
18 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Home > Projects pour lister tous les projets du cluster qui sont disponibles pour les informations
d’identification en cours d’utilisation.
Vous pouvez d’abord parcourir la page Operators > OperatorHub qui permet d’accéder à la
collection d’opérateurs disponibles pour votre cluster.
En ajoutant des opérateurs au cluster, vous pouvez étendre les fonctions fournies par votre cluster
OpenShift. Utilisez le filtre de recherche pour trouver les opérateurs disponibles afin d’améliorer le
cluster et de fournir les aspects OpenShift dont vous avez besoin.
En cliquant sur le lien sur la page Operator Hub, vous pouvez parcourir le catalogue des
développeurs (Developer Catalog).
Sélectionnez un projet, ou utilisez le filtre de recherche pour trouver un projet spécifique, afin de
consulter le catalogue des développeurs de ce projet. C’est là que se trouvent les applications
partagées, les services, les sources d’événements ou les compilateurs Source-to-image.
DO180-OCP4.14-fr-2-20240530 19
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Après avoir trouvé les ajouts préférés pour un projet, un administrateur de cluster peut
personnaliser davantage encore le contenu fourni par le catalogue. En adoptant cette approche
pour ajouter les fonctions nécessaires à un projet, les développeurs peuvent les personnaliser afin
de fournir un déploiement d’application idéal.
• Pod : plus petite unité d’une application en conteneur gérée par Kubernetes. Un pod est
constitué d’un ou de plusieurs conteneurs.
• Déploiement : unité opérationnelle qui permet une gestion précise d’une application en cours
d’exécution.
• Projet : espace de noms Kubernetes avec des annotations supplémentaires qui fournissent une
étendue multisite pour les applications.
• Route : configuration réseau permettant d’exposer vos applications et services à des ressources
situées en dehors du cluster.
Ces concepts sont abordés plus en détail tout au long du cours. Vous trouverez ces concepts
dans la console Web en explorant les fonctions d’un cluster OpenShift à partir de l’environnement
graphique.
Références
Pour plus d’informations sur la console Web OpenShift, reportez-vous à la
documentation Web console (Console Web) de Red Hat OpenShift Container
Platform, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/web_console/index
20 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
DO180-OCP4.14-fr-2-20240530 21
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Exercice guidé
Résultats
• Découvrir les fonctions et les composants de Red Hat OpenShift à l’aide de la console
Web.
• Utiliser la console Web pour décrire les nœuds du cluster, la mise en réseau, le stockage et
l’authentification.
• Afficher les opérateurs de cluster, les pods, les déploiements et les services par défaut.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Instructions
1. En tant qu’utilisateur developer, localisez la console Web Red Hat OpenShift et accédez-
y.
1.1. Utilisez le terminal pour vous connecter au cluster OpenShift en tant qu’utilisateur
developer avec le mot de passe developer.
...output omitted...
22 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
2.1. Cliquez sur Red Hat Identity Management et connectez-vous en tant qu’utilisateur
developer avec le mot de passe developer.
DO180-OCP4.14-fr-2-20240530 23
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Note
Cliquez sur Skip Tour pour ignorer l’option permettant d’effectuer une courte visite
lors de la première consultation.
3. Utilisez la perspective Developer de la console Web pour créer votre premier projet.
3.1. Dans la section Getting Started de la page +Add, cliquez sur Create a new
project pour ouvrir l’assistant Create Project.
24 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
4.1. Sélectionnez le lien Start building your application pour parcourir les exemples
d’applications disponibles.
DO180-OCP4.14-fr-2-20240530 25
chapitre 1 | Présentation de Kubernetes et d’OpenShift
4.2. Saisissez Apache dans la barre de recherche pour afficher les exemples
d’applications disponibles pour le déploiement.
4.3. Sélectionnez l’option Samples à partir de Apache HTTP Server (httpd) dans la liste
des applications disponibles, puis cliquez sur Create dans le panneau latéral.
26 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
DO180-OCP4.14-fr-2-20240530 27
chapitre 1 | Présentation de Kubernetes et d’OpenShift
5.2. Sélectionnez la liste Actions pour afficher les contrôles disponibles pour le
déploiement de application-test.
28 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
6.2. Sélectionnez le projet intro-navigate pour ouvrir la page Project details. Cette page
comprend une présentation générale du projet, telle que l’état du projet et des détails
sur l’utilisation des ressources.
7.1. À partir du menu de la console Web OpenShift, accédez à Workloads > Pods pour
afficher les pods application-test.
DO180-OCP4.14-fr-2-20240530 29
chapitre 1 | Présentation de Kubernetes et d’OpenShift
7.2. Accédez à Workloads > Deployments pour afficher la liste des déploiements du
projet.
8.1. Accédez à Networking > Services, puis cliquez sur application-test pour afficher les
détails du service application-test.
30 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
8.2. Accédez à Networking > Route, puis cliquez sur application-test pour afficher les
détails de la route application-test.
9.1. À partir du menu de la console Web OpenShift, accédez à Home > Projects.
Sélectionnez Delete Project dans le menu contextuel du projet intro-navigate.
9.2. Saisissez le nom du projet dans la zone de texte, puis sélectionnez Delete.
DO180-OCP4.14-fr-2-20240530 31
chapitre 1 | Présentation de Kubernetes et d’OpenShift
10. Connectez-vous à la console Web OpenShift en tant qu’utilisateur admin pour examiner
les détails supplémentaires du cluster.
Note
Lorsque vous utilisez un compte d’administrateur de cluster, vous pouvez parcourir
les composants du cluster. Cependant, ne modifiez et ne supprimez aucun des
composants.
10.1. Connectez-vous à la console Web. Sélectionnez Red Hat Identity Management, puis
saisissez le nom d’utilisateur admin et le mot de passe redhatocp.
32 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
10.2. À partir du menu de la console Web OpenShift, accédez à Operators > Installed
Operators. Chaque opérateur fournit une fonction spécifique pour le cluster.
Sélectionnez un opérateur pour en afficher les détails.
10.3. Accédez à Workloads > Pods pour afficher la liste de tous les pods du cluster. La
barre de recherche située dans la partie supérieure permet de réduire la liste des
pods. Sélectionnez un pod pour en afficher les détails.
10.4. Accédez à Workloads > Deployments pour afficher la liste de tous les déploiements
du cluster. Sélectionnez un déploiement pour en afficher les détails.
DO180-OCP4.14-fr-2-20240530 33
chapitre 1 | Présentation de Kubernetes et d’OpenShift
10.5. Accédez à Networking > Services pour afficher la liste de tous les services du cluster.
Sélectionnez un service pour en afficher les détails.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
34 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
DO180-OCP4.14-fr-2-20240530 35
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Résultats
• Parcourir les panneaux Events, Compute et Observe de la console Web OpenShift pour évaluer
l’état général d’un cluster.
En règle générale, les termes nœud et machine sont interchangeables. Cependant, Red Hat
OpenShift Container Platform (RHOCP) utilise le terme machine de manière plus spécifique.
Dans OpenShift, une machine est la ressource qui décrit un nœud de cluster. L’utilisation d’une
ressource machine est particulièrement utile lorsque vous utilisez des fournisseurs de cloud public
pour mettre en service l’infrastructure.
Une ressource MachineConfig définit l’état initial et toute modification apportée aux fichiers,
aux services, aux mises à jour du système d’exploitation et aux versions critiques du service
OpenShift pour les services kubelet et cri-o. OpenShift s’appuie sur l’opérateur MCO
(Machine Config Operator) pour gérer les systèmes d’exploitation et la configuration des
machines du cluster. L’opérateur MCO est un opérateur au niveau du cluster qui garantit la
configuration correcte de chaque machine. Cet opérateur effectue également des tâches
d’administration périodiques telles que des mises à jour du système. Il utilise les définitions de
machine d’une ressource MachineConfig pour valider et corriger en continu l’état des machines
du cluster sur l’état prévu. Après une modification MachineConfig, l’opérateur MCO orchestre
l’exécution des modifications pour tous les nœuds affectés.
Note
L’orchestration des modifications de MachineConfig via l’opérateur MCO est
priorisée par ordre alphabétique et par zone, en utilisant l’étiquette de nœud
topology.kubernetes.io/zone.
36 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Cliquez sur le nom d’un nœud pour accéder à la page de présentation du nœud. Sur la page de
présentation du nœud, vous pouvez consulter les journaux du nœud ou vous connecter au nœud à
l’aide du terminal.
Sur la page précédente de la console Web, affichez les journaux du nœud et examinez les
informations système pour faciliter la résolution des problèmes affectant le nœud.
DO180-OCP4.14-fr-2-20240530 37
chapitre 1 | Présentation de Kubernetes et d’OpenShift
La page précédente présente le terminal de console Web qui est connecté au nœud du cluster.
À partir de cet onglet, vous pouvez accéder au pod de débogage et utiliser les commandes des
fichiers binaires de l’hôte pour afficher l’état des services du nœud. Un pod de débogage de nœud
OpenShift est une interface vers un conteneur qui s’exécute sur le nœud.
Bien qu’il soit déconseillé d’effectuer directement des modifications sur le nœud de cluster à
partir du terminal, il est d’usage de se connecter au nœud du cluster pour l’enquête diagnostique
et la correction des erreurs. À partir de ce terminal, vous pouvez utiliser les mêmes binaires que
ceux qui sont disponibles dans le nœud de cluster proprement dit.
De plus, les onglets de la page de présentation du nœud affichent les métriques, les événements
et le fichier de définition YAML du nœud.
38 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Vous pouvez filtrer et trier les pods par projet et par d’autres champs. Pour afficher la page des
détails d’un pod, cliquez sur le nom d’un pod dans la liste.
La page des détails du pod contient des liens vers des métriques de pod, des variables
d’environnement, des journaux, des événements, un terminal et la définition YAML du pod. Les
journaux du pod sont disponibles sur la page Pods > Logs et fournissent des informations sur
l’état du pod. La page Pods > Terminal ouvre une connexion shell au pod à des fins d’inspection et
de résolution des problèmes. Bien qu’il soit déconseillé de modifier un pod en cours d’exécution,
le terminal est utile pour diagnostiquer les problèmes du pod et les résoudre. Pour corriger un
pod, mettez à jour sa configuration afin de prendre en compte les modifications nécessaires, puis
redéployez le pod.
En fonction des définitions du moniteur, les alertes sont alors disponibles sur la base de la
métrique interrogée et des critères de réussite définis. Le moniteur compare en permanence la
métrique collectée et crée une alerte lorsque les conditions de réussite ne sont plus remplies. Par
exemple, un moniteur de service Web interroge le port d’écoute (port 80) et émet des alertes
uniquement si la réponse provenant de ce port n’est plus valide.
Dans la console Web, accédez à Observe > Metrics pour visualiser les métriques collectées à l’aide
d’un utilitaire de requête de données basé sur Grafana. Sur cette page, les utilisateurs peuvent
DO180-OCP4.14-fr-2-20240530 39
chapitre 1 | Présentation de Kubernetes et d’OpenShift
soumettre des requêtes pour créer des graphiques de données et des tableaux de bord, que les
administrateurs peuvent consulter afin de collecter des statistiques utiles pour le cluster et les
applications.
Pour les moniteurs configurés, accédez à Observe > Alerting pour afficher les alertes
de déclenchement, et effectuez un filtrage sur la gravité des alertes pour afficher celles
qui nécessitent une correction. Les données d’alerte sont un élément clé pour aider les
administrateurs à fournir l’accès aux clusters et aux applications, ainsi que les fonctions
respectives.
Événements Kubernetes
En règle générale, les administrateurs connaissent bien le contenu des fichiers journaux pour les
services, alors que ces journaux ont tendance à être très détaillés et très précis. Les événements
fournissent une abstraction de haut niveau pour les fichiers journaux et pour présenter des
informations sur les modifications les plus importantes. Les événements sont utiles pour
comprendre rapidement les performances et le comportement du cluster, des nœuds, des
projets ou des pods. Les événements fournissent des détails permettant de comprendre les
performances générales et de mettre en évidence les problèmes importants. Les journaux
fournissent un niveau de détail plus approfondi pour résoudre des problèmes spécifiques.
La page Home > Events affiche les événements de tous les projets ou d’un projet spécifique. Ils
peuvent être filtrés et faire l’objet de recherches.
40 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Références
Pour plus d’informations sur les machines Red Hat OpenShift Container Platform,
reportez-vous au chapitre Overview of Machine Management (Présentation de la
gestion des machines) de la documentation Machine Management (Gestion des
machines) de Red Hat OpenShift Container Platform, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/machine_management/
index#overview-of-machine-management
DO180-OCP4.14-fr-2-20240530 41
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Exercice guidé
Résultats
• Explorer et afficher les fonctions et composants de surveillance.
• Utiliser une connexion de terminal au nœud master01 pour afficher les services crio et
kubelet.
• Explorer la page Events et filtrer les événements par nom de ressource, type et message.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Instructions
1. En tant qu’utilisateur developer, localisez la console Web Red Hat OpenShift et accédez-
y.
1.1. Utilisez le terminal pour vous connecter au cluster OpenShift en tant qu’utilisateur
developer avec le mot de passe developer.
42 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
2.1. Cliquez sur Red Hat Identity Management et connectez-vous en tant qu’utilisateur
admin avec le mot de passe redhatocp.
DO180-OCP4.14-fr-2-20240530 43
chapitre 1 | Présentation de Kubernetes et d’OpenShift
La section Overview contient des liens vers une documentation utile et une
procédure détaillée de configuration initiale du cluster.
3.2. Faites défiler vers le bas pour afficher la section Status, qui contient un résumé des
performances et de l’intégrité du cluster.
Nombre des en-têtes sont des liens vers des sections avec des informations plus
détaillées sur le cluster.
3.3. Continuez à faire défiler la page pour afficher la section Cluster utilization, qui
contient des métriques et des graphiques illustrant la consommation des ressources.
44 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
3.4. Continuez à faire défiler la page pour afficher la section Details, qui contient des
informations telles que l’adresse de l’API de cluster, l’ID du cluster et la version de
Red Hat OpenShift.
3.5. Faites défiler la page jusqu’à la section Cluster Inventory, qui contient des liens vers
les pages Nodes, Pods, StorageClasses et PersistentVolumeClaim.
3.6. La dernière partie de la page contient la section Activity, qui liste les activités en
cours et les événements récents pour le cluster.
4. Utilisez la console Web OpenShift pour accéder au terminal d’un nœud de cluster. À
partir du terminal, déterminez l’état du service d’agent du nœud kubelet et du service
d’interface d’exécution du conteneur CRI-O.
4.1. Accédez à Compute > Nodes pour afficher la machine qui fournit les ressources du
cluster.
DO180-OCP4.14-fr-2-20240530 45
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Note
Le cluster de la salle de classe s’exécute sur un seul nœud nommé master01, qui
sert de plan de contrôle et plan de données pour le cluster. Il est conçu à des fins de
formation. Un cluster de production utilise plusieurs nœuds pour garantir la stabilité
et fournir une architecture à haute disponibilité.
4.2. Cliquez sur le lien master01 pour afficher les détails du nœud de cluster.
4.3. Cliquez sur l’onglet Terminal pour vous connecter à un shell sur le nœud master01.
Avec le shell interactif sur cette page, vous pouvez exécuter des commandes
directement sur le nœud du cluster.
4.4. Exécutez la commande chroot /host pour activer les binaires hôtes sur le nœud.
46 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
5.1. À partir du menu de la console Web OpenShift, accédez à Observe > Alerting pour
afficher les informations d’alerte du cluster.
5.2. Sélectionnez l’onglet Alerting rules pour afficher les différentes définitions d’alerte.
DO180-OCP4.14-fr-2-20240530 47
chapitre 1 | Présentation de Kubernetes et d’OpenShift
5.3. Filtrez les règles d’alerte par nom et recherchez le terme storageClasses.
48 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
6.1. Accédez à Observe > Metrics pour ouvrir l’utilitaire des métriques du cluster.
6.2. Cliquez sur Insert example query pour compléter le graphique des métriques avec
des exemples de données.
6.3. Dans le graphique, survolez n’importe quel point de la chronologie pour afficher les
points de données détaillés.
DO180-OCP4.14-fr-2-20240530 49
chapitre 1 | Présentation de Kubernetes et d’OpenShift
7.1. Accédez à Home > Events pour ouvrir le journal des événements du cluster.
Note
Le journal des événements est mis à jour toutes les 15 minutes et un délai
supplémentaire peut être nécessaire pour renseigner les entrées.
7.2. Faites défiler vers le bas pour afficher un flux classé par ordre chronologique
contenant les événements du cluster.
50 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Note
Sélectionnez un événement pour ouvrir la page Details de la ressource associée.
8. Filtrez les événements par nom de ressource, par type ou par message.
8.1. Dans la liste déroulante Resources, utilisez la barre de recherche pour effectuer un
filtrage sur le terme pod et cochez la case intitulée Pod pour afficher les événements
associés à cette ressource.
8.2. Continuez à préciser le filtre en sélectionnant Normal dans la liste déroulante des
types.
8.3. Filtrez les résultats à l’aide de la zone de texte Message. Saisissez le texte started
container pour récupérer les événements correspondants.
DO180-OCP4.14-fr-2-20240530 51
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
52 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Open Lab
Présentation de Kubernetes et
d’OpenShift
Recherchez des informations essentielles sur votre cluster OpenShift en parcourant sa
console Web.
Résultats
Accédez à la console Web Red Hat OpenShift Container Platform pour trouver divers
éléments d’information et détails de configuration.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que Red Hat OpenShift Container Platform est
déployé et prêt pour l’atelier.
Instructions
1. Connectez-vous à la console Web Red Hat OpenShift Container Platform, en utilisant
Red Hat Identity Management comme utilisateur admin avec le mot de passe redhatocp,
et examinez les réponses du quiz précédent.
2. Affichez la version du cluster sur la page Overview du cluster.
3. Affichez les types de gravité d’alerte disponibles dans les filtres de la page Alerting.
4. Affichez les étiquettes de la route thanos-querier.
5. Affichez les classes de stockage disponibles dans le cluster.
6. Affichez les opérateurs installés pour le cluster.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 53
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Solution
Présentation de Kubernetes et
d’OpenShift
Recherchez des informations essentielles sur votre cluster OpenShift en parcourant sa
console Web.
Résultats
Accédez à la console Web Red Hat OpenShift Container Platform pour trouver divers
éléments d’information et détails de configuration.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que Red Hat OpenShift Container Platform est
déployé et prêt pour l’atelier.
Instructions
1. Connectez-vous à la console Web Red Hat OpenShift Container Platform, en utilisant
Red Hat Identity Management comme utilisateur admin avec le mot de passe redhatocp,
et examinez les réponses du quiz précédent.
1.2. Cliquez sur Red Hat Identity Management, saisissez le nom d’utilisateur admin et le
mot de passe redhatocp, puis cliquez sur Log in pour accéder à la page d’accueil.
54 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
2.1. Faites défiler la page Home > Overview vers le bas pour afficher les détails du cluster.
DO180-OCP4.14-fr-2-20240530 55
chapitre 1 | Présentation de Kubernetes et d’OpenShift
3. Affichez les types de gravité d’alerte disponibles dans les filtres de la page Alerting.
3.2. Cliquez sur la liste déroulante Filter pour afficher les options de gravité disponibles.
56 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
DO180-OCP4.14-fr-2-20240530 57
chapitre 1 | Présentation de Kubernetes et d’OpenShift
4.4. Faites défiler la page des détails de route thanos-querier vers le bas pour afficher
les étiquettes.
58 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 59
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Quiz
Présentation de Kubernetes et
d’OpenShift
Répondez aux questions suivantes en sélectionnant un ou plusieurs éléments :
2. Quels sont les trois types de gravité disponibles pour les alertes dans le cluster ?
(Choisissez-en trois.)
a. Avertissement
b. Déclenchement
c. Info
d. Urgent
e. Critique
f. Oups !
3. Quelles sont les trois étiquettes appliquées à la route thanos-querier dans l’espace
de noms openshift-monitoring ? (Choisissez-en trois.)
a. app.kubernetes.io/component=query-layer
b. app.kubernetes.io/instance=thanos-querier
c. app.kubernetes.io/part-of=openshift-storage
d. app.kubernetes.io/version=0.30.2
4. Quels sont les deux objets répertoriés en tant qu’objets StorageClasses pour le
cluster ? (Choisissez-en deux.)
a. ceph-storage
b. nfs-storage
c. k8s-lvm-vg1
d. local-volume
e. lvms-vg1
60 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
5. Lorsque All Projects est sélectionné en haut, quels sont les trois opérateurs installés
dans le cluster ? (Choisissez-en trois.)
a. MongoDB Operator
b. MetalLB Operator
c. Red Hat Fuse
d. Stockage LVM
e. Serveur de paquetages
DO180-OCP4.14-fr-2-20240530 61
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Solution
Présentation de Kubernetes et
d’OpenShift
Répondez aux questions suivantes en sélectionnant un ou plusieurs éléments :
2. Quels sont les trois types de gravité disponibles pour les alertes dans le cluster ?
(Choisissez-en trois.)
a. Avertissement
b. Déclenchement
c. Info
d. Urgent
e. Critique
f. Oups !
3. Quelles sont les trois étiquettes appliquées à la route thanos-querier dans l’espace
de noms openshift-monitoring ? (Choisissez-en trois.)
a. app.kubernetes.io/component=query-layer
b. app.kubernetes.io/instance=thanos-querier
c. app.kubernetes.io/part-of=openshift-storage
d. app.kubernetes.io/version=0.30.2
4. Quels sont les deux objets répertoriés en tant qu’objets StorageClasses pour le
cluster ? (Choisissez-en deux.)
a. ceph-storage
b. nfs-storage
c. k8s-lvm-vg1
d. local-volume
e. lvms-vg1
62 DO180-OCP4.14-fr-2-20240530
chapitre 1 | Présentation de Kubernetes et d’OpenShift
5. Lorsque All Projects est sélectionné en haut, quels sont les trois opérateurs installés
dans le cluster ? (Choisissez-en trois.)
a. MongoDB Operator
b. MetalLB Operator
c. Red Hat Fuse
d. Stockage LVM
e. Serveur de paquetages
DO180-OCP4.14-fr-2-20240530 63
chapitre 1 | Présentation de Kubernetes et d’OpenShift
Résumé
• Un conteneur est un processus encapsulé qui inclut les dépendances d’exécution requises pour
l’exécution d’une application.
• Le pod est la plus petite unité organisationnelle pour une application en conteneur dans un
cluster Kubernetes.
• Red Hat OpenShift Container Platform (RHOCP) ajoute des fonctions adaptées aux entreprises
à la plateforme de conteneurs Kubernetes pour répondre aux besoins métier plus étendus.
• La plupart des tâches administratives effectuées par les développeurs et les administrateurs de
cluster sont disponibles via la console Web RHOCP.
• Les journaux, les métriques, les alertes, les connexions de terminal aux nœuds et aux pods du
cluster, ainsi que de nombreuses autres fonctions sont disponibles via la console Web RHOCP.
64 DO180-OCP4.14-fr-2-20240530
chapitre 2
DO180-OCP4.14-fr-2-20240530 65
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Résultats
• Accéder à un cluster OpenShift à l’aide des interfaces de ligne de commande Kubernetes et
OpenShift.
La commande oc vous permet de créer des applications et de gérer des projets Red Hat
OpenShift Container Platform (RHOCP) à partir d’un terminal. L’interface de ligne de commande
OpenShift est idéale dans les situations suivantes :
Vous pouvez également installer la CLI kubectl indépendamment de la CLI oc. Vous devez
utiliser une version de la CLI kubectl qui n’est pas éloignée de plus d’une version mineure de
celle de votre cluster. Par exemple, un client v1.26 peut communiquer avec les plans de contrôle
v1.25, v1.26 et v1.27. L’utilisation de la dernière version compatible de l’interface de ligne de
commande kubectl permet d’éviter les problèmes imprévus.
Avant d’effectuer une installation manuelle du binaire kubectl pour une installation Linux, vous
devez télécharger la dernière version à l’aide de la commande curl.
Ensuite, vous devez télécharger le fichier de somme de contrôle kubectl, puis valider le binaire
kubectl par rapport au fichier de somme de contrôle.
66 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Si la vérification échoue, la commande sha256sum se ferme avec un état non nul et imprime un
message kubectl: FAILED.
Note
Si vous ne disposez pas de l’accès root sur le système cible, vous pouvez toujours
installer l’interface de ligne de commande kubectl dans le répertoire ~/.local/
bin. Pour plus d’informations, consultez https://kubernetes.io/docs/tasks/tools/
install-kubectl-linux/.
Enfin, exécutez la commande kubectl version pour vérifier la version installée. Cette
commande imprime les versions client et serveur. Utilisez l’option --client pour afficher
uniquement la version client.
Une distribution basée sur Red Hat Enterprise Linux (RHEL) peut également installer l’interface
de ligne de commande kubectl à l’aide de la commande suivante :
Pour afficher la liste des commandes kubectl disponibles, exécutez la commande kubectl --
help.
DO180-OCP4.14-fr-2-20240530 67
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Vous pouvez également utiliser l’option --help sur n’importe quelle commande pour afficher
des informations détaillées à son sujet, y compris sa finalité, des exemples, les sous-commandes
disponibles et les options. Par exemple, la commande suivante fournit des informations sur la
commande kubectl create et son utilisation.
Examples:
# Create a pod using the data in pod.json
kubectl create -f ./pod.json
# Edit the data in registry.yaml in JSON then create the resource using the
edited data
kubectl create -f registry.yaml --edit -o json
Available Commands:
clusterrole Create a cluster role
clusterrolebinfing Create a cluster role binding for a particular cluster
role
...output omitted...
Kubernetes utilise de nombreux composants de ressource pour la prise en charge des applications.
La commande kubectl explain fournit des informations détaillées sur les attributs d’une
ressource donnée. Par exemple, utilisez la commande suivante pour en savoir plus sur les attributs
d’une ressource pod.
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object.
...output omitted...
68 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Étant donné que la CLI oc est un sur-ensemble de la CLI kubectl, les commandes version, --
help et explain sont les mêmes pour les deux CLI. Cependant, la CLI oc inclut des commandes
supplémentaires qui ne figurent pas dans la CLI kubectl, telles que oc login et oc new-
project.
DO180-OCP4.14-fr-2-20240530 69
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Avant de pouvoir interagir avec votre cluster RHOCP, vous devez authentifier vos requêtes.
Utilisez la commande oc login pour authentifier vos requêtes. La commande oc login fournit
une authentification et une autorisation basées sur les rôles qui protègent le cluster RHOCP
contre tout accès non autorisé. La syntaxe pour se connecter est la suivante :
You don't have any projects. You can try to create a new project, by running
$ oc new-project <projectname>
Après vous être authentifié auprès du cluster RHOCP, vous pouvez créer un projet à l’aide de la
commande oc new-project. Les projets permettent d’isoler les ressources de votre application.
Les projets sont des espaces de noms Kubernetes avec des annotations supplémentaires qui
fournissent une étendue multisite pour les applications.
Certaines commandes exigent que l’utilisateur dispose d’un accès administrateur de cluster. La
liste suivante contient plusieurs commandes oc utiles pour les administrateurs de cluster.
oc cluster-info
La commande cluster-info imprime l’adresse du plan de contrôle et d’autres services de
cluster. La commande oc cluster-info dump développe la sortie pour inclure des détails
utiles pour le débogage des problèmes de cluster.
oc api-versions
La structure des ressources de cluster a une version d’API correspondante, affichée par la
commande oc api-versions. La commande imprime les versions d’API prises en charge
sur le serveur, sous la forme « groupe/version ».
70 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
oc get clusteroperator
Les opérateurs de cluster fournis par Red Hat servent de base architecturale pour RHOCP.
RHOCP les installe par défaut. Utilisez la commande oc get clusteroperator pour
afficher la liste des opérateurs de cluster :
D’autres commandes utiles sont disponibles pour les utilisateurs standard et les administrateurs :
oc get
Utilisez la commande get pour récupérer des informations sur les ressources dans le projet
sélectionné. En général, cette commande affiche uniquement les principales caractéristiques
des ressources et n’indique pas de détails.
Par exemple, la commande suivante renvoie la liste des ressources pod dans le projet en
cours :
oc get all
Utilisez la commande oc get all pour récupérer un résumé des composants les plus
importants d’un cluster. Cette commande parcourt les principaux types de ressources pour le
projet en cours et imprime un récapitulatif de leurs informations :
DO180-OCP4.14-fr-2-20240530 71
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
oc describe
Si les récapitulatifs obtenus à partir de la commande get ne suffisent pas, vous pouvez
utiliser oc describe RESOURCE_TYPE RESOURCE_NAME pour extraire des informations
supplémentaires. Contrairement à la commande get, describe vous permet de parcourir
les différentes ressources par type. Même si la plupart des ressources principales peuvent
être décrites, cette fonction n’est pas disponible pour l’ensemble des ressources. L’exemple
suivant illustre la description d’une ressource de pod :
oc explain
Pour en savoir plus sur les champs d’un objet de ressource d’API, utilisez la commande oc
explain. Cette commande décrit la finalité de chaque ressource d’API prise en charge et les
champs qui y sont associés. Vous pouvez également utiliser cette commande pour imprimer la
documentation d’un champ spécifique d’une ressource. Les champs sont identifiés au moyen
d’un identifiant JSONPath. L’exemple suivant imprime la documentation pour le champ
.spec.containers.resources du type de ressource pod :
DESCRIPTION:
Compute Resources required by this container. Cannot be updated. More info:
https://kubernetes.io/docs/concepts/configuration/manage-resources-
containers/
FIELDS:
claims <[]ResourceClaim>
Claims lists the names of resources, defined in spec.resourceClaims, that
are used by this container.
72 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
limits <map[string]Quantity>
Limits describes the maximum amount of compute resources allowed. More
info:
https://kubernetes.io/docs/concepts/configuration/manage-resources-
containers/
requests <map[string]Quantity>
Requests describes the minimum amount of compute resources required. If
Requests is omitted for a container, it defaults to Limits if that is
explicitly specified, otherwise to an implementation-defined value. Requests
cannot exceed Limits. More info:
https://kubernetes.io/docs/concepts/configuration/manage-resources-
containers/
Ajoutez l’indicateur --recursive pour afficher tous les champs d’une ressource sans
description. Les informations relatives à chaque champ sont extraites du serveur au
format OpenAPI.
oc create
Utilisez la commande create pour créer une ressource RHOCP dans le projet en cours.
Cette commande crée des ressources à partir d’une définition de ressource. Cette commande
s’utilise généralement avec la commande oc get RESOURCE_TYPE RESOURCE_NAME -o
yaml pour modifier des définitions. Les développeurs utilisent généralement l’indicateur -f
pour signaler le fichier qui contient la représentation JSON ou YAML d’une ressource RHOCP.
Par exemple, pour créer des ressources à partir du fichier pod.yaml, utilisez la commande
suivante :
oc status
La commande oc status fournit une présentation générale du projet actuel. La commande
affiche les services, les déploiements, les configurations de compilation et les déploiements
actifs. Des informations sur les composants mal configurés sont également affichées. L’option
--suggest affiche des informations supplémentaires sur les problèmes identifiés, le cas
échéant.
oc delete
Utilisez la commande delete pour supprimer une ressource RHOCP existante du projet en
cours. Vous devez spécifier le type et le nom de la ressource.
Une connaissance de base de l’architecture OpenShift est nécessaire ici, car la suppression
de ressources gérées, telles que des pods, entraîne la création automatique de nouvelles
DO180-OCP4.14-fr-2-20240530 73
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
instances de ces ressources. Quand un projet est supprimé, cela élimine l’intégralité des
ressources et des applications qu’il contient.
Chacune de ces commandes est exécutée dans le projet sélectionné. Pour exécuter des
commandes dans un autre projet, vous devez inclure les options --namespace ou -n.
Consultez les références pour obtenir la liste complète des commandes oc.
Dans OpenShift, un utilisateur est une entité qui peut adresser des demandes à l’API RHOCP. Un
objet RHOCP User représente un acteur auquel des autorisations peuvent être accordées dans le
système en ajoutant des rôles à l’utilisateur ou au groupe de l’utilisateur. Il s’agit généralement du
compte d’un développeur ou d’un administrateur.
Utilisateurs standard
La plupart des utilisateurs RHOCP interactifs sont représentés par ce type d’utilisateur. Un
objet RHOCP User représente un utilisateur standard.
Utilisateurs système
L’infrastructure utilise des utilisateurs système pour interagir avec l’API de manière sécurisée.
Certains utilisateurs système sont créés automatiquement, y compris l’administrateur du
cluster, avec un accès complet. Par défaut, un utilisateur système anonyme est utilisé pour les
demandes non authentifiées.
Comptes de service
Les objets ServiceAccount représentent des comptes de service. RHOCP crée
automatiquement des comptes de service lors de la création d’un projet. Les administrateurs
de projet peuvent créer des comptes de service supplémentaires pour définir l’accès au
contenu de chaque projet.
Note
L’authentification et l’autorisation sont traitées plus en détail dans le cours
« DO280 : Administration de Red Hat OpenShift II : exploitation d’un cluster
Kubernetes de production ».
Le plan de contrôle RHOCP comprend un serveur OAuth intégré. Pour s’authentifier auprès de
l’API, les utilisateurs obtiennent des tokens d’accès OAuth. L’authentification par token est la
seule méthode dont le fonctionnement est garanti avec un cluster OpenShift, étant donné que
74 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Lorsqu’une personne demande un nouveau token OAuth, le serveur OAuth utilise le fournisseur
d’identité configuré pour déterminer l’identité du demandeur. Le serveur OAuth détermine ensuite
l’utilisateur auquel correspond l’identité, crée un token d’accès pour cet utilisateur, puis renvoie le
token à utiliser.
Pour récupérer un token OAuth à l’aide de la console Web OpenShift, accédez à Help > Command
line tools. Le menu Help est représenté par une icône ?.
Sur la page Command Line Tools, accédez à Copy login Command. La page suivante nécessite
que vous vous connectiez avec vos informations d’identification d’utilisateur OpenShift. Accédez
ensuite à Display token. Utilisez la commande sous l’étiquette Log in with this token pour
vous connecter à l’API OpenShift.
DO180-OCP4.14-fr-2-20240530 75
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Références
Pour plus d’informations, reportez-vous au chapitre Getting Started with the
OpenShift CLI (Prise en main de l’interface de ligne de commande OpenShift)
de la documentation CLI Tools (Outils CLI) de Red Hat OpenShift Container
Platform 4.14, à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/cli_tools/index#cli-getting-started
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/authentication_and_authorization/
index#understanding-authentication
76 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Exercice guidé
Résultats
• Utiliser la console Web OpenShift pour rechercher le fichier d’installation de l’interface de
ligne de commande OpenShift oc.
• Obtenir et utiliser un token à partir de la console Web pour accéder au cluster à partir de la
ligne de commande.
• Identifier les principales différences entre les outils de ligne de commande kubectl et
oc.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice.
Instructions
1. Connectez-vous à la console Web OpenShift en tant qu’utilisateur developer.
Recherchez le fichier d’installation de l’interface de ligne de commande OpenShift oc.
1.2. Cliquez sur Red Hat Identity Management et connectez-vous en tant qu’utilisateur
developer avec le mot de passe developer.
DO180-OCP4.14-fr-2-20240530 77
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Note
Il n’est pas nécessaire de télécharger ni d’installer les binaires oc et kubectl, qui
sont déjà installés sur la machine workstation.
2.1. Sur la page Command Line Tools, cliquez sur le lien Copy login command.
2.2. Le lien ouvre une page de connexion. Cliquez sur Red Hat Identity Management et
connectez-vous en tant qu’utilisateur developer avec le mot de passe developer.
78 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
2.3. Une page Web est affichée. Cliquez sur le lien Display token pour afficher votre token
API et la commande de connexion (login).
2.4. Copiez la commande oc login dans votre presse-papiers. Ouvrez une fenêtre de
terminal, puis utilisez la commande copiée pour vous connecter au cluster à l’aide de
votre token.
3.1. Utilisez la commande help pour lister et passer en revue les commandes disponibles
pour kubectl.
DO180-OCP4.14-fr-2-20240530 79
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Examples:
# Create a pod using the data in pod.json
kubectl create -f ./pod.json
...output omitted....
Available Commands:
clusterrole Create a cluster role
clusterrolebinding Create a cluster role binding for a particular cluster
role
configmap Create a config map from a local file, directory or
literal value
cronjob Create a cron job with the specified name
deployment Create a deployment with the specified name
...output omitted...
Options:
--allow-missing-template-keys=true:
If true, ignore any errors in templates when a field or map key is missing in the
template. Only applies to
golang and jsonpath output formats.
--dry-run='none':
Must be "none", "server", or "client". If client strategy, only print the object
that would be sent, without
sending it. If server strategy, submit server-side request without persisting the
resource.
...output omitted....
Usage:
kubectl create -f FILENAME [options]
Use "kubectl create <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all
commands).
Vous pouvez utiliser l’option --help avec n’importe quelle commande kubectl.
L’option --help fournit des informations sur une commande, y compris les sous-
commandes et options disponibles, ainsi que sa syntaxe.
3.3. Listez et passez en revue les commandes disponibles pour le binaire oc à l’aide de la
commande help.
80 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
This client helps you develop, build, deploy, and run your applications on any
OpenShift or Kubernetes cluster. It also includes the administrative
commands for managing a cluster under the 'adm' subcommand.
Basic Commands:
login Log in to a server
new-project Request a new project
new-app Create a new application
status Show an overview of the current project
project Switch to another project
projects Display existing projects
explain Get documentation for a resource
...output omitted....
3.4. Utilisez l’option --help avec la commande oc create pour afficher les sous-
commandes et options disponibles.
Examples:
# Create a pod using the data in pod.json
oc create -f ./pod.json
...output omitted...
Available Commands:
build Create a new build
clusterresourcequota Create a cluster resource quota
clusterrole Create a cluster role
clusterrolebinding Create a cluster role binding for a particular cluster
role
configmap Create a config map from a local file, directory or
literal value
cronjob Create a cron job with the specified name
deployment Create a deployment with the specified name
deploymentconfig Create a deployment config with default options that uses
a given image
...output omitted....
Options:
--allow-missing-template-keys=true:
DO180-OCP4.14-fr-2-20240530 81
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
If true, ignore any errors in templates when a field or map key is missing in the
template. Only applies to
golang and jsonpath output formats.
--dry-run='none':
Must be "none", "server", or "client". If client strategy, only print the object
that would be sent, without
sending it. If server strategy, submit server-side request without persisting the
resource.
...output omitted...
Usage:
oc create -f FILENAME [options]
....output omitted....
4. Utilisez le terminal pour identifier les composants et les ressources Kubernetes d’un cluster
OpenShift. Sauf indication contraire, toutes les commandes sont disponibles pour oc et
kubectl.
4.1. Dans un terminal, utilisez la commande oc login pour vous connecter au cluster
en tant qu’utilisateur admin avec le mot de passe redhatocp. Les utilisateurs
de cluster standard, tels que l’utilisateur developer, ne peuvent pas lister les
ressources au niveau d’une étendue de cluster.
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
4.4. Identifiez les versions d’API prises en charge à l’aide de la commande api-
versions.
82 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
4.6. Utilisez la commande get pour lister les pods dans le projet openshift-api.
Spécifiez le projet avec l’option -n.
4.7. Utilisez la commande oc status pour récupérer l’état des ressources dans le projet
openshift-authentication.
DO180-OCP4.14-fr-2-20240530 83
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
4.8. Utilisez la commande explain pour lister la description et les champs disponibles
pour les ressources services.
DESCRIPTION:
Service is a named abstraction of software service (for example, mysql)
consisting of local port (for example 3306) that the proxy listens on, and
the selector that determines which pods will answer requests sent through
the proxy.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values.
...output omitted...
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
84 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Résultats
• Interroger, formater et filtrer les attributs des ressources Kubernetes.
Note
Les commandes oc présentées dans les exemples sont identiques aux commandes
kubectl équivalentes.
La colonne APIVERSION divise les objets en groupes d’API. La colonne utilise le format <API-
Group>/<API-Version>. L’objet API-Group est vide pour les objets de ressources principales
Kubernetes.
Il existe de nombreuses ressources Kubernetes dans le contexte d’un espace de noms Kubernetes.
Les espaces de noms Kubernetes et les projets OpenShift sont en grande partie similaires. Il existe
toujours une relation 1:1 entre un espace de noms et un projet OpenShift.
La commande oc api-resources peut effectuer un filtrage plus poussé de la sortie avec des
options qui agissent sur les données.
DO180-OCP4.14-fr-2-20240530 85
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
--namespaced=true Si l’option est définie sur « false », elle renvoie des ressources
sans espace de noms. Sinon, elle renvoie des ressources avec
espace de noms.
--sort-by name Si elle n’est pas vide, cette commande trie la liste des
ressources à l’aide du champ spécifié. Le champ peut être
« name » ou « kind ».
Par exemple, utilisez la commande oc api-resources suivante pour afficher toutes les
ressources namespaced du groupe d’API apps, triées par name.
Chaque ressource contient des champs qui l’identifient ou qui décrivent sa configuration prévue.
Utilisez la commande oc explain pour obtenir des informations sur les champs valides pour un
objet. Par exemple, exécutez la commande oc explain pod pour obtenir des informations sur
les champs possibles de l’objet pod.
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
...
kind <string>
Kind is a string value representing the REST resource this object
...
metadata <ObjectMeta>
Standard object's metadata. More info:
...
86 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
spec <PodSpec>
Specification of the desired behavior of the pod. More info:
...output omitted...
Chaque ressource Kubernetes contient les champs kind, apiVersion, spec et status.
Cependant, lorsque vous créez une définition d’objet, il n’est pas nécessaire de fournir le champ
status. À la place, Kubernetes génère le champ status, et liste des informations telles que l’état
d’exécution et l’état de préparation. Le champ status est utile pour résoudre une erreur ou pour
vérifier l’état actuel d’une ressource.
Vous pouvez utiliser le chemin d’accès YAML à un champ et la notation par points pour obtenir
des informations sur un champ en particulier. Par exemple, la commande oc explain suivante
affiche des informations détaillées pour les champs pod.spec.
DESCRIPTION:
Specification of the desired behavior of the pod. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-
conventions.md#spec-and-status
FIELDS:
activeDeadlineSeconds <integer>
Optional duration in seconds the pod may be active on the node relative to
...output omitted...
Les principaux types de ressources Kubernetes ci-dessous peuvent être créés et configurés à
l’aide d’un fichier manifeste YAML ou JSON, ou en utilisant des outils de gestion OpenShift :
Pods (pod)
Les pods représentent un ensemble de conteneurs qui partagent des ressources, telles que
des adresses IP et des volumes de stockage persistants. Il s’agit de la principale unité de
travail pour Kubernetes.
Services (svc)
Ils définissent une combinaison IP/port unique qui fournit l’accès à un pool de pods. Par
défaut, les services connectent des clients à des pods à tour de rôle.
ReplicaSet (rs)
Assurez-vous qu’un nombre spécifié de réplicas de pod est en cours d’exécution à un moment
donné.
DO180-OCP4.14-fr-2-20240530 87
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Deployment (deploy)
Représentation d’un ensemble de conteneurs inclus dans un pod et des stratégies de
déploiement à utiliser. Un objet deployment contient la configuration à appliquer à
tous les conteneurs de chaque réplica de pod, tels que l’image de base, les balises, les
définitions de stockage et les commandes à exécuter au démarrage des conteneurs. Bien
que les réplicas Kubernetes puissent être créés de manière autonome dans OpenShift, ils
le sont généralement par des ressources de niveau supérieur, telles que des contrôleurs de
déploiement.
Red Hat OpenShift Container Platform (RHOCP) ajoute les principaux types de ressources ci-
dessous à Kubernetes :
BuildConfig (bc)
Définit un processus à exécuter dans le projet OpenShift. La fonction Source-to-Image (S2I)
d’OpenShift utilise une BuildConfig pour compiler une image de conteneur à partir d’un code
source d’application stocké dans un référentiel Git. Une bc collabore avec une dc pour fournir
des workflows CI/CD extensibles.
DeploymentConfig (dc)
OpenShift 4.5 a introduit le concept de ressource Deployment pour remplacer la
configuration par défaut DeploymentConfig pour les pods. Les deux concepts représentent
un ensemble de conteneurs inclus dans un pod, ainsi que les stratégies de déploiement à
utiliser.
• Chaque modification du modèle de pod utilisé par les objets Deployment déclenche
automatiquement un nouveau déploiement.
• Le processus de déploiement d’un objet Deployment peut être mis en pause à tout
moment sans affecter le processus du programme de déploiement.
• Un objet Deployment peut avoir autant de jeux de réplicas actifs que l’utilisateur
le souhaite et réduire (scale-down) les réplicas précédents. En revanche, l’objet
DeploymentConfig ne peut avoir que deux jeux de réplication actifs en même temps.
Bien que les objets Deployment remplacent par défaut les objets DeploymentConfig
obsolètes dans OpenShift 4.12 et versions ultérieures, vous pouvez toujours utiliser des
objets DeploymentConfig si vous avez besoin d’une de leurs fonctions spécifiques,
mais ils ne sont pas recommandés pour les nouvelles installations. Dans ce cas, vous devez
spécifier le type d’objet lors de la création d’une application en incluant l’indicateur --as-
deployment-config.
Routes
Représentent un nom d’hôte DNS reconnu par le routeur OpenShift comme un point d’entrée
pour les applications et les microservices.
88 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Le champ status utilise une collection d’objets de ressource condition avec les champs
suivants.
Par exemple, dans Kubernetes, un objet Deployment peut représenter une application qui
s’exécute sur votre cluster. Lorsque vous créez un objet Deployment, vous pouvez configurer
l’objet spec du déploiement pour indiquer que vous souhaitez que trois réplicas de l’application
soient en cours d’exécution. Kubernetes lit l’objet spec du déploiement et démarre trois instances
de l’application que vous avez choisie, puis met à jour le champ status pour qu’il corresponde
à votre objet spec. Si l’une de ces instances échoue, Kubernetes effectue une correction en
réponse à la différence entre les objets spec et status ; dans ce cas, pour démarrer une instance
de remplacement.
D’autres champs courants fournissent des informations de base en plus des champs spec et
status d’un objet Kubernetes.
Champ Description
metadata.name Crée une étiquette avec une clé name que d’autres ressources
dans Kubernetes peuvent utiliser à des fins de recherche.
DO180-OCP4.14-fr-2-20240530 89
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Champ Description
Dans Kubernetes, les ressources sont constituées de plusieurs objets. Ces objets définissent l’état
prévu d’une ressource. Lorsque vous créez ou modifiez un objet, vous créez un enregistrement
persistant de l’état prévu. Kubernetes lit l’objet et modifie l’état actuel en conséquence.
Tous les objets RHOCP et Kubernetes peuvent être représentés sous la forme d’une
structure JSON ou YAML. Prenons l’exemple de l’objet pod suivant au format YAML :
apiVersion: v1
kind: Pod
metadata:
name: wildfly
namespace: my_app
labels:
name: wildfly
spec:
containers:
- resources:
limits:
cpu: 0.5
image: quay.io/example/todojee:v1
name: wildfly
ports:
- containerPort: 8080
name: wildfly
env:
- name: MYSQL_DATABASE
value: items
- name: MYSQL_USER
value: user1
- name: MYSQL_PASSWORD
value: mypa55
...object omitted...
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2023-08-19T12:59:22Z"
status: "True"
type: PodScheduled
Identificateur de schéma. Dans cet exemple, l’objet est conforme au schéma du pod.
Métadonnées d’une ressource donnée, telles que des annotations, des étiquettes, un nom et
un espace de noms.
Nom unique pour un pod dans Kubernetes qui permet aux administrateurs d’exécuter des
commandes sur celui-ci.
90 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Crée une étiquette avec une clé name que d’autres ressources dans Kubernetes
(généralement un service) peuvent utiliser à des fins de recherche.
Nom du conteneur à l’intérieur d’un pod. Les noms des conteneurs sont importants pour les
commandes oc lorsqu’un pod comporte plusieurs conteneurs.
État actuel de l’objet. Kubernetes fournit ce champ où sont listées des informations telles que
l’état d’exécution, l’état de préparation et des images de conteneur.
Les étiquettes sont des paires clé-valeur que vous définissez dans le chemin de l’objet
.metadata.labels, par exemple :
kind: Pod
apiVersion: v1
metadata:
name: example-pod
labels:
app: example-pod
group: developers
...object omitted...
Champs tabulaires
DO180-OCP4.14-fr-2-20240530 91
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
RESTARTS RESTARTS 5
IP 10.8.0.60
NODE master01
Pour présenter tous les champs associés à une ressource, la sous-commande describe affiche
une description détaillée de la ressource sélectionnée et des ressources associées. Vous pouvez
sélectionner un seul objet par son nom, ou tous les objets de ce type, ou fournir un préfixe de nom
ou un sélecteur d’étiquettes.
Par exemple, la commande suivante recherche d’abord une correspondance exacte sur l’objet
TYPE et l’objet NAME-PREFIX. Si une telle ressource n’existe pas, la commande génère des détails
pour chaque ressource de ce type avec un nom et un préfixe NAME_PREFIX.
Kubernetes fournit des options de sortie aux formats YAML et JSON qui sont adaptées à l’analyse
et à l’écriture de scripts.
Sortie YAML
L’option -o yaml fournit une sortie au format YAML qui peut être analysée et qui est toujours
lisible par l’utilisateur.
Note
La documentation de référence fournit une présentation plus détaillée du
format YAML.
92 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Vous pouvez utiliser n’importe quel outil capable de traiter des documents YAML pour filtrer la
sortie YAML sur le champ que vous avez choisi. Par exemple, vous pouvez utiliser l’outil yq dans
https://mikefarah.gitbook.io/yq/ pour traiter les fichiers YAML et JSON.
Le processeur yq utilise une notation avec des points pour séparer les noms des champs dans
une requête. L’exemple suivant dirige la sortie YAML vers la commande yq pour analyser le champ
podIP.
Le [0] indiqué dans cet exemple spécifie le premier index dans le tableau items.
Note
L’environnement de l’atelier inclut la version 3.3.0 de la commande yq, que ces
exemples utilisent. Les versions ultérieures de la commande yq présentent des
incompatibilités avec les versions antérieures. Le contenu de ce cours peut ne pas
fonctionner avec d’autres versions.
Note
Un autre outil nommé yq est accessible à l’adresse https://kislyuk.github.io/yq/. Les
deux outils yq ne sont pas compatibles ; les commandes conçues pour l’un d’entre
eux ne fonctionnent pas avec l’autre.
Sortie JSON
Kubernetes utilise le format JSON en interne pour traiter les objets de ressource. Utilisez l’option
-o json pour afficher une ressource au format JSON.
Vous pouvez utiliser d’autres outils pour traiter les documents JSON, tels que l’outil jq à l’adresse
https://jqlang.github.io/jq/. Comme pour le processeur yq, utilisez le processeur jq et la
notation par points sur les champs pour interroger des informations spécifiques de la sortie au
format JSON.
.items[].status.podIP aurait également pu être utilisé dans cet exemple pour la chaîne de
requête. Les crochets vides indiquent à l’outil jq d’exécuter la requête sur tous les éléments.
DO180-OCP4.14-fr-2-20240530 93
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Sortie personnalisée
Kubernetes fournit un format de sortie personnalisé qui allie la facilité d’extraction des données via
des requêtes de style jq à un format de sortie tabulaire. Utilisez l’option -o custom-columns
avec des paires <column name> : <jq query string> séparées par des virgules.
Dans l’exemple suivant, l’expression JSONPath utilise l’opérateur range pour parcourir la liste des
pods afin d’extraire le nom du pod, son adresse IP et les ports affectés.
Vous pouvez personnaliser le format de la sortie avec des modèles Go, que le langage de
programmation Go utilise. Utilisez l’option -o go-template suivie d’un modèle Go, où les
expressions Go sont placées entre des accolades doubles, {{ }}.
94 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Références
Pour plus d’informations, reportez-vous au chapitre OpenShift CLI (oc) (CLI
OpenShift (oc)) de la documentation CLI Tools (Outils CLI) de Red Hat OpenShift
Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/cli_tools/index#cli-using-cli_cli-
developer-commands
Pour une introduction plus détaillée sur le format YAML, consultez le chapitre YAML
in a Nutshell dans la documentation Red Hat Enterprise Linux Atomic Host 7 Getting
Started with Kubernetes, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
red_hat_enterprise_linux_atomic_host/7/html-single/
getting_started_with_kubernetes/index#yaml_in_a_nutshell
Les détails des étiquettes et des sélecteurs sont disponibles dans la section
Working with Kubernetes Objects (Utilisation d’objets Kubernetes) de la
documentation Kubernetes – Labels and Selectors
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
Les détails des objets Kubernetes sont disponibles dans la section Understanding
Kubernetes Objects (Présentation des objets Kubernetes) de la
documentation Kubernetes – Understanding Kubernetes Objects
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-
objects/
DO180-OCP4.14-fr-2-20240530 95
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Exercice guidé
Résultats
• Lister et expliquer les ressources d’API prises en charge pour un cluster.
• Utiliser JSONPath et des colonnes personnalisées pour extraire des informations des
ressources.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice. Cette commande permet de s’assurer que
le cluster est accessible et que toutes les ressources sont disponibles pour cet exercice. Elle
crée également une application myapp dans le projet cli-resources.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Sélectionnez le projet cli-resources.
96 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
2.1. Affichez la liste des types de ressources disponibles à l’aide de la commande api-
resources.
DO180-OCP4.14-fr-2-20240530 97
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
...output omitted...
[student@workstation ~]$ oc api-resources --namespaced -o name | wc -l
113
Le cluster comporte 113 types de ressources de cluster avec espace de noms, telles
que pods, deployments et services.
Le cluster comporte 118 types de ressources de cluster sans espace de noms, telles
que nodes, images et project.
3. Identifiez et expliquez les types de ressources de cluster disponibles fournis par le groupe
d’API principal. Ensuite, décrivez une ressource du groupe d’API principal dans le projet
cli-resources.
98 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Le groupe d’API principal fournit plusieurs types de ressources, tels que des nœuds,
des événements et des pods.
3.2. Utilisez la commande explain pour afficher une description et les champs
disponibles pour le type de ressource pods.
DESCRIPTION:
Pod is a collection of containers that can run on a host. This resource is
created by clients and scheduled onto hosts.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
...output omitted...
Il existe un seul pod dans le projet cli-resources. Le nom du pod peut être
différent dans votre sortie.
DO180-OCP4.14-fr-2-20240530 99
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
cpu: 500m
memory: 128Mi
Requests:
cpu: 500m
memory: 128Mi
Environment: <none>
...output omitted...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 10m default-scheduler Successfully assigned cli-
resources/myapp-54fcdcd9d7-2h5vx to master01
....output omitted...
3.5. Récupérez les détails du pod dans un format structuré. Utilisez la commande get
et spécifiez la sortie au format YAML. Comparez les résultats de la commande
describe à ceux de la commande get.
L’utilisation d’un format structuré avec la commande get permet d’obtenir plus de
détails sur une ressource qu’avec la commande describe.
4. Identifiez et expliquez les types de ressources de cluster disponibles fournis par le groupe
d’API Kubernetes apps. Ensuite, décrivez une ressource du groupe d’API apps dans le
projet cli-resources.
4.1. Listez les types de ressources fournis par le groupe d’API apps.
100 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
4.2. Utilisez la commande explain pour afficher une description et les champs du type
de ressource deployments.
DESCRIPTION:
Deployment enables declarative updates for Pods and ReplicaSets.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
...output omitted...
4.3. Utilisez la commande get pour identifier toutes les ressources deployment du
projet cli-resources, le cas échéant.
4.5. Décrivez le déploiement myapp pour afficher plus d’informations sur la ressource.
DO180-OCP4.14-fr-2-20240530 101
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Selector: app=myapp
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0
unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=myapp
Containers:
myapp:
Image: registry.ocp4.example.com:8443/ubi8/httpd-24:1-215
Port: 8080
Host Port: 8080
Limits:
cpu: 500m
memory: 128Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: myapp-54fcdcd9d7 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 30m deployment-controller Scaled up replica set
myapp-54fcdcd9d7 to 1
5. Identifiez et expliquez les types de ressources de cluster disponibles fournis par le groupe
d’API de configuration OpenShift. Ensuite, décrivez une ressource du groupe d’API de
configuration OpenShift.
5.1. Lister les types de ressources fournis par le groupe d’API de configuration OpenShift.
102 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
5.2. Utilisez la commande explain pour afficher une description et les champs du type
de ressource projects.
DESCRIPTION:
Projects are the unit of isolation and collaboration in OpenShift. A
project has one or more members, a quota on the resources that the project
may consume, and the security controls on the resources in the project.
Within a project, members may have different roles - project administrators
can set membership, editors can create and manage the resources, and
viewers can see but not access running containers. In a normal cluster
project administrators are not able to alter their quotas - that is
restricted to cluster administrators.
Listing or watching projects will return only projects the user has the
reader role on.
...output omitted...
DO180-OCP4.14-fr-2-20240530 103
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
openshift.io/sa.scc.mcs=s0:c26,c25
openshift.io/sa.scc.supplemental-groups=1000710000/10000
openshift.io/sa.scc.uid-range=1000710000/10000
Display Name: <none>
Description: <none>
Status: Active
Node Selector: <none>
Quota: <none>
Resource limits: <none>
La commande get fournit des informations supplémentaires, tels que les attributs
kind et apiVersion, sur la ressource de projet.
6. Vérifiez l’état du cluster en examinant ses services. Formatez les sorties de commande en
utilisant des filtres.
6.1. Récupérez la liste des pods pour l’opérateur Etcd. L’opérateur Etcd est disponible
dans l’espace de noms openshift-etcd. Spécifiez l’espace de noms avec l’option
--namespace ou -n.
104 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
DO180-OCP4.14-fr-2-20240530 105
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
6.4. Utilisez la commande get afin de récupérer des informations détaillées sur les
pods dans l’espace de noms openshift-storage. Utilisez le format YAML et des
colonnes personnalisées pour filtrer la sortie conformément au tableau suivant :
PodName metadata.name
ContainerName spec.containers[].name
Phase status.phase
IP status.podIP
Ports spec.containers[].ports[].containerPort
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
106 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Résultats
• Exécuter une requête pour connaître l’intégrité des services et composants de cluster
essentiels.
Les opérateurs s’intègrent aux API Kubernetes et aux outils CLI tels que les commandes kubectl
et oc. Les opérateurs permettent de surveiller les applications, d’effectuer des bilans de santé, de
gérer les mises à jour OTA (Over-the-Air) et de s’assurer que les applications restent dans l’état
que vous avez spécifié.
Étant donné que CRI-O et le Kubelet s’exécutent sur chaque nœud, presque toutes les autres
fonctions de cluster peuvent être gérées sur le plan de contrôle à l’aide d’opérateurs. Les
composants qui sont ajoutés au plan de contrôle à l’aide d’opérateurs sont notamment les services
d’informations d’identification et de mise en réseau critiques.
Dans RHOCP, les opérateurs sont gérés par deux systèmes différents, en fonction de leur finalité.
DO180-OCP4.14-fr-2-20240530 107
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
de sortie lisible par l’utilisateur pour une ressource. Ainsi, le format de sortie peut changer
avec une mise à jour de la version RHOCP.
Pour disposer d’un format de sortie moins susceptible d’être affecté par une mise à jour de
version, utilisez l’une des options de sortie -o de la commande get. Par exemple, utilisez la
commande oc get clusteroperators suivante pour les détails de sortie au format YAML
pour l’opérateur dns.
Opérateurs OLM
Il s’agit d’opérateurs complémentaires facultatifs gérés par OLM qui peuvent être mis à la
disposition des utilisateurs pour qu’ils les exécutent dans leurs applications.
Vous pouvez également utiliser les commandes describe et get pour demander des détails
sur les champs associés aux opérateurs complémentaires.
Les opérateurs utilisent un ou plusieurs pods pour fournir des services de cluster. Vous trouverez
les espaces de noms de ces pods dans la section relatedObjects de la sortie détaillée de
l’opérateur. En tant qu’utilisateur avec un rôle cluster-admin, utilisez l’option -n namespace
sur la commande get pod pour afficher les pods. Par exemple, utilisez la commande get pods
suivante pour récupérer la liste des pods dans l’espace de noms openshift-dns-operator.
108 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Utilisez les formats de sortie -o yaml ou -o json pour afficher ou analyser plus d’informations
sur les pods. Les conditions de ressource, qui se trouvent dans le statut de la ressource, effectuent
le suivi de l’état actuel de l’objet de ressource. Dans l’exemple suivant, le processeur jq est utilisé
pour extraire les valeurs status des détails de sortie JSON pour le pod dns.
Outre l’affichage de la liste des pods d’un espace de noms, vous pouvez utiliser l’option --show-
labels de la commande get pour imprimer les étiquettes utilisées par les pods. L’exemple
suivant récupère les pods et leurs étiquettes dans l’espace de noms openshift-etcd.
L’option -A affiche les pods de tous les espaces de noms. Utilisez l’option -n namespace
pour filtrer les résultats afin d’afficher les pods d’un seul espace de noms. Utilisez l’option --
containers pour afficher l’utilisation des ressources des conteneurs dans un pod. Par exemple,
DO180-OCP4.14-fr-2-20240530 109
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
utilisez la commande suivante pour afficher l’utilisation des ressources des conteneurs dans le pod
etcd-master01 de l’espace de noms openshift-etcd.
Pour chacune des ressources listées dans la section Cluster Utilization, les administrateurs
peuvent cliquer sur le lien pour l’utilisation des ressources actuelles. Le lien affiche une fenêtre
avec une décomposition des principaux consommateurs de cette ressource. Les principaux
consommateurs peuvent être triés par projet, par pod ou par nœud. La liste des plus grands
consommateurs peut être utile pour identifier les pods ou nœuds problématiques. Par exemple, un
pod avec une fuite de mémoire inattendue peut apparaître en haut de la liste.
110 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Toutes les mesures sont extraites de Prometheus. Cliquez sur n’importe quel graphique pour
accéder à la page Metrics. Affichez la requête exécutée et inspectez les données en détail.
Si un quota de ressources est créé pour le projet, la demande et les limites du projet actuel sont
affichées sur la page Project Details.
DO180-OCP4.14-fr-2-20240530 111
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Figure 2.9: Graphiques de séries chronologiques montrant différentes mesures pour un pod
Pour effectuer une requête, accédez à Observe > Metrics, saisissez une expression Prometheus
Query Language dans le champ de texte, puis cliquez sur Run Queries. Les résultats de la requête
sont affichés sous la forme d’un graphique de série chronologique :
Figure 2.10: Utilisation d’une requête Prometheus pour afficher un graphique de séries chronologiques
112 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Note
Prometheus Query Language n’est pas abordé en détail dans ce cours. Vous
trouverez, dans la section des références, un lien vers la documentation officielle.
Pour lire les événements, utilisez la commande get events. La commande liste les événements
du projet RHOCP en cours (espace de noms). Vous pouvez afficher les événements d’un autre
projet en ajoutant l’option -n namespace à la commande. Pour lister les événements de tous les
projets, utilisez l’option -A (ou --all-namespaces).
Note
Pour trier les événements par heure, ajoutez l’option --sort-
by .metadata.creationTimestamp à la commande oc get events.
La commande get events suivante imprime les événements de l’espace de noms openshift-
kube-controller-manager.
Vous pouvez utiliser la commande describe pod pod-name pour restreindre les résultats à un
seul pod. Par exemple, pour ne récupérer que les événements liés à un pod mysql, vous pouvez
vous reporter au champ Events dans la sortie de la commande oc describe pod mysql :
Alertes Kubernetes
RHOCP comprend une pile de surveillance basée sur le projet Open Source Prometheus. Par
défaut, cette pile est configurée pour surveiller les principaux composants du cluster RHOCP.
Vous pouvez également configurer la pile pour la surveillance de projets utilisateur.
Les composants de la pile de surveillance sont installés dans l’espace de noms openshift-
monitoring. L’opérateur Prometheus de l’espace de noms`openshift-monitoring` crée,
DO180-OCP4.14-fr-2-20240530 113
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Utilisez la commande get all suivante pour afficher la liste de toutes les ressources, de leur état
et de leurs types dans l’espace de noms openshift-monitoring.
[user@host~]$ oc cluster-info
La sortie oc cluster-info est une sortie de haut niveau qui permet de vérifier que les nœuds
du cluster sont en cours d’exécution. Pour obtenir une vue plus détaillée des nœuds du cluster,
utilisez la commande get nodes.
L’exemple illustre un seul nœud master01 avec plusieurs rôles. La valeur STATUS de Ready
signifie que ce nœud est sain et qu’il peut accepter de nouveaux pods. Une valeur STATUS de
NotReady signifie qu’une condition a déclenché l’état NotReady et que le nœud n’accepte pas
de nouveaux pods.
114 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Comme pour toute autre ressource RHOCP, vous pouvez explorer plus en détail la ressource de
nœud à l’aide de la commande describe node node-name. Pour obtenir une sortie analysable
des mêmes informations, utilisez les options de sortie -o json ou -o yaml avec la commande
get node node-name. Pour plus d’informations sur l’utilisation et l’analyse de ces formats de
sortie, consultez la section Examen des ressources Kubernetes .
La sortie de la commande get nodes node-name avec l’option -o json ou -o yaml est
longue. Dans les exemples suivants, l’option -jsonpath ou le processeur jq est utilisé pour
analyser la sortie de la commande get node node-name.
Capacity:
{"cpu":"8","ephemeral-storage":"125293548Ki","hugepages-1Gi":"0",
"hugepages-2Mi":"0","memory":"20531668Ki","pods":"250"}
Affichez l’objet status d’un nœud pour comprendre son intégrité actuelle.
DO180-OCP4.14-fr-2-20240530 115
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
"lastHeartbeatTime": "2023-03-22T16:34:57Z",
"lastTransitionTime": "2023-02-23T20:35:15Z",
"message": "kubelet is posting ready status",
"reason": "KubeletReady",
"status": "True",
"type": "Ready"
}
]
Si le statut de la condition Ready est « false », le nœud n’est pas sain et n’accepte pas de
pods.
Condition Description
Pour mieux comprendre un nœud donné, vous pouvez afficher les journaux des processus qui
s’exécutent sur ce nœud. Un administrateur de cluster peut utiliser la commande oc adm node-
logs pour afficher les journaux du nœud. Les journaux de nœud peuvent contenir des données
sensibles et sont donc réservés aux administrateurs de nœuds disposant de privilèges. Utilisez oc
adm node-logs node-name pour filtrer les journaux sur un seul nœud.
La commande oc adm node-logs propose d’autres options pour un filtrage approfondi des
résultats.
--role master Utilisez l’option --role pour filtrer la sortie sur les nœuds
ayant un rôle spécifié.
116 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Utilisez oc adm node-logs --help pour obtenir la liste complète des options de commande.
Par exemple, pour récupérer l’entrée de journal la plus récente pour le service crio sur le nœud
master01, vous pouvez utiliser la commande suivante.
Lorsque vous créez un pod avec l’interface de ligne de commande, la commande oc ou kubectl
est envoyée au service apiserver, qui valide ensuite la commande. Le service scheduler
lit la définition de pod YAML ou JSON, puis attribue des pods aux nœuds de calcul. Chaque
nœud de calcul exécute un service kubelet qui convertit le manifeste de pod en un ou plusieurs
conteneurs dans l’environnement d’exécution du conteneur CRI-O.
Pour chaque nœud de calcul, il doit y avoir un service kubelet actif et un service crio actif. Pour
vérifier l’intégrité de ces services, démarrez d’abord une session de débogage sur le nœud à l’aide
de la commande debug.
Note
La commande debug est abordée plus en détail dans une section ultérieure.
Dans la session de débogage, accédez au répertoire racine /host afin de pouvoir exécuter des
binaires dans le chemin d’accès de l’exécutable de l’hôte.
Utilisez ensuite les appels systemctl is-active pour vérifier que les services sont bien actifs.
DO180-OCP4.14-fr-2-20240530 117
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Pour plus d’informations sur l’état d’un service, utilisez la commande systemctl status.
Dans RHOCP, la commande suivante renvoie la sortie d’un conteneur à l’intérieur d’un pod :
Remplacez pod-name par le nom du pod cible et container-name par le nom du conteneur
cible. L’argument -c container-name est facultatif si le pod n’a qu’un seul conteneur. Vous
devez utiliser l’argument -c container-name pour vous connecter à un conteneur spécifique
dans un pod à plusieurs conteneurs. Sinon, la commande utilise par défaut le seul conteneur en
cours d’exécution et renvoie la sortie.
Par défaut, la commande debug démarre un shell à l’intérieur du premier conteneur du pod
référencé. Le pod de débogage est une copie de votre pod source, avec toutefois quelques
modifications supplémentaires. Par exemple, les étiquettes du pod sont supprimées. La
commande exécutée est également remplacée par la commande « /bin/sh » pour les conteneurs
118 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Linux ou par l’exécutable « cmd.exe » pour les conteneurs Windows. De plus, les sondes readiness
et liveness sont désactivées.
La commande debug vous permet d’appeler des types d’objets autres que des pods. Par
exemple, vous pouvez utiliser n’importe quelle ressource de contrôleur qui crée un pod, comme
un déploiement, une compilation ou une tâche. La commande debug fonctionne également avec
des nœuds, ainsi qu’avec les ressources qui peuvent créer des pods, telles que les balises de flux
d’images. Vous pouvez également utiliser l’option --image=IMAGE de la commande debug pour
démarrer une session shell à l’aide d’une image spécifiée.
Si vous n’incluez ni le type ni le nom de la ressource, la commande debug démarre une session
shell dans un pod à l’aide de l’image des outils OpenShift.
[user@host~]$ oc debug
L’exemple suivant teste l’exécution d’un pod de tâche (job) en tant qu’utilisateur non root.
• ID de cluster unique
La commande oc adm must-gather collecte sur votre cluster les définitions de ressources
et les journaux de service qui sont généralement nécessaires dans le cadre de la résolution
des problèmes. Cette commande crée un pod dans un espace de noms temporaire sur votre
cluster. Ensuite, ce pod rassemble et télécharge les informations de débogage. Par défaut, la
DO180-OCP4.14-fr-2-20240530 119
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
commande oc adm must-gather utilise l’image de plug-in par défaut et écrit des données dans
le répertoire ./must-gather.local. sur votre système local. Pour écrire dans un répertoire
local spécifique, vous pouvez également utiliser l’option --dest-dir, comme dans l’exemple
suivant :
Créez ensuite un fichier d’archive compressé à partir du répertoire must-gather. Par exemple,
sur un système Linux, vous pouvez exécuter la commande suivante :
Ensuite, joignez le fichier d’archive compressé à votre dossier d’assistance sur le Portail Client
Red Hat.
La commande oc adm inspect peut également utiliser l’option --dest-dir pour spécifier
un répertoire local où écrire les informations collectées. Par défaut, la commande affiche tous les
journaux. Utilisez l’option --since pour filtrer les résultats sur les journaux ultérieurs à une durée
relative, comme 5s, 2m ou 3h.
120 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Références
Pour plus d’informations, reportez-vous au chapitre Control Plane Architecture
(Architecture du plan de contrôle) de la documentation Architecture de Red Hat
OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/architecture/index#control-plane
Interrogation de Prometheus
https://prometheus.io/docs/prometheus/latest/querying/basics/
Pour plus d’informations sur la collecte de données de diagnostic sur votre cluster,
reportez-vous au chapitre Gathering data about your cluster (Collecte de données
sur votre cluster) de la documentation Support (Assistance) de Red Hat OpenShift
Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/support/index#gathering-cluster-
data
DO180-OCP4.14-fr-2-20240530 121
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Exercice guidé
Résultats
• Afficher l’état et obtenir des informations sur les opérateurs de cluster.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice. Cette commande permet de s’assurer que
toutes les ressources sont disponibles pour cet exercice.
Instructions
1. Récupérez l’état et affichez des informations sur les opérateurs de cluster.
1.2. Listez les opérateurs que les utilisateurs ont installés dans le cluster OpenShift.
1.3. Listez les opérateurs de cluster installés par défaut dans le cluster OpenShift.
122 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
1.4. Utilisez la commande describe pour afficher des informations détaillées sur
l’opérateur de cluster openshift-apiserver, telles que les événements, la version
et les objets associés.
DO180-OCP4.14-fr-2-20240530 123
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Group:
Name: openshift-apiserver
Resource: namespaces
...output omitted...
Versions:
Name: operator
Version: 4.14.0
Name: openshift-apiserver
Version: 4.14.0
Events: <none>
L’attribut Related Objects inclut des informations sur le nom, le type de ressource
et les groupes des objets liés à l’opérateur.
124 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
"podIP": "10.8.0.5",
...output omitted...
}
2.2. Listez les pods et leurs étiquettes dans l’espace de noms openshift-etcd.
2.3. Affichez l’utilisation des ressources des conteneurs dans le pod etcd-master01 de
l’espace de noms openshift-etcd. L’utilisation des ressources sur votre système
diffère probablement.
2.4. Affichez la liste de toutes les ressources, de leur état et de leurs types dans l’espace
de noms openshift-monitoring.
DO180-OCP4.14-fr-2-20240530 125
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
126 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
3.5. Utilisez la commande describe pour afficher les événements, les demandes de
ressources ainsi que les limites de ressources pour le nœud. La sortie peut être
différente sur votre système.
4. Récupérez les journaux et l’état des services systemd sur le nœud master01.
4.1. Affichez les journaux du nœud. Filtrez les journaux afin d’afficher le journal le plus
récent pour le service crio. Les journaux peuvent être différents sur votre système.
4.2. Affichez les deux journaux les plus récents du service kubelet sur le nœud. Les
journaux peuvent être différents sur votre système.
DO180-OCP4.14-fr-2-20240530 127
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
4.3. Créez une session de débogage pour le nœud. Utilisez ensuite la commande
chroot /host pour accéder aux binaires de l’hôte.
128 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
sh-5.1# exit
exit
sh-4.4# exit
exit
5.2. Vérifiez que les informations de débogage sont présentes dans le répertoire
de destination. Répertoriez les cinq derniers journaux du service kubelet, et
vérifiez qu’une erreur s’est produite lors de la mise en proxy des données de
l’adresse IP 192.168.50.10. Remplacez quay-io… par le nom du répertoire généré.
DO180-OCP4.14-fr-2-20240530 129
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
5.4. Vérifiez que les informations de débogage sont présentes dans le répertoire
de destination et examinez le fichier cluster.yaml du répertoire ~/
inspect/cluster-scoped-resources/operator.openshift.io/
openshiftapiservers.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
130 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
DO180-OCP4.14-fr-2-20240530 131
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Open Lab
Résultats
• Utiliser la ligne de commande pour récupérer des informations sur les ressources du
cluster.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
132 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
• Afficher l’utilisation des ressources de calcul des conteneurs dans le pod etcd-master01
de l’espace de noms openshift-etcd.
• Obtenir le nombre de pods allouables pour le nœud master01 à l’aide d’un filtre
JSONPath.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 133
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
134 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Solution
Résultats
• Utiliser la ligne de commande pour récupérer des informations sur les ressources du
cluster.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 135
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
DESCRIPTION:
...output omitted...
136 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
DO180-OCP4.14-fr-2-20240530 137
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
3.5. Listez les types de ressources fournis par le groupe d’API oauth.openshift.io.
4. Identifiez les informations suivantes sur les services de cluster et ses nœuds :
• Afficher l’utilisation des ressources de calcul des conteneurs dans le pod etcd-master01
de l’espace de noms openshift-etcd.
• Obtenir le nombre de pods allouables pour le nœud master01 à l’aide d’un filtre
JSONPath.
138 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
"lastProbeTime": null,
"lastTransitionTime": "2023-03-12T16:40:47Z",
"status": "True",
"type": "Ready"
},
{
"lastProbeTime": null,
"lastTransitionTime": "2023-03-12T16:40:47Z",
"status": "True",
"type": "ContainersReady"
},
{
"lastProbeTime": null,
"lastTransitionTime": "2023-03-12T16:40:23Z",
"status": "True",
"type": "PodScheduled"
}
]
4.2. Affichez l’utilisation des ressources des conteneurs dans le pod etcd-master01 de
l’espace de noms openshift-etcd.
4.3. Utilisez un filtre JSONPath pour déterminer le nombre de pods allouables pour le
nœud master01.
4.4. Afficher l’utilisation de la mémoire et du processeur de tous les pods du cluster. Utilisez
l’option --sum pour imprimer la somme de l’utilisation des ressources. L’utilisation des
ressources sur votre système diffère probablement.
DO180-OCP4.14-fr-2-20240530 139
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
4.6. Utilisez un filtre JSONPath pour déterminer la capacité et le processeur pouvant être
alloué pour le nœud master01.
5.1. Récupérez des informations de débogage pour le cluster. Enregistrez la sortie dans le
répertoire /home/student/DO180/labs/cli-review/debugging.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
140 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 141
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Quiz
3. Quelles sont les trois commandes qui affichent les conditions du nœud master01 ?
(Choisissez-en trois.)
a. oc get node/master01 -o json | jq '.status.conditions'
b. oc get node/master01 -o wide
c. oc get node/master01 -o yaml
d. oc get node/master01 -o json
4. Sélectionnez les deux types de condition valides pour un nœud du plan de contrôle.
(Choisissez-en deux.)
a. PIDPressure
b. DiskIOPressure
c. OutOfMemory
d. Ready
142 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
5. Sélectionnez trois options valides pour la commande oc adm top pods. (Choisissez-
en trois.)
a. -A
b. --sum
c. --pod-selector
d. --containers
DO180-OCP4.14-fr-2-20240530 143
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Solution
3. Quelles sont les trois commandes qui affichent les conditions du nœud master01 ?
(Choisissez-en trois.)
a. oc get node/master01 -o json | jq '.status.conditions'
b. oc get node/master01 -o wide
c. oc get node/master01 -o yaml
d. oc get node/master01 -o json
4. Sélectionnez les deux types de condition valides pour un nœud du plan de contrôle.
(Choisissez-en deux.)
a. PIDPressure
b. DiskIOPressure
c. OutOfMemory
d. Ready
144 DO180-OCP4.14-fr-2-20240530
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
5. Sélectionnez trois options valides pour la commande oc adm top pods. (Choisissez-
en trois.)
a. -A
b. --sum
c. --pod-selector
d. --containers
DO180-OCP4.14-fr-2-20240530 145
chapitre 2 | API et interfaces de ligne de commande Kubernetes et OpenShift
Résumé
• Un cluster RHOCP peut être géré à partir de la console Web ou en utilisant les interfaces de
ligne de commande (CLI) kubectl ou oc.
• Utilisez l’option --help sur une commande pour afficher des informations détaillées sur cette
dernière.
• L’authentification par token est la seule méthode dont le fonctionnement est garanti avec un
cluster RHOCP, étant donné que le SSO d’entreprise peut remplacer le formulaire de connexion
de la console Web.
• Kubernetes fournit des options de sortie au format YAML et JSON qui sont idéales pour
l’analyse et l’écriture de scripts.
• Les opérateurs permettent de surveiller les applications, d’effectuer des bilans de santé, de
gérer les mises à jour OTA (Over-the-Air) et de s’assurer que les applications restent dans l’état
que vous avez spécifié.
• La console Web RHOCP intègre des graphiques utiles pour visualiser les analyses des
ressources et des clusters.
• La console Web RHOCP fournit une interface permettant d’exécuter des requêtes Prometheus,
de visualiser des métriques et de configurer des alertes.
• La pile de surveillance est basée sur le projet Prometheus et configurée pour surveiller les
principaux composants du cluster RHOCP (par défaut).
• RHOCP offre la possibilité d’afficher des journaux dans les pods et les conteneurs en cours
d’exécution afin de faciliter la résolution des problèmes.
• Vous pouvez collecter des définitions de ressources et des journaux de service à partir de votre
cluster à l’aide de la commande oc adm must-gather.
146 DO180-OCP4.14-fr-2-20240530
chapitre 3
DO180-OCP4.14-fr-2-20240530 147
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Résultats
• Exécuter des conteneurs dans des pods, et identifier les espaces de noms et processus de
système d’exploitation hôtes utilisés par les conteneurs.
Note
Les images de conteneur sont abordées plus en détail dans une autre section de ce
cours.
Par exemple, la commande suivante déploie une application HTTPD Apache dans un pod nommé
web-server qui utilise l’image de conteneur registry.access.redhat.com/ubi8/
httpd-24.
Vous pouvez utiliser plusieurs options et indicateurs avec la commande run. L’option --command
exécute une commande personnalisée et ses arguments dans un conteneur, plutôt que la
commande par défaut définie dans l’image de conteneur. Vous devez faire suivre l’option --
command d’un double tiret (--) pour séparer la commande personnalisée et ses arguments des
options de commande run. La syntaxe suivante est utilisée avec l’option --command :
Vous pouvez également utiliser l’option de double tiret pour fournir des arguments personnalisés à
une commande par défaut dans l’image de conteneur.
Pour démarrer une session interactive avec un conteneur dans un pod, incluez les options -
it avant le nom du pod. L’option -i indique à Kubernetes de garder ouverte la saisie standard
(stdin) sur le conteneur dans le pod. L’option -t indique à Kubernetes d’ouvrir une session
148 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
TTY pour le conteneur dans le pod. Vous pouvez utiliser les options -it pour démarrer un shell
distant et interactif dans un conteneur. À partir du shell distant, vous pouvez ensuite exécuter des
commandes supplémentaires dans le conteneur.
L’exemple suivant démarre un shell distant interactif, /bin/bash, dans le conteneur par défaut du
pod my-app.
Note
À moins que vous n’ayez inclus les options --namespace ou -n, la commande run
crée des conteneurs dans les pods du projet sélectionné.
Vous pouvez également définir une politique de redémarrage pour les conteneurs d’un pod en
incluant l’option --restart. Une politique de redémarrage de pod détermine la façon dont le
cluster doit réagir lorsque les conteneurs de ce pod se ferment. L’option --restart a les valeurs
acceptées suivantes : Always, OnFailure et Never.
Always
Si la stratégie de redémarrage est définie sur Always, le cluster essaie en continu de
redémarrer un conteneur correctement fermé, pendant cinq minutes maximum. La politique
de redémarrage du pod par défaut est Always. Si l’option --restart est omise, le pod est
configuré avec la politique Always.
OnFailure
La définition de la politique de redémarrage du pod sur OnFailure indique au cluster
de redémarrer uniquement les conteneurs en échec dans le pod, pendant cinq minutes
maximum.
Never
Si la politique de redémarrage est définie sur Never, le cluster n’essaie pas de redémarrer les
conteneurs fermés ou en échec dans un pod. Au lieu de cela, les pods échouent et se ferment
immédiatement.
L’exemple de commande suivant exécute la commande date dans le conteneur du pod nommé
my-app, redirige la sortie de la commande date vers le terminal et définit Never comme politique
de redémarrage du pod.
Pour supprimer automatiquement un pod après sa fermeture, incluez l’option --rm avec la
commande run.
DO180-OCP4.14-fr-2-20240530 149
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Pour certaines applications en conteneur, vous devrez peut-être spécifier des variables
d’environnement pour que l’application fonctionne. Pour spécifier une variable d’environnement et
sa valeur, incluez l’option --env= avec la commande run.
Avec les politiques de sécurité par défaut d’OpenShift, les utilisateurs de cluster standard ne
peuvent pas choisir USER ou UID pour leurs conteneurs. Lorsqu’un utilisateur de cluster standard
crée un pod, OpenShift ignore l’instruction USER dans l’image de conteneur. Au lieu de cela,
OpenShift attribue à l’utilisateur du conteneur un UID et un GID supplémentaire à partir de la
plage identifiée dans les annotations du projet. Le GID de l’utilisateur est toujours 0, ce qui signifie
que l’utilisateur appartient au groupe root. Tous les fichiers et répertoires dans lesquels les
processus de conteneur peuvent écrire doivent avoir des autorisations en lecture et en écriture
de GID=0 et avoir le groupe root comme propriétaire. Bien que l’utilisateur dans le conteneur
appartienne au groupe root, l’utilisateur est un compte sans privilèges.
En revanche, lorsqu’un administrateur de cluster crée un pod, l’instruction USER dans l’image
de conteneur est traitée. Par exemple, si l’instruction USER de l’image de conteneur est définie
sur 0, l’utilisateur dans le conteneur est le compte avec privilèges root, avec une valeur 0 pour
l’UID. L’exécution d’un conteneur en tant que compte avec privilèges représente un risque pour
la sécurité. Un compte avec privilèges dans un conteneur dispose d’un accès illimité au système
hôte du conteneur. Un accès illimité signifie que le conteneur peut modifier ou supprimer des
fichiers système, installer des logiciels ou compromettre son hôte. Par conséquent, Red Hat vous
recommande d’exécuter les conteneurs en tant que rootless, ou en tant qu’utilisateur sans
privilèges disposant uniquement des privilèges nécessaires à l’exécution du conteneur.
150 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Red Hat vous recommande également d’exécuter des conteneurs à partir de différentes
applications avec des ID utilisateur uniques. L’exécution de conteneurs à partir d’applications
différentes avec le même UID, même sans privilèges, représente un risque pour la sécurité. Si l’UID
de deux conteneurs est le même, les processus d’un conteneur peuvent accéder aux ressources
et aux fichiers de l’autre conteneur. En attribuant une plage distincte d’UID et de GID à chaque
projet, OpenShift garantit que les applications de différents projets ne s’exécutent pas avec le
même UID ou GID.
La sortie de la commande exécutée est envoyée à votre terminal. Dans l’exemple suivant, la
commande exec exécute la commande date dans le pod my-app.
La commande spécifiée est exécutée dans le premier conteneur d’un pod. Pour les pods à
plusieurs conteneurs, incluez les options -c ou --container= pour spécifier le conteneur
utilisé pour exécuter la commande. Dans l’exemple suivant, la commande date s’exécute dans un
conteneur nommé ruby-container dans le pod my-app.
La commande exec accepte également les options -i et -t pour créer une session interactive
avec un conteneur dans un pod. Dans l’exemple suivant, Kubernetes envoie stdin au shell bash
dans le conteneur ruby-container à partir du pod my-app, et renvoie stdout et stderr du
shell bash au terminal.
Dans l’exemple précédent, un terminal brut est ouvert dans le conteneur ruby-container. À
partir de cette session interactive vous pouvez ensuite exécuter des commandes supplémentaires
DO180-OCP4.14-fr-2-20240530 151
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
dans le conteneur. Pour mettre fin à la session interactive, vous devez exécuter la commande
exit dans le terminal brut.
Journaux de conteneur
Les journaux de conteneur sont la sortie standard (stdout) et la sortie d’erreur standard
(stderr) d’un conteneur. Vous pouvez récupérer les journaux à l’aide de la commande logs pod
pod-name fournie par les CLI kubectl et oc. La commande inclut les options suivantes :
-l or --selector=''
Filtrer les objets en fonction de la contrainte d’étiquette key:value spécifiée.
--tail=
Spécifier le nombre de lignes des fichiers journaux récents à afficher ; la valeur par défaut est
-1 sans sélecteurs, ce qui affiche toutes les lignes de journal.
-c or --container=
Imprimer les journaux d’un conteneur en particulier dans un pod qui en comporte plusieurs.
-f or --follow
Suivre, ou diffuser en continu, les journaux d’un conteneur.
-p or --previous=true
Imprimer les journaux d’une instance de conteneur précédente dans le pod, si elle existe.
Cette option est utile pour résoudre les problèmes liés au démarrage d’un pod, car elle
imprime les journaux de la dernière tentative.
L’exemple suivant limite la sortie de la commande oc logs aux dix fichiers journaux les plus
récents :
152 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
dans un pod. L’option -c container-name est requise pour les pods à plusieurs conteneurs.
Si le nom du conteneur est omis, Kubernetes utilise l’annotation kubectl.kubernetes.io/
default-container sur le pod pour sélectionner le conteneur. Sinon, le premier conteneur du
pod est choisi. Vous pouvez utiliser la session interactive pour récupérer les fichiers journaux de
l’application et pour résoudre les problèmes d’application.
bash-4.4$
Vous pouvez également récupérer des journaux à partir de la console Web en cliquant sur l’onglet
Logs de n’importe quel pod.
Si vous disposez de plusieurs conteneurs, vous pouvez passer de l’un à l’autre pour lister les
journaux de chacun.
DO180-OCP4.14-fr-2-20240530 153
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Suppression de ressources
Vous pouvez supprimer des ressources Kubernetes, telles que des ressources de pod, avec la
commande delete. La commande delete peut supprimer des ressources par type et nom de
ressource, par type et étiquette de ressource, par saisie standard (stdin) et avec des fichiers au
format JSON ou YAML. La commande n’accepte qu’un seul type d’argument à la fois.
Par exemple, vous pouvez fournir le type et le nom de la ressource en tant qu’argument de
commande.
Vous pouvez également supprimer des pods de la console Web en cliquant sur Actions, puis sur
Delete Pod dans le menu principal du pod.
Pour sélectionner des ressources en fonction de libellés, vous pouvez inclure l’option -l et le
libellé key:value en tant qu’argument de commande.
Vous pouvez également fournir le type de ressource et un fichier au format JSON ou YAML qui
spécifie le nom de la ressource. Pour utiliser un fichier, vous devez inclure l’option -f et fournir le
chemin d’accès complet au fichier au format JSON ou YAML.
Vous pouvez également utiliser stdin et un fichier au format JSON ou YAML qui inclut le type et
le nom de la ressource avec la commande delete.
154 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Les pods prennent en charge l’arrêt approprié, ce qui signifie qu’ils tentent d’arrêter leurs
processus avant que Kubernetes ne procède à leur arrêt forcé. Pour modifier le délai avant l’arrêt
forcé d’un pod, vous pouvez inclure l’indicateur --grace-period et une période en secondes
dans votre commande delete. Par exemple, pour définir le délai de grâce sur dix secondes,
utilisez la commande suivante :
Pour arrêter le pod immédiatement, définissez le délai de grâce sur 1 seconde. Vous pouvez
également utiliser l’indicateur --now pour définir le délai de grâce sur 1 seconde.
Vous pouvez également forcer la suppression d’un pod avec l’option --force. Si vous forcez
la suppression d’un pod, Kubernetes n’attend pas la confirmation que les processus du pod se
sont terminés, ce qui peut laisser les processus du pod en cours d’exécution jusqu’à ce que son
nœud détecte la suppression. Par conséquent, la suppression forcée d’un pod peut entraîner
une incohérence ou une perte de données. Ne forcez la suppression des pods que si vous avez
l’assurance que les processus du pod sont terminés.
Pour supprimer tous les pods d’un projet, vous pouvez inclure l’option --all.
De même, vous pouvez supprimer un projet et ses ressources avec la commande oc delete
project project-name.
Note
Pour plus d’informations sur les normes CRI (Container Runtime Interface) de
Kubernetes, reportez-vous au référentiel CRI-API à l’adresse https://github.com/
kubernetes/cri-api.
DO180-OCP4.14-fr-2-20240530 155
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
CRI-O fournit une interface de ligne de commande pour gérer les conteneurs avec la commande
crictl. La commande crictl comprend plusieurs sous-commandes pour vous aider à gérer
les conteneurs. Les sous-commandes suivantes sont couramment utilisées avec la commande
crictl :
crictl pods
Affiche la liste de tous les pods sur un nœud.
crictl image
Affiche la liste de toutes les images sur un nœud.
crictl inspect
Récupère l’état d’un ou de plusieurs conteneurs.
crictl exec
Exécute une commande dans un conteneur en cours d’exécution.
crictl logs
Récupère les journaux d’un conteneur.
crictl ps
Affiche la liste des conteneurs en cours d’exécution sur un nœud.
Pour gérer des conteneurs avec la commande crictl, vous devez d’abord identifier le nœud qui
héberge vos conteneurs.
Ensuite, vous devez vous connecter au nœud identifié en tant qu’administrateur de cluster. Les
administrateurs de cluster peuvent utiliser SSH pour se connecter à un nœud ou créer un pod de
débogage pour le nœud. Les utilisateurs standard ne peuvent pas se connecter à des pods de
débogage ou en créer pour les nœuds de cluster.
En tant qu’administrateur de cluster, vous pouvez créer un pod de débogage pour un nœud à
l’aide de la commande oc debug node/node-name. OpenShift crée le pod pod/node-name-
debug dans le projet actuellement sélectionné et vous connecte automatiquement au pod.
Vous devez ensuite activer les binaires de l’hôte d’accès, tels que la commande crictl, avec la
commande chroot /host. Cette commande monte le système de fichiers root de l’hôte dans
le répertoire /host à l’intérieur du shell du pod de débogage. En remplaçant le répertoire root
par le répertoire /host, vous pouvez exécuter les binaires contenus dans le chemin d’accès de
l’exécutable de l’hôte.
156 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Après avoir activé les binaires de l’hôte, vous pouvez utiliser la commande crictl pour gérer les
conteneurs sur le nœud. Par exemple, vous pouvez utiliser les commandes crictl ps et crictl
inspect pour récupérer l’ID de processus (PID) d’un conteneur en cours d’exécution. Vous
pouvez ensuite utiliser le PID pour récupérer ou saisir les espaces de noms dans un conteneur, ce
qui est utile pour résoudre les problèmes liés aux applications.
Pour trouver le PID d’un conteneur en cours d’exécution, vous devez d’abord déterminer l’ID du
conteneur. Vous pouvez utiliser la commande crictl ps avec l’option --name pour filtrer la
sortie de la commande dans un conteneur spécifique.
La sortie par défaut de la commande crictl ps est une table. Vous trouverez l’ID de conteneur
court dans la colonne CONTAINER. Vous pouvez également utiliser les options -o ou --output
pour spécifier le format de la commande crictl ps en tant que JSON ou YAML, puis analyser la
sortie. La sortie analysée affiche l’ID de conteneur complet.
Après avoir identifié l’ID de conteneur, vous pouvez utiliser la commande crictl inspect et l’ID
de conteneur pour récupérer le PID du conteneur en cours d’exécution. Par défaut, la commande
crictl inspect affiche une sortie détaillée. Vous pouvez utiliser les options -o ou --output
pour formater la sortie de la commande en JSON, en YAML, sous forme de table ou en tant
que modèle Go. Si vous spécifiez le format JSON, vous pouvez ensuite analyser la sortie avec
la commande jq. De même, vous pouvez utiliser la commande grep pour limiter la sortie de la
commande.
Après avoir déterminé le PID d’un conteneur en cours d’exécution, vous pouvez utiliser la
commande lsns -p PID pour lister les espaces de noms système d’un conteneur.
DO180-OCP4.14-fr-2-20240530 157
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Vous pouvez également utiliser le PID d’un conteneur en cours d’exécution avec la commande
nsenter pour entrer un espace de noms spécifique d’un conteneur en cours d’exécution. Par
exemple, vous pouvez utiliser la commande nsenter pour exécuter une commande dans un
espace de noms spécifié sur un conteneur en cours d’exécution. L’exemple suivant exécute la
commande ps -ef dans l’espace de noms de processus d’un conteneur en cours d’exécution.
L’option -t spécifie le PID du conteneur en cours d’exécution comme PID cible pour la commande
nsenter. L’option -p indique à la commande nsenter d’entrer le processus ou l’espace de noms
pid. L’option -r définit le répertoire de niveau supérieur de l’espace de noms de processus en
tant que répertoire root, permettant ainsi aux commandes de s’exécuter dans le contexte de
l’espace de noms.
Vous pouvez également utiliser l’option -a pour exécuter une commande dans tous les espaces de
noms du conteneur.
158 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Références
Container Runtime Interface (CRI) CLI
https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md
DO180-OCP4.14-fr-2-20240530 159
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Exercice guidé
Résultats
• Créer un pod avec un seul conteneur, et identifier le pod et son conteneur dans le moteur
de conteneur d’un nœud OpenShift.
• Récupérer des informations à l’intérieur d’un conteneur, telles que la version du système
d’exploitation (SE) et les processus en cours d’exécution.
• Identifier les plages d’ID d’utilisateur (UID) et d’ID de groupe supplémentaire (GID) d’un
projet.
• Comparer les espaces de noms des conteneurs dans un pod et dans un autre pod.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice.
Instructions
1. Connectez-vous au cluster OpenShift et créez le projet pods-containers. Déterminez
les plages UID et GID des pods dans le projet pods-containers.
160 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
1.3. Identifiez les plages UID et GID des pods dans le projet pods-containers.
2.1. Utilisez la commande oc run pour créer le pod ubi9-user. Configurez le pod pour
exécuter les commandes whoami et id via une session shell bash interactive.
DO180-OCP4.14-fr-2-20240530 161
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Notez que l’utilisateur dans le conteneur a le même UID que celui identifié dans le
projet pods-containers. Cependant, le GID de l’utilisateur dans le conteneur est
toujours 0, ce qui signifie que l’utilisateur appartient au groupe root. Tous les fichiers
et répertoires dans lesquels les processus de conteneur peuvent écrire doivent avoir
des autorisations en lecture et en écriture de GID=0 et avoir le groupe root comme
propriétaire.
Bien que l’utilisateur dans le conteneur appartienne au groupe root, une valeur
d’UID supérieure à 1000 signifie que l’utilisateur est un compte sans privilèges.
Lorsqu’un utilisateur OpenShift standard, tel que l’utilisateur developer, crée un
pod, les conteneurs du pod s’exécutent en tant que comptes sans privilèges.
You have access to 71 projects, the list has been suppressed. You can list all
projects with 'oc projects'
2.4. Recréez le pod ubi9-user en tant qu’utilisateur admin. Configurez le pod pour
exécuter les commandes whoami et id via une session shell bash interactive.
Comparez les valeurs d’UID et de GID de l’utilisateur de conteneur à celles du pod
ubi9-user que l’utilisateur developer a créé.
Note
Vous pouvez ignorer les avertissements de sécurité des pods en toute sécurité
lors de l'utilisation d'un utilisateur cluster-admin qui crée des pods non gérés.
L’utilisateur admin peut créer des pods avec privilèges que le contrôleur Security
Context Constraints ne gère pas.
162 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Notez que la valeur de l’UID est 0, qui diffère de la valeur de la plage d’UID du projet
pod-containers. L’utilisateur dans le conteneur est l’utilisateur root du compte
avec privilèges et appartient au groupe root. Lorsqu’un administrateur de cluster
crée un pod, les conteneurs du pod s’exécutent par défaut en tant que compte avec
privilèges.
3. En tant qu’utilisateur developer, utilisez la commande oc run pour créer un pod ubi9-
date à partir d’une image de conteneur de base UBI9. L’image est disponible dans le
registre de conteneurs registry.ocp4.example.com:8443/ubi9/ubi. Définissez
la politique de redémarrage sur Never et configurez le pod pour exécuter la commande
date. Récupérez les journaux du pod ubi9-date pour vérifier que la commande date a
été exécutée. Supprimez le pod par la suite.
3.3. Attendez quelques instants que le pod soit créé. Ensuite, récupérez les journaux du
pod ubi9-date.
DO180-OCP4.14-fr-2-20240530 163
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Cette commande exécute les commandes date et sleep pour générer une sortie sur
la console toutes les deux secondes. Utilisez la commande oc logs pour récupérer les
journaux du pod ubi9, et vérifiez que les journaux affichent les commandes exécutées
date et sleep.
bash-5.1$ exit
exit
Session ended, resume using 'oc attach ubi9-command -c ubi9-command -i -t' command
when the pod is running
4.3. Utilisez la commande oc logs pour afficher les journaux du pod ubi9-command.
4.4. Utilisez la commande oc attach pour vous connecter à nouveau au pod ubi9-
command. Dans le shell, exécutez la commande while true; do echo $(date);
sleep 2; done pour générer en continu la sortie stdout.
4.5. Ouvrez une autre fenêtre de terminal et affichez les journaux du pod ubi9-
command avec la commande oc logs. Limitez la sortie du journal aux dix dernières
entrées avec l’option --tail. Vérifiez que les journaux affichent les résultats de la
commande que vous avez exécutée dans le conteneur.
164 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
DO180-OCP4.14-fr-2-20240530 165
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Note
Lorsque vous utilisez jq sans l’indicateur -r, l’ID de conteneur est placé entre
guillemets doubles, ce qui ne fonctionne pas avec les commandes crictl. Si
l’indicateur -r n’est pas utilisé, vous pouvez ajouter | tr -d '"' à la fin de la
commande pour supprimer les guillemets doubles.
5.5. Utilisez la commande crictl inspect pour rechercher le PID du conteneur ubi9-
command. La valeur de PID se trouve dans l’objet .info.pid de la sortie crictl
inspect. Exportez le PID de conteneur ubi9-command en tant que variable
d’environnement $PID.
sh-5.1# PID=365297
166 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
6. Utilisez la commande lsns pour lister les espaces de noms système du conteneur ubi9-
command. Vérifiez que les processus en cours d’exécution dans le conteneur sont isolés
dans des espaces de noms système différents.
7.2. Utilisez la commande crictl exec et la variable d’ID du conteneur $CID pour
récupérer le système d’exploitation du conteneur ubi9-command. Utilisez les options
-it pour créer un terminal interactif afin d’exécuter la commande cat /etc/
redhat-release.
7.4. Utilisez la commande crictl exec et la variable d’ID du conteneur $CID pour
récupérer la version du paquetage glibc du conteneur ubi9-command. Utilisez les
DO180-OCP4.14-fr-2-20240530 167
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
options -it pour créer un terminal interactif afin d’exécuter la commande ldd --
version.
8.1. Quittez le pod master01-debug. Vous devez exécuter la commande exit pour
mettre fin à l’accès du binaire de l’hôte. Exécutez à nouveau la commande exit pour
quitter et supprimer le pod master01-debug.
sh-5.1# exit
exit
sh-4.4# exit
exit
8.2. Revenez à la fenêtre de terminal qui est connectée au pod ubi9-command. Appuyez
sur Ctrl+C, puis exécutez la commande exit. Vérifiez que le pod est encore en
cours d’exécution.
...output omitted...
^C
bash-5.1$ exit
exit
Session ended, resume using 'oc attach ubi9-command -c ubi9-command -i -t' command
when the pod is running
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
168 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Résultats
• Rechercher des applications en conteneur dans des registres de conteneurs et obtenir des
informations sur les paramètres d’exécution des images de conteneur de la communauté et
prises en charge.
Une image de conteneur contient une version empaquetée de votre application, avec toutes
les dépendances nécessaires à l’exécution de cette dernière. Les images peuvent exister sans
conteneurs. Cependant, les conteneurs dépendent des images, car ils utilisent des images de
conteneur pour compiler un environnement d’exécution afin d’exécuter des applications.
Les conteneurs peuvent être divisés en deux concepts similaires, mais distincts : les images de
conteneur et les instances de conteneur. Une image de conteneur contient des données immuables
qui définissent une application et ses bibliothèques. Vous pouvez utiliser des images de conteneur
pour créer des instances de conteneur qui exécutent des processus isolés par un ensemble
d’espaces de noms de noyau.
Vous pouvez utiliser chaque image de conteneur à plusieurs reprises pour créer de nombreuses
instances de conteneur distinctes. Ces réplicas peuvent être répartis sur plusieurs hôtes.
L’application dans un conteneur est indépendante de l’environnement hôte.
Dans la mesure où Red Hat Ecosystem Catalog est également utilisé pour rechercher d’autres
produits logiciels que les images de conteneur, vous devez accéder à l’adresse https://
catalog.redhat.com/software/containers/explore pour rechercher spécifiquement
des images de conteneur.
DO180-OCP4.14-fr-2-20240530 169
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
La page de détails d’une image de conteneur vous donne des informations pertinentes à son sujet,
telles que des données techniques, les paquetages installés dans l’image ou encore une analyse
de sécurité. Vous pouvez parcourir ces options en utilisant les onglets disponibles sur le site Web.
Vous pouvez également modifier la version de l’image en sélectionnant une balise spécifique.
L’équipe de sécurité interne de Red Hat examine toutes les images du catalogue de conteneurs.
Red Hat recompile tous les composants pour éviter les vulnérabilités de sécurité connues.
• Source approuvée : toutes les images de conteneur utilisent des sources connues et approuvées
par Red Hat.
170 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
• Dépendances originales : aucun des paquetages de conteneurs n’est falsifié, seules des
bibliothèques connues sont incluses.
• Sans vulnérabilité : les images de conteneur sont exemptes des vulnérabilités critiques connues
dans les composants ou les couches de la plateforme.
• Protection d’exécution : toutes les applications dans les images de conteneur s’exécutent en
tant qu’utilisateurs non root afin de réduire la surface d’exposition aux applications malveillantes
ou défectueuses.
• Compatibilité avec Red Hat Enterprise Linux (RHEL) : les images de conteneur sont
compatibles avec toutes les plateformes RHEL, des systèmes nus au cloud.
• Services d’assistance Red Hat : Red Hat prend commercialement en charge la pile complète.
Note
Vous devez vous connecter au registre registry.redhat.io avec un compte de
portail client ou un compte Red Hat Developer pour utiliser les images de conteneur
stockées dans le registre.
Quay.io
Bien que le registre Red Hat ne stocke que des images provenant de Red Hat et de fournisseurs
certifiés, vous pouvez stocker vos propres images avec Quay.io, un autre registre d’images public
qui est parrainé par Red Hat. Bien que le stockage d’images publiques dans Quay soit gratuit,
certaines options ne sont disponibles que pour les clients payants. Quay propose également une
version sur site du produit, que vous pouvez utiliser pour configurer un registre d’images sur vos
propres serveurs.
Quay.io introduit des fonctions, telles que la génération d’images côté serveur, des contrôles
d’accès précis et l’analyse automatique des images pour détecter les vulnérabilités connues.
Quay.io propose des images en direct que les créateurs mettent régulièrement à jour. Les
utilisateurs de Quay.io peuvent créer leurs espaces de noms, avec un contrôle d’accès précis,
et publier les images qu’ils ont créées dans cet espace de noms. Les utilisateurs de Container
Catalog envoient (push) rarement (voire jamais) de nouvelles images, mais utilisent des images
approuvées de l’équipe Red Hat.
DO180-OCP4.14-fr-2-20240530 171
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Registres privés
Les créateurs ou gestionnaires d’images peuvent, s’ils le souhaitent, rendre leurs images
publiques. Cependant, d’autres créateurs d’images peuvent préférer garder leurs images privées,
pour les raisons suivantes :
Dans certains cas, les images privées sont privilégiées. Les registres privés permettent aux
créateurs d’images de contrôler leur placement, leur distribution et leur utilisation. Les images
privées sont davantage sécurisées que les images des registres publics.
Registres publics
D’autres registres publics, tels que Docker Hub et Amazon ECR, sont également disponibles
pour le stockage, le partage et la consommation d’images de conteneur. Ces registres peuvent
inclure des images officielles que les propriétaires du registre ou les utilisateurs de la communauté
du registre créent et gèrent. Par exemple, Docker Hub héberge une image officielle Docker
d’une image de conteneur WordPress. Bien que l’image de conteneur docker.io/library/
wordpress soit une image officielle Docker, elle n’est pas prise en charge par WordPress, Docker
ou Red Hat. À la place, la communauté Docker, un groupe mondial d’utilisateurs de Docker Hub,
prend en charge et gère l’image de conteneur. La prise en charge de cette image de conteneur
dépend de la disponibilité et des compétences des utilisateurs de la communauté Docker.
Avant d’utiliser une image de conteneur à partir d’un registre public, examinez et vérifiez l’image
de conteneur. Assurez-vous également que vous disposez des autorisations correctes pour utiliser
le logiciel dans l’image de conteneur.
Registry
Il s’agit d’un serveur de contenu, tel que registry.access.redhat.com, qui est utilisé
pour stocker et partager des images de conteneur. Un registre se compose d’un ou de
plusieurs référentiels qui contiennent des images de conteneur balisées.
Name
Il identifie le référentiel d’images de conteneur. Il s’agit d’une chaîne composée de lettres, de
chiffres et de certains caractères spéciaux. Ce composant fait référence au nom du répertoire,
ou du référentiel de conteneurs, dans le registre de conteneurs où se trouve l’image de
conteneur.
172 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
ID/Hash
Il s’agit du code SHA (Secure Hash Algorithm) permettant d’extraire ou de
vérifier une image. L’ID d’image SHA ne peut pas changer et fait toujours
référence au même contenu d’image de conteneur. Le code ID/hash est
l’identificateur unique véritable d’une image. Par exemple, l’ID d’image
sha256:4186a1ead13fc30796f951694c494e7630b82c320b81e20c020b3b07c88898
5b fait toujours référence à l’image de conteneur registry.access.redhat.com/ubi9/
httpd-24:1-233.
Tag
Il s’agit d’une étiquette pour une image de conteneur dans un référentiel, qui permet de la
distinguer des autres images, aux fins du contrôle de version. L’étiquette (tag) vient après le
nom du référentiel de l’image et est délimitée par le signe deux-points (:).
Lorsqu’une balise d’image est omise, la balise flottante, latest, est utilisée par
défaut. Une balise flottante est un alias d’une autre balise. En revanche, une balise
fixe pointe vers une version de conteneur spécifique. Pour l’image de conteneur
registry.access.redhat.com/ubi9/httpd-24:1-233.1669634588,
1-233.1669634588 est la balise fixe de l’image et, au moment de la rédaction de ce
document, elle correspond à l’indicateur latest flottant.
Layers
Les images de conteneur sont créées à partir d’instructions. Chaque instruction ajoute une
couche à l’image de conteneur. Chaque couche comprend les différences entre elle et la
couche suivante. Les couches sont ensuite empilées pour créer une image de conteneur en
lecture seule.
Metadata
Les métadonnées incluent les instructions et la documentation d’une image de conteneur.
ENV
Définit des variables d’environnement qui sont disponibles dans le conteneur. Une image
de conteneur peut inclure plusieurs instructions ENV. Tout conteneur peut reconnaître des
variables d’environnement supplémentaires qui ne sont pas listées dans ses métadonnées.
ARG
Définit des variables au moment de la compilation, généralement pour rendre une compilation
de conteneur personnalisable. Les développeurs configurent généralement les instructions
DO180-OCP4.14-fr-2-20240530 173
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
ENV à l’aide de l’instruction ARG. Cela s’avère utile pour préserver les variables de compilation
en vue de l’exécution.
USER
Définit l’utilisateur actif dans le conteneur. Les instructions ultérieures sont exécutées en tant
que cet utilisateur. Il est recommandé de définir un autre utilisateur que root pour des raisons
de sécurité. OpenShift ne reconnaît pas l’utilisateur dans une image de conteneur, pour les
utilisateurs de cluster standard. Seuls les administrateurs de cluster peuvent exécuter des
conteneurs (pods) avec les ID utilisateur (UID) et ID de groupe (GID) qu’ils ont choisis.
ENTRYPOINT
Définit l’exécutable à lancer au démarrage du conteneur.
CMD
Définit la commande à exécuter au démarrage du conteneur. Cette commande est transmise
à l’exécutable défini par l’instruction ENTRYPOINT. Les images de base définissent un
exécutable ENTRYPOINT par défaut qui est généralement un exécutable shell, tel que Bash.
WORKDIR
Définit le répertoire de travail actuel à l’intérieur du conteneur. Les instructions ultérieures
s’exécutent dans ce répertoire.
Les métadonnées sont utilisées à des fins de documentation et n’ont pas d’impact sur l’état d’un
conteneur en cours d’exécution. Vous pouvez également remplacer les valeurs de métadonnées
lors de la création du conteneur.
Les métadonnées suivantes sont fournies à titre indicatif uniquement et n’ont pas d’impact sur
l’état du conteneur en cours d’exécution :
EXPOSE
Indique le port réseau auquel l’application se lie dans le conteneur. Ces métadonnées ne
lient pas automatiquement le port sur l’hôte et sont utilisées uniquement à des fins de
documentation.
VOLUME
Définit l’emplacement de stockage des données en dehors du conteneur. La valeur
correspond à l’emplacement où l’environnement d’exécution de votre conteneur monte le
répertoire à l’intérieur du conteneur. Il est possible de définir plusieurs chemins pour créer
plusieurs volumes.
LABEL
Ajoute une paire clé-valeur aux métadonnées de l’image pour l’organisation et la sélection de
l’image.
Les moteurs de conteneur ne sont pas tenus de reconnaître les métadonnées d’une image de
conteneur, telles que USER ou EXPOSE. Un moteur de conteneur peut également reconnaître des
variables d’environnement supplémentaires qui ne sont pas listées dans les métadonnées d’image
de conteneur.
Images de base
Une image de base est l’image qui sert à générer l’image de conteneur qui en résulte. L’image de
base choisie détermine la distribution Linux et n’importe lequel des composants suivants :
• Gestionnaire de paquetages
• Init System
• Disposition du système de fichiers
174 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
L’image de base peut également influencer des facteurs tels que la taille de l’image, la prise en
charge des fournisseurs et la compatibilité des processeurs.
Red Hat fournit des images de conteneur de niveau entreprise conçues pour constituer la couche
de système d’exploitation de base de vos applications en conteneur. Ces images de conteneur
sont conçues comme un point de départ commun pour les conteneurs, et sont connues sous le
nom d’images de base universelles (UBI, Universal Base Images). Les images de conteneur UBI
Red Hat sont des images conformes à l’Open Container Initiative (OCI) qui contiennent des parties
de Red Hat Enterprise Linux (RHEL). Les images de conteneur UBI incluent un sous-ensemble de
contenu RHEL. Elles fournissent un ensemble de langages d’exécution prédéfinis, tels que Python
et Node.js, et de référentiels DNF associés que vous pouvez utiliser pour ajouter des dépendances
d’application. Les images basées sur UBI peuvent être distribuées sans coût ni restriction. Vous
pouvez les déployer sur des plateformes Red Hat et non Red Hat, et les envoyer (push) vers le
registre de conteneurs que vous avez choisi.
Aucun abonnement Red Hat n’est requis pour utiliser ou distribuer des images basées sur UBI.
Cependant, Red Hat ne fournit une prise en charge complète des conteneurs basés sur UBI
que si les conteneurs sont déployés sur une plateforme Red Hat, telle qu’un cluster Red Hat
OpenShift Container Platform (RHOCP) ou RHEL.
Red Hat propose quatre variantes d’UBI : standard, init, minimal et micro. Toutes les
variantes UBI et les images basées sur UBI sont articulées autour de Red Hat Enterprise Linux
(RHEL) et sont disponibles dans Red Hat Container Catalog. Les principales différences sont les
suivantes :
Standard
Il s’agit de l’image UBI principale, qui comprend DNF, systemd, et des utilitaires tels que gzip
et tar.
Init
Cette image simplifie l’exécution de plusieurs applications dans un même conteneur en les
gérant avec systemd.
Minimal
Cette image est plus petite que l’image init et fournit des fonctions intéressantes. Elle
utilise le gestionnaire de paquetages minimal microdnf au lieu de la version complète de
DNF.
Micro
Cette image est la plus petite image UBI disponible, et n’inclut que le nombre minimal de
paquetages. Ainsi, cette image n’inclut pas de gestionnaire de paquetages.
Skopeo
Skopeo est un autre outil permettant d’inspecter et de gérer les images de conteneur distants.
Avec Skopeo, vous pouvez copier et synchroniser des images de conteneur à partir de différents
référentiels et registres de conteneurs. Vous pouvez également copier une image à partir d’un
référentiel distant et l’enregistrer sur un disque local. Si vous disposez des autorisations de
référentiel appropriées, vous pouvez également supprimer une image du registre de conteneurs.
Vous pouvez également utiliser Skopeo pour inspecter la configuration et le contenu d’une image
DO180-OCP4.14-fr-2-20240530 175
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
de conteneur, et pour lister les balises disponibles pour une image de conteneur. Contrairement à
d’autres outils d’image de conteneur, Skopeo peut s’exécuter sans compte avec privilèges, tel que
root. Skopeo n’a pas besoin d’un démon en cours d’exécution pour exécuter diverses opérations.
Skopeo est exécuté à l’aide de l’utilitaire de ligne de commande skopeo, que vous pouvez
installer avec divers gestionnaires de paquetages, tels que DNF, Brew et APT. L’utilitaire skopeo
est peut-être déjà installé sur certaines distributions basées sur Linux. Vous pouvez installer
l’utilitaire skopeo sur les systèmes Fedora, CentOS Stream 8 et versions ultérieures, et Red Hat
Enterprise Linux 8 et versions ultérieures à l’aide du gestionnaire de paquetages DNF.
L’utilitaire skopeo n’est actuellement pas disponible en tant que binaire empaqueté pour les
systèmes Windows. Cependant, l’utilitaire skopeo est disponible en tant qu’image de conteneur
à partir du référentiel de conteneurs quay.io/skopeo/stable. Pour plus d’informations sur
l’image de conteneur Skopeo, reportez-vous au guide de présentation skopeoimage dans le
référentiel Skopeo (https://github.com/containers/skopeo/blob/main/contrib/
skopeoimage/README.md).
Vous pouvez également compiler skopeo à partir du code source dans un conteneur, ou
le compiler localement sans utiliser de conteneur. Reportez-vous au guide d’installation
dans le référentiel Skopeo (https://github.com/containers/skopeo/blob/main/
install.md#container-images) pour plus d’informations sur l’installation ou la compilation
de Skopeo à partir du code source.
L’utilitaire skopeo fournit des commandes pour vous aider à gérer et à inspecter les images de
conteneur et les registres d’images de conteneur. Pour les registres de conteneurs qui nécessitent
une authentification, vous devez d’abord vous connecter au registre avant de pouvoir exécuter des
commandes skopeo supplémentaires.
Note
Les clusters OpenShift sont généralement configurés avec des informations
d’identification de registre. Lorsqu’un pod est créé à partir d’une image de
conteneur dans un référentiel distant, OpenShift s’authentifie auprès du registre
de conteneurs avec les informations d’identification de registre configurées, puis
extrait ou copie l’image. Étant donné qu’OpenShift utilise automatiquement les
informations d’identification du registre, vous n’avez généralement pas besoin
de vous authentifier manuellement auprès d’un registre de conteneurs lorsque
vous créez un pod. En revanche, la commande oc image et l’utilitaire skopeo
nécessitent que vous vous connectiez d’abord à un registre de conteneurs.
Après vous être connecté à un registre de conteneurs (si nécessaire), vous pouvez exécuter des
commandes skopeo supplémentaires sur des images de conteneur dans un référentiel. Lorsque
vous exécutez une commande skopeo, vous devez spécifier le transport et le nom du référentiel.
Un transport est le mécanisme permettant de transférer ou de déplacer des images de conteneur
entre des emplacements. docker et dir sont deux transports courants. Le transport docker est
utilisé pour les registres de conteneurs et le transport dir est utilisé pour les répertoires locaux.
La commande oc image et d’autres outils utilisent par défaut le transport docker. Vous
n’avez donc pas besoin de spécifier le transport lors de l’exécution des commandes. Cependant,
176 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
l’utilitaire skopeo ne définit pas de transport par défaut ; vous devez spécifier le transport
avec le nom de l’image de conteneur. La plupart des commandes skopeo utilisent le format
skopeo command [command options] transport://IMAGE-NAME. Par exemple, la
commande skopeo list-tags suivante liste toutes les balises disponibles dans un référentiel
de conteneurs registry.access.redhat.com/ubi9/httpd-24 à l’aide du transport
docker :
L’utilitaire skopeo inclut d’autres commandes utiles pour la gestion des images de conteneur.
skopeo inspect
Cette commande affiche des informations de bas niveau pour un nom d’image, telles que
les variables d’environnement et les balises disponibles. Utilisez le format de commande
skopeo inspect [command options] transport://IMAGE-NAME. Vous pouvez
inclure l’indicateur --config pour afficher la configuration, les métadonnées et l’historique
d’un référentiel de conteneurs. L’exemple suivant récupère les informations de configuration
pour le référentiel de conteneurs registry.access.redhat.com/ubi9/httpd-24 :
DO180-OCP4.14-fr-2-20240530 177
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
"8080/tcp": {},
"8443/tcp": {}
},
"Env": [
...output omitted...
"HTTPD_MAIN_CONF_PATH=/etc/httpd/conf",
"HTTPD_MAIN_CONF_MODULES_D_PATH=/etc/httpd/conf.modules.d",
"HTTPD_MAIN_CONF_D_PATH=/etc/httpd/conf.d",
"HTTPD_TLS_CERT_PATH=/etc/httpd/tls",
"HTTPD_VAR_RUN=/var/run/httpd",
"HTTPD_DATA_PATH=/var/www",
"HTTPD_DATA_ORIG_PATH=/var/www",
"HTTPD_LOG_PATH=/var/log/httpd"
],
"Entrypoint": [
"container-entrypoint"
],
"Cmd": [
"/usr/bin/run-httpd"
],
"WorkingDir": "/opt/app-root/src",
...output omitted...
}
...output omitted...
skopeo copy
Cette commande copie une image d’un emplacement ou d’un référentiel vers
un autre. Utilisez le format skopeo copy transport://SOURCE-IMAGE
transport://DESTINATION-IMAGE. Par exemple, la commande suivante copie l’image de
conteneur quay.io/skopeo/stable:latest dans le référentiel skopeo du registre de
conteneurs registry.example.com :
skopeo delete
Cette commande supprime une image de conteneur d’un référentiel. Vous devez utiliser
le format skopeo delete [command options] transport://IMAGE-NAME.
La commande suivante supprime l’image skopeo:latest du registre de conteneurs
registry.example.com :
skopeo sync
Cette commande synchronise une ou plusieurs images d’un emplacement avec un autre.
Utilisez-la pour copier toutes les images de conteneur d’une source vers une destination. Elle
respecte le format skopeo sync [command options] --src transport --dest
transport SOURCE DESTINATION. La commande suivante synchronise le référentiel
de conteneurs registry.access.redhat.com/ubi8/httpd-24 avec le référentiel de
conteneurs registry.example.com/httpd-24 :
178 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Vous pouvez choisir une autre image qui ne nécessite pas d’authentification, telle que l’image
UBI 8 :
Vous devez également exécuter la commande skopeo login pour le registre avant de pouvoir
accéder à l’image RHEL 8.
DO180-OCP4.14-fr-2-20240530 179
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
}
}
[user@host ~]$ echo -n dXNlcjpodW50ZXIy | base64 -d
user:hunter2
Note
Pour des raisons de sécurité, la commande skopeo login n’affiche pas votre mot
de passe dans la session interactive. Bien que vous ne voyiez pas ce que vous tapez,
sachez que Skopeo enregistre chaque frappe. Après avoir saisi votre mot de passe
complet dans la session interactive, appuyez sur Enter pour démarrer la connexion.
La commande oc image
L’interface de ligne de commande OpenShift fournit la commande oc image. Vous pouvez
utiliser cette commande pour inspecter, configurer et récupérer des informations sur les images
de conteneur.
La commande oc image info inspecte et récupère des informations sur une image de
conteneur. Vous pouvez utiliser la commande oc image info pour identifier le code SHA ID/
hash SHA et pour lister les couches d’image d’une image de conteneur. Vous pouvez également
consulter les métadonnées d’image de conteneur, telles que les variables d’environnement,
les ports réseau et les commandes. Si un référentiel d’images de conteneur fournit une image
de conteneur dans plusieurs architectures, telles que amd64 ou arm64, vous devez inclure la
balise --filter-by-os. Par exemple, vous pouvez exécuter la commande suivante pour
récupérer des informations sur l’image de conteneur registry.access.redhat.com/ubi9/
httpd-24:1-233 basée sur l’architecture amd64 :
180 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
HTTPD_DATA_PATH=/var/www
HTTPD_DATA_ORIG_PATH=/var/www
HTTPD_LOG_PATH=/var/log/httpd
...output omitted...
La commande oc image fournit davantage d’options pour gérer les images de conteneur.
oc image append
Utilisez cette commande pour ajouter des couches aux images de conteneur, puis envoyez
(push) l’image de conteneur à un registre.
oc image extract
Vous pouvez utiliser cette commande pour extraire ou copier des fichiers d’une image de
conteneur vers un disque local. Utilisez cette commande pour accéder au contenu d’une
image de conteneur sans exécuter au préalable l’image en tant que conteneur. Un moteur de
conteneur en cours d’exécution n’est pas requis.
oc image mirror
Cette commande copie ou mettre en miroir des images de conteneur d’un registre de
conteneurs ou d’un référentiel vers un autre. Par exemple, vous pouvez utiliser cette
commande pour mettre en miroir des images de conteneur entre des registres public et
privé. Vous pouvez également l’utiliser pour copier une image de conteneur d’un registre
vers un disque. La commande met en miroir la structure HTTP d’un registre de conteneurs
sur un répertoire sur un disque. Le répertoire sur le disque peut ensuite servir de registre de
conteneurs.
Les conteneurs qui ne sont pas exécutés en tant qu’utilisateur root présentent des limitations qui
peuvent les rendre inadaptés à une utilisation dans votre application. En voici quelques-unes :
Par exemple, des applications telles que HTTPd et Nginx démarrent un processus d’amorçage,
puis créent un processus avec un utilisateur sans privilèges, qui interagit avec des utilisateurs
externes. De telles applications ne sont pas faciles à mettre en conteneur en vue d’une
utilisation en mode rootless.
Red Hat fournit des versions en conteneur de HTTPd et de Nginx qui ne nécessitent pas
de privilèges root pour une utilisation en production. Vous trouverez les conteneurs dans le
registre de conteneurs Red Hat (https://catalog.redhat.com/software/containers/explore)).
DO180-OCP4.14-fr-2-20240530 181
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
De même, les conteneurs non root ne peuvent pas utiliser l’utilitaire ping par défaut, car il
nécessite des privilèges élevés pour établir des sockets bruts.
Références
Référentiel GitHub Skopeo
https://github.com/containers/skopeo
Page man skopeo(1)
182 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Exercice guidé
Résultats
• Localiser et exécuter des images de conteneur à partir d’un registre de conteneurs.
• Définir des variables d’environnement et remplacer les points d’entrée d’un conteneur.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice.
Instructions
1. Connectez-vous au cluster OpenShift et créez le projet pods-images.
DO180-OCP4.14-fr-2-20240530 183
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
puis récupérez une liste des balises disponibles pour le référentiel de conteneurs
registry.ocp4.example.com:8443/redhattraining/docker-nginx.
2.1. Utilisez la commande skopeo login pour vous connecter en tant qu’utilisateur
developer avec le mot de passe developer.
2.2. Le registre de la salle de classe contient une copie et des balises spécifiques
du référentiel de conteneurs docker.io/library/nginx. Utilisez la
commande skopeo list-tags pour récupérer une liste des balises disponibles
pour le référentiel de conteneurs registry.ocp4.example.com:8443/
redhattraining/docker-nginx.
184 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
3.3. Examinez l’échec du pod. Récupérez les journaux du pod docker-nginx pour
identifier une cause possible de l’échec du pod.
Le pod n’a pas pu démarrer en raison de problèmes d’autorisation pour les répertoires
nginx.
3.5. À partir du pod de débogage, vérifiez les autorisations des répertoires /etc/nginx
et /var/cache/nginx.
Seul l’utilisateur root est autorisé à accéder aux répertoires nginx. Le pod doit donc
s’exécuter en tant qu’utilisateur avec privilèges root pour fonctionner.
3.6. Récupérez l’ID utilisateur (UID) de l’utilisateur docker-nginx pour déterminer s’il
s’agit d’un compte avec ou sans privilèges. Quittez ensuite le pod de débogage.
$ whoami
1000820000
$ exit
DO180-OCP4.14-fr-2-20240530 185
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
3.7. Vérifiez que l’image docker-nginx:1.23 nécessite le compte avec privilèges root.
Utilisez la commande skopeo inspect --config pour afficher la configuration
de l’image.
186 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
L’image définit l’UID 1001, ce qui signifie que l’image ne nécessite pas de compte
avec privilèges.
4.4. Examinez les journaux du pod bitnami-mysql pour déterminer la cause de l’échec.
DO180-OCP4.14-fr-2-20240530 187
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
188 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Vos valeurs pour l’UID du conteneur et la plage d’UID du projet peuvent différer de la
sortie précédente.
L’UID de l’utilisateur de conteneur est identique à la plage d’UID spécifiée dans
l’espace de noms. Notez que l’UID de l’utilisateur de conteneur ne correspond pas
à l’UID 1001 de l’image de conteneur. Pour qu’un conteneur puisse utiliser l’UID
spécifié d’une image de conteneur, le pod doit être créé avec un compte d’utilisateur
OpenShift avec privilèges, tel que l’utilisateur admin.
5. Le registre de la salle de classe privé héberge une copie d’une image MySQL prise
en charge de Red Hat. Récupérez la liste des balises disponibles pour le référentiel de
conteneurs registry.ocp4.example.com:8443/rhel9/mysql-80. Comparez la
version de l’image de conteneur rhel9/mysql-80 associée à chaque balise.
5.1. Utilisez la commande skopeo list-tags pour lister les balises disponibles pour
l’image de conteneur rhel9/mysql-80.
• Les balises latest et 1 sont des balises flottantes, qui sont des alias d’autres
balises, telles que la balise 1-237.
• Les balises 1-228 et 1-224 sont des balises fixes, qui pointent vers une
compilation d’un conteneur.
DO180-OCP4.14-fr-2-20240530 189
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Note
Pour améliorer la lisibilité, les instructions tronquent les chaînes SHA-256.
Sur votre système, les commandes renvoient les chaînes SHA-256 complètes.
Les balises latest, 1 et 1-237 renvoient aux mêmes versions et ID SHA. Les balises
latest et 1 sont des balises flottantes pour la balise fixe 1-237.
190 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
6.2. Après quelques instants, récupérez l’état du pod à l’aide de la commande oc get.
6.3. Récupérez les journaux du pod rhel9-mysql pour déterminer les raisons de l’échec
du pod.
Le pod a échoué, car les variables d’environnement requises n’ont pas été définies
pour le conteneur.
DO180-OCP4.14-fr-2-20240530 191
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Variable Valeur
MYSQL_USER redhat
MYSQL_PASSWORD redhat123
MYSQL_DATABASE worldx
8. Déterminez l’emplacement des fichiers de base de données MySQL pour le pod rhel9-
mysql. Vérifiez que le répertoire contient la base de données worldx.
192 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/
local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PLATFORM=el9
MYSQL_VERSION=8.0
APP_DATA=/opt/app-root/src
HOME=/var/lib/mysql
8.3. Utilisez à nouveau la commande oc exec pour lister le contenu du répertoire /var/
lib/mysql/data.
9.2. Utilisez la commande oc run pour créer un pod mysqlclient avec l’image de
conteneur registry.ocp4.example.com:8443/rhel9/mysql-80:1-237.
Définissez la valeur de la variable d’environnement MYSQL_ROOT_PASSWORD sur
redhat123, puis vérifiez que le pod est en cours d’exécution.
DO180-OCP4.14-fr-2-20240530 193
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
9.3. Utilisez la commande oc exec avec les options -it pour exécuter la commande
mysqlshow sur le pod mysqlclient. Connectez-vous en tant qu’utilisateur redhat
et spécifiez l’hôte en tant qu’adresse IP du pod rhel9-mysql. Lorsqu’un message
vous y invite, saisissez redhat123 comme mot de passe.
La base de données worldx sur le pod rhel9-mysql est accessible au pod mysql-
client.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
194 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Résultats
• Résoudre les problèmes liés à un pod en démarrant des processus supplémentaires sur ses
conteneurs, en modifiant les systèmes de fichiers éphémères et en ouvrant des tunnels réseau à
courte durée de vie.
Il est préférable de réserver la mise à jour d’un conteneur en cours d’exécution à la résolution des
problèmes liés aux conteneurs. Red Hat déconseille généralement de modifier un conteneur en
cours d’exécution pour corriger des erreurs dans un déploiement. Les modifications apportées
à un conteneur en cours d’exécution ne sont pas capturées dans le contrôle de source, mais
elles permettent d’identifier les corrections nécessaires au code source pour les fonctions du
conteneur. Capturez ces mises à jour de conteneur dans le contrôle de version après avoir identifié
les modifications nécessaires. Créez ensuite une image de conteneur et redéployez l’application.
Les modifications personnalisées d’un conteneur en cours d’exécution sont incompatibles avec
une architecture élégante, la fiabilité et la résilience de l’environnement.
Note
Lorsque vous interagissez avec les conteneurs de cluster, prenez les précautions
nécessaires avec les composants, services et applications en cours d’exécution.
Utilisez ces outils pour valider les fonctions et l’environnement d’un conteneur en cours
d’exécution :
DO180-OCP4.14-fr-2-20240530 195
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
– kubectl patch : met à jour un attribut ou un champ spécifique pour une ressource.
– kubectl cp : copie des fichiers et des répertoires vers et depuis des conteneurs.
– oc rsync : synchronise des fichiers et des répertoires vers et depuis des conteneurs.
Modification de ressources
La résolution des problèmes et la correction commencent souvent par une phase d’inspection et
de collecte de données. Lors de la résolution de problèmes, la commande describe peut fournir
des détails utiles sur la ressource en cours d’exécution, telles que la définition d’un conteneur et
son objectif.
Divers outils de l’interface de ligne de commande peuvent appliquer une modification que vous
jugez nécessaire à un conteneur en cours d’exécution. La commande edit ouvre la ressource
spécifiée dans l’éditeur par défaut de votre environnement. Cet éditeur est spécifié en définissant
la variable d’environnement KUBE_EDITOR ou EDITOR, ou avec l’éditeur vi sous Linux, ou encore
avec l’application Notepad sous Windows.
L’exemple suivant montre l’utilisation de la commande oc edit RESOURCE NAME pour modifier
un conteneur en cours d’exécution :
# Please edit the object below. Lines beginning with a '#' will be ignored,
196 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
# and an empty file will abort the edit. If an error occurs while saving this file
will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:
annotations:
...output omitted...
Vous pouvez également utiliser la commande patch pour mettre à jour les champs d’une
ressource.
Dans l’exemple suivant, la commande patch est utilisée pour mettre à jour l’image de conteneur
utilisée par un pod :
Note
Pour plus d’informations sur l’application de correctifs aux ressources et sur les
différentes méthodes de fusion, consultez la page Update API Objects in Place
Using kubectl patch [https://kubernetes.io/docs/tasks/manage-kubernetes-
objects/update-api-object-kubectl-patch/].
Note
Pour utiliser la commande cp avec l’interface de ligne de commande kubectl
ou l’interface de ligne de commande oc, le binaire tar doit être présent dans le
conteneur. Si le binaire est absent, un message d’erreur s’affiche et l’opération
échoue.
L’exemple suivant illustre la copie d’un fichier à partir d’un conteneur en cours d’exécution vers un
répertoire local à l’aide de la commande oc cp SOURCE DEST :
DO180-OCP4.14-fr-2-20240530 197
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Note
Le ciblage d’un chemin d’accès à un fichier dans un pod pour l’argument
SOURCE ou DEST utilise le format pod_name:path et peut inclure l’option -
c container_name pour spécifier un conteneur dans le pod. Si vous omettez
l’option -c container_name, la commande cible le premier conteneur du pod.
De plus, lorsque vous utilisez l’interface de ligne de commande oc, la synchronisation des fichiers
et des répertoires est disponible à l’aide de la commande oc rsync.
La commande oc rsync utilise le client rsync sur votre système local pour copier les fichiers
modifiés vers et depuis un conteneur de pod. Le binaire rsync doit être disponible localement et
dans le conteneur pour cette méthode. Si le binaire rsync est introuvable, une archive tar est
créée sur le système local et envoyée au conteneur. Le conteneur utilise alors l’utilitaire tar pour
extraire les fichiers de l’archive. Sans les binaires rsync et tar, un message d’erreur s’affiche et la
commande oc rsync échoue.
Note
Pour les systèmes Linux, vous pouvez installer le client rsync et l’utilitaire tar
sur un système local à l’aide d’un gestionnaire de paquetages, tel que DNF.
Pour les systèmes Windows, vous pouvez installer le client cwRsync. Pour
plus d’informations sur le client cwRysnc, reportez-vous à l’adresse https://
www.itefix.net/cwrsync.
Lorsque vous résolvez des problèmes liés à une application dont l’exécution classique ne nécessite
pas de connexion locale, vous pouvez utiliser la fonction de redirection de port pour exposer
la connectivité au pod à des fins d’enquête. Avec cette fonction, un administrateur peut se
198 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
connecter au nouveau port et inspecter l’application qui pose problème. Une fois le problème
résolu, l’application peut être redéployée sans la connexion de redirection de port.
Si vous devez vous connecter à un conteneur spécifique dans un pod, utilisez l’option -
c container_name pour spécifier le nom du conteneur. Si vous omettez cette option, la
commande se connecte au premier conteneur du pod.
Vous pouvez également vous connecter à des conteneurs en cours d’exécution de la console Web
en cliquant sur l’onglet Terminal dans le menu principal du pod.
Si vous disposez de plusieurs conteneurs, vous pouvez passer de l’un à l’autre pour vous connecter
au CLI.
DO180-OCP4.14-fr-2-20240530 199
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Utilisez la commande suivante pour transmettre et exécuter des commandes dans un conteneur :
Note
Il est courant d’ajouter les indicateurs -it aux commandes kubectl exec ou oc
exec. Ces indicateurs indiquent à la commande d’envoyer STDIN au conteneur
et STDOUT/STDERR au terminal. L’inclusion des indicateurs -it a un impact sur le
format de la sortie de la commande.
200 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Pour les commandes suivantes, utilisez -c container_name pour spécifier un conteneur dans le
pod. Si vous omettez cette option, la commande cible le premier conteneur du pod.
L’exemple suivant illustre l’utilisation de la commande oc logs POD_NAME pour récupérer des
informations pour un pod :
Dans Kubernetes, une ressource event est un rapport d’un événement situé quelque part dans
le cluster. Vous pouvez utiliser les commandes kubectl get events et oc get events pour
afficher les événements de pod dans un espace de noms :
Avant d’ajouter des outils à une image de conteneur, examinez la manière dont les outils ont un
impact sur votre image de conteneur.
• Des outils supplémentaires augmentent la taille de l’image, ce qui peut avoir des répercussions
sur les performances du conteneur.
• Les outils peuvent nécessiter des paquetages de mise à jour et des conditions d’utilisation de
la licence supplémentaires, ce qui peut avoir une incidence sur la facilité de mise à jour et de
distribution de l’image de conteneur.
DO180-OCP4.14-fr-2-20240530 201
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Les administrateurs peuvent également créer et déployer un conteneur dans le cluster à des
fins d’investigation et de correction. En créant une image de conteneur qui inclut les outils de
résolution des problèmes liés au cluster, vous disposez d’un environnement fiable pour effectuer
ces tâches à partir de n’importe quel ordinateur ayant accès au cluster. Cette approche garantit
qu’un administrateur a toujours accès aux outils pour résoudre et corriger les problèmes de façon
fiable.
En outre, les administrateurs doivent prévoir de créer une image de conteneur qui fournit les
outils de résolution de problèmes les plus utiles pour les applications en conteneur. De cette
façon, vous déployez ce conteneur « toolbox » pour compléter le processus d’analyse et fournir
un environnement avec les commandes et les outils requis pour résoudre les problèmes liés aux
conteneurs. Par exemple, le conteneur « toolbox » peut tester le fonctionnement des ressources
à l’intérieur d’un cluster, par exemple pour confirmer si un pod peut se connecter à des ressources
en dehors du cluster. Les utilisateurs de cluster standard peuvent également créer un conteneur
« toolbox » pour faciliter la résolution des problèmes liés aux applications. Par exemple, un
utilisateur standard peut exécuter un pod avec un client MySQL pour se connecter à un autre pod
qui exécute un serveur MySQL.
Bien que cette approche n’entre pas dans le cadre de ce cours, car il s’agit davantage d’une
correction au niveau de l’application que d’une résolution de problèmes au niveau du conteneur, il
est important de comprendre que les conteneurs présentent cette capacité.
202 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Références
Documentation de Kubernetes – kubectl edit
https://kubernetes.io/docs/concepts/cluster-administration/manage-deployment/
#kubectl-edit
Pour plus d’informations sur la résolution des problèmes liés aux pods, reportez-
vous à la section Investigating Pod Issues du chapitre Troubleshooting de la
documentation Support de Red Hat OpenShift Container Platform 4.14, disponible à
l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/support/index#investigating-pod-
issues
Pour plus d’informations sur la manière de copier des fichiers vers des pods et
à partir de ces derniers, reportez-vous à la section Copying Files to or from an
OpenShift Container Platform Container du chapitre Working with Containers de la
documentation Nodes de Red Hat OpenShift Container Platform 4.14, disponible à
l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/nodes/index#nodes-containers-
copying-files
DO180-OCP4.14-fr-2-20240530 203
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Exercice guidé
Résultats
• Examiner les erreurs lors de la création d’un pod.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que le cluster et toutes les ressources de l’exercice
sont disponibles.
Instructions
1. Connectez-vous au cluster OpenShift et créez le projet pods-troubleshooting.
2. Créez un pod MySQL appelé mysql-server avec la commande oc run. Utilisez l’image
de conteneur registry.ocp4.example.com:8443/rhel9/mysql-80:1228 pour le
pod. Spécifiez les variables d’environnement avec les valeurs suivantes :
204 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Variable Valeur
MYSQL_USER redhat
MYSQL_PASSWORD redhat123
MYSQL_DATABASE world
2.1. Créez le pod mysql-server avec la commande oc run. Spécifiez les variables
d’environnement avec l’option --env.
2.2. Après quelques instants, récupérez l’état du pod. Exécutez la commande oc get
pods plusieurs fois pour afficher les mises à jour de l’état du pod.
Les journaux indiquent que le pod ne peut pas extraire l’image de conteneur.
DO180-OCP4.14-fr-2-20240530 205
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
La sortie indique que l’extraction de l’image a échoué, car le manifeste 1228 est
inconnu. Cet échec peut signifier que le manifeste, ou la balise d’image, n’existe pas
dans le référentiel.
Le manifeste 1228, ou la balise, n’est pas disponible dans le référentiel, ce qui signifie
que l’image registry.ocp4.example.com:8443/rhel9/mysql-80:1228
n’existe pas. Cependant, la balise 1-228 existe.
4. Le pod n’a pas pu démarrer en raison d’une erreur de frappe dans la balise
d’image. Mettez à jour la configuration du pod pour utiliser l’image de conteneur
registry.ocp4.example.com:8443/rhel9/mysql-80:1-228. Vérifiez que le pod
est recréé après avoir modifié la ressource.
206 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
registry.ocp4.example.com:8443/rhel9/mysql-80:1-228 et enregistrez la
modification.
...output omitted...
apiVersion: v1
kind: Pod
metadata:
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/rhel9/mysql-80:1-228
...output omitted...
4.2. Vérifiez l’état du pod mysql-server à l’aide de la commande oc get. La mise à jour
de l’état du pod peut prendre quelques instants après la modification de la ressource.
Répétez la commande oc get jusqu’à ce que l’état du pod change.
5.2. Vérifiez que le fichier world_x.sql est accessible dans le pod mysql-server à
l’aide de la commande oc exec.
DO180-OCP4.14-fr-2-20240530 207
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
5.5. Exécutez la commande SHOW TABLES; pour vérifier que la base de données
contient désormais des tables. Ensuite, quittez la base de données et le pod.
mysql> exit;
Bye
sh-5.1$ exit
exit
[student@workstation ~]$
6.2. Ouvrez une autre fenêtre de terminal sur la machine workstation. Connectez-
vous à la base de données world avec le client MySQL local sur la machine
workstation. Connectez-vous en tant qu’utilisateur redhat avec le mot de passe
208 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
6.4. Vérifiez que vous pouvez récupérer les données de la table country. Exécutez la
commande SELECT COUNT(*) FROM country pour récupérer le nombre de pays
dans la table country.
mysql> exit;
Bye
[student@workstation ~]$
DO180-OCP4.14-fr-2-20240530 209
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
210 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Open Lab
Résultats
• Déployer un pod à partir d’une image de conteneur.
• Copier les fichiers dans un pod en cours d’exécution à des fins de diagnostic.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que les ressources de l’exercice sont disponibles.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 211
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
utilisateur sans privilèges et qu’il appartient au groupe root. Vérifiez que les autorisations du
groupe root sont correctes pour le répertoire /run/httpd.
5. Connectez le port 8080 sur la machine Workstation au port 8080 sur le pod webphp. Dans
une nouvelle fenêtre de terminal, récupérez le contenu de la page Web 127.0.0.1:8080/
index.php du pod pour vérifier que le pod est opérationnel.
Note
La fenêtre de terminal que vous connectez au pod webphp doit rester ouverte
pour le reste de l’atelier. Cette connexion est nécessaire pour la dernière étape de
l’atelier et pour la commande lab grade.
6. Un problème se produit avec l’application PHP qui s’exécute sur le pod webphp. Pour
déboguer le problème, le développeur de l’application a besoin d’informations de diagnostic
et de configuration pour l’instance PHP qui s’exécute sur le pod webphp.
Le répertoire ~/DO180/labs/pods-review contient un fichier phpinfo.php
pour générer des informations de débogage pour une instance PHP. Copiez le fichier
phpinfo.php vers le répertoire /var/www/html/ sur le pod webphp.
Vérifiez ensuite que les informations de débogage PHP s’affichent lorsque vous accédez à
127.0.0.1:8080/phpinfo.php à partir d’un navigateur Web.
Après avoir exécuté la commande lab grade, revenez au terminal qui exécute la
commande oc port-forward et appuyez sur Ctrl+C pour mettre fin à la connexion.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
212 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Solution
Résultats
• Déployer un pod à partir d’une image de conteneur.
• Copier les fichiers dans un pod en cours d’exécution à des fins de diagnostic.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que les ressources de l’exercice sont disponibles.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 213
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
214 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Les journaux indiquent des problèmes d’autorisation avec le répertoire /run dans le
pod.
3.2. Listez le contenu du répertoire /run pour récupérer les autorisations, les propriétaires
et les groupes.
sh-4.4$ id
uid=1000680000(1000680000) gid=0(root) groups=0(root),1000680000
DO180-OCP4.14-fr-2-20240530 215
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
peut pas accéder aux fichiers et aux répertoires utilisés par les processus du conteneur,
ce qui est requis pour les UID attribués de manière arbitraire.
sh-4.4$ exit
exit
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/redhattraining/webphp:v2
imagePullPolicy: IfNotPresent
...output omitted...
4.4. Récupérez l’UID et le GID de l’utilisateur dans le conteneur pour vérifier que l’utilisateur
est un utilisateur sans privilèges.
216 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
5. Connectez le port 8080 sur la machine Workstation au port 8080 sur le pod webphp. Dans
une nouvelle fenêtre de terminal, récupérez le contenu de la page Web 127.0.0.1:8080/
index.php du pod pour vérifier que le pod est opérationnel.
Note
La fenêtre de terminal que vous connectez au pod webphp doit rester ouverte
pour le reste de l’atelier. Cette connexion est nécessaire pour la dernière étape de
l’atelier et pour la commande lab grade.
5.2. Ouvrez une deuxième fenêtre de terminal, puis récupérez la page Web
127.0.0.1:8080/index.php sur le pod webphp.
6. Un problème se produit avec l’application PHP qui s’exécute sur le pod webphp. Pour
déboguer le problème, le développeur de l’application a besoin d’informations de diagnostic
et de configuration pour l’instance PHP qui s’exécute sur le pod webphp.
Le répertoire ~/DO180/labs/pods-review contient un fichier phpinfo.php
pour générer des informations de débogage pour une instance PHP. Copiez le fichier
phpinfo.php vers le répertoire /var/www/html/ sur le pod webphp.
Vérifiez ensuite que les informations de débogage PHP s’affichent lorsque vous accédez à
127.0.0.1:8080/phpinfo.php à partir d’un navigateur Web.
DO180-OCP4.14-fr-2-20240530 217
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Après avoir exécuté la commande lab grade, revenez au terminal qui exécute la
commande oc port-forward et appuyez sur Ctrl+C pour mettre fin à la connexion.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
218 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Quiz
DO180-OCP4.14-fr-2-20240530 219
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
6. Quelles sont les deux images de conteneur qui sont exécutées en tant qu’utilisateur
avec privilèges lorsqu’un administrateur de cluster OpenShift déploie un pod à partir
d’une image ? (Choisissez-en deux.)
a. registry.ocp4.example.com:8443/rhel8/postgresql-13:latest
b. registry.ocp4.example.com:8443/ubi8/php-74:latest
c. registry.ocp4.example.com:8443/ubi8/nodejs-16:latest
d. registry.ocp4.example.com:8443/rhel8/mysql-80:latest
e. registry.ocp4.example.com:8443/ubi8/python-39
220 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Solution
DO180-OCP4.14-fr-2-20240530 221
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
6. Quelles sont les deux images de conteneur qui sont exécutées en tant qu’utilisateur
avec privilèges lorsqu’un administrateur de cluster OpenShift déploie un pod à partir
d’une image ? (Choisissez-en deux.)
a. registry.ocp4.example.com:8443/rhel8/postgresql-13:latest
b. registry.ocp4.example.com:8443/ubi8/php-74:latest
c. registry.ocp4.example.com:8443/ubi8/nodejs-16:latest
d. registry.ocp4.example.com:8443/rhel8/mysql-80:latest
e. registry.ocp4.example.com:8443/ubi8/python-39
222 DO180-OCP4.14-fr-2-20240530
chapitre 3 | Exécuter des applications en tant que conteneurs et pods
Résumé
• Un conteneur est un processus encapsulé qui inclut les dépendances d’exécution requises pour
l’exécution d’une application.
• OpenShift utilise Kubernetes pour gérer les pods. Les pods sont constitués d’un ou de plusieurs
conteneurs qui partagent des ressources, telles que des espaces de noms sélectionnés et la
mise en réseau, et représentent une seule application.
• Les images de conteneur peuvent créer des instances de conteneur, qui sont des versions
exécutables de l’image, et contiennent des références à la mise en réseau, aux disques, ainsi
qu’à d’autres éléments nécessaires à l’exécution.
• Les registres d’images de conteneur, tels que Quay.io et Red Hat Container Catalog, constituent
la méthode privilégiée pour distribuer des images de conteneur à de nombreux utilisateurs et
hôtes.
• La commande oc image et Skopeo, parmi d’autres outils, peuvent examiner et gérer les
images de conteneur.
• Les conteneurs sont immuables et éphémères. Il est donc préférable de réserver la mise à jour
d’un conteneur en cours d’exécution à la résolution des problèmes liés aux conteneurs.
DO180-OCP4.14-fr-2-20240530 223
224 DO180-OCP4.14-fr-2-20240530
chapitre 4
DO180-OCP4.14-fr-2-20240530 225
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Résultats
• Identifier les principaux paramètres et ressources utilisés par Kubernetes pour gérer les
applications de longue durée, et montrer comment OpenShift simplifie les workflows de
déploiement d’applications courants.
Déploiement d’applications
La tendance actuelle est à l’adoption des microservices et du DevOps dans les logiciels
d’entreprise. Parallèlement à cette tendance, les conteneurs et Kubernetes ont gagné en
popularité, mais sont devenus des catégories à part entière. Les infrastructures basées sur des
conteneurs prennent en charge la plupart des types d’applications traditionnelles et modernes.
Le terme application peut désigner votre système logiciel ou un service qu’il contient. Compte
tenu de cette ambiguïté, il est plus clair de faire référence directement aux ressources, services et
autres composants.
Un type de ressource représente un type de composant spécifique, tel qu’un pod. Kubernetes est
fourni avec de nombreux types de ressources par défaut, dont certains se chevauchent sur le plan
des fonctionnalités. Outre les types de ressources Kubernetes par défaut, Red Hat OpenShift
Container Platform (RHOCP) fournit ses propres types. Pour ajouter des types de ressources,
vous pouvez créer ou importer des définitions de ressources personnalisées.
Vous pouvez supprimer des ressources par lots en utilisant des sélecteurs d’étiquettes, ou en
supprimant l’intégralité du projet ou de l’espace de noms. Par exemple, la commande suivante ne
supprime que les déploiements avec l’étiquette app=my-app.
Comme pour la création, la suppression d’une ressource n’est pas immédiate. Il s’agit plutôt d’une
demande pour une suppression à terme.
226 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Note
Les commandes exécutées sans spécifier d’espace de noms le sont dans l’espace
de noms actuel de l’utilisateur.
Modèles
Tout comme les projets, les modèles constituent un ajout RHOCP à Kubernetes. Un modèle est
un manifeste YAML qui contient des définitions paramétrées d’une ou de plusieurs ressources.
RHOCP fournit des modèles prédéfinis dans l’espace de noms openshift.
Traitez un modèle dans une liste de ressources à l’aide de la commande oc process, qui
remplace les valeurs et génère des définitions de ressources. Les définitions de ressources
obtenues créent ou mettent à jour des ressources dans le cluster en les fournissant à la commande
oc apply.
L’option --parameters affiche à la place les paramètres d’un modèle. La commande suivante,
par exemple, liste les paramètres du fichier mysql-template.yaml.
DO180-OCP4.14-fr-2-20240530 227
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Vous pouvez utiliser des modèles avec la commande new-app à partir de RHOCP. Dans l’exemple
suivant, la commande new-app utilise le modèle mysql-persistent pour créer une application
MySQL et les ressources associées.
Username: userQSL
Password: pyf0yElPvFWYQQou
Database Name: sampledb
Connection URL: mysql://mysql:3306/
...output omitted...
* With parameters:
* Memory Limit=512Mi
* Namespace=openshift
* Database Service Name=mysql
* MySQL Connection Username=userQSL # generated
* MySQL Connection Password=pyf0yElPvFWYQQou # generated
* MySQL root user Password=HHbdurqWO5gAog2m # generated
* MySQL Database Name=sampledb
* Volume Capacity=1Gi
* Version of MySQL Image=8.0-el8
Notez que plusieurs ressources sont créées pour répondre aux exigences du déploiement. Il
s’agit notamment d’un secret, d’un service et d’une revendication de volume persistant.
Note
Vous pouvez spécifier des variables d’environnement à configurer lors de la création
de votre application.
Vous pouvez également utiliser des modèles lors de la création d’applications à partir de la console
Web à l’aide du catalogue des développeurs (Developer Catalog). À partir de la perspective
Developer, accédez au menu +Add et cliquez sur All Services dans la section Developer Catalog
pour ouvrir le catalogue. Saisissez ensuite le nom de l’application dans le filtre pour rechercher
un modèle pour votre application. Vous pouvez instancier le modèle et modifier les valeurs par
défaut, telles que le référentiel Git, les limites de mémoire, la version de l’application, etc.
228 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Vous pouvez ajouter une application basée sur un modèle en passant à la perspective Developer,
puis en passant au menu Topology et en cliquant sur Start building application ou sur l’icône de
livre.
Pod
Dans la documentation RHOCP, un pod est défini comme « la plus petite unité de calcul pouvant
être définie, déployée et gérée ». Un pod exécute un ou plusieurs conteneurs représentant une
seule application. Les conteneurs du pod partagent des ressources, telles que le réseau et le
stockage.
apiVersion: v1
kind: Pod
metadata:
annotations: { ... }
labels:
deployment: docker-registry-1
deploymentconfig: docker-registry
DO180-OCP4.14-fr-2-20240530 229
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
name: registry
namespace: pod-registries
spec:
containers:
- env:
- name: OPENSHIFT_CA_DATA
value: ...
image: openshift/origin-docker-registry:v0.6.2
imagePullPolicy: IfNotPresent
name: registry
ports:
- containerPort: 5000
protocol: TCP
resources: {}
securityContext: { ... }
volumeMounts:
- mountPath: /registry
name: registry-storage
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: default-dockercfg-at06w
restartPolicy: Always
serviceAccount: default
volumes:
- emptyDir: {}
name: registry-storage
status:
conditions: { ... }
Informations décrivant votre application, telles que le nom, le projet, les étiquettes associées
et les annotations.
Section dans laquelle les exigences de l’application sont spécifiées, telles que le nom du
conteneur, l’image du conteneur, les variables d’environnement, les montages de volumes, la
configuration réseau et les volumes.
Indique la dernière condition du pod, telle que l’heure de la dernière sonde, l’heure de la
dernière transition, le paramètre d’état comme true ou false, etc.
Déploiement
À l’instar des configurations de déploiement, les déploiements définissent l’état prévu d’un jeu
de réplicas. Les jeux de réplicas gèrent un nombre configurable de pods correspondant à une
spécification.
En règle générale, les jeux de réplicas sont semblables aux contrôleurs de réplication, auxquels ils
succèdent. Cette différence au niveau des ressources intermédiaires est la principale différence
entre les déploiements et les configurations de déploiement.
230 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-openshift
spec:
replicas: 1
selector:
matchLabels:
app: hello-openshift
template:
metadata:
labels:
app: hello-openshift
spec:
containers:
- name: hello-openshift
image: openshift/hello-openshift:latest
ports:
- containerPort: 80
Nom du conteneur.
Configurations de déploiement
Les configurations de déploiement définissent la spécification d’un pod. Elles gèrent les pods
en créant des contrôleurs de réplication, lesquels gèrent le nombre de réplicas d’un pod. Les
configurations de déploiement et les contrôleurs de réplication constituent un ajout RHOCP à
Kubernetes.
Note
Depuis OpenShift Container Platform 4.14, les objets de configuration de
déploiement sont obsolètes. Ils sont toujours pris en charge, mais ne sont pas
recommandés pour les nouvelles installations.
Utilisez plutôt des objets Deployment ou une autre solution pour fournir des mises à
jour déclaratives pour les pods.
Projets
RHOCP ajoute des projets pour améliorer la fonction des espaces de noms Kubernetes. Un
projet est un espace de noms Kubernetes avec des annotations supplémentaires. Il s’agit de la
DO180-OCP4.14-fr-2-20240530 231
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
principale méthode de gestion de l’accès aux ressources pour les utilisateurs standard. Les projets
peuvent être créés à partir de modèles et doivent utiliser le contrôle d’accès basé sur les rôles
pour la gestion de l’organisation et des autorisations. Les administrateurs doivent accorder aux
utilisateurs du cluster l’accès à un projet. Si l’utilisateur d’un cluster est autorisé à créer des projets,
il a directement accès aux projets qui ont été créés.
Les projets séparent les ressources de vos composants d’application de manière logique et
organisationnelle. Les ressources d’un projet peuvent accéder aux ressources d’autres projets,
mais pas par défaut.
apiVersion: project.openshift.io/v1
kind: Project
metadata:
name: test
spec:
finalizers:
- kubernetes
Nom du projet.
Un finaliseur est une clé de métadonnées spéciale qui indique à Kubernetes d’attendre
qu’une condition spécifique soit remplie avant de supprimer complètement une ressource.
Services
Vous pouvez configurer une communication réseau interne de pod à pod dans RHOCP à l’aide
de l’objet Service. Les applications envoient des requêtes au port et au nom du service. RHOCP
fournit un réseau virtuel qui redirige ces requêtes vers les pods ciblés par le service en utilisant des
étiquettes.
apiVersion: v1
kind: Service
metadata:
name: docker-registry
namespace: test
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Nom du service.
232 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Le sélecteur d’étiquette identifie tous les pods auxquels est associée l’étiquette app=MyApp
et les ajoute aux points d’accès du service.
Port sur les pods de sauvegarde vers lequel le service redirige les connexions.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs-storage
status:
...
Nom du service.
Secrets
Les secrets fournissent un mécanisme permettant de conserver des informations sensibles, telles
que des mots de passe, les informations d’identification du référentiel source privé, des fichiers de
configuration sensibles et les informations d’identification d’une ressource externe, comme une
clé SSH ou un token OAuth. Vous pouvez monter des secrets dans des conteneurs à l’aide d’un
plug-in de volume. Kubernetes peut également utiliser des secrets pour effectuer des actions sur
un pod, comme déclarer des variables d’environnement. Les secrets peuvent stocker n’importe
quel type de données. Kubernetes et OpenShift prennent en charge différents types de secrets,
tels que les tokens de compte de service, les clés SSH et les certificats TLS.
DO180-OCP4.14-fr-2-20240530 233
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
apiVersion: v1
kind: Secret
metadata:
name: example-secret
namespace: my-app
type: Opaque
data:
username: bXl1c2VyCg==
password: bXlQQDU1Cg==
stringData:
hostname: myapp.mydomain.com
secret.properties: |
property1=valueA
property2=valueB
Nom du service.
Les commandes de gestion des ressources appartiennent généralement à l’une des deux
catégories suivantes : déclarative ou impérative. Une commande impérative indique ce que doit
faire le cluster. Une commande déclarative définit l’état avec lequel le cluster tente d’établir une
correspondance.
Utilisez la commande set pour définir des attributs sur une ressource, tels que des variables
d’environnement. Par exemple, la commande suivante ajoute la variable d’environnement
TEAM=red au déploiement précédent.
234 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
La commande run est une autre approche impérative de création d’une ressource. Dans l’exemple
suivant, la commande run crée le pod example-pod.
Les commandes impératives permettent de créer des pods plus rapidement, car elles ne
nécessitent pas de définition d’objet pod. Cependant, les développeurs ne peuvent pas gérer le
contrôle de version ni modifier la définition du pod de manière incrémentielle.
Cette méthode de gestion des ressources est impérative, car vous indiquez au cluster ce qu’il doit
faire plutôt que de déclarer les résultats attendus.
DO180-OCP4.14-fr-2-20240530 235
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
RHOCP ajoute la commande new-app, qui fournit une autre méthode déclarative pour
créer des ressources. Cette commande utilise des méthodes heuristiques pour déterminer
automatiquement les types de ressources à créer en fonction des paramètres spécifiés. Par
exemple, la commande suivante déploie l’application my-app en créant plusieurs ressources, y
compris une ressource de déploiement, à partir d’un fichier manifeste YAML.
Dans les exemples create et new-app précédents, vous déclarez l’état prévu des ressources ;
elles sont donc déclaratives.
Vous pouvez également utiliser la commande new-app avec des modèles dans le cadre de la
gestion des ressources. Un modèle décrit l’état prévu des ressources qui doivent être créées
pour qu’une application s’exécute, telles que des configurations de déploiement et des services.
La fourniture d’un modèle à la commande new-app est une forme de gestion déclarative des
ressources.
La commande new-app inclut également des options, telles que --param, qui personnalisent un
déploiement d’application de manière déclarative. Par exemple, lorsque la commande new-app
est utilisée avec un modèle, vous pouvez inclure l’option --param pour remplacer une valeur de
paramètre dans le modèle.
Username: operator
Password: myP@55
Database Name: mydata
Connection URL: mysql://db:3306/
...output omitted...
* With parameters:
* Memory Limit=512Mi
* Namespace=openshift
* Database Service Name=db
236 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Comme pour la commande create, vous pouvez utiliser new-app de manière impérative.
Lorsque vous utilisez une image de conteneur avec new-app, vous indiquez au cluster ce qu’il doit
faire, plutôt que de déclarer les résultats attendus. Par exemple, la commande suivante déploie
l’image example.com/my-app:dev en créant plusieurs ressources, y compris une ressource de
déploiement.
Vous pouvez afficher des informations détaillées sur une ressource, telles que les paramètres
définis, en utilisant la commande describe. Par exemple, RHOCP fournit des modèles dans le
projet openshift à utiliser avec la commande oc new-app. L’exemple de commande suivant
affiche des informations détaillées sur le modèle mysql-ephemeral :
DO180-OCP4.14-fr-2-20240530 237
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Name: NAMESPACE
Display Name: Namespace
Description: The OpenShift Namespace where the ImageStream resides.
Required: false
Value: openshift
...output omitted...
Objects:
Secret ${DATABASE_SERVICE_NAME}
Service ${DATABASE_SERVICE_NAME}
DeploymentConfig.apps.openshift.io ${DATABASE_SERVICE_NAME}
La commande describe ne peut pas générer de sortie structurée, comme les formats YAML ou
JSON. Sans format structuré, la commande describe ne peut pas analyser ni filtrer la sortie avec
des outils tels que JSONPath ou des modèles Go. Utilisez plutôt la commande get pour générer,
puis analyser la sortie structurée d’une ressource.
Références
Documentation OpenShift Container Platform – Understanding Deployment
and DeploymentConfig Objects (Présentation des objets Deployment et
DeploymentConfig)
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/building_applications/index#what-
deployments-are
238 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Exercice guidé
Résultats
Au cours de cet exercice, vous allez déployer deux pods de serveur de base de données
MySQL pour comparer les méthodes de déploiement et les ressources créées dans chaque
cas.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que les ressources sont disponibles pour l’exercice.
Instructions
1. En tant qu’utilisateur developer, créez un projet et vérifiez qu’il n’est pas vide après la
création.
1.3. Comme vous pouvez le constater, les ressources du nouveau projet ne sont pas
renvoyées avec la commande oc get all.
DO180-OCP4.14-fr-2-20240530 239
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Important
Les commandes qui utilisent all pour le type de ressource n’incluent pas tous
les types de ressources disponibles. Au lieu de cela, all est une forme abrégée
pour un sous-ensemble prédéfini de types. Lorsque vous utilisez cet argument de
commande, assurez-vous que all contient tous les types que vous comptez traiter.
2. Créez deux instances MySQL en utilisant la commande oc new-app avec des options
différentes.
2.2. Créez une instance à l’aide du modèle mysql-persistent. Spécifiez une option
name et associez une étiquette team=red personnalisée aux ressources créées.
240 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
2.3. Affichez le pod et attendez qu’il démarre. Cela peut prendre quelques minutes. Vous
devrez peut-être exécuter la commande à plusieurs reprises avant que l’état ne passe
sur Running.
Les noms de vos pods peuvent être différents de ceux de la sortie précédente.
2.4. Créez une instance en utilisant une image de conteneur. Spécifiez une option name et
associez une étiquette team=blue personnalisée aux ressources créées.
Note
Vous pouvez ignorer les avertissements de sécurité des pods pour les exercices de
ce cours. OpenShift utilise le contrôleur Contraintes du contexte de sécurité pour
fournir des valeurs par défaut sécurisées pour la sécurité des pods.
2.5. Attendez que le pod démarre. Après quelques instants, listez tous les pods qui
contiennent team comme étiquette.
DO180-OCP4.14-fr-2-20240530 241
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Le nom de votre pod peut être différent de celui de la sortie précédente. Sans
readinessProbe, ce pod apparaît comme étant prêt avant que le service MySQL
ne soit prêt pour les requêtes. Les sondes Readiness sont abordées plus en détail
dans une autre partie de ce cours.
Notez que seul le pod db-image a une étiquette qui contient le mot team. Les pods
créés par le modèle mysql-persistent n’ont pas l’étiquette team=red, car le
modèle ne définit pas cette étiquette dans son modèle de spécification de pod.
3.1. Affichez le pod template-created et notez qu’il contient une sonde Readiness.
Note
Les résultats de la commande oc précédente sont transmis à la commande jq, qui
formate la sortie JSON.
3.2. Notez que le pod basé sur une image ne contient pas de sonde Readiness.
3.3. Notez que le pod basé sur un modèle présente une limite de ressources mémoire,
ce qui limite la mémoire allouée aux pods obtenus. Les limites de ressources sont
abordées plus en détail dans une autre partie de ce cours.
242 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
3.4. Notez que les ressources ne sont pas limitées dans le cas du pod basé sur une image.
3.5. Récupérez des secrets dans le projet. Notez que le modèle a généré un secret,
contrairement au pod qui a été créé avec uniquement une image.
4.1. Notez que tous les services sont affichés si aucune étiquette n’est fournie.
4.2. Notez que si une étiquette est fournie, seuls les services associés à cette étiquette
sont affichés.
4.3. Notez que toutes les ressources n’incluent pas l’étiquette ; c’est le cas des pods créés
avec le modèle.
5.1. Supprimez uniquement les ressources qui utilisent l’étiquette team=red en l’utilisant
avec la commande oc delete. Listez les types de ressources du modèle pour vous
assurer que toutes les ressources pertinentes sont supprimées.
DO180-OCP4.14-fr-2-20240530 243
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Note
L’utilisation de la commande oc delete all -l team=red supprime certaines
ressources, mais la revendication de volume persistant et le secret sont conservés.
5.2. Notez que les ressources créées par le modèle sont supprimées.
5.3. Notez que les ressources basées sur une image restent inchangées.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
244 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Résultats
• Déployer des applications en conteneur en tant que pods gérés par des ressources de charge de
travail Kubernetes.
• Jobs
• Déploiements
• Ensembles avec état
Jobs
Une ressource de job représente une tâche unique à effectuer sur le cluster. Comme pour la
plupart des tâches de cluster, les jobs sont exécutés via des pods. Si le pod d’un job échoue, le
cluster réessaie autant de fois que le job l’indique. Le job cesse de s’exécuter après un nombre
spécifié d’exécutions réussies.
Les jobs diffèrent de l’utilisation des commandes kubectl run et oc run ; ces deux dernières
créent uniquement un pod.
DO180-OCP4.14-fr-2-20240530 245
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Vous pouvez également créer une tâche à partir de la console Web en cliquant sur le menu
Workloads > Jobs. Cliquez sur Create Job et personnalisez le manifeste YAML.
Tâches cron
Une ressource tâche cron s’appuie sur une ressource de tâche standard en vous permettant
de spécifier la fréquence d’exécution de la tâche. Les tâches cron sont particulièrement utiles
pour créer des tâches périodiques et récurrentes, telles que des sauvegardes ou pour générer
des rapports. Elles permettent également de planifier des tâches individuelles pour une heure
spécifique ; une tâche au cours d’une période de faible activité, par exemple. À l’instar du fichier
crontab (table cron) sur un système Linux, la ressource CronJob utilise le format Cron pour
la planification. Une ressource CronJob crée une ressource job en fonction du fuseau horaire
configuré sur le nœud du plan de contrôle qui exécute le contrôleur de tâche cron.
L’exemple de commande suivant crée une tâche cron intitulée date qui imprime la date et l’heure
système toutes les minutes :
Vous pouvez également créer un cronjob à partir de la console Web en cliquant sur le menu
Workloads > CronJobs. Cliquez sur Create CronJob et personnalisez le manifeste YAML.
Déploiements
Un déploiement _ crée un jeu de réplicas pour gérer les pods. Un _jeu de réplicas gère un nombre
spécifié de réplicas d’un pod. Les jeux de réplicas utilisent des sélecteurs, tels qu’une étiquette,
pour identifier les pods qui en font partie. Des pods sont créés ou supprimés jusqu’à ce que les
réplicas atteignent le nombre spécifié par le déploiement. Les jeux de réplicas ne sont pas gérés
directement, mais de manière indirecte par les déploiements.
Contrairement aux jobs, les pods d’un déploiement sont recréés après un plantage ou une
suppression. Cela est dû au fait que les déploiements utilisent des jeux de réplicas.
246 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Vous pouvez également créer un déploiement à partir de la console Web en cliquant sur l’onglet
Deployments dans le menu Workloads.
Les pods d’un jeu de réplicas sont identiques et correspondent au modèle de pod dans la
définition du jeu de réplicas. Si le nombre de réplicas n’est pas atteint, un nouveau pod est créé à
l’aide du modèle. Par exemple, si un pod plante ou s’il est supprimé, un nouveau pod est créé pour
le remplacer.
Les étiquettes constituent un type de métadonnées de ressource qui sont représentées sous la
forme de paires clé-valeur de chaîne. Une étiquette indique une caractéristique commune pour
les ressources auxquelles elle est associée. Par exemple, vous pouvez associer une étiquette
layer=frontend aux ressources liées aux composants d’interface utilisateur d’une application.
De nombreuses commandes oc et kubectl acceptent une étiquette pour filtrer les ressources
affectées. Par exemple, la commande suivante supprime tous les pods avec l’étiquette
environment=testing :
DO180-OCP4.14-fr-2-20240530 247
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
En appliquant librement des étiquettes aux ressources, vous pouvez référencer les ressources
et créer des sélecteurs précis. Un sélecteur est un objet de requête qui décrit les attributs de
ressources correspondantes.
Certaines ressources utilisent des sélecteurs pour en rechercher d’autres. Dans l’extrait YAML
suivant, un exemple de jeu de réplicas utilise un sélecteur pour faire correspondre ses pods.
apiVersion: apps/v1
kind: ReplicaSet
...output omitted...
spec:
replicas: 1
selector:
matchLabels:
app: httpd
pod-template-hash: 7c84fbdb57
...output omitted...
Comme leur nom l’indique, les ensembles avec état sont destinés aux pods qui nécessitent un état
au sein du cluster. Les déploiements sont utilisés pour les pods sans état.
Vous trouverez une description détaillée des ensembles avec état dans un chapitre ultérieur.
Références
Charges de travail Kubernetes
https://kubernetes.io/docs/concepts/workloads/
248 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Exercice guidé
Résultats
Au cours de cet exercice, vous allez déployer un serveur de base de données et une
application par lots qui sont tous deux gérés par des ressources de charge de travail.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que les ressources sont disponibles pour l’exercice.
Instructions
1. En tant qu’utilisateur developer, créez un déploiement MySQL dans un nouveau projet.
DO180-OCP4.14-fr-2-20240530 249
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
1.5. Récupérez l’état du pod créé. Le nom de votre pod peut être différent de celui de la
sortie.
1.6. Examinez les journaux du pod pour déterminer la cause de l’échec de démarrage.
Notez que le conteneur ne démarre pas, car il manque des variables d’environnement.
2.2. Récupérez la liste des déploiements et notez qu’un pod est en cours d’exécution sur
le déploiement my-db.
250 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
2.3. Récupérez l’adresse IP interne du pod MySQL dans la liste de tous les pods.
L’option -o wide active des sorties supplémentaires, telles que les adresses IP. Votre
valeur d’adresse IP peut être différente de celle de la sortie précédente.
2.4. Exécutez une requête pour vérifier que le serveur de base de données est en cours
d’exécution. Remplacez l’adresse IP par celle que vous avez récupérée à l’étape
précédente.
3. Supprimez le pod du serveur de base de données et notez qu’il est recréé à la suite du
déploiement.
3.2. Récupérez les informations du pod MySQL et, comme vous pouvez le constater, il
vient d’être créé. Le nom de votre pod peut être différent dans votre sortie.
4. Créez et appliquez une ressource de tâche qui imprime l’heure et la date de manière
répétitive.
4.1. Créez une ressource de tâche appelée date-loop qui exécute un script. Ignorez
l’avertissement.
DO180-OCP4.14-fr-2-20240530 251
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
4.3. Listez les tâches pour vérifier que la tâche date-loop a bien été exécutée.
4.4. Récupérez les journaux du pod associé. Les valeurs de journal peuvent être
différentes dans votre sortie.
5. Supprimez le pod pour la tâche date-loop et notez que le pod n’est pas recréé.
252 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
5.2. Affichez la liste des pods et notez que le pod n’est pas recréé pour la tâche.
5.3. Vérifiez que l’état de la tâche est toujours listé comme étant terminé avec succès.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 253
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Résultats
• Interconnecter les pods d’applications au sein du même cluster à l’aide des services Kubernetes.
Le réseau SDN vous permet de gérer le trafic et les ressources réseau par programme, afin que les
équipes de l’organisation puissent décider comment exposer leurs applications. L’implémentation
SDN crée un modèle compatible avec les pratiques réseau traditionnelles. Cela rend les pods
comparables à des machines virtuelles en termes d’allocation de ports, de location d’adresses IP
et de réservation.
Avec la conception du SDN, il n’est pas nécessaire de modifier la façon dont les composants
de l’application communiquent les uns avec les autres, ce qui facilite la mise en conteneur des
applications existantes. Si votre application comprend de nombreux services qui communiquent
par le biais de la pile TCP/UDP, cette approche fonctionne toujours, car les conteneurs d’un pod
utilisent la même pile réseau.
Le schéma ci-dessous montre comment tous les pods sont connectés à un réseau partagé :
Parmi les nombreuses fonctions du SDN, les normes ouvertes permettent aux fournisseurs de
proposer leurs solutions pour une gestion centralisée, un routage dynamique et l’isolation des
tenants.
254 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
• Communication externe vers le service : cette fonctionnalité est traitée dans la section Mise à
l’échelle et exposition d’applications pour un accès externe
Kubernetes attribue automatiquement une adresse IP à chaque pod. Cependant, les adresses IP
des pods sont instables, car les pods sont éphémères. Les pods sont constamment créés et
détruits sur les nœuds du cluster. Par exemple, lorsque vous déployez une nouvelle version de
votre application, Kubernetes détruit les pods existants, puis en déploie de nouveaux.
Tous les conteneurs d’un pod partagent des ressources réseau. L’adresse IP et l’adresse MAC
attribuées au pod sont partagées entre tous les conteneurs du pod. Tous les conteneurs d’un
pod peuvent ainsi accéder aux ports des autres via l’adresse de bouclage localhost. Les ports
liés à localhost sont disponibles pour tous les conteneurs qui s’exécutent à l’intérieur du pod. En
revanche, ils ne le sont jamais pour les conteneurs situés en dehors.
Par défaut, les pods peuvent communiquer entre eux même s’ils s’exécutent sur des nœuds de
cluster différents ou appartiennent à des espaces de noms Kubernetes différents. Chaque pod se
voit attribuer une adresse IP dans un espace de noms réseau plat partagé ayant un accès complet
aux autres ordinateurs physiques et conteneurs sur le réseau. Une adresse IP unique est attribuée
à tous les pods à partir d’une plage d’adresses hôtes CIDR (Classless Inter-Domain Routing). La
plage d’adresses partagée place tous les pods dans le même sous-réseau.
Étant donné que tous les pods se trouvent sur le même sous-réseau, les pods de tous les nœuds
peuvent communiquer avec ceux de n’importe quel autre nœud sans recourir à la traduction
d’adresses réseau (NAT). Kubernetes fournit également un sous-réseau de services, qui lie
l’adresse IP stable d’une ressource de service à un ensemble de pods spécifiés. Le trafic est
acheminé de manière transparente vers les pods ; un agent (selon le mode réseau utilisé) gère
les règles de routage pour acheminer le trafic vers les pods qui correspondent aux sélecteurs de
ressource du service. Les pods peuvent donc être considérés comme des machines virtuelles ou
des hôtes physiques du point de vue de l’allocation de ports, de la mise en réseau, de l’attribution
de noms, de la découverte de services, de l’équilibrage de charge, de la configuration des
applications et de la migration. Kubernetes met en œuvre cette infrastructure en gérant le réseau
SDN.
L’illustration suivante vous permet de mieux comprendre la façon dont les composants
d’infrastructure fonctionnent avec les sous-réseaux de pods et de services pour permettre un
accès réseau entre les pods à l’intérieur d’une instance OpenShift.
DO180-OCP4.14-fr-2-20240530 255
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
L’espace de noms réseau partagé des pods permet un modèle de communication simple.
Cependant, la nature dynamique des pods pose problème. Des pods peuvent être ajoutés à
la volée pour gérer une augmentation du trafic. De même, ils peuvent être réduits de manière
dynamique. Si un pod échoue, Kubernetes le remplace automatiquement par un nouveau. Ces
événements modifient les adresses IP des pods.
256 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Dans le schéma, le côté Before illustre le conteneur Front-end qui s’exécute dans un pod
avec l’adresse IP 10.8.0.1. Le conteneur fait également référence à un conteneur Back-
end qui s’exécute dans un pod avec l’adresse IP 10.8.0.2. Dans cet exemple, un événement
se produit et entraîne l’échec du conteneur Back-end. L’échec d’un pod peut être dû à de
nombreux facteurs. En réponse à l’échec, Kubernetes crée un pod pour le conteneur Back-end,
qui utilise une nouvelle adresse IP, 10.8.0.4. Du côté After du schéma, le conteneur Front-
end a désormais une référence non valide au conteneur Back-end en raison du changement
d’adresse IP. Kubernetes résout ce problème avec des ressources service.
Si les pods sont redémarrés, répliqués ou replanifiés sur des nœuds différents, les points d’accès
du service sont mis à jour, offrant ainsi une évolutivité et une tolérance aux pannes pour vos
applications. Contrairement aux adresses IP des pods, celles des services ne changent pas.
DO180-OCP4.14-fr-2-20240530 257
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Figure 4.8: Les services résolvent les problèmes de défaillance des pods
Dans le schéma, le côté Before montre que le conteneur Front-end contient désormais une
référence à l’adresse IP stable du service Back-end, au lieu de l’adresse IP du pod qui exécute
le conteneur Back-end. Lorsque le conteneur Back-end échoue, Kubernetes crée un pod avec
le conteneur New back-end pour remplacer le pod défaillant. En réponse à la modification,
Kubernetes supprime le pod défaillant de la liste des hôtes du service, ou des points d’accès
du service, puis ajoute l’adresse IP du pod de conteneur New back-end aux points d’accès
du service. Avec l’ajout du service, les demandes du conteneur Front-end vers le conteneur
Back-end continuent de fonctionner, car le service est mis à jour de manière dynamique avec le
changement d’adresse IP. Un service fournit une adresse IP statique permanente à un groupe de
pods appartenant au même déploiement ou au même jeu de réplicas pour une application. Tant
que vous n’avez pas supprimé le service, l’adresse IP attribuée ne change pas et le cluster ne la
réutilise pas.
La plupart des applications réelles ne s’exécutent pas comme un pod unique. Les applications
doivent être mises à l’échelle horizontalement. Plusieurs pods exécutent les mêmes conteneurs
pour répondre à une demande croissante des utilisateurs. Une ressource de déploiement gère
plusieurs pods qui exécutent le même conteneur. Un service fournit une seule adresse IP pour
l’intégralité du jeu, ainsi qu’un équilibrage de charge pour les demandes des clients entre les pods
membres.
Les services permettent aux conteneurs d’un pod d’ouvrir des connexions réseau vers les
conteneurs d’un autre pod. Il n’est pas nécessaire que les pods, dont le service effectue le
suivi, existent sur le même nœud de calcul, ou dans le même espace de noms ou projet. Étant
donné qu’un service fournit une adresse IP stable que d’autres pods peuvent utiliser, il n’est
pas nécessaire non plus qu’un pod découvre la nouvelle adresse IP d’un autre pod après un
redémarrage. Le service fournit une adresse IP stable à utiliser, quel que soit le nœud de calcul qui
exécute le pod après chaque redémarrage.
258 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
L’objet SERVICE fournit une adresse IP stable pour le conteneur CLIENT sur NODE X afin
d’envoyer une demande à l’un des conteneurs API.
Kubernetes utilise des étiquettes sur les pods pour sélectionner ceux qui sont associés à un
service. Pour qu’un pod puisse être inclus dans un service, les étiquettes de pod doivent inclure
chacun des champs selector du service.
selector:
app: myapp
Dans cet exemple, le sélecteur a la paire clé-valeur app: myapp. Dès lors, les pods avec
l’étiquette correspondante app: myapp sont inclus dans l’ensemble qui est associé au service.
L’attribut selector d’un service est utilisé pour identifier l’ensemble des pods qui forment les points
d’accès du service. Chaque pod de l’ensemble est un point d’accès du service.
DO180-OCP4.14-fr-2-20240530 259
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
La commande oc expose peut utiliser l’option --selector pour spécifier les sélecteurs
d’étiquettes à utiliser. Lorsque la commande est utilisée sans l’option --selector, elle applique
un sélecteur pour établir une correspondance avec le contrôleur de réplication ou le jeu de
réplicas.
L’option --port de la commande oc expose spécifie le port sur lequel le service écoute. Ce
port est disponible uniquement pour les pods à l’intérieur du cluster. Si aucune valeur de port n’est
fournie, le port est copié à partir de la configuration de déploiement.
L’option --protocol détermine le protocole réseau du service. Le protocole TCP est utilisé par
défaut.
L’option --name de la commande oc expose peut nommer explicitement le service. Si rien n’est
spécifié, le service utilise le même nom que celui qui est fourni pour le déploiement.
Pour afficher le sélecteur utilisé par un service, utilisez l’option -o wide avec la commande oc
get.
Dans cet exemple, db-pod est le nom du service. Les pods doivent utiliser l’étiquette app=db-
pod pour être inclus dans la liste d’hôtes du service db-pod. Pour afficher les points d’accès
utilisés par un service, utilisez la commande oc get endpoints.
Cet exemple illustre un service avec deux pods dans la liste d’hôtes. La commande oc get
endpoints renvoie tous les points d’accès du service dans le projet sélectionné. Ajoutez le nom
du service à la commande pour n’afficher que les points d’accès d’un seul service. Utilisez l’option
--namepace pour afficher les points d’accès dans un autre espace de noms.
260 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Vous pouvez afficher ou analyser le sélecteur de la sortie YAML ou JSON pour la ressource de
déploiement à partir de l’objet spec.selector.matchLabels. Dans cet exemple, l’option -o
yaml de la commande oc get renvoie l’étiquette selector utilisée par le déploiement.
Le serveur DNS découvre un service à partir d’un pod en utilisant le serveur DNS interne, qui est
visible uniquement par les pods. Chaque service se voit attribuer dynamiquement un nom de
domaine complètement qualifié qui utilise le format suivant :
SVC-NAME.PROJECT-NAME.svc.CLUSTER-DOMAIN
Lorsqu’un pod est créé, Kubernetes fournit au conteneur un fichier /etc/resolv.conf avec un
contenu semblable aux éléments suivants :
Dans cet exemple, deploy-services est le nom de projet du pod et cluster.local est le
domaine du cluster.
DO180-OCP4.14-fr-2-20240530 261
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Dans la directive search de cet exemple, l’entrée svc.cluster.local permet à n’importe quel
pod de communiquer avec un autre pod du même cluster en utilisant le nom du service et le nom
du projet :
SVC-NAME.PROJECT-NAME
La première entrée de la directive search permet à un pod d’utiliser le nom du service pour
spécifier un autre pod du même projet. Dans RHOCP, un projet est également l’espace de noms
du pod. Le nom du service, à lui seul, suffit pour les pods du même projet RHOCP :
SVC-NAME
Red Hat fournit les plug-ins CNI suivants pour un cluster RHOCP :
• OVN-Kubernetes : plug-in par défaut pour les premières installations de RHOCP, à partir de
RHOCP 4.10.
• OpenShift SDN : plug-in plus ancien de RHOCP 3.x ; il est incompatible avec certaines fonctions
ultérieures de RHOCP 4.x.
• Kuryr : plug-in destiné à l’intégration et aux performances sur les déploiements OpenStack.
Les plug-ins CNI certifiés d’autres fournisseurs sont également compatibles avec un cluster
RHOCP.
Le SDN utilise des plug-ins CNI pour créer des espaces de noms Linux afin de partitionner
l’utilisation des ressources et des processus sur les hôtes physiques et virtuels. Cette
implémentation permet aux conteneurs à l’intérieur des pods de partager des ressources réseau,
telles que des périphériques, des piles IP, des règles de pare-feu et des tables de routage. Le SDN
alloue une adresse IP routable unique à chaque pod, de sorte que vous puissiez accéder au pod à
partir de n’importe quel autre service du même réseau.
OVN-Kubernetes utilise Open Virtual Network (OVN) pour gérer le réseau de clusters. Un cluster
qui utilise le plug-in OVN-Kubernetes exécute également Open vSwitch (OVS) sur chaque nœud.
OVN configure OVS sur chaque nœud afin d’implémenter la configuration réseau déclarée.
262 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Le CIDR du réseau de clusters définit la plage d’adresses IP pour tous les pods du cluster.
Le CIDR du réseau de services définit la plage d’adresses IP pour tous les services du cluster.
Références
Pour plus d’informations, reportez-vous au chapitre About Kubernetes Pods and
Services (À propos des pods et des services Kubernetes) de la documentation
Networking (Mise en réseau) de Red Hat OpenShift Container Platform 4.14,
disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/architecture/index#building-
simple-container
Réseau de clusters
https://kubernetes.io/docs/concepts/cluster-administration/networking/
DO180-OCP4.14-fr-2-20240530 263
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Exercice guidé
Résultats
Vous devriez être en mesure de déployer un serveur de base de données et d’y accéder, de
manière indirecte, via un service Kubernetes, ainsi que directement de pod à pod pour la
résolution des problèmes.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour
cet exercice. Elle crée également le projet deploy-services et le fichier /home/student/
DO180/labs/deploy-services/resources.txt. Le fichier resources.txt contient
certaines commandes que vous utiliserez au cours de l’exercice. Vous pouvez utiliser ce
fichier pour copier et coller ces commandes.
Note
Vous pouvez ignorer les avertissements de sécurité des pods pour les
exercices de ce cours. OpenShift utilise le contrôleur Contraintes du contexte
de sécurité pour fournir des valeurs par défaut sécurisées pour la sécurité des
pods.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet deploy-services.
264 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
4. Validez le service. Vérifiez que le sélecteur de service correspond bien à l’étiquette du pod.
Vérifiez ensuite que le point d’accès du service db-pod correspond à l’adresse IP du pod.
DO180-OCP4.14-fr-2-20240530 265
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Notez que la liste des étiquettes inclut la paire clé-valeur app=db-pod, qui est le
sélecteur du service db-pod.
Les valeurs de vos points d’accès peuvent être différentes de celles de la sortie
précédente.
4.5. Vérifiez que le point d’accès du service correspond à l’adresse IP db-pod . Utilisez la
commande oc get pods avec l’option -o wide pour afficher l’adresse IP du pod.
5. Supprimez, puis recréez le déploiement db-pod. Vérifiez que le point d’accès du service
db-pod est résolu automatiquement sur l’adresse IP du nouveau pod.
266 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
5.6. Vérifiez que le pod qui vient d’être créé dispose du sélecteur app=db-pod.
Notez le changement dans le nom du pod. Il se peut que l’adresse IP du pod soit
également modifiée. Le nom et l’adresse IP de votre pod peuvent être différents de
ceux de la sortie précédente.
5.7. Vérifiez que les points d’accès du service db-pod incluent le pod qui vient d’être créé.
6. Créez un pod pour identifier les affectations de noms DNS disponibles pour le service.
DO180-OCP4.14-fr-2-20240530 267
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Le conteneur utilise les valeurs de la directive search comme valeurs de suffixe lors
des recherches DNS. Le conteneur ajoute ces valeurs à une requête DNS, dans l’ordre
indiqué, pour résoudre la recherche. Le nom de domaine du cluster correspond aux
derniers composants de ces valeurs qui commencent après svc.
6.3. Utilisez les commandes nc et echo pour tester les noms DNS disponibles pour le
service.
nc -z <service>_<server>_ <port>
La version longue du nom DNS est requise lors de l’accès au service à partir d’un
autre projet. Lorsque le pod se trouve dans le même projet, vous pouvez utiliser une
version plus courte du nom DNS.
bash-4.4$ exit
Session ended, resume using 'oc attach shell -c shell -i -t' command when the pod
is running
7. Utilisez un nouveau projet pour tester les communications des pods entre les espaces de
noms.
7.2. Exécutez les commandes nc et echo à partir d’un pod pour tester l’accès du
nom DNS à un autre espace de noms.
268 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
8. Utilisez une tâche Kubernetes pour ajouter des données d’initialisation à la base de
données.
8.2. Vérifiez l’état de la tâche mysql-init. Attendez que la tâche soit terminée.
8.3. Récupérez l’état du pod de la tâche mysql-init pour vérifier qu’il s’agit bien de
Completed.
DO180-OCP4.14-fr-2-20240530 269
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
9.1. Créez le pod query-db. Configurez le pod pour qu’il utilise le client MySQL afin
d’exécuter une requête sur le service db-pod. Vous pouvez utiliser le nom court du
service db-pod, qui fournit une référence stable.
10. Il peut être nécessaire d’utiliser des communications de pod à pod pour la résolution des
problèmes. Utilisez la commande oc run pour créer un pod qui exécute un test réseau sur
l’adresse IP du pod de base de données.
10.1. Vérifiez l’adresse IP du pod de base de données MySQL. L’adresse IP de votre pod
peut être différente de celle de la sortie.
270 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
10.3. Créez un pod de test nommé shell avec la commande oc run. Exécutez la
commande nc pour effectuer un test sur la variable d’environnement $POD_IP et sur
le port 3306 de la base de données.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 271
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Résultats
• Exposer des applications aux clients situés à l’extérieur du cluster à l’aide d’une entrée
Kubernetes et de routes OpenShift.
Par défaut, les services connectent les clients aux pods à tour de rôle, et chaque service se voit
attribuer une adresse IP unique à laquelle les clients peuvent se connecter. Cette adresse IP
provient d’un autre réseau virtuel OpenShift interne qui, bien que distinct du réseau interne des
pods, est visible uniquement par ceux-ci. Chaque pod correspondant au sélecteur est ajouté à la
ressource de service comme point d’accès.
Les conteneurs qui se trouvent à l’intérieur des pods Kubernetes ne doivent pas se connecter
directement à l’adresse IP dynamique de leurs homologues. Les services résolvent ce problème
en liant des adresses IP plus stables à partir du SDN vers les pods. Si les pods sont redémarrés,
répliqués ou replanifiés sur des nœuds différents, les services sont mis à jour pour offrir une
évolutivité et une tolérance aux pannes.
Types de services
Vous pouvez choisir entre plusieurs types de services en fonction des besoins de votre application,
de l’infrastructure du cluster et des exigences en termes de sécurité.
ClusterIP
Il s’agit du type par défaut, sauf si vous spécifiez explicitement un type pour un service. Le
type ClusterIP expose le service sur une adresse IP interne au cluster. Si vous choisissez cette
valeur, le service sera accessible uniquement à partir du cluster.
Le type de service ClusterIP est utilisé pour le routage de pod à pod au sein du cluster
RHOCP. Il permet aux pods de communiquer entre eux et d’accéder les uns aux autres. Les
adresses IP des services ClusterIP sont attribuées à partir d’un réseau de services dédié,
accessible uniquement depuis l’intérieur du cluster. La plupart des applications doivent utiliser
ce type de service, dont Kubernetes automatise la gestion.
Équilibreur de charge
Cette ressource indique à RHOCP d’activer un équilibreur de charge dans un environnement
cloud. Un équilibreur de charge indique à Kubernetes d’interagir avec le fournisseur de cloud
dans lequel s’exécute le cluster afin de déployer un module de ce type. L’équilibreur de charge
fournit ensuite à l’application une adresse IP accessible depuis l’extérieur.
Prenez toutes les précautions nécessaires avant de déployer ce type de service. Les
équilibreurs de charge sont généralement trop onéreux pour que vous en attribuiez un à
272 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
chaque application d’un cluster. De plus, les applications qui utilisent ce type de service
deviennent accessibles à partir de réseaux situés à l’extérieur du cluster. Une configuration de
sécurité supplémentaire est requise pour empêcher tout accès indésirable.
NodePort
Avec cette méthode, Kubernetes expose un service sur un port sur l’adresse IP du nœud. Le
port est exposé sur tous les nœuds du cluster, et chaque nœud redirige le trafic vers les points
d’accès (pods) du service.
ExternalName
Ce service indique à Kubernetes que le nom DNS dans le champ externalName est
l’emplacement de la ressource qui fournit le service. Lorsqu’une demande DNS est effectuée
sur le serveur DNS Kubernetes, elle renvoie l’externalName dans un enregistrement CNAME
(Canonical Name) et indique au client de rechercher le nom renvoyé pour obtenir l’adresse IP.
RHOCP fournit la ressource route pour exposer vos applications à des réseaux externes. Les
routes vous permettent d’accéder à votre application à l’aide d’un nom d’hôte unique accessible
au public. Les routes s’appuient sur un contrôleur d’entrée Kubernetes pour rediriger le trafic
de l’adresse IP publique vers les pods. Par défaut, Kubernetes fournit un contrôleur d’entrée à
partir de la version 1.24. Pour les clusters RHOCP, le contrôleur d’entrée est fourni par l’opérateur
d’entrée OpenShift. Les clusters RHOCP peuvent également utiliser divers contrôleurs d’entrée
tiers qui peuvent être déployés parallèlement au contrôleur d’entrée OpenShift.
Les routes transmettent le trafic entrant aux services dans le cluster. Elles ont été créées avant les
objets d’entrée Kubernetes et fournissent davantage de fonctions. Elles fournissent des fonctions
avancées qui peuvent ne pas être prises en charge par les contrôleurs d’entrée Kubernetes via
une interface standard, telle que le rechiffrement TLS, le relais TLS et le trafic partagé pour les
déploiements bleu-vert.
Pour créer une route (sécurisée ou non) avec l’interface de ligne de commande oc, utilisez la
commande oc expose service service-name. Incluez l’option --hostname pour fournir un
nom d’hôte personnalisé pour la route.
frontend-api.apps.example.com
DO180-OCP4.14-fr-2-20240530 273
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Important
Le serveur DNS qui héberge le domaine générique ignore tous les noms d’hôte de la
route ; il résout uniquement les noms sur les adresses IP configurées. Seul le routeur
RHOCP connaît les noms d’hôte de la route et traite chacun d’eux comme un hôte
virtuel HTTP.
Les noms d’hôtes de domaines génériques non valides, ou les noms d’hôtes qui ne
correspondent à aucune route, sont bloqués par le routeur RHOCP et génèrent une
erreur HTTP 503.
Lors de la création d’une route, veuillez prendre en compte les paramètres suivants :
• Le nom d’un service. La route utilise le service pour déterminer les pods vers lesquels rediriger
le trafic.
• Un nom d’hôte pour la route. Une route est toujours un sous-domaine de votre domaine
générique de cluster. Par exemple, si vous utilisez le domaine générique apps.dev-
cluster.acme.com et que vous devez exposer un service frontend via une route, le nom de
la route sera :
frontend.apps.dev-cluster.acme.com.
• Un port cible sur lequel l’application écoute. Le port cible correspond au port que vous
définissez dans la clé targetPort du service.
• Une stratégie de chiffrement, selon que vous avez besoin d’une route sécurisée ou
non sécurisée.
kind: Route
apiVersion: route.openshift.io/v1
metadata:
name: a-simple-route
labels:
app: API
name: api-frontend
spec:
host: api.apps.acme.com
to:
kind: Service
name: api-frontend
port: 8080
targetPort: 8443
274 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Nom d’hôte de la route. Ce nom d’hôte doit être un sous-domaine de votre domaine
générique, étant donné que RHOCP achemine le domaine générique vers les routeurs.
Service vers lequel rediriger le trafic. Bien que vous utilisiez un nom de service, la route utilise
uniquement ces informations pour déterminer la liste des pods qui reçoivent le trafic.
Mappage de ports d’un routeur vers un point d’accès dans les points d’accès de service. Port
cible sur les pods sélectionnés par le service vers lequel pointe cette route.
Note
Certains composants de l’écosystème sont intégrés dans des ressources
d’entrée, mais pas dans des ressources de la route. Dans ce cas, RHOCP crée
automatiquement des objets de route gérés lorsqu’un objet d’entrée est créé.
Ces objets de route sont supprimés lors de la suppression des objets d’entrée
correspondants.
Vous pouvez supprimer une route à l’aide de la commande oc delete route route-name.
Vous pouvez également exposer un service à partir de la console Web en cliquant sur le menu
Networking > Routes. Cliquez sur Create Route et personnalisez le nom, le nom d’hôte, le chemin
d’accès et le service vers lequel effectuer le routage à l’aide de la vue Form ou du manifeste
YAML.
DO180-OCP4.14-fr-2-20240530 275
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Note
La ressource d’entrée est couramment utilisée pour Kubernetes. Cependant,
la ressource route est la méthode privilégiée pour la connectivité externe dans
RHOCP.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: frontend
spec:
rules:
- host: "www.example.com
http:
paths:
- backend:
service:
name: frontend
port:
number: 80
pathType: Prefix
path: /
tls:
- hosts:
- www.example.com
secretName: example-com-tls-certificate
Hôte de l’objet d’entrée. Applique la règle HTTP au trafic HTTP entrant de l’hôte spécifié.
Backend vers lequel rediriger le trafic. Définit le nom du service, le numéro de port et les
noms des ports pour l’objet d’entrée. Pour se connecter au backend, les demandes entrantes
doivent correspondre à l’hôte et au chemin de la règle.
Configuration de TLS pour l’objet d’entrée ; elle est requise pour les chemins sécurisés.
L’hôte de l’objet TLS doit correspondre à celui de l’objet « rules ».
276 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Sessions permanentes
Les sessions permanentes permettent un trafic d’applications avec état en veillant à ce que toutes
les demandes atteignent le même point d’accès. RHOCP utilise des cookies pour configurer la
persistance de session pour les ressources d’entrée et de route. Le contrôleur d’entrée sélectionne
un point d’accès pour gérer les demandes utilisateur et crée un cookie pour la session. Le cookie
est renvoyé en réponse à la demande, et l’utilisateur le renvoie avec la demande suivante dans
la session. Le cookie indique au contrôleur d’entrée le point d’accès qui gère la session, pour
s’assurer que les demandes des clients l’utilisent afin d’être acheminées vers le même pod.
RHOCP génère automatiquement le nom du cookie pour les ressources d’entrée et de route. Vous
pouvez remplacer le nom du cookie par défaut en utilisant la commande annotate avec kubectl
ou oc. Avec cette annotation, l’application qui reçoit le trafic de routage connaît le nom du cookie.
Après avoir annoté la route, capturez son nom d’hôte dans une variable :
En utilisant le cookie enregistré, la demande est envoyée au même pod que la demande
précédente.
DO180-OCP4.14-fr-2-20240530 277
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Bien que vous puissiez manipuler directement une ressource de jeu de réplicas, il est recommandé
de manipuler plutôt la ressource de déploiement. Un nouveau déploiement crée soit un jeu de
réplicas soit un contrôleur de réplication, et les modifications apportées directement à un jeu de
réplicas ou à un contrôleur de réplication antérieur sont ignorées.
Un routeur utilise le sélecteur de service pour trouver le service et les points d’accès, ou pods, qui
prennent en charge le service. Lorsqu’un routeur et un service assurent l’équilibrage de la charge,
RHOCP utilise le routeur pour équilibrer la charge du trafic vers les pods. Un routeur détecte
les modifications pertinentes dans les adresses IP de ses services et adapte sa configuration en
conséquence. Les routeurs personnalisés peuvent ainsi communiquer des modifications d’objets
API à une solution de routage externe.
Les routeurs RHOCP mappent les noms d’hôtes externes et équilibrent la charge des points
d’accès de service sur des protocoles qui leur transmettent directement des informations
distinctives. Le nom d’hôte doit exister dans le protocole pour que le routeur puisse déterminer sa
destination.
Références
Pour plus d’informations, reportez-vous à la section About Networking (À propos
de la mise en réseau) de la documentation Networking (Mise en réseau) de Red Hat
OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/networking/index#about-
networking
278 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Exercice guidé
Résultats
Au cours de cet exercice, vous allez déployer deux applications Web pour y accéder via un
objet d’entrée et une route, et les mettre à l’échelle pour vérifier l’équilibrage de la charge
entre les pods.
• Créez une route et un objet d’entrée pour accéder aux applications Web.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice. Cette commande garantit que le cluster est
accessible.
Instructions
1. Créez deux déploiements d’applications Web, nommés satir-app et sakila-app.
Utilisez l’image de conteneur registry.ocp4.example.com:8443/httpd-app:v1
pour les deux déploiements.
DO180-OCP4.14-fr-2-20240530 279
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
2. Créez des services pour les déploiements d’applications Web. Utilisez ensuite les services
pour créer une route pour l’application satir-app et un objet d’entrée pour l’application
sakila-app.
280 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
2.4. Créez une route nommée satir pour l’application Web satir-app en exposant le
service satir-svc.
Champ Valeur
Hôte ingr-sakila.apps.ocp4.example.com
DO180-OCP4.14-fr-2-20240530 281
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
2.6. Vérifiez qu’il existe bien une route pour l’objet d’entrée ingr-sakila.
Aucun port spécifique n’est affecté aux routes créées par les objets d’entrée. En
revanche, une route créée par un service exposé se voit attribuer les mêmes ports
que le service.
3. Mettez à l’échelle les déploiements d’applications Web pour équilibrer la charge de leurs
services. Mettez à l’échelle l’application sakila-app sur deux réplicas et satir-app sur
trois réplicas.
3.2. Patientez quelques instants, puis vérifiez l’état des pods répliqués.
282 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
3.4. Patientez quelques instants, puis vérifiez l’état des pods répliqués.
3.5. Récupérez les points d’accès de service pour vérifier que la charge des services est
bien équilibrée entre les pods répliqués supplémentaires.
4. Activez les sessions permanentes pour l’application Web sakila-app. Utilisez ensuite
la commande curl pour vérifier que les sessions persistantes fonctionnent pour l’objet
ingr-sakila.
4.2. Utilisez la commande curl pour accéder à l’objet d’entrée ingr-sakila. La sortie
indique le nom du pod qui traite la demande. Notez que la charge de la connexion est
équilibrée entre les réplicas.
4.3. Utilisez la commande curl pour enregistrer le cookie d’objet d’entrée ingr-sakila
dans le fichier /tmp/cookie_jar. Vérifiez que le cookie existe bien dans le fichier /
tmp/cookie_jar.
DO180-OCP4.14-fr-2-20240530 283
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
4.4. Le cookie assure la persistance de session pour les connexions à la route ingr-
sakila. Utilisez la commande curl et le cookie du fichier /tmp/cookie_jar pour
vous reconnecter à la route ingr-sakila. Vérifiez que vous bien êtes connecté au
même pod que celui qui a traité la demande à l’étape précédente.
4.5. Utilisez la commande curl pour vous connecter à la route ingr-sakila sans le
cookie . Notez que la persistance de session se produit uniquement avec le cookie.
5. Activez les sessions permanentes pour l’application Web satir-app. Utilisez ensuite la
commande curl pour vérifier que les sessions permanentes sont actives pour la route
satir.
5.2. Utilisez la commande curl pour accéder à la route satir. La sortie indique le nom
du pod qui traite la demande. Notez que la charge de la connexion est équilibrée
entre les trois pods répliqués.
5.3. Utilisez la commande curl pour enregistrer le cookie hello dans le fichier /tmp/
cookie_jar. Vérifiez ensuite que le cookie hello existe bien dans le fichier /tmp/
cookie_jar.
284 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
5.4. Le cookie hello assure la persistance de session pour les connexions à la route
satir. Utilisez la commande curl et le cookie hello du fichier /tmp/cookie_jar
pour vous reconnecter à la route satir. Vérifiez que vous bien êtes connecté au
même pod que celui qui a traité la demande à l’étape précédente.
5.5. Utilisez la commande curl pour vous connecter à la route satir sans le cookie
hello. Notez que la persistance de session se produit uniquement avec le cookie.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 285
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Open Lab
Résultats
• Déployer une base de données MySQL à partir d’une image de conteneur.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que le cluster est accessible et que toutes les
ressources de l’exercice sont disponibles. Elle crée également le projet database-
applications.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
286 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Champ Valeur
MYSQL_USER redhat
MYSQL_PASSWORD redhat123
MYSQL_DATABASE world_x
Champ Valeur
Name mysql-service
Port 3306
Champ Valeur
Name php-svc
Port 8080
Créez ensuite une route nommée phpapp pour exposer l’application Web à un accès externe.
7. Testez la connectivité entre l’application Web et la base de données
MySQL. Dans un navigateur Web, accédez à la route phpapp-database-
applications.apps.ocp4.example.com et vérifiez que l’application récupère les
données de la base de données MySQL.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
DO180-OCP4.14-fr-2-20240530 287
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
288 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Solution
Résultats
• Déployer une base de données MySQL à partir d’une image de conteneur.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que le cluster est accessible et que toutes les
ressources de l’exercice sont disponibles. Elle crée également le projet database-
applications.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 289
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
2.2. Vérifiez l’état du déploiement. Le nom du pod peut être différent dans votre sortie.
Champ Valeur
MYSQL_USER redhat
MYSQL_PASSWORD redhat123
MYSQL_DATABASE world_x
290 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
3.2. Vérifiez que le pod d’application mysql-app se trouve à l’état RUNNING. Le nom du
pod peut être différent dans votre sortie.
mysql> exit
Bye
sh-4.4$ exit
Champ Valeur
Name mysql-service
Port 3306
DO180-OCP4.14-fr-2-20240530 291
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
4.2. Vérifiez la configuration du service. L’adresse IP du point d’accès peut être différente
dans votre sortie.
5.2. Vérifiez l’état du déploiement. Vérifiez que le pod d’application php-app se trouve à
l’état RUNNING.
Champ Valeur
Name php-svc
Port 8080
Créez ensuite une route nommée phpapp pour exposer l’application Web à un accès externe.
292 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
6.2. Vérifiez la configuration du service. L’adresse IP du point d’accès peut être différente
dans votre sortie.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
DO180-OCP4.14-fr-2-20240530 293
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
294 DO180-OCP4.14-fr-2-20240530
chapitre 4 | Déployer des applications gérées et en réseau sur Kubernetes
Résumé
• De nombreuses ressources dans Kubernetes et RHOCP créent des pods ou ont une incidence
sur ceux-ci.
• La commande oc new-app crée des ressources qui sont déterminées au moyen de méthodes
heuristiques.
• Pour déployer une application, la méthode la plus courante consiste à créer un déploiement.
• L’API de charge de travail comprend plusieurs ressources pour créer des pods. Le choix de la
ressource dépend de la durée et de la fréquence d’exécution du pod.
• Une ressource de job exécute une tâche unique sur le cluster via un pod. Le cluster tente
d’exécuter la tâche jusqu’à ce qu’elle réussisse ou réessaie autant de fois qu’il est spécifié.
• Une route relie une adresse IP et un nom d’hôte DNS publics à une adresse IP de service interne.
Les services fournissent un accès réseau entre les pods, tandis que les routes fournissent un
accès réseau aux pods à partir d’utilisateurs et d’applications situés à l’extérieur du cluster
RHOCP.
DO180-OCP4.14-fr-2-20240530 295
296 DO180-OCP4.14-fr-2-20240530
chapitre 5
DO180-OCP4.14-fr-2-20240530 297
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Résultats
• Configurer des applications à l’aide de secrets et de mappages de configuration Kubernetes
pour initialiser des variables d’environnement, et fournir des fichiers de configuration texte et
binaires.
Kubernetes vous permet d’utiliser des manifestes aux formats JSON et YAML pour spécifier la
configuration prévue pour chaque application. Vous pouvez définir le nom de l’application, des
étiquettes, la source de l’image, le stockage, des variables d’environnement, etc.
L’extrait de code suivant montre un exemple de fichier manifeste YAML d’un déploiement :
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
replicas: 1
selector:
matchLabels:
app: hello-deployment
template:
metadata:
labels:
app: hello-deployment
spec:
containers:
- env:
- name: ENV_VARIABLE_1
valueFrom:
secretKeyRef:
key: hello
name: world
image: quay.io/hello-image:latest
Dans cette section, vous spécifiez les métadonnées de votre application, telles que son nom.
298 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Dans cette section, vous spécifiez la configuration de votre application, telle que le nom de
l’image, le nom du conteneur, les ports, les variables d’environnement, etc.
Vous pouvez définir les variables d’environnement de manière à configurer les besoins de
votre application.
Dans certains cas, votre application nécessite la configuration d’une combinaison de fichiers.
Par exemple, au moment de la création, des données et une base de données doivent être
préchargées dans un déploiement de base de données. La plupart du temps, vous configurez des
applications à l’aide de variables d’environnement, de fichiers externes ou d’arguments de ligne
de commande. Ce processus d’externalisation de la configuration garantit que l’application peut
être portée dans tous les environnements lorsque l’image de conteneur, les fichiers externes et les
variables d’environnement sont disponibles dans l’environnement dans lequel elle s’exécute.
Vous pouvez utiliser des mappages de configuration pour « injecter » des données de
configuration dans des conteneurs. Les objets avec espace de noms ConfigMap (mappage
de configuration) permettent d’injecter des données de configuration dans des conteneurs,
ce qui permet de maintenir l’indépendance des conteneurs vis-à-vis de la plateforme. Ces
objets permettent de stocker des informations précises, telles que des propriétés individuelles,
ou plus générales, comme des blobs JSON (sections JSON) ou des fichiers de configuration
complets. Les informations contenues dans les mappages de configuration ne nécessitent aucune
protection.
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
namespace: my-app
data:
example.property.1: hello
example.property.2: world
example.property.file: |-
property.1=value-1
property.2=value-2
property.3=value-3
binaryData:
bar: L3Jvb3QvMTAw
Pointe vers un fichier codé en base64 qui contient des données non UTF-8 ; un fichier de
magasin de clés Java binaire, par exemple. Placez une clé suivie du fichier encodé.
Souvent, les applications ont besoin d’accéder à des informations sensibles. Par exemple, une
application Web backend doit avoir accès aux informations d’identification de la base de données
DO180-OCP4.14-fr-2-20240530 299
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
pour interroger cette dernière. Kubernetes et OpenShift utilisent des secrets pour stocker des
informations sensibles. Par exemple, vous pouvez utiliser des secrets pour stocker les types
d’informations sensibles suivants :
• Mots de passe
• Informations d’identification à une ressource externe, telles qu’une clé SSH ou un token OAuth
apiVersion: v1
kind: Secret
metadata:
name: example-secret
namespace: my-app
type: Opaque
data:
username: bXl1c2VyCg==
password: bXlQQDU1Cg==
stringData:
hostname: myapp.mydomain.com
secret.properties: |
property1=valueA
property2=valueB
Un secret est un objet avec espace de noms capable de stocker n’importe quel type de données.
Les données d’un secret sont codées en Base64 ; elles ne sont pas stockées en texte clair. Les
données secrètes ne sont pas chiffrées ; vous pouvez décoder le secret au format Base64 pour
accéder aux données d’origine. L’exemple suivant montre les valeurs décodées pour les objets
username et password à partir du secret example-secret :
• Secrets opaques : un secret opaque stocke des paires clé/valeur qui contiennent des valeurs
arbitraires et qui ne sont pas validées pour se conformer à une convention relative aux noms ou
valeurs de clé.
• Jetons de compte de service : stockez des informations d’identification de jeton pour les
applications qui s’authentifient auprès de l’API Kubernetes.
300 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
• Certificats TLS : stockez un certificat et une clé qui sont utilisés pour TLS.
Lorsque vous stockez des informations dans un type de ressource secrète spécifique, Kubernetes
confirme que les données sont conformes au type de secret.
Note
Par défaut, les mappages de configuration et les secrets ne sont pas chiffrés. Pour
chiffrer vos données secrètes au repos, vous devez chiffrer la base de données
Etcd. Lorsque cela est activé, Etcd chiffre les ressources suivantes : secrets,
mappages de configuration, routes, tokens d’accès OAuth et tokens d’autorisation
OAuth. Le chiffrement de la base de données Etcd sort du cadre de ce cours.
Création de secrets
Si un pod a besoin d’accéder à des informations sensibles, créez un secret pour ces informations
avant de déployer le pod. Les outils de ligne de commande oc et kubectl fournissent tous deux
la commande create secret. Utilisez l’une des commandes suivantes pour créer un secret :
• Créez un secret générique contenant des paires clé-valeur à partir des valeurs littérales saisies
sur la ligne de commande :
• Créez un secret générique à l’aide des noms de clé spécifiés sur la ligne de commande et des
valeurs à partir des fichiers :
Pour créer un secret opaque à partir de la console Web, cliquez sur le menu Workloads > Secrets.
Cliquez sur Create et sélectionnez Key/value secret. Complétez le formulaire avec le nom de la clé
et spécifiez la valeur en l’écrivant dans la section suivante ou en l’extrayant d’un fichier.
DO180-OCP4.14-fr-2-20240530 301
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Pour créer un secret à partir de la console Web qui stocke les informations d’identification
permettant d’accéder à un registre d’images de conteneur, cliquez sur le menu Workloads
> Secrets. Cliquez sur Create et sélectionnez Image pull secret. Remplissez le formulaire
ou téléchargez un fichier de configuration avec le nom du secret, sélectionnez le type
d’authentification et ajoutez l’adresse du serveur de registre, le nom d’utilisateur, le mot de passe
et les informations d’identification de messagerie.
Vous pouvez également utiliser le nom court cm pour créer un mappage de configuration.
302 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Pour créer un mappage de configuration à partir de la console Web, cliquez sur le menu Workloads
> ConfigMaps. Cliquez sur Create ConfigMap et complétez le mappage de configuration en
utilisant la vue Form ou la vue YAML.
Vous pouvez utiliser des fichiers sur chaque clé que vous ajoutez en cliquant sur Browse en regard
du champ Value. Le champ Key doit être le nom du fichier ajouté dans le champ Value.
Note
Utilisez une clé de données binaire au lieu d’une clé de données si le fichier utilise le
format binaire, tel qu’un fichier PNG.
DO180-OCP4.14-fr-2-20240530 303
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
apiVersion: v1
kind: ConfigMap
metadata:
name: config-map-example
namespace: example-app
data:
database.name: sakila
database.user: redhat
Projet dans lequel réside le mappage de configuration. Les objets ConfigMap ne peuvent
être référencés que par des pods du même projet.
Vous pouvez ensuite utiliser le mappage de configuration pour renseigner des variables
d’environnement pour votre application. L’exemple suivant montre une ressource de pod qui
renseigne des variables d’environnement spécifiques à l’aide d’un mappage de configuration.
apiVersion: v1
kind: Pod
metadata:
name: config-map-example-pod
namespace: example-app
spec:
containers:
- name: example-container
image: registry.example.com/mysql-80:1-237
command: [ "/bin/sh", "-c", "env" ]
env:
- name: MYSQL_DATABASE
valueFrom:
configMapKeyRef:
name: config-map-example
key: database.name
- name: MYSQL_USER
valueFrom:
configMapKeyRef:
name: config-map-example
key: database.user
optional: true
Nom d’une variable d’environnement de pod dans laquelle vous renseignez la valeur d’une clé.
Définit la variable d’environnement comme étant facultative. Le pod est démarré même si les
clés et l’objet ConfigMap spécifiés n’existent pas.
304 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
L’exemple suivant montre une ressource de pod qui injecte toutes les variables d’environnement à
partir d’un mappage de configuration.
apiVersion: v1
kind: Pod
metadata:
name: config-map-example-pod2
namespace: example-app
spec:
containers:
- name: example-container
image: registry.example.com/mysql-80:1-237
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: config-map-example
restartPolicy: Never
Attribut permettant d’extraire toutes les variables d’environnement d’un objet ConfigMap.
Vous pouvez utiliser des secrets avec d’autres ressources Kubernetes telles que des pods, des
déploiements, des compilations, etc. Vous pouvez spécifier des clés secrètes ou des volumes avec
un chemin de montage pour stocker vos secrets. L’extrait de code suivant montre un exemple de
pod qui renseigne des variables d’environnement avec les données du secret Kubernetes test-
secret :
apiVersion: v1
kind: Pod
metadata:
name: secret-example-pod
spec:
containers:
- name: secret-test-container
image: busybox
command: [ "/bin/sh", "-c", "export" ]
env:
- name: TEST_SECRET_USERNAME_ENV_VAR
valueFrom:
secretKeyRef:
name: test-secret
key: username
DO180-OCP4.14-fr-2-20240530 305
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Contrairement aux mappages de configuration, les valeurs des secrets sont toujours codées (et
non pas chiffrées) et leur accès est limité à un nombre moins élevé d’utilisateurs autorisés.
La commande suivante crée un secret générique contenant des paires clé-valeur à partir
des valeurs littérales saisies sur la ligne de commande : user avec la valeur demo-user et
root_password avec la valeur zT1kTgk.
Vous pouvez également créer un secret générique en spécifiant des noms de clé sur la ligne de
commande et des valeurs à partir des fichiers :
Vous pouvez monter un secret sur un répertoire à l’intérieur d’un pod. Kubernetes crée un fichier
pour chaque clé du secret qui utilise le nom de la clé. Le contenu de chaque fichier est la valeur
décodée du secret. La commande suivante montre comment monter des secrets dans un pod :
Pour affecter un secret en tant que volume à un déploiement à partir de la console Web, listez les
secrets disponibles dans le menu Workloads > Secrets.
306 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Comme pour les secrets, vous devez créer un mappage de configuration avant qu’un pod puisse
l’utiliser. Le mappage de configuration doit exister dans le même espace de noms, ou projet, que
le pod. La commande suivante montre comment créer un mappage de configuration à partir d’un
fichier de configuration externe :
Vous pouvez également ajouter un mappage de configuration en tant que volume à l’aide de la
commande suivante :
DO180-OCP4.14-fr-2-20240530 307
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Pour vérifier que le volume est bien attaché au déploiement, utilisez la commande suivante :
Vous pouvez également utiliser la commande oc set env pour définir les variables
d’environnement de l’application à partir de secrets ou de mappages de configuration. Dans
certains cas, vous pouvez modifier les noms des clés pour qu’ils correspondent aux noms de
variables d’environnement en utilisant l’option --prefix. Dans l’exemple suivant, la clé user du
secret demo-secret définit la variable d’environnement MYSQL_USER et la clé root_password
du secret demo-secret définit la variable d’environnement MYSQL_ROOT_PASSWORD. Si le nom
de la clé est indiqué en minuscules, la variable d’environnement correspondante est convertie en
majuscules afin de correspondre au modèle défini par l’option --prefix.
Note
Vous ne pouvez pas affecter de mappages de configuration à l’aide de la console
Web.
Après avoir mis à jour les fichiers enregistrés en local, utilisez la commande oc set data pour
mettre à jour le secret ou le mappage de configuration. Pour chaque clé qui nécessite une mise à
jour, indiquez le nom d’une clé et la valeur associée. Si un fichier contient la valeur, utilisez l’option
--from-file.
308 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Vous devez redémarrer les pods qui utilisent des variables d’environnement pour que les pods
puissent lire le secret mis à jour ou le mappage de configuration. Les pods qui utilisent un montage
de volume pour référencer des secrets ou des mappages de configuration reçoivent les mises à
jour sans redémarrage en utilisant à terme une approche cohérente. Par défaut, l’agent kubelet
surveille les modifications apportées aux clés et aux valeurs utilisées dans les volumes des pods
sur le nœud. L’agent kubelet détecte les modifications et les propage aux pods pour assurer la
cohérence des données de volume. Malgré les mises à jour automatiques fournies par Kubernetes,
un redémarrage du pod est toujours nécessaire si le logiciel lit les données de configuration
uniquement au démarrage.
Références
Pour plus d’informations, reportez-vous au chapitre Using Config Maps with
Applications (Utilisation de mappages de configuration avec des applications) de
la documentation Building Applications (Compilation d’applications) de Red Hat
OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/building_applications/
index#config-maps
DO180-OCP4.14-fr-2-20240530 309
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Exercice guidé
Résultats
Dans cet exercice, vous allez déployer une application Web pour monter les fichiers
manquants à partir d’un mappage de configuration.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice. Cette commande garantit que le cluster est
accessible.
Instructions
1. Créez un déploiement d’application Web nommé webconfig à partir de la console
Web. Utilisez l’image de conteneur registry.ocp4.example.com:8443/rhscl/
httpd-24-rhel7:latest.
310 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
1.3. Sélectionnez le bouton Create. Vérifiez que les trois pods ont bien été déployés.
2. Rendez l’application Web accessible en externe à partir de la console Web. Utilisez les
informations suivantes pour créer un service et une route pour l’application Web, et laissez
les champs hostname et path vides.
2.1. Sélectionnez l’option Networking > Services et cliquez sur le bouton Create Service
pour créer le service webconfig-svc qui expose le déploiement webconfig.
Mettez à jour les valeurs de la propriété et cliquez sur Create. Vérifiez l’état du
service.
DO180-OCP4.14-fr-2-20240530 311
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
2.2. Sélectionnez l’option Networking > Routes et cliquez sur le bouton Create Route
pour créer le service webconfig-rt qui expose le service webconfig-svc. Mettez
à jour les valeurs de la propriété et cliquez sur Create. Vérifiez l'état de la route.
312 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Name webfiles
3.1. Sélectionnez l’option Workloads > ConfigMaps et cliquez sur Create ConfigMap
pour afficher le formulaire de mappage de configuration. En utilisant webfiles pour
le nom, créez le mappage de configuration à l’aide des fichiers redhatlogo.png
et index.html dans le répertoire /home/student/DO180/labs/storage-
configs. Ajoutez une clé Data, définissez le nom index.html en tant que valeur
Key et ouvrez le fichier /home/student/DO180/labs/storage-configs/
index.html pour associer le contenu du fichier à la clé de données.
DO180-OCP4.14-fr-2-20240530 313
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Ajoutez une clé Binary Data, définissez le nom redhatlogo.png en tant que valeur
Key et ouvrez le fichier /home/student/DO180/labs/storage-configs/
redhatlogo.png pour associer le contenu binaire à la clé binaire.
314 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
4.4. Vérifiez l’état du déploiement. Vérifiez qu’un nouveau pod a été créé.
DO180-OCP4.14-fr-2-20240530 315
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
316 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Approvisionnement de volumes de
données persistants
Résultats
• Fournir aux applications des volumes de stockage persistant pour les données basées sur des
blocs et des fichiers.
Étant donné qu’OpenShift Container Platform utilise la structure de volume persistant (PV)
Kubernetes, les administrateurs de cluster peuvent fournir un stockage persistant pour un cluster.
Les développeurs peuvent utiliser des revendications de volume persistant (PVC) pour demander
des ressources PV sans connaître spécifiquement l’infrastructure de stockage sous-jacente.
Les administrateurs peuvent utiliser des classes de stockage pour fournir un stockage persistant.
Les classes de stockage décrivent les types de stockage du cluster. Les administrateurs du cluster
créent des classes de stockage pour gérer les services de stockage ou les niveaux de stockage
d’un service. Au lieu de spécifier un stockage approvisionné, les PVC font référence à une classe
de stockage.
Les développeurs utilisent des PVC pour ajouter des volumes persistants à leurs applications.
Ils ne doivent pas nécessairement connaître les détails de l’infrastructure de stockage. Avec
l’approvisionnement statique, les développeurs utilisent des volumes persistants (PV) existants
ou demandent à un administrateur de cluster d’en créer manuellement pour leurs applications.
Avec l’approvisionnement dynamique, les développeurs déclarent les exigences de stockage de
l’application et le cluster crée un PV pour satisfaire la demande.
Volumes persistants
Les stockages ne sont pas tous égaux. Les différents types de stockage varient en termes de
coût, de performances et de fiabilité. Plusieurs types de stockage sont généralement disponibles
pour chaque cluster Kubernetes.
Vous trouverez, ci-dessous, les types de volumes de stockage couramment utilisés et leurs cas
d’utilisation. Cette liste n’est pas exhaustive.
configMap
Le volume configMap externalise les données de configuration de l’application. Cette
utilisation de la ressource configMap garantit que la configuration de l’application peut être
portée dans tous les environnements et peut faire l’objet d’un contrôle de version.
DO180-OCP4.14-fr-2-20240530 317
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
emptyDir
Un volume emptyDir fournit un répertoire par pod pour les données temporaires (scratch).
Le répertoire est généralement vide après l’approvisionnement. Bien souvent, des volumes
emptyDir sont nécessaires pour le stockage éphémère.
hostPath
Un volume hostPath monte un fichier ou un répertoire à partir du nœud hôte dans votre pod.
Pour utiliser un volume hostPath, l’administrateur du cluster doit configurer les pods pour
qu’ils s’exécutent avec des privilèges. Cette configuration accorde l’accès à d’autres pods
dans le même nœud.
Red Hat déconseille l’utilisation de volumes hostPath en production. À la place, Red Hat
prend en charge le montage de hostPath à des fins de développement et de test sur
un cluster à nœud unique. Bien que la plupart des pods n’aient pas besoin d’un volume
hostPath, cela permet de disposer d’une option rapide pour les tests si une application en a
besoin.
iSCSI
iSCSI (Internet Small Computer System Interface) est une norme IP qui fournit un accès de
niveau bloc aux périphériques de stockage. Avec des volumes iSCSI, les charges de travail
Kubernetes peuvent consommer le stockage persistant à partir de cibles iSCSI.
local
Vous pouvez utiliser des volumes persistants Local pour accéder à des périphériques de
stockage locaux, tels qu’un disque ou une partition, à l’aide de l’interface PVC standard. Les
volumes Local dépendent de la disponibilité du nœud sous-jacent et ne conviennent pas à
toutes les applications.
NFS
Un volume NFS (Network File System) est accessible à partir de plusieurs pods en même
temps et fournit donc des données partagées entre les pods. Le type de volume NFS est
couramment utilisé en raison de sa capacité à partager des données de manière sécurisée.
Red Hat recommande de n’utiliser NFS que pour les systèmes hors production.
318 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Les développeurs doivent sélectionner un type de volume prenant en charge le niveau d’accès
requis par l’application. Le tableau suivant présente quelques exemples des modes d’accès pris en
charge :
Modes de volume
Kubernetes prend en charge deux modes pour les volumes persistants : Filesystem et Block. Si
le mode n’est pas défini pour un volume, Kubernetes lui attribue le mode de volume par défaut, à
savoir Filesystem.
OpenShift Container Platform peut approvisionner des volumes en mode bloc bruts. Ces volumes
sont dépourvus de système de fichiers et peuvent améliorer les performances des applications
qui écrivent directement sur le disque ou qui implémentent leur propre service de stockage. Les
volumes en mode bloc bruts sont approvisionnés en indiquant volumeMode: Block dans les
spécifications PV et PVC.
Le tableau suivant fournit des exemples d’options de stockage avec prise en charge des volumes
en mode bloc :
DO180-OCP4.14-fr-2-20240530 319
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
apiVersion: v1
kind: PersistentVolume
metadata:
name: block-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
volumeMode: Block
persistentVolumeReclaimPolicy: Retain
fc:
targetWWNs: ["50060e801049cfd1"]
lun: 0
readOnly: false
Indiquez un nom pour le PV, que les revendications suivantes utiliseront pour y accéder.
Le périphérique de stockage doit prendre en charge le mode d’accès spécifié par le PV.
L’attribut volumeMode est facultatif pour les volumes Filesystem, mais obligatoire pour
les volumes Block.
Les autres attributs sont spécifiques au type de stockage. Dans cet exemple, l’objet fc
spécifie les attributs de type de stockage Fiber Channel.
Pour créer un volume persistant à partir de la console Web, cliquez sur le menu Storage >
PersistentVolumes.
320 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Le cycle de vie d’une PVC n’est pas lié à un pod, mais à un espace de noms. Plusieurs pods du
même espace de noms, mais avec des contrôleurs de charge de travail potentiellement différents,
peuvent se connecter à la même PVC. Vous pouvez également connecter le stockage de manière
séquentielle à différents pods d’application, et l’en dissocier, pour initialiser, convertir, migrer ou
sauvegarder des données.
Kubernetes fait correspondre chaque PVC à une ressource de volume persistant (PV) capable
de répondre aux exigences de la revendication. Il ne s’agit pas d’une correspondance exacte. Une
PVC peut être liée à un PV ayant une taille de disque supérieure à celle qui est demandée. Une
PVC qui spécifie un accès unique peut être liée à un PV pouvant être partagé pour plusieurs accès
simultanés. Plutôt que d’appliquer une politique, les PVC déclarent les besoins d’une application,
ce à quoi Kubernetes répond dans la mesure du possible.
La définition de l’option add sur true ajoute des volumes et des montages de volume pour
les conteneurs.
L’option name spécifie un nom de volume. Si rien n’est spécifié, un nom est généré
automatiquement.
Les types pris en charge pour l’opération add sont emptyDir, hostPath, secret,
configMap et persistentVolumeClaim.
DO180-OCP4.14-fr-2-20240530 321
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
L’option claim-mode est définie par défaut sur ReadWriteOnce. Les valeurs valides sont
ReadWriteOnce (RWO), ReadWriteMany (RWX) et ReadOnlyMany (ROX).
Créez une revendication avec la taille donnée en octets, si elle est spécifiée avec le type de
volume persistant. La taille doit utiliser la notation SI ; par exemple, 15, 15 G ou 15 Gi.
La commande crée une PVC et l’ajoute à l’application en tant que volume dans le pod.
La commande met à jour le déploiement pour l’application avec les spécifications volumeMounts
et volumes.
apiVersion: apps/v1
kind: Deployment
metadata:
...output omitted...
namespace: storage-volumes
...output omitted...
spec:
...output omitted...
template:
...output omitted...
spec:
...output omitted...
volumeMounts:
- mountPath: /var/lib/example-app
name: example-pv-storage
...output omitted...
volumes:
- name: example-pv-storage
persistentVolumeClaim:
claimName: example-pv-claim
...output omitted...
Déploiement, qui doit se trouver dans le même espace de noms que la PVC.
L’exemple suivant spécifie une PVC à l’aide d’un manifeste YAML pour créer un objet d’API
PersistentVolumeClaim :
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: example-pv-claim
labels:
322 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
app: example-application
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 15Gi
Spécifiez le mode d’accès demandé par cette PVC. L’approvisionneur de classe de stockage
doit fournir ce mode d’accès. Si des volumes persistants sont créés de manière statique, un
volume persistant éligible doit alors fournir ce mode d’accès.
Utilisez oc get pvc pour afficher les PVC disponibles dans l’espace de noms actuel.
Pour créer une revendication de volume persistant à partir de la console Web, cliquez sur le menu
Storage > PersistentVolumesClaims.
DO180-OCP4.14-fr-2-20240530 323
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Lorsque vous créez une PVC, vous spécifiez une quantité de stockage, le mode d’accès requis
ainsi qu’une classe de stockage pour décrire et classer le stockage. La boucle de contrôle dans
le nœud de contrôle RHOCP surveille les nouvelles PVC et associe la nouvelle PVC à un PV
approprié. S’il n’existe pas de PV approprié, un approvisionneur pour la classe de stockage en crée
un.
Les revendications restent indéfiniment dissociées s’il n’existe pas de volume correspondant ou s’il
s’avère impossible de créer un volume avec un approvisionneur disponible qui dessert une classe
de stockage. Les revendications sont liées lorsque des volumes correspondants sont disponibles.
Par exemple, un cluster contenant de nombreux volumes de 50 Gi approvisionnés manuellement
ne correspondrait pas à une PVC qui demande 100 Gi. La PVC peut être liée lorsqu’un PV de
100 Gi est ajouté au cluster.
Utilisez oc get storageclass pour afficher les classes de stockage fournies par le cluster.
Dans cet exemple, la classe de stockage nfs-storage est marquée comme classe de stockage
par défaut. Lorsqu’une classe de stockage par défaut est configurée, la PVC doit nommer
explicitement une autre classe à utiliser, ou elle peut définir l’annotation storageClassName sur
"", afin d’être liée à un PV sans classe de stockage.
L’exemple de commande oc set volume suivant utilise l’option claim-class pour spécifier un
PV approvisionné de manière dynamique.
324 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Note
Étant donné qu’un administrateur de cluster peut modifier la classe de stockage par
défaut, Red Hat vous recommande de toujours spécifier la classe lorsque vous créez
une PVC.
Les PV suivent un cycle de vie basé sur leur relation avec la PVC.
Disponible
Une fois qu’un PV a été créé, il devient disponible pour toute PVC dans le cluster, dans
n’importe quel espace de noms.
Lié
Un PV qui est lié à une PVC l’également au même espace de noms que la PVC, et aucune
autre PVC ne peut l’utiliser.
En cours d’utilisation
Vous pouvez supprimer une PVC si aucun pod ne l’utilise activement. La fonction Storage
Object in Use Protection empêche la suppression des PV et PVC liés que les pods utilisent
activement. Une telle suppression peut entraîner une perte de données. Cette fonction est
activée par défaut.
Si un utilisateur supprime une PVC qu’un pod utilise activement, la suppression n’est
pas immédiate. Cette suppression est reportée jusqu’à ce que plus aucun pod ne l’utilise
activement. De même, si un administrateur de cluster supprime un PV lié à une PVC, la
suppression n’est pas immédiate. Elle est reportée jusqu’à ce que le PV ne soit plus lié à une
PVC.
Liberé
Une fois que le développeur a supprimé la PVC liée à un PV, ce dernier est libéré et le
stockage qu’il utilise peut être récupéré.
Récupéré
La politique de récupération d’un volume persistant indique au cluster ce qu’il doit faire
avec le volume après sa libération. La politique de récupération d’un volume peut être
« Retain » (Conserver) ou « Delete » (Supprimer).
DO180-OCP4.14-fr-2-20240530 325
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Stratégie Description
Références
Pour plus d’informations, reportez-vous au chapitre Understanding Ephemeral
Storage (Présentation du stockage éphémère) de la documentation Storage
(Stockage) de Red Hat OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/storage/index#understanding-
ephemeral-storage
https://developers.redhat.com/articles/2022/10/06/kubernetes-improves-
developer-agility#few_cloud_native_applications_are_stateless
https://developers.redhat.com/articles/2022/10/06/kubernetes-storage-
concepts#3_concepts_of_kubernetes_storage_for_developers_
https://loft.sh/blog/kubernetes-persistent-volumes-examples-and-best-practices/
326 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Exercice guidé
Approvisionnement de volumes de
données persistants
Déployez une base de données MySQL avec un stockage persistant à partir d’une PVC, et
identifiez l’approvisionneur de PV et de stockage qui fournit l’application.
Résultats
Vous serez en mesure d’effectuer les tâches suivantes :
• Déployer une base de données MySQL avec un stockage persistant à partir d’une PVC.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Sélectionnez le projet storage-volumes.
1.1. Utilisez un navigateur Web pour accéder à la console Web OpenShift sur https://
console-openshift-console.apps.ocp4.example.com.
1.2. Connectez-vous à l’aide de Red Hat Identity Management avec le nom d’utilisateur
developer et le mot de passe developer.
DO180-OCP4.14-fr-2-20240530 327
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
3.2. Vérifiez que le projet storage-volumes est actif et sélectionnez le bouton Create
Deployment.
3.3. Utilisez db-pod pour le nom du déploiement et remplacez le nom de l’image par
registry.ocp4.example.com:8443/rhel8/mysql-80.
Name Valeur
MYSQL_USER user1
MYSQL_PASSWORD mypa55w0rd
MYSQL_DATABASE items
3.5. Sélectionnez le lien Advanced options > Scaling et définissez les répliques sur un.
3.6. Cliquez sur Create. Attendez que le cercle bleu indique qu’un seul pod est en cours
d’exécution.
328 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champs de service
Name db-pod
selector app=db-pod
Port 3306
4.2. Cliquez sur les trois points verticaux de la ligne avec le déploiement db-pod et
sélectionnez l’option Add storage.
4.3. Dans le formulaire Add Storage, cliquez sur Create new claim.
Taille 1 GiB
DO180-OCP4.14-fr-2-20240530 329
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
5.1. Sélectionnez l’onglet Workloads > Deployments > dp-pod > YAML.
apiVersion: apps/v1
kind: Deployment
...output omitted...
volumes:
- name: db-pod-pvc
persistentVolumeClaim:
claimName: db-pod-pvc
...output omitted...
volumeMounts:
- mountPath: /var/lib/mysql
name: db-pod-pvc
...output omitted...
6. Utilisez une ressource de mappage pour ajouter des données d’initialisation à la base de
données.
330 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
6.7. Utilisez le client mysql pour exécuter le script de base de données dans le volume /
var/db/config/init-db.
DO180-OCP4.14-fr-2-20240530 331
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
sh-4.4$ exit
9.1. Créez le pod query-db. Configurez le pod pour qu’il utilise le client MySQL afin
d’exécuter une requête sur le service db-pod.
332 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 333
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Résultats
• Associer des applications à des classes de stockage qui fournissent des services de stockage
pour répondre aux exigences des applications.
Si vous utilisez la politique de récupération retain, seul l’objet PVC est supprimé du cluster
lorsque vous supprimez une PVC. Le volume persistant (PV) qui était associé à la PVC, le
périphérique de stockage physique utilisé par le PV et vos données existent toujours. Pour
récupérer le stockage et l’utiliser à nouveau dans votre cluster, l’administrateur du cluster doit
effectuer des étapes manuelles.
1. Supprimez le PV.
334 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
La ressource associée dans l’infrastructure de stockage externe, telle qu’un volume AWS EBS,
GCE PD, Azure Disk ou Cinder, existe toujours après la suppression du PV.
Pour supprimer automatiquement le PV, les données et le stockage physique d’une PVC
supprimée, vous devez choisir une classe de stockage qui utilise la politique de récupération
delete. Cette politique récupère automatiquement votre volume de stockage lorsque la PVC
est supprimée. La politique de récupération delete est le paramètre par défaut pour tous les
approvisionneurs de stockage qui respectent les normes CSI (Container Storage Interface)
de Kubernetes. Si vous utilisez une classe de stockage qui ne spécifie pas de politique de
récupération, la politique delete est utilisée.
Pour plus d’informations sur les normes Container Storage Interface (CSI) de Kubernetes,
consultez la page Kubernetes CSI Developer Documentation à l’adresse https://kubernetes-
csi.github.io/docs/
Étant donné qu’une PVC est un périphérique de stockage monté par votre hôte Linux, une
application mal configurée peut se comporter de manière inattendue. Par exemple, vous pouvez
avoir un LUN iSCSI, qui est exprimé en tant que PVC RWO qui n’est pas censée être partagée, puis
monter cette même PVC sur deux pods du même hôte. Le fait de savoir si cette situation pose
problème dépend des applications.
En règle générale, deux processus sur le même hôte peuvent parfaitement partager un disque.
Après tout, de nombreuses applications installées sur votre ordinateur personnel partagent un
disque local. Cependant, rien n’empêche un éditeur de texte d’écraser et de perdre toutes les
modifications d’un autre éditeur. Il convient de prendre les mêmes précautions lors de l’utilisation
du stockage Kubernetes.
L’accès à un seul nœud (RWO) et l’accès partagé (RWX) ne garantissent pas un partage sûr et
fiable des fichiers. RWO signifie qu’un seul nœud du cluster peut lire et écrire des données sur
la PVC. Avec RWX, Kubernetes fournit un volume de stockage auquel n’importe quel pod peut
accéder en lecture ou en écriture.
DO180-OCP4.14-fr-2-20240530 335
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Les classes de stockage peuvent utiliser une combinaison de ces facteurs et d’autres facteurs
pour répondre au mieux aux besoins des développeurs.
Kubernetes met en correspondance les PVC avec le meilleur PV disponible qui n’est lié à aucune
autre PVC. Le PV doit fournir le mode d’accès spécifié dans la PVC et le volume doit avoir
au moins la taille demandée dans la PVC. Les modes d’accès pris en charge dépendent des
fonctionnalités du fournisseur de stockage. Une PVC peut spécifier des critères supplémentaires,
tels que le nom d’une classe de stockage. Si une PVC ne parvient pas à trouver un PV qui répond à
tous les critères, elle passe à l’état pending et attend qu’un PV approprié soit disponible.
Les PVC peuvent demander une classe de stockage spécifique en spécifiant l’attribut
storageClassName. Cette méthode de sélection d’une classe de stockage spécifique garantit
que le support de stockage convient parfaitement aux exigences de l’application. Seuls les PV
de la classe de stockage demandée peuvent être liés à la PVC. L’administrateur du cluster peut
configurer des approvisionneurs dynamiques pour desservir les classes de stockage. Il peut
également créer un PV à la demande qui répond aux spécifications de la PVC.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: io1-gold-storage
annotations:
storageclass.kubernetes.io/is-default-class: 'false'
description:'Provides RWO and RWOP Filesystem & Block volumes'
...
parameters:
type: io1
iopsPerGB: "10"
...
provisioner: kubernetes.io/aws-ebs
336 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
Élément facultatif spécifiant les paramètres requis pour l’approvisionneur spécifique ; cet
objet diffère d’un plug-in à l’autre.
Plusieurs attributs, tels que la version de l’API, le type d’objet d’API et les annotations, sont
communs aux objets Kubernetes, tandis que d’autres sont spécifiques aux objets de classe de
stockage.
Paramètres
Les paramètres permettent de configurer des types de fichiers, de modifier des types de
stockage, d’activer le chiffrement, d’activer la réplication, etc. Chaque approvisionneur
dispose d’options de paramètres différentes. Les paramètres acceptés dépendent de
l’approvisionneur de stockage. Par exemple, la valeur io1 du paramètre type et le paramètre
iopsPerGB sont spécifiques à EBS. Lorsqu’un paramètre est omis, l’approvisionneur de
stockage utilise la valeur par défaut.
Approvisionneurs
L’attribut provisioner identifie la source du plug-in de support de stockage. Les
approvisionneurs dont le nom commence par une valeur kubernetes.io sont disponibles,
par défaut, dans un cluster Kubernetes.
ReclaimPolicy
La politique de récupération par défaut, Delete, récupère automatiquement le volume de
stockage lorsque la PVC est supprimée. Récupérer du stockage de cette manière permet
de réduire les coûts de stockage. La politique de récupération Retain ne supprime pas le
volume de stockage, de sorte que les données ne sont pas perdues en cas de suppression de
la PVC incorrecte. Cette politique de récupération peut entraîner des coûts de stockage plus
élevés si l’espace n’est pas récupéré manuellement.
VolumeBindingMode
L’attribut volumeBindingMode détermine la manière dont les associations de volume sont
gérées pour une PVC demandeuse. L’utilisation du mode de liaison de volume par défaut
Immediate crée un PV qui correspond à la PVC lorsque celle-ci est créée. Ce paramètre
n’attend pas que le pod utilise la PVC et peut donc s’avérer inefficace. Le mode de liaison
Immediate peut également entraîner des problèmes pour les backends de stockage qui sont
soumis à des contraintes de topologie ou qui ne sont pas globalement accessibles à partir
DO180-OCP4.14-fr-2-20240530 337
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
de tous les nœuds du cluster. Les PV sont également liés sans connaître les exigences de
planification d’un pod, ce qui peut se traduire par des pods non planifiables.
En utilisant le mode WaitForFirstConsumer, le volume est créé une fois que le pod qui
utilise la PVC est en cours d’utilisation. Avec ce mode, Kubernetes crée des PV qui respectent
les contraintes de planification du pod, telles que les sélecteurs et les exigences en matière de
ressources.
AllowVolumeExpansion
Lorsqu’elle est définie sur une valeur true, la classe de stockage spécifie que le volume de
stockage sous-jacent peut être étendu si davantage de stockage est requis. Les utilisateurs
peuvent redimensionner le volume en modifiant l’objet PVC correspondant. Cette fonction ne
peut être utilisée que pour augmenter un volume, et non pour le réduire.
L’administrateur du cluster peut utiliser la commande create pour créer une classe de stockage
à partir d’un fichier manifeste YAML. La classe de stockage qui en résulte est dépourvue d’espace
de noms. Elle est donc disponible pour tous les projets du cluster.
Pour créer une classe de stockage à partir de la console Web, cliquez sur le menu Storage >
StorageClasses. Cliquez sur Create StorageClass et complétez le formulaire ou le manifeste
YAML.
Un utilisateur de cluster standard peut afficher les attributs d’une classe de stockage à l’aide de la
commande describe. L’exemple suivant interroge les attributs de la classe de stockage intitulée
lvms-vg1.
338 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-block-pvc
spec:
accessModes:
- RWO
volumeMode: Block
storageClassName: <storage-class-name>
resources:
requests:
storage: 10Gi
Utilisez la commande create pour créer la ressource à partir du fichier manifeste YAML.
Utilisez l’option --claim-name avec la commande set volume pour associer la PVC existante à
un déploiement.
Références
Pour plus d’informations, reportez-vous à la section Understanding Persistent
Storage (Présentation du stockage persistant) de la documentation Storage
(Stockage) de Red Hat OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/storage/index#understanding-
persistent-storage
Stockage Kubernetes
https://kubernetes.io/docs/concepts/storage/storage-classes/
Pour plus d’informations sur les normes Container Storage Interface (CSI) de
Kubernetes, consultez la page Kubernetes CSI Developer Documentation à l’adresse
https://kubernetes-csi.github.io/docs/
DO180-OCP4.14-fr-2-20240530 339
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Exercice guidé
Résultats
Vous serez en mesure de déployer des applications avec un stockage persistant et de créer
des volumes à partir d’une classe de stockage. La classe de stockage doit répondre aux
exigences de stockage de l’application.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet storage-classes.
2. Examinez les classes de stockage disponibles sur le cluster. Identifiez une classe de
stockage appropriée à utiliser pour une application de base de données.
2.1. Utilisez la commande get pour récupérer la liste des classes de stockage du cluster.
Vous pouvez utiliser le nom court storageclass, sc, dans la commande.
340 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Étant donné qu’un administrateur peut modifier le stockage par défaut, les
applications doivent spécifier une classe de stockage qui répond aux exigences de
l’application.
2.2. Utilisez la commande oc describe pour afficher les détails de la classe de stockage
lvms-vg1.
DO180-OCP4.14-fr-2-20240530 341
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
4.1. Utilisez la commande oc set volume pour créer une PVC pour le déploiement.
Note
La commande oc set volumes n’a pas d’option pour définir la propriété du mode
de volume. Ainsi, la commande oc set volumes entraîne l’utilisation du mode
de volume par défaut Filesystem. Utilisez un manifeste déclaratif pour définir le
mode de volume à bloquer. L’utilisation de manifestes déclaratifs n’est pas abordée
dans ce cours.
4.2. Utilisez la commande oc get pvc pour afficher l’état de la PVC. Identifiez le nom du
PV et vérifiez que la PVC utilise bien la classe de stockage personnalisée lvms-vg1.
4.3. Utilisez la commande oc describe pvc pour examiner les détails de la PVC db-
pod-pvc.
342 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
DO180-OCP4.14-fr-2-20240530 343
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
7. Créez une PVC pour une application qui nécessite un volume de stockage partagé à partir
de la classe de stockage nfs-storage.
7.1. Créez un fichier manifeste YAML de PVC nommé nfs-pvc.yaml avec le contenu
suivant :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs-storage
7.3. Utilisez la commande oc describe pvc pour afficher les détails de la ressource
PVC.
344 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
VolumeMode: Filesystem
Used By: <none>
Events:
...output omitted...
L’attribut Used By: <none> indique qu’aucun pod n’utilise la PVC. La valeur
Status: Bound et l’affectation d’attribut Volume confirment que l’attribut
VolumeBindingMode de la classe de stockage est défini sur Immediate.
8.3. Exposez le service pour créer une route pour l’application wep-pod. Spécifiez web-
pod.apps.ocp4.example.com comme nom d’hôte.
8.5. Utilisez la commande curl pour afficher la page d’index de l’application web-pod.
DO180-OCP4.14-fr-2-20240530 345
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
10.1. Créez le déploiement app-pod et spécifiez le port 9090 comme port cible.
10.3. Exposez le service pour créer une route pour l’application app-pod. Utilisez app-
pod.apps.ocp4.example.com comme nom d’hôte.
346 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
12.2. Saisissez vos informations dans le formulaire, puis cliquez sur save. L’application
ajoute vos informations à la liste après le formulaire.
12.3. Cliquez sur push pour créer le fichier /var/tmp/People.html sur le volume
partagé.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 347
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Résultats
• Déployer des applications qui peuvent être mises à l’échelle sans partager le stockage.
Le stockage partagé résout ce problème en allouant les mêmes ressources d’un seul périphérique
à plusieurs services.
Services de stockage
Les solutions de stockage de fichiers fournissent la structure de répertoire que l’on trouve dans de
nombreux environnements. L’utilisation du stockage de fichiers est idéale lorsque les applications
génèrent ou utilisent des volumes raisonnables de données organisées. Les applications qui
utilisent des implémentations basées sur des fichiers sont répandues, faciles à gérer et constituent
une solution de stockage abordable.
Les solutions basées sur les fichiers conviennent bien à la sauvegarde et à l’archivage des
données, en raison de leur fiabilité, à l’image des services de collaboration et de partage de
fichiers. La plupart des datacenters proposent des solutions de stockage de fichiers, telles qu’un
cluster NAS (Network Attached Storage), pour ces scénarios.
Le serveur de stockage en réseau (NAS) est une architecture de stockage basée sur des fichiers
qui rend les données stockées accessibles aux périphériques en réseau. Ce type de stockage offre
aux réseaux un point d’accès unique pour le stockage avec des fonctions intégrées de sécurité, de
gestion et de tolérance aux pannes. Parmi les nombreux protocoles de transfert de données que
les réseaux peuvent exécuter, deux sont fondamentaux pour la plupart des réseaux : IP (Internet
Protocol) et TCP (Transmission Control Protocol).
Les fichiers qui sont transférés via ces protocoles peuvent être formatés selon l’un des protocoles
suivants :
• NFS (Network File Systems) : ce protocole permet aux hôtes distants de monter des systèmes
de fichiers sur un réseau et d’interagir avec ces systèmes comme s’ils étaient montés en local.
Les solutions NAS peuvent fournir un stockage basé sur des fichiers aux applications au sein du
même datacenter. Cette approche est commune à de nombreuses architectures d’application,
parmi lesquelles :
348 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Ces applications tirent parti de la fiabilité des données et de la facilité de partage des fichiers
qu’offre le stockage des fichiers. De plus, pour les données de stockage de fichiers, le système
d’exploitation et le système de fichiers gèrent le verrouillage et la mise en cache des fichiers.
Bien que familières et répandues, les solutions de stockage de fichiers ne sont pas idéales pour
tous les scénarios d’application. Un écueil particulier du stockage de fichiers est la mauvaise
gestion de grands ensembles de données ou de données non structurées.
Les solutions de stockage en mode bloc, telles que les technologies SAN (Storage Area
Network) et iSCSI, permettent d’accéder aux périphériques en mode bloc bruts pour le stockage
d’applications. Ces périphériques en mode bloc fonctionnent comme des volumes de stockage
indépendants, tels que les lecteurs physiques sur les serveurs, et nécessitent généralement un
formatage et un montage pour l’accès aux applications.
L’utilisation du stockage en mode bloc est idéale lorsque les applications nécessitent un accès
plus rapide pour optimiser les charges de travail de données lourdes sur le plan informatique.
Les applications qui utilisent des implémentations de stockage au niveau des blocs gagnent en
efficacité en communiquant au niveau du périphérique brut, au lieu de dépendre de l’accès à la
couche du système d’exploitation.
Les approches au niveau des blocs permettent de distribuer les données sur les blocs sur
l’ensemble du volume de stockage. Les blocs utilisent également des métadonnées de base,
notamment un numéro d’identification unique pour chaque bloc de données, afin de permettre
une récupération et un réassemblage rapides des blocs pour la lecture.
Les technologies SAN et iSCSI fournissent des applications avec des volumes au niveau des blocs
à partir de pools de stockage réseau. L’utilisation d’un accès au niveau des blocs aux volumes de
stockage est une approche courante pour les architectures d’applications, telles que :
Le stockage d’applications qui utilise plusieurs périphériques en mode bloc dans une configuration
RAID bénéficie de l’intégrité des données et des performances fournies par les différentes
matrices.
Avec Red Hat OpenShift Container Platform (RHOCP), vous pouvez créer des classes de
stockage personnalisées pour vos applications. Avec les technologies de stockage NAS et SAN,
les applications RHOCP peuvent utiliser soit le protocole NFS pour le stockage basé sur des
fichiers, soit le protocole au niveau des blocs pour le stockage en mode bloc.
Un ensemble avec état est la représentation d’un ensemble de pods avec des identités
cohérentes. Ces identités sont définies comme un réseau avec un seul nom d’hôte, un seul
DO180-OCP4.14-fr-2-20240530 349
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
stockage et un seul DNS stables à partir d’autant de revendications de volume qu’il est spécifié
par l’ensemble avec état. Un ensemble avec état garantit qu’une identité réseau donnée est
mappée sur la même identité de stockage.
Contrairement aux déploiements, les pods d’ensembles avec état ne partagent pas de volume
persistant. À la place, ils ont chacun leurs propres volumes persistants uniques. Les pods sont
créés sans jeu de réplicas et chaque réplica enregistre ses propres transactions. Chaque réplica
possède son propre identifiant, qui est conservé lors de toute nouvelle planification. Vous devez
configurer la mise en cluster au niveau de l’application de sorte que les pods d’ensembles avec
état aient les mêmes données.
Les ensembles avec état constituent l’option idéale pour les applications, telles que les bases de
données, qui nécessitent des identités cohérentes et un stockage persistant non partagé.
L’extrait de code suivant montre un exemple de fichier manifeste YAML pour un ensemble avec
état :
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dbserver
spec:
selector:
matchLabels:
app: database
replicas: 3
template:
metadata:
labels:
app: database
spec:
containers:
- env:
- name: MYSQL_USER
valueFrom:
secretKeyRef:
key: user
name: sakila-cred
image: registry.ocp4.example.com:8443/redhattraining/mysql-app:v1
name: database
ports:
350 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
- containerPort: 3306
name: database
volumeMounts:
- mountPath: /var/lib/mysql
name: data
terminationGracePeriodSeconds: 10
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "lvms-vg1"
resources:
requests:
storage: 1Gi
Étiquettes d’application.
Nombre de réplicas.
Variables d’environnement pouvant être définies explicitement ou à l’aide d’un objet secret.
Source d’image.
Nom du conteneur.
Ports du conteneur.
Informations sur le chemin de montage des volumes persistants pour chaque réplica. Chaque
volume persistant présente la même configuration.
Mode d’accès du volume persistant. Vous avez le choix entre les options ReadWriteOnce,
ReadWriteMany et ReadOnlyMany.
Note
Les ensembles avec état ne peuvent être créés qu’à l’aide de fichiers manifestes.
Les interfaces de ligne de commande (CLI) oc et kubectl ne disposent pas de
commandes permettant de créer des ensembles avec état de manière impérative.
DO180-OCP4.14-fr-2-20240530 351
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Notez que trois PVC ont été créées. Vérifiez que des volumes persistants sont associés à chaque
instance :
352 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Note
Vous devez configurer la mise en cluster au niveau de l’application pour que les pods
d’ensembles avec état aient les mêmes données.
Vous pouvez mettre à jour le nombre de réplicas de l’ensemble avec état à l’aide de la commande
scale :
Notez que les PVC ne sont pas supprimées après l’exécution de la commande oc delete
statefulset :
Vous pouvez également créer un ensemble avec état à partir de la console Web en cliquant sur
le menu Workloads > StatefulSets. Cliquez sur Create StatefulSet et personnalisez le manifeste
YAML.
DO180-OCP4.14-fr-2-20240530 353
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Références
Documentation de Kubernetes –StatefulSets
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
354 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Exercice guidé
Résultats
Au cours de cet exercice, vous allez déployer un serveur Web avec un volume persistant
partagé entre les réplicas, ainsi qu’un serveur de base de données à partir d’un ensemble
avec état avec des volumes persistants dédiés pour chaque instance.
• Mettre à l’échelle le déploiement du serveur Web et observer les données partagées avec
les réplicas.
• Créer un serveur de base de données avec un ensemble avec état à l’aide d’un fichier
manifeste YAML.
• Vérifier que chaque instance de l’ensemble avec état possède une revendication de
volume persistant (PVC).
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice.
Instructions
1. Créez un déploiement de serveur Web nommé web-server. Utilisez l’image de
conteneur registry.ocp4.example.com:8443/redhattraining/hello-world-
nginx:latest.
DO180-OCP4.14-fr-2-20240530 355
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
Name web-pv
Type persistentVolumeClaim
Étant donné qu’aucune classe de stockage n’a été spécifiée avec l’option --claim-
class, la commande utilise la classe de stockage par défaut pour créer le volume
persistant.
2.2. Vérifiez l’état du déploiement. Notez qu’un nouveau pod est créé.
356 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
3.2. Utilisez la commande exec pour ajouter le nom du pod que vous avez récupéré à
l’étape précédente au fichier /usr/share/nginx/html/index.html sur le pod.
Ensuite, récupérez le contenu du fichier /var/www/hmtl/index.html pour vérifier
que le nom du pod figure bien dans le fichier.
4. Mettez à l’échelle le déploiement web-server sur deux réplicas et vérifiez qu’un pod
supplémentaire est créé.
Les noms des pods peuvent être différents de ceux de votre sortie.
DO180-OCP4.14-fr-2-20240530 357
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Notez que les deux fichiers affichent le nom de la première instance, étant donné
qu’ils partagent le volume persistant.
6. Créer un serveur de base de données avec un ensemble avec état à l’aide du fichier
statefulset-db.yml dans le répertoire /home/student/DO180/labs/storage-
statefulsets. Mettez à jour le fichier avec les informations suivantes :
Champ Valeur
metadata.name dbserver
spec.selector.matchLabels.app database
spec.template.metadata.labels.app database
spec.template.spec.containers.name dbserver
spec.template.spec.containers.volumeMounts.name data
spec.template.spec.containers.volumeMounts.mountPath /var/lib/mysql
spec.volumeClaimTemplates.metadata.name data
spec.volumeClaimTemplates.spec.storageClassName lvms-vg1
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dbserver
spec:
selector:
matchLabels:
app: database
replicas: 2
template:
metadata:
labels:
app: database
spec:
358 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
terminationGracePeriodSeconds: 10
containers:
- name: dbserver
image: registry.ocp4.example.com:8443/redhattraining/mysql-app:v1
ports:
- name: database
containerPort: 3306
env:
- name: MYSQL_USER
value: "redhat"
- name: MYSQL_PASSWORD
value: "redhat123"
- name: MYSQL_DATABASE
value: "sakila"
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "lvms-vg1"
resources:
requests:
storage: 1Gi
6.3. Patientez quelques instants, puis vérifiez le statut de l’ensemble avec état et de ses
instances.
6.4. Utilisez la commande exec pour ajouter des données à chacun des pods de
l’ensemble avec état.
DO180-OCP4.14-fr-2-20240530 359
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
mysql: [Warning] Using a password on the command line interface can be insecure.
mysql: [Warning] Using a password on the command line interface can be insecure.
7. Vérifiez que chaque instance de l’ensemble avec état dbserver possède une
revendication de volume persistant (PVC). Vérifiez ensuite que chaque revendication de
volume persistant contient des données uniques.
7.1. Vérifiez que l’état des revendications de volume persistant est bien défini sur Bound.
7.2. Vérifiez que chaque instance de l’ensemble avec état dbserver possède sa
propre PVC en utilisant la commande oc get pod pod-name -o json |
jq .spec.volumes[0].persistentVolumeClaim.claimName.
7.3. La mise en cluster au niveau de l’application n’est pas activée pour l’ensemble avec
état dbserver. Vérifiez que chaque instance de l’ensemble avec état dbserver
possède des données uniques.
360 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
8. Supprimez un pod dans l’ensemble avec état dbserver. Vérifiez qu’un nouveau pod est
créé et qu’il utilise la PVC du pod précédent. Vérifiez que la table ajoutée précédemment
existe bien dans la base de données sakila.
8.1. Supprimez le pod dbserver-0 dans l’ensemble avec état dbserver. Vérifiez qu’un
nouveau pod est généré pour l’ensemble avec état. Ensuite, vérifiez que la PVC
data-dbserver-0 existe toujours.
8.2. Utilisez la commande exec pour vérifier que le nouveau pod dbserver-0 contient la
table items dans la base de données sakila.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 361
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
362 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Open Lab
Résultats
• Déployer un serveur de bases de données.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que le cluster est accessible et que toutes les
ressources de l’exercice sont disponibles. Elle crée également le projet storage-review,
ainsi que les fichiers utilisés par cet atelier, dans le répertoire /home/student/DO180/
labs/storage-review.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 363
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
user redhat
password redhat123
database world_x
Champ Valeur
name dbserver-lvm
type persistentVolumeClaim
Champ Valeur
Name mysql-service
Port 3306
364 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
Name file-sharing
Port 8080
Créez une route nommée file-sharing pour exposer l’application Web file-sharing à
un accès externe. Accédez à la route file-sharing dans un navigateur Web pour tester la
connexion entre l’application Web et le serveur de base de données.
8. Montez le mappage de configuration dbfiles sur le déploiement file-sharing en tant
que volume intitulé config-map-pvc. Définissez le chemin de montage sur le répertoire /
home/database-files. Vérifiez ensuite le contenu du fichier insertdata.sql.
9. Ajoutez un volume partagé au déploiement file-sharing. Utilisez les informations
suivantes pour créer le volume :
Champ Valeur
Name shared-volume
Type persistentVolumeClaim
DO180-OCP4.14-fr-2-20240530 365
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
366 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Solution
Résultats
• Déployer un serveur de bases de données.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que le cluster est accessible et que toutes les
ressources de l’exercice sont disponibles. Elle crée également le projet storage-review,
ainsi que les fichiers utilisés par cet atelier, dans le répertoire /home/student/DO180/
labs/storage-review.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 367
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
user redhat
password redhat123
database world_x
2.1. Créer un secret qui contient les informations d’identification de la base de données.
368 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
4.3. Vérifiez que le pod dbserver se trouve à l’état RUNNING. Le nom du pod peut être
différent dans votre sortie.
Champ Valeur
name dbserver-lvm
type persistentVolumeClaim
DO180-OCP4.14-fr-2-20240530 369
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
Name mysql-service
Port 3306
6.2. Vérifiez la configuration du service. L’adresse IP du point d’accès peut être différente
dans votre sortie.
370 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
Name file-sharing
Port 8080
Créez une route nommée file-sharing pour exposer l’application Web file-sharing à
un accès externe. Accédez à la route file-sharing dans un navigateur Web pour tester la
connexion entre l’application Web et le serveur de base de données.
7.4. Vérifiez l’état du réplica et récupérez le nom du pod. Les noms des pods peuvent être
différents sur votre système.
7.6. Vérifiez la configuration du service. L’adresse IP du point d’accès peut être différente
dans votre sortie.
DO180-OCP4.14-fr-2-20240530 371
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
372 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Champ Valeur
Name shared-volume
Type persistentVolumeClaim
9.2. Vérifiez l’état du déploiement. Les noms de vos pods peuvent être différents sur votre
système.
DO180-OCP4.14-fr-2-20240530 373
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
10.2. Vérifiez l’état du déploiement. Les noms des pods peuvent être différents sur votre
système.
374 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
DO180-OCP4.14-fr-2-20240530 375
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
376 DO180-OCP4.14-fr-2-20240530
chapitre 5 | Gestion du stockage pour les données et la configuration de l’application
Résumé
• Les mappages de configuration sont des objets qui fournissent un mécanisme permettant
d’injecter des données de configuration dans des conteneurs.
• Les valeurs des secrets sont toujours codées (et non chiffrées).
• Une ressource PVC représente une demande de stockage émise par une application. Elle
spécifie les caractéristiques de stockage minimales, telles que la capacité et le mode d’accès.
• Kubernetes prend en charge deux modes pour les volumes persistants : Filesystem et Block.
• Les classes de stockage constituent un moyen de décrire des types de stockage pour le cluster
et d’approvisionner le stockage dynamique à la demande.
• Une politique de récupération détermine ce qu’il advient des données situées sur une PVC
après sa suppression.
• Une classe de stockage avec prise en charge du mode de volume de type bloc permet
d’accroître les performances des applications qui peuvent utiliser des périphériques en mode
bloc bruts.
• Un ensemble avec état est la représentation d’un ensemble de pods avec des identités
cohérentes.
• Les pods d’ensembles avec état se voient attribuer des volumes persistants individuels.
DO180-OCP4.14-fr-2-20240530 377
378 DO180-OCP4.14-fr-2-20240530
chapitre 6
DO180-OCP4.14-fr-2-20240530 379
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Résultats
• Décrire comment Kubernetes essaie de faire en sorte que les applications continuent de
s’exécuter après une défaillance.
En général, la haute disponibilité peut protéger une application contre les défaillances dans les
contextes suivants :
En outre, les pratiques de haute disponibilité peuvent protéger le cluster contre les applications,
comme celles qui présentent une fuite de mémoire.
Les applications doivent fonctionner avec le cluster pour que Kubernetes puisse gérer au mieux
les scénarios de défaillance. Kubernetes attend d’une application qu’elle se comporte comme suit :
• Elle doit répondre aux sondes d’intégrité, telles que les sondes Startup, Readiness et Liveness
Bien que le cluster puisse exécuter des applications qui ne présentent pas les comportements
précédents, celles qui sont conformes utilisent mieux les fonctions de fiabilité et de haute
disponibilité fournies par Kubernetes.
La plupart des applications HTTP fournissent un point d’accès pour vérifier l’intégrité de
l’application. Le cluster peut être configuré pour observer ce point d’accès et atténuer les
problèmes potentiels pour l’application.
380 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
L’application est chargée de fournir un tel point d’accès. Les développeurs doivent décider
comment l’application détermine son état.
Par exemple, si une application dépend d’une connexion à une base de données, elle peut
répondre avec un état « sain » uniquement si la base de données est accessible. Cependant,
toutes les applications qui établissent des connexions à la base de données n’ont pas besoin d’une
telle vérification. Cette décision est laissée au choix des développeurs.
Kubernetes utilise les techniques de haute disponibilité suivantes pour améliorer la fiabilité des
applications :
• Redémarrage des pods : en configurant une politique de redémarrage sur un pod, le cluster
redémarre les instances d’une application dont le comportement n’est pas conforme.
• Sondage : l’utilisation de sondes d’intégrité permet au cluster de savoir quand les applications
ne peuvent pas répondre aux demandes. Il peut ainsi agir automatiquement pour atténuer le
problème.
DO180-OCP4.14-fr-2-20240530 381
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Exercice guidé
Résultats
• Découvrir comment l’attribut restartPolicy affecte les pods défaillants.
• Observer le comportement d’une application à démarrage lent sur laquelle aucune sonde
n’est configurée.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
L’image de conteneur long-load contient une application avec des points d’accès
d’utilitaire. Ces points d’accès exécutent des tâches telles que l’arrêt brutal du processus et
le basculement de l’état d’intégrité du serveur.
Instructions
1. En tant qu’utilisateur developer, créez un pod à partir d’un manifeste YAML dans le projet
reliability-ha.
382 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
1.5. Envoyez une demande au pod pour vérifier qu’il est en cours d’exécution et qu’il
répond.
2.1. Observez que le pod est en cours d’exécution et qu’il n’a pas redémarré.
2.2. Envoyez une demande au point d’accès /destruct dans l’application. Cette
demande déclenche le plantage du processus.
2.3. Observez que le pod est en cours d’exécution et qu’il a redémarré une fois.
DO180-OCP4.14-fr-2-20240530 383
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Le pod n’est pas recréé, car il a été créé manuellement, et non via une ressource de
charge de travail telle qu’un déploiement.
3. Utilisez une politique de redémarrage Never pour créer le pod et notez qu’il n’est pas
recréé lors du plantage.
3.1. Modifiez le fichier long-load.yaml de sorte que restartPolicy soit défini sur
Never.
...output omitted...
restartPolicy: Never
3.3. Envoyez une demande au pod pour vérifier qu’il est en cours d’exécution et que
l’application répond.
3.4. Envoyez une demande au point d’accès /destruct dans l’application pour
provoquer son plantage.
3.5. Observez que le pod n’est pas redémarré et qu’il est dans un état d’erreur.
384 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
4. Le cluster ne sait pas à quel moment l’application située à l’intérieur du pod est prête
à recevoir des demandes. Par conséquent, vous devez ajouter un délai de démarrage à
l’application. L’ajout de cette fonctionnalité à l’aide de sondes sera abordé au cours d’un
prochain exercice.
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/redhattraining/long-load:v1
imagePullPolicy: Always
securityContext:
allowPrivilegeEscalation: false
name: long-load
env:
- name: START_DELAY
value: "60000"
restartPolicy: Always
Note
Bien que les nombres soient d’un type YAML valide, les variables d’environnement
doivent être transmises en tant que chaînes. La syntaxe YAML est également
sensible à l’indentation.
Pour ces raisons, assurez-vous que votre fichier apparaît exactement comme dans
l’exemple précédent.
4.2. Appliquez le fichier YAML pour créer le pod et passez à l’étape suivante dans la
minute qui suit.
4.3. Vérifiez l’état du pod dans la minute qui suit sa création. L’état indique « ready »
même si le pod n’est pas prêt. Essayez d’envoyer une demande à l’application et
observez qu’elle échoue.
4.4. Après avoir attendu une minute que l’application démarre, envoyez une autre
demande au pod pour vérifier qu’il est en cours d’exécution et qu’il répond.
DO180-OCP4.14-fr-2-20240530 385
chapitre 6 | Configuration des applications sur le plan de la fiabilité
5.2. Démarrez le script de test de charge, qui envoie une demande au point d’accès de
l’API /health de l’application toutes les deux secondes. Laissez le script s’exécuter
dans une fenêtre de terminal visible.
5.4. Observez la sortie du script de test de charge au démarrage des pods et des
instances de l’application. Après un certain délai, les demandes aboutissent.
...output omitted...
Ok
Ok
Ok
...output omitted...
386 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
5.5. En utilisant le point d’accès de l’API /togglesick de l’application, placez l’un des
trois pods dans l’état « Broken ».
...output omitted...
Ok
app is unhealthy
app is unhealthy
Ok
Ok
...output omitted...
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 387
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Résultats
• Décrire comment Kubernetes utilise les sondes d’intégrité lors du déploiement, de la mise à
l’échelle et du basculement des applications.
Sondes Kubernetes
Les sondes d’intégrité jouent un rôle important dans la préservation d’un cluster robuste. Les
sondes permettent au cluster de déterminer l’état d’une application en la sondant à plusieurs
reprises pour obtenir une réponse.
Un ensemble de sondes d’intégrité affecte la capacité d’un cluster à effectuer les tâches
suivantes :
Étant donné que le cluster les appelle souvent, les points d’accès des sondes d’intégrité doivent
être rapides. Les points d’accès ne doivent pas effectuer de requêtes de base de données
complexes ni de nombreux appels réseau.
Types de sondes
Kubernetes fournit les types de sondes suivants : Startup, Readiness et Liveness. En fonction de
l’application, vous pouvez configurer un ou plusieurs de ces types.
Sondes Readiness
Une sonde Readiness détermine si l’application est prête à traiter les demandes. Si la sonde
Readiness échoue, Kubernetes empêche le trafic client d’atteindre l’application en supprimant
l’adresse IP du pod de la ressource de service.
Les sondes Readiness permettent de détecter les problèmes temporaires susceptibles d’affecter
vos applications. Par exemple, il se peut que l’application soit temporairement indisponible
au démarrage, car elle doit établir les connexions initiales au réseau, charger des fichiers
dans un cache ou effectuer des tâches initiales qui prennent du temps. Il se peut également
que l’application doive, de temps à autre, exécuter de longues tâches par lots, ce qui la rend
temporairement indisponible pour les clients.
388 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Kubernetes continue d’exécuter la sonde même après l’échec de l’application. Si la sonde réussit à
nouveau, Kubernetes ajoute l’adresse IP du pod à la ressource de service, et les demandes sont à
nouveau envoyées au pod.
Sondes Liveness
À l’instar de la sonde Readiness, la sonde Liveness est appelée pendant toute la durée de vie de
l’application. Les sondes Liveness déterminent si le conteneur de l’application est sain. Si la sonde
Liveness d’une application enregistre un certain nombre d’échecs d’activité, le cluster redémarre
le pod conformément à sa politique de redémarrage.
Contrairement aux sondes Startup, les sondes Liveness sont appelées après le processus de
démarrage initial de l’application. En règle générale, cette atténuation passe par le redémarrage
ou la recréation du pod.
Sondes Startup
Une sonde Startup détermine à quel moment le démarrage d’une application est terminé.
Contrairement à une sonde Liveness, une sonde Startup n’est pas appelée une fois la sonde
exécutée avec succès. Si la sonde Startup échoue après un délai d’expiration configurable, le pod
est redémarré en fonction de sa valeur restartPolicy.
Vous pouvez ajouter une sonde Startup aux applications dont la durée de démarrage est longue.
L’utilisation d’une sonde Startup permet à la sonde Liveness de rester courte et réactive.
Types de test
Lors de la définition d’une sonde, vous devez spécifier l’un des types de test suivants à effectuer :
HTTP GET
À chaque exécution de la sonde, le cluster envoie une demande au point d’accès HTTP
spécifié. Le test est considéré comme réussi si la demande répond avec un code de réponse
HTTP compris entre 200 et 399. D’autres réponses entraînent l’échec du test.
Commande de conteneur
À chaque exécution de la sonde, le cluster exécute la commande spécifiée dans le conteneur.
Si la commande se termine avec le code d’état 0, le test réussit. D’autres codes d’état
entraînent l’échec du test.
Socket TCP
À chaque exécution de la sonde, le cluster tente d’ouvrir un socket vers le conteneur. Le test
ne réussit que si la connexion est établie.
Horaires et seuils
Tous les types de sondes s’accompagnent de variables de minutage. La variable period seconds
(période en secondes) définit la fréquence d’exécution de la sonde. La variable failure threshold
(seuil d’échec) définit le nombre de tentatives infructueuses nécessaires avant l’échec de la sonde
proprement dite.
Par exemple, une sonde avec une variable « failure threshold » de 3 et une variable « period
seconds » de 5 peut échouer jusqu’à trois fois avant que la sonde globale échoue. L’utilisation
de cette configuration de sonde signifie que le problème peut se présenter pendant 10 secondes
DO180-OCP4.14-fr-2-20240530 389
chapitre 6 | Configuration des applications sur le plan de la fiabilité
avant d’être atténué. Cependant, l’exécution trop fréquente des sondes peut entraîner un
gaspillage des ressources. Tenez compte de ces valeurs lors de la définition de sondes.
apiVersion: apps/v1
kind: Deployment
...output omitted...
spec:
...output omitted...
template:
spec:
containers:
- name: web-server
...output omitted...
livenessProbe:
failureThreshold: 6
periodSeconds: 10
httpGet:
path: /health
port: 3000
Définit la sonde en tant que demande HTTP, et définit le port et le chemin de la demande en
question.
390 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Définit la sonde en tant que demande HTTP, et définit le port et le chemin de la demande en
question.
Cliquez sur Edit probe pour spécifier le type de préparation, les en-têtes HTTP, le chemin d’accès,
le port, etc.
Note
La commande set probe est exclusive à RHOCP et oc.
DO180-OCP4.14-fr-2-20240530 391
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Références
Configurer les Liveness, Readiness et Startup Probes
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-
readiness-startup-probes
392 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Exercice guidé
Résultats
• Observer les problèmes potentiels avec une application qui n’est pas configurée avec des
sondes d’intégrité.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Instructions
1. En tant qu’utilisateur developer, déployez l’application long-load dans le projet
reliability-probes.
DO180-OCP4.14-fr-2-20240530 393
chapitre 6 | Configuration des applications sur le plan de la fiabilité
1.4. Vérifiez que les pods mettent plusieurs minutes à démarrer en adressant une
demande à un pod dans le déploiement.
1.5. Vérifiez que les pods sont listés comme étant prêts même si l’application ne l’est pas.
2. Ajoutez une sonde Startup aux pods afin que le cluster sache quand ils sont prêts.
...output omitted...
spec:
...output omitted...
template:
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/redhattraining/long-load:v1
imagePullPolicy: Always
name: long-load
startupProbe:
failureThreshold: 30
periodSeconds: 3
httpGet:
path: /health
port: 3000
env:
...output omitted...
394 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
[student@workstation ~] oc apply -f \
~/DO180/labs/reliability-probes/long-load-deploy.yaml
deployment.apps/long-load configured
service/long-load unchanged
route.route.openshift.io/long-load configured
2.3. Notez que les pods n’apparaissent pas comme étant prêts tant que l’application
n’est pas prête et que la sonde Startup n’a pas réussi. Attendez que les trois pods
atteignent l’état Ready. Appuyez sur Ctrl+c pour arrêter la commande watch.
3. Ajoutez une sonde Liveness pour redémarrer les instances interrompues de l’application.
3.2. Dans une nouvelle fenêtre de terminal, utilisez le point d’accès /togglesick pour
rendre l’un des pods défectueux. Passez à l’étape suivante dans la minute qui suit.
spec:
...output omitted...
template:
...output omitted...
spec:
containers:
DO180-OCP4.14-fr-2-20240530 395
chapitre 6 | Configuration des applications sur le plan de la fiabilité
- image: registry.ocp4.example.com:8443/redhattraining/long-load:v1
...output omitted...
startupProbe:
failureThreshold: 30
periodSeconds: 3
httpGet:
path: /health
port: 3000
livenessProbe:
failureThreshold: 3
periodSeconds: 3
httpGet:
path: /health
port: 3000
env:
...output omitted...
Note
Red Hat recommande de réduire une application à zéro réplica avant d’apporter
plusieurs modifications à un déploiement, telles que l’ajout de sondes d’intégrité,
de demandes de ressources ou de variables d’environnement. La réduction à zéro
réplica empêche la création de pods et permet aux pods de s’arrêter correctement
une fois toutes les demandes en cours terminées.
3.6. Attendez que les trois pods atteignent l’état Ready. Appuyez sur Ctrl+c pour arrêter
la commande watch.
396 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
3.7. Attendez que la fenêtre de test de charge affiche Ok pour toutes les réponses, puis
basculez l’un des pods pour qu’il soit défectueux.
La fenêtre de test de charge peut afficher app is unhealthy plusieurs fois avant
que le pod ne soit redémarré.
3.8. Notez que le pod défectueux est redémarré après l’échec de la sonde Liveness. Une
fois le pod redémarré, la fenêtre de test de charge affiche uniquement Ok.
4. Ajoutez une sonde Readiness afin que le trafic ne soit acheminé que vers les pods prêts et
sains.
DO180-OCP4.14-fr-2-20240530 397
chapitre 6 | Configuration des applications sur le plan de la fiabilité
4.5. Attendez que les pods s’affichent comme étant prêts. Ensuite, dans une nouvelle
fenêtre de terminal, rendez l’un des pods défectueux pendant cinq secondes à l’aide
du points d’accès /hiccup.
La fenêtre d’état du pod indique que l’un des pods n’est plus prêt. Au bout de cinq
secondes, le pod est à nouveau sain et indique qu’il est prêt.
Il se peut que la fenêtre de test de charge affiche app is unhealthy une fois
avant que le pod ne soit défini comme « non prêt ». Une fois que le cluster a
déterminé que le pod n’était plus prêt, il arrête d’acheminer le trafic vers le pod
jusqu’à ce que celui-ci soit réparé ou que la sonde Liveness échoue. Le pod n’est
« malade » que pendant cinq secondes, mais cela suffit pour que la sonde Readiness
échoue, mais pas la sonde Liveness.
Note
Vous pouvez éventuellement répéter cette étape et observer les changements
d’état du pod temporairement « malade ».
4.6. Arrêtez les commandes d’état et de test de charge en appuyant sur Ctrl+c dans leur
fenêtre respective.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
398 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Résultats
• Configurer une application avec des demandes de ressources afin que Kubernetes puisse
prendre des décisions de planification.
De plus, le planificateur filtre la liste des nœuds en cours d’exécution en évaluant chacun d’eux
par rapport à un jeu de prédicats. Un pod peut définir des demandes de ressources pour des
ressources informatiques telles que le processeur, la mémoire et le stockage. Seuls les nœuds
disposant de suffisamment de ressources informatiques sont éligibles.
L’étape de filtrage réduit la liste des nœuds éligibles. Dans certains cas, le pod peut s’exécuter
sur n’importe lequel des nœuds. Dans d’autres, tous les nœuds sont filtrés, de sorte que
le pod ne peut pas être planifié tant qu’un nœud répondant aux conditions préalables
appropriées n’est pas disponible.
Si tous les nœuds sont filtrés, un événement FailedScheduling est généré pour le pod.
Le planificateur est flexible et peut être personnalisé afin de répondre à des situations de
planification avancées. La personnalisation du planificateur n’entre pas dans le cadre de ce cours.
DO180-OCP4.14-fr-2-20240530 399
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Les demandes de ressources précisent les ressources de calcul minimales requises pour planifier
un pod. Le planificateur essaie de trouver un nœud ayant suffisamment de ressources de calcul
pour satisfaire les demandes du pod.
Dans Kubernetes, les ressources mémoire sont mesurées en octets, tandis que les ressources
processeur (CPU) sont mesurées en unités processeur. Les unités processeur sont allouées en
utilisant des unités millicore. Un millicore est un cœur de processeur, virtuel ou physique, divisé
en 1 000 unités. Une valeur de demande de "1000 m" alloue un cœur de processeur en entier
à un pod. Vous pouvez également utiliser des valeurs fractionnaires pour allouer des ressources
processeur. Par exemple, vous pouvez définir la demande de ressources processeur sur une valeur
0.1, ce qui représente 100 millicores (100 m). De même, une demande de ressources processeur
avec une valeur 1.0 représente un processeur en entier ou 1 000 millicores (1000 m).
Vous pouvez définir des demandes de ressources pour chaque conteneur dans un déploiement ou
une ressource configuration de déploiement. Si les ressources ne sont pas définies, la spécification
du conteneur affiche une ligne resources: {}.
Dans votre déploiement, modifiez la ligne resources: {} afin de spécifier les demandes
choisies. L’exemple suivant définit une demande de ressource de 100 millicores (100 m) de
processeur et d’un gigaoctet (1 Gi) de mémoire.
...output omitted...
spec:
containers:
- image: quay.io/redhattraining/hello-world-nginx:v1.0
name: hello-world-nginx
resources:
requests:
cpu: "100m"
memory: "1Gi"
La commande set resource fonctionne avec toutes les ressources qui incluent un modèle de
pod, comme les déploiements et les ressources de tâche.
400 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Les administrateurs d’un cluster RHOCP peuvent également utiliser la commande oc adm top
pods. Elle affiche l’utilisation des ressources de calcul pour chaque pod d’un projet. Vous devez
inclure les options --namespace ou -n pour spécifier un projet. Sinon, la commande renvoie
l’utilisation des ressources pour les pods du projet actuellement sélectionné.
La commande suivante affiche l’utilisation des ressources pour les pods dans le projet
openshift-dns :
De plus, les administrateurs de cluster peuvent utiliser la commande oc adm top node pour
afficher l’utilisation des ressources d’un nœud de cluster. Incluez le nom du nœud pour afficher
l’utilisation des ressources d’un nœud en particulier.
DO180-OCP4.14-fr-2-20240530 401
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Références
Pour plus d’informations sur la planification des pods, reportez-vous au chapitre
Controlling Pod Placement onto Nodes (Scheduling) de la documentation Nodes de
Red Hat Open Shift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/nodes/index#controlling-pod-
placement-onto-nodes-scheduling
402 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Exercice guidé
Résultats
• Observer que les demandes de ressources mémoire allouent de la mémoire au nœud de
cluster.
• Déterminer dans quelle mesure l’ajustement des demandes de ressources a une incidence
sur le nombre de réplicas qui peuvent être planifiés sur un nœud.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Instructions
1. En tant qu’utilisateur admin, déployez l’application long-load en appliquant le fichier
long-load-deploy.yaml dans le projet reliability-requests.
DO180-OCP4.14-fr-2-20240530 403
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Note
En règle générale, vous utilisez les comptes ayant les moindres privilèges requis
pour effectuer une tâche. Dans l’environnement de formation, ce compte
correspond à l’utilisateur developer. Cependant, des privilèges d’administrateur
de cluster sont requis pour afficher les métriques du nœud de cluster dans cet
exercice.
La sortie de la commande montre que les pods en cours d’exécution sur le nœud
ont demandé un total de 12 667 Mio de mémoire. La valeur peut être légèrement
différente sur votre système.
Important
Compte tenu des projets et des objets des exercices précédents, il se peut que
l’utilisation de la mémoire de cet exercice ne corresponde pas aux résultats
escomptés. Supprimez tous les projets non liés avant de continuer.
404 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
spec:
...output omitted...
template:
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/redhattraining/long-load:v1
resources:
requests:
memory: 1Gi
...output omitted...
2.4. Notez que le cluster ne peut pas planifier l’ensemble des pods sur le nœud unique.
Les pods dont l’état est Pending ne peuvent pas être planifiés.
2.6. Vous pouvez également afficher les événements d’un pod en attente pour en
connaître la raison. Dans la commande suivante, remplacez le nom du pod par l’un des
pods en attente de votre salle de classe.
DO180-OCP4.14-fr-2-20240530 405
chapitre 6 | Configuration des applications sur le plan de la fiabilité
3. Réduisez la mémoire demandée par pod de sorte que les réplicas puissent s’exécuter sur le
nœud.
3.2. Supprimez les pods pour qu’ils soient recréés avec la nouvelle demande de
ressources.
3.3. Notez que tous les pods peuvent démarrer avec la demande de mémoire réduite.
En l’espace d’une minute, les pods sont marqués comme Ready et dans un état
Running, sans aucun pod avec l’état Pending.
406 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 407
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Résultats
• Configurer une application avec des limites de ressources afin que Kubernetes puisse en
protéger d’autres.
Les demandes de mémoire et de processeur que vous définissez pour les conteneurs aident
Red Hat OpenShift Container Platform (RHOCP) à sélectionner un nœud de calcul pour
l’exécution de vos pods. Cependant, ces demandes de ressources ne limitent pas la mémoire ni
le processeur que les conteneurs peuvent utiliser. Par exemple, la définition d’une demande de
mémoire à 1 Gio n’empêche pas le conteneur d’utiliser davantage de mémoire.
Red Hat vous recommande de définir les demandes de mémoire et de processeur sur l’utilisation
maximale de votre application. En revanche, en définissant des valeurs plus basses, vous
surchargez les ressources du nœud. Si toutes les applications qui s’exécutent sur le nœud
commencent à utiliser des ressources supérieures aux valeurs demandées, il se peut que les
nœuds de calcul manquent de mémoire et de ressources processeur.
Outre les demandes, vous pouvez définir des limites de mémoire et de processeur pour éviter que
vos applications n’utilisent trop de ressources.
Dès que le conteneur atteint cette limite, le nœud de calcul sélectionne puis supprime un
processus du conteneur. Lorsque cet événement se produit, RHOCP détecte que l’application ne
fonctionne plus, étant donné que le processus de conteneur principal est manquant ou parce que
les sondes d’intégrité signalent une erreur. RHOCP redémarre alors le conteneur en fonction de
l’attribut restartPolicy du pod, dont la valeur par défaut est Always.
RHOCP s’appuie sur les fonctions du noyau Linux pour implémenter les limites de ressources et
pour supprimer les processus dans les conteneurs qui atteignent leurs limites de mémoire :
Vous devez définir une limite de mémoire lorsque l’application comporte un modèle d’utilisation
de la mémoire que vous devez atténuer ; lorsque l’application présente une fuite de mémoire, par
exemple. Une fuite de mémoire est un bogue d’application qui se produit lorsque l’application
utilise de la mémoire, mais ne la libère pas après utilisation. Si la fuite apparaît dans une boucle
de service infinie, l’application utilise de plus en plus de mémoire au fil du temps et peut finir
par épuiser toute la mémoire disponible sur le système. Dans ce cas, la définition d’une limite
de mémoire empêche les applications de consommer toute la mémoire du nœud. La limite de
408 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Pour définir une limite de mémoire pour le conteneur dans un pod, utilisez la commande oc set
resources :
En plus de la commande oc set resources, vous pouvez définir des limites de ressources à
partir d’un fichier au format YAML :
apiVersion: apps/v1
kind: Deployment
...output omitted...
spec:
containers:
- image: registry.access.redhat.com/ubi9/nginx-120:1-86
name: hello
resources:
requests:
cpu: 100m
memory: 500Mi
limits:
cpu: 200m
memory: 1Gi
Lorsque RHOCP redémarre un pod en raison d’un événement de mémoire insuffisante (OOM), il
met à jour l’attribut lastState du pod et définit la raison sur OOMKilled :
Pour définir une limite de mémoire pour le conteneur dans un pod à partir de la console Web,
sélectionnez un déploiement, puis cliquez sur Actions > Edit resource limits.
DO180-OCP4.14-fr-2-20240530 409
chapitre 6 | Configuration des applications sur le plan de la fiabilité
410 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Vous devez définir une limite de processeur lorsque vous avez besoin d’un comportement
d’application cohérent entre les clusters et les nœuds. Par exemple, si l’application s’exécute sur
un nœud sur lequel le processeur est disponible, elle peut s’exécuter à pleine vitesse. En revanche,
si l’application s’exécute sur un nœud soumis à une pression du processeur, elle s’exécute plus
lentement.
Note
Les clusters peuvent présenter des différences de configuration matérielle au-
delà des limites observées. Par exemple, les nœuds de deux clusters peuvent avoir
des processeurs avec un nombre de cœurs identique et des vitesses d’horloge
différentes.
Les demandes et les limites ne tiennent pas compte de ces différences matérielles.
Si vos clusters diffèrent à cet égard, veillez à ce que les demandes et les limites
soient appropriées pour les deux configurations.
La définition d’une limite de processeur vous permet d’atténuer les différences entre la
configuration des nœuds et d’obtenir un comportement plus cohérent.
Pour définir une limite de processeur pour le conteneur dans un pod, utilisez la commande oc set
resources :
Vous pouvez également définir des limites de processeur à partir d’un fichier au format YAML :
apiVersion: apps/v1
kind: Deployment
...output omitted...
spec:
containers:
- image: registry.access.redhat.com/ubi9/nginx-120:1-86
name: hello
resources:
requests:
cpu: 100m
memory: 500Mi
limits:
cpu: 200m
memory: 1Gi
DO180-OCP4.14-fr-2-20240530 411
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Pour définir une limite de processeur pour le conteneur dans un pod à partir de la console Web,
sélectionnez un déploiement, puis cliquez sur Actions > Edit resource limits.
412 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
sur les pods en cours d’exécution sur le nœud. Pour chaque pod, elle affiche les demandes et les
limites processeur, ainsi que les demandes et les limites de mémoire. Si vous ne spécifiez pas de
demande ni de limite, le pod affiche un zéro pour cette colonne. La commande affiche également
un résumé de toutes les limites et demandes de ressources.
La commande oc describe node affiche les demandes et les limites. La commande oc adm
top affiche l’utilisation des ressources. La commande oc adm top nodes affiche l’utilisation
des ressources pour les nœuds du cluster. Vous devez exécuter cette commande en tant
qu’administrateur du cluster.
La commande oc adm top pods affiche l’utilisation des ressources pour chaque pod d’un
projet.
La commande suivante affiche l’utilisation des ressources pour les pods du projet en cours :
DO180-OCP4.14-fr-2-20240530 413
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Références
Page de manuel (7)cgroups
414 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Exercice guidé
Résultats
Vous serez en mesure de surveiller l’utilisation de la mémoire d’une application et de définir
une limite de mémoire pour un pod.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles
pour cet exercice. Elle crée également le projet reliability-limits et le fichier /
home/student/DO180/labs/reliability-limits/resources.txt. Le fichier
resources.txt contient certaines commandes que vous utiliserez au cours de l’exercice.
Vous pouvez utiliser ce fichier pour copier et coller ces commandes.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet reliability-limits.
DO180-OCP4.14-fr-2-20240530 415
chapitre 6 | Configuration des applications sur le plan de la fiabilité
...output omitted...
resources:
requests:
memory: 20Mi
limits:
memory: 35Mi
2.3. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à
plusieurs reprises pour que le pod signale l’état Running. Il est probable que le nom
du pod soit différent sur votre système.
3.1. Utilisez la commande watch pour surveiller la commande oc get pods. Attendez
qu’OpenShift redémarre le pod, puis appuyez sur Ctrl+C pour quitter la commande
watch.
416 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
5.1. Utilisez la commande oc set resources pour définir la nouvelle limite. Ignorez le
message d’avertissement.
5.2. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à
plusieurs reprises pour que le pod signale l’état Running. Il est probable que le nom
du pod soit différent sur votre système.
5.3. Attendez deux minutes pour vérifier qu’OpenShift ne redémarre plus le pod toutes
les 30 secondes.
DO180-OCP4.14-fr-2-20240530 417
chapitre 6 | Configuration des applications sur le plan de la fiabilité
7.1. Ouvrez une nouvelle fenêtre de terminal, puis exécutez la commande watch pour
surveiller la commande oc adm top pods.
Note
Il se peut qu’un message s’affiche pour indiquer que les métriques ne sont pas
encore disponibles. Si tel est le cas, attendez encore un peu avant de réessayer.
7.2. Dans le premier terminal, exécutez la commande watch pour surveiller la commande
oc get pods. Observez la sortie de la commande oc adm top pods dans le
deuxième terminal. Lorsque l’utilisation de la mémoire atteint 600 Mio, le sous-
système OOM supprime le processus à l’intérieur du conteneur et OpenShift
redémarre le pod.
7.3. Appuyez sur Ctrl+C pour quitter la commande watch dans le deuxième terminal.
Fermez ce deuxième terminal lorsque vous avez terminé.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
418 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Résultats
• Configurer un autoscaler de pod horizontal pour une application.
Une ressource de mise à l’échelle automatique de pod horizontale utilise les métriques de
performance collectées par le sous-système OpenShift Metrics. Le sous-système Metrics est pré-
installé dans OpenShift. Pour mettre à l’échelle automatiquement un déploiement, vous devez
spécifier des demandes de ressources pour les pods afin que l’autoscaler de pod horizontal puisse
calculer le pourcentage d’utilisation.
L’autoscaler fonctionne en boucle. Par défaut, il effectue les étapes suivantes toutes les
15 secondes :
• L’autoscaler récupère les détails de la métrique pour effectuer une mise à l’échelle à partir de la
ressource HPA.
• Pour chaque pod ciblé par la ressource HPA, l’autoscaler collecte la métrique à partir du sous-
système de métriques.
• Pour chaque pod ciblé, l’autoscaler calcule le pourcentage d’utilisation à partir de la métrique
collectée et des demandes de ressources du pod.
Pour créer une ressource de mise à l’échelle automatique de pod horizontale, la méthode la plus
simple consiste à utiliser la commande oc autoscale, par exemple :
La commande précédente crée une ressource de mise à l’échelle automatique de pod horizontale
qui modifie le nombre de réplicas sur le déploiement hello pour maintenir ses pods en dessous
de 80 % de leur utilisation de processeur totale requise.
Les valeurs maximale et minimale pour la ressource de mise à l’échelle automatique de pod
horizontale prennent en charge les pics de charge et évitent la surcharge du cluster OpenShift.
Si la charge de l’application change trop rapidement, il peut s’avérer utile de conserver plusieurs
pods libres pour faire face aux pics soudains de demandes de la part des utilisateurs. Inversement,
un nombre trop élevé de pods peut utiliser toute la capacité du cluster et affecter les autres
applications qui utilisent le même cluster OpenShift.
DO180-OCP4.14-fr-2-20240530 419
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Pour obtenir des informations sur les ressources de mise à l’échelle automatique de pod
horizontale dans le projet en cours, utilisez les commandes oc get. Par exemple :
Important
L’autoscaler de pod horizontal a initialement la valeur <unknown> dans la colonne
TARGETS. Il faudra peut-être attendre jusqu’à cinq minutes pour que <unknown>
soit remplacé par un pourcentage de l’utilisation actuelle.
En plus de la commande oc autoscale, vous pouvez créer une ressource de mise à l’échelle
automatique de pod horizontale à partir d’un fichier au format YAML.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hello
spec:
minReplicas: 1
maxReplicas: 10
metrics:
- resource:
name: cpu
target:
averageUtilization: 80
type: Utilization
type: Resource
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: hello
Utilisation moyenne idéale du processeur pour chaque pod. Si l’utilisation moyenne globale
du processeur est supérieure à cette valeur, l’autoscaler de pod horizontal démarre de
420 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
nouveaux pods. Si l’utilisation moyenne globale du processeur est inférieure à cette valeur,
l’autoscaler de pod horizontal supprime des pods.
L’exemple précédent crée une ressource de mise à l’échelle automatique de pod horizontale
qui effectue une mise à l’échelle en fonction de l’utilisation du processeur. Elle peut également
effectuer une mise à l’échelle en fonction de l’utilisation de la mémoire en définissant le nom de la
ressource sur memory, comme dans l’exemple suivant :
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hello
spec:
minReplicas: 1
maxReplicas: 10
metrics:
- resource:
name: memory
target:
averageUtilization: 80
...output omitted...
Pour créer une ressource de mise à l’échelle automatique de pod horizontal à partir de la
console Web, cliquez sur le menu Workloads > HorizontalPodAutoscalers. Cliquez sur Create
HorizontalPodAutoscaler et personnalisez le manifeste YAML.
Note
Si une application utilise plus de mémoire globale à mesure que le nombre de
réplicas augmente, elle ne peut pas être utilisée avec la mise à l’échelle automatique
basée sur la mémoire.
Références
Pour plus d’informations, reportez-vous à la section Automatically Scaling Pods with
the Horizontal Pod Autoscaler du chapitre Working with pods de la documentation
Nodes de Red Hat OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/nodes/index#nodes-pods-
autoscaling
DO180-OCP4.14-fr-2-20240530 421
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Exercice guidé
Résultats
Vous serez en mesure de mettre à l’échelle manuellement un déploiement vers le haut
(scale-up), de configurer une ressource de mise à l’échelle de pod horizontale et de
surveiller l’autoscaler.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet reliability-autoscaling.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet reliability-autoscaling.
422 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
apiVersion: v1
kind: List
metadata: {}
items:
- apiVersion: apps/v1
kind: Deployment
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/redhattraining/loadtest:v1.0
name: loadtest
readinessProbe:
failureThreshold: 3
httpGet:
path: /api/loadtest/v1/healthz
port: 8080
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
- apiVersion: v1
kind: Service
...output omitted...
- apiVersion: route.openshift.io/v1
kind: Route
...output omitted...
2.3. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à
plusieurs reprises pour que le pod signale l’état Running. Il est probable que le nom
du pod soit différent sur votre système.
DO180-OCP4.14-fr-2-20240530 423
chapitre 6 | Configuration des applications sur le plan de la fiabilité
3.3. Obtenez plus de détails sur l’état de la ressource. Vous devrez peut-être exécuter la
commande à plusieurs reprises. Attendez trois minutes que la commande signale le
message d’avertissement.
424 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
...output omitted...
spec:
containers:
- image: registry.ocp4.example.com:8443/redhattraining/loadtest:v1.0
name: loadtest
readinessProbe:
failureThreshold: 3
httpGet:
path: /api/loadtest/v1/healthz
port: 8080
scheme: HTTP
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
requests:
cpu: 25m
limits:
cpu: 100m
...output omitted...
4.3. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à
plusieurs reprises pour que le pod signale l’état Running. Il est probable que le nom
du pod soit différent sur votre système.
DO180-OCP4.14-fr-2-20240530 425
chapitre 6 | Configuration des applications sur le plan de la fiabilité
5.1. Mettez à l’échelle le déploiement loadtest vers le haut (scale-up) sur cinq pods.
5.2. Vérifiez que les cinq pods d’application sont tous en cours d’exécution. Vous devrez
peut-être exécuter la commande à plusieurs reprises pour que tous les pods signalent
l’état Running. Il est probable que les noms des pods soient différents sur votre
système.
5.3. Mettez à l’échelle le déploiement loadtest vers le bas (scale-down) sur un seul pod.
5.4. Vérifiez qu’une seule application est en cours d’exécution. Vous devrez peut-être
exécuter la commande à plusieurs reprises pour que les pods s’arrêtent.
426 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
6.2. Ouvrez une nouvelle fenêtre de terminal et exécutez la commande watch pour
surveiller la commande oc get hpa loadtest. Attendez cinq minutes que
l’autoscaler de pod horizontal loadtest signale l’utilisation dans la colonne
TARGETS.
Notez que l’autoscaler de pod horizontal augmente (scale-up) le déploiement sur
deux réplicas pour se conformer au nombre minimal de pods que vous avez configuré.
7.2. Envoyez une demande à l’API de l’application pour simuler une sollicitation
supplémentaire du processeur sur le conteneur. N’attendez pas la fin de la commande
curl pour poursuivre l’exercice. Au bout d’une minute, la commande signale une
erreur de timeout que vous pouvez ignorer.
Note
L’augmentation de l’activité de l’application ne déclenche pas immédiatement la
mise à l’échelle automatique. Patientez quelques instants si vous ne voyez aucune
modification du nombre de répliques.
Vous devrez peut-être exécuter la commande curl plusieurs fois avant que
l’application n’utilise suffisamment de ressources processeur pour déclencher
l’autoscaler.
DO180-OCP4.14-fr-2-20240530 427
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Every 2.0s: oc get hpa loadtest workstation: Fri Mar 3 07:20:19 2023
Note
La mise à l’échelle vers le haut (scale-up) de la ressource autoscaler de pod
horizontal peut être rapide, mais l’opération inverse (scale-down) peut prendre plus
de temps.
Every 2.0s: oc get hpa loadtest workstation: Fri Mar 3 07:23:11 2023
7.5. Facultatif : attendez que l’application loadtest soit mise à l’échelle vers le bas
(scale-down). Il faut cinq minutes supplémentaires pour que l’autoscaler de pod
horizontal passe à deux réplicas.
Every 2.0s: oc get hpa loadtest workstation: Fri Mar 3 07:29:12 2023
7.6. Appuyez sur Ctrl+C pour quitter la commande watch. Fermez ce deuxième terminal
lorsque vous avez terminé.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
428 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Open Lab
Résultats
Vous serez en mesure d’ajouter des demandes de ressources à un objet Deployment, de
configurer des sondes et de créer une ressource de mise à l’échelle automatique de pod
horizontale.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet reliability-review et y déploie l’application
longload.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 429
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
430 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Solution
Résultats
Vous serez en mesure d’ajouter des demandes de ressources à un objet Deployment, de
configurer des sondes et de créer une ressource de mise à l’échelle automatique de pod
horizontale.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet reliability-review et y déploie l’application
longload.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
DO180-OCP4.14-fr-2-20240530 431
chapitre 6 | Configuration des applications sur le plan de la fiabilité
1.3. Listez les pods du projet. Le pod se trouve a l’état Pending. Il est probable que le nom
du pod soit différent sur votre système.
1.4. Récupérez les événements du pod. Aucun nœud de calcul ne dispose de suffisamment
de mémoire pour prendre en charge le pod.
1.6. Définissez les demandes de mémoire sur 512 MiB. Ignorez le message d’avertissement.
1.7. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à plusieurs
reprises pour que le pod signale l’état Running. Il est probable que le nom du pod soit
différent sur votre système.
432 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
2. Lorsque l’application est mise à l’échelle vers le haut (scale-up), vos clients se plaignent
de l’échec de certaines demandes. Pour répliquer le problème, faites passer manuellement
l’application longload sur trois réplicas et exécutez le script ~/DO180/labs/
reliability-review/curl_loop.sh en même temps.
L’initialisation de l’application prend sept secondes. L’application expose le point d’accès de
l’API /health sur le port HTTP 3000. Configurez le déploiement longload pour qu’il utilise
ce point d’accès, pour vous assurer que l’application est prête avant de traiter les demandes
des clients.
DO180-OCP4.14-fr-2-20240530 433
chapitre 6 | Configuration des applications sur le plan de la fiabilité
...output omitted...
22 longload-5897c9558f-cx4gt: Ok
23 longload-5897c9558f-cx4gt: Ok
24 longload-5897c9558f-cx4gt: Ok
25 curl: (7) Failed to connect to master01.ocp4.example.com port 30372: Connection
refused
26 curl: (7) Failed to connect to master01.ocp4.example.com port 30372: Connection
refused
27 longload-5897c9558f-cx4gt: Ok
28 curl: (7) Failed to connect to master01.ocp4.example.com port 30372: Connection
refused
29 longload-5897c9558f-cx4gt: Ok
30 curl: (7) Failed to connect to master01.ocp4.example.com port 30372: Connection
refused
31 longload-5897c9558f-tpssf: app is still starting
32 longload-5897c9558f-kkvm5: app is still starting
33 longload-5897c9558f-cx4gt: Ok
34 longload-5897c9558f-tpssf: app is still starting
35 longload-5897c9558f-tpssf: app is still starting
36 longload-5897c9558f-tpssf: app is still starting
37 longload-5897c9558f-cx4gt: Ok
38 longload-5897c9558f-tpssf: app is still starting
39 longload-5897c9558f-cx4gt: Ok
40 longload-5897c9558f-cx4gt: Ok
...output omitted...
2.5. Mettez à l’échelle l’application vers le bas (scale-down) sur un seul pod.
2.6. Pour tester votre travail, dimensionnez (scale-up) à nouveau l’application sur trois
réplicas.
434 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
...output omitted...
92 longload-7ddcc9b7fd-72dtm: Ok
93 longload-7ddcc9b7fd-72dtm: Ok
94 longload-7ddcc9b7fd-72dtm: Ok
95 longload-7ddcc9b7fd-qln95: Ok
96 longload-7ddcc9b7fd-wrxrb: Ok
97 longload-7ddcc9b7fd-qln95: Ok
98 longload-7ddcc9b7fd-wrxrb: Ok
99 longload-7ddcc9b7fd-72dtm: Ok
...output omitted...
3. Configurez l’application de sorte qu’elle soit mise automatiquement à l’échelle vers le haut
(scale-up) lorsque l’utilisation moyenne de la mémoire est supérieure à 60 % de la valeur
des demandes de mémoire, et vers le bas (scale-down) lorsque l’utilisation est inférieure à
ce pourcentage. Le nombre minimal de réplicas doit être égal à un et le nombre maximal, à
trois. La ressource que vous créez pour la mise à l’échelle de l’application doit être intitulée
longload.
La commande lab fournit le fichier de ressources ~/DO180/labs/reliability-
review/hpa.yml comme exemple. Utilisez la commande oc explain pour connaître les
paramètres valides pour l’attribut hpa.spec.metrics.resource.target. Étant donné
que le fichier est incomplet, vous devez d’abord le mettre à jour si vous choisissez de l’utiliser.
Pour tester votre travail, utilisez la commande oc exec deploy/longload — curl
localhost:3000/leak pour envoyer une requête HTTP au point d’accès de l’API de
l’application /leak. Chaque demande utilise 480 Mio de mémoire supplémentaire. Pour
libérer cette mémoire, vous pouvez utiliser le script ~/DO180/labs/reliability-
review/free.sh.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: longload
labels:
app: longload
spec:
maxReplicas: 3
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: longload
DO180-OCP4.14-fr-2-20240530 435
chapitre 6 | Configuration des applications sur le plan de la fiabilité
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 60
3.4. Dans le deuxième terminal, exécutez la commande watch pour surveiller la commande
oc get hpa longload. Attendez que l’autoscaler de pod horizontal longload
signale l’utilisation dans la colonne TARGETS. Il est probable que le pourcentage soit
différent sur votre système.
3.5. Pour tester votre travail, exécutez la commande oc exec deploy/longload — curl
localhost:3000/leak dans le premier terminal pour que l’application alloue
480 Mio de mémoire.
3.6. Dans le deuxième terminal, après deux minutes, la commande oc get hpa
longload affiche l’augmentation de la mémoire. L’autoscaler de pod horizontal
met à l’échelle (scale-up) l’application sur plusieurs réplicas. Il est probable que le
pourcentage soit différent sur votre système.
Every 2.0s: oc get hpa longload workstation: Fri Mar 10 05:19:44 2023
436 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
3.8. Dans le deuxième terminal, après deux minutes, la commande oc get hpa
longload affiche la diminution de la mémoire. La mise à l’échelle horizontale
automatique de pod réduit l’application à un réplica. Il est probable que le pourcentage
soit différent sur votre système.
Every 2.0s: oc get hpa longload workstation: Fri Mar 10 05:19:44 2023
Appuyez sur Ctrl+C pour quitter la commande watch. Fermez ce deuxième terminal
lorsque vous avez terminé.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 437
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Quiz
3. Dans l’atelier précédent, quel paramètre est initialement absent du déploiement, mais
n’empêche pas l’exécution de l’application ?
a. La sonde Liveness n’est pas définie.
b. La sonde Readiness n’est pas définie.
c. La limite de mémoire n’est pas définie.
d. La limite de processeur n’est pas définie.
438 DO180-OCP4.14-fr-2-20240530
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Solution
3. Dans l’atelier précédent, quel paramètre est initialement absent du déploiement, mais
n’empêche pas l’exécution de l’application ?
a. La sonde Liveness n’est pas définie.
b. La sonde Readiness n’est pas définie.
c. La limite de mémoire n’est pas définie.
d. La limite de processeur n’est pas définie.
DO180-OCP4.14-fr-2-20240530 439
chapitre 6 | Configuration des applications sur le plan de la fiabilité
Résumé
• Une application à haute disponibilité résiste aux scénarios qui pourraient autrement la rendre
indisponible.
• Kubernetes et RHOCP fournissent des fonctions de haute disponibilité (HA), telles que
des sondes d’intégrité, qui aident le cluster à acheminer le trafic uniquement vers les pods
opérationnels.
• Les limites et les demandes de ressources permettent d’équilibrer l’utilisation des ressources du
nœud de cluster.
440 DO180-OCP4.14-fr-2-20240530
chapitre 7
DO180-OCP4.14-fr-2-20240530 441
chapitre 7 | Gestion des mises à jour des applications
Résultats
• Associer les balises d’image de conteneur à leurs hachages d’identifiant, et identifier les images
de conteneur à partir de pods et de conteneurs sur les nœuds Kubernetes.
• Le nom est nginx-120. Dans cet exemple, le nom de l’image contient la version du logiciel :
Nginx version 1.20.
• La balise, qui pointe vers une version spécifique de l’image, est 1-86. Si vous omettez la balise,
la plupart des outils de conteneur utilisent latest par défaut.
Plusieurs balises peuvent faire référence à la même version de l’image. La capture d’écran suivante
de Red Hat Ecosystem Catalog à l’adresse https://catalog.redhat.com/software/containers/
explore liste les balises de l’image ubi9/nginx-120 :
Dans ce cas, les balises 1.86, latest et 1 pointent vers la même version de l’image. Vous pouvez
utiliser n’importe laquelle de ces balises pour faire référence à cette version.
442 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Les balises latest et 1 sont dites flottantes, car elles peuvent pointer vers différentes versions
de l’image au fil du temps. Par exemple, lorsque les développeurs publient une nouvelle version de
l’image, ils modifient la balise latest pour qu’elle pointe vers cette nouvelle version. Ils mettent
également à jour la balise 1 pour qu’elle pointe vers la dernière édition de cette version, telle que
1-87 ou 1-88.
En tant qu’utilisateur de l’image, en spécifiant une balise flottante, vous vous assurez de toujours
utiliser la version d’image à jour correspondant à la balise.
En tant qu’utilisateur de l’image, vous ne remarquerez peut-être pas que la balise que vous utilisiez
pointe désormais vers une autre version.
Supposons que vous déployiez une application sur OpenShift et que vous utilisiez la balise
latest pour l’image. La série d’événements suivante peut se produire :
1. Quand OpenShift déploie le conteneur, il extrait l’image avec la balise latest du registre de
conteneurs.
2. Par la suite, le développeur de l’image envoie une nouvelle version de l’image par push et
réaffecte la balise latest à cette nouvelle version.
3. OpenShift déplace le pod vers un autre nœud de cluster ; en raison de l’échec du nœud
d’origine, par exemple.
4. Sur ce nouveau nœud, OpenShift extrait l’image avec la balise latest et récupère ainsi la
nouvelle version.
Un problème similaire est que lorsque vous mettez à l’échelle votre déploiement, OpenShift
démarre de nouveaux pods. Sur les nœuds, OpenShift extrait la version de l’image latest pour
ces nouveaux pods. Par conséquent, si une nouvelle version est disponible, votre déploiement
s’exécute avec des conteneurs qui utilisent des versions différentes de l’image. Des incohérences
d’application peuvent apparaître et des comportements inattendus peuvent se produire.
Pour éviter ces problèmes, sélectionnez une image dont la stabilité dans le temps est garantie.
Vous contrôlez ainsi le cycle de vie de votre application : vous pouvez choisir quand et comment
OpenShift déploie une nouvelle version de l’image.
• Utilisez une balise qui ne change pas, au lieu de recourir à des balises flottantes.
• Utilisez des flux d’images OpenShift pour un contrôle strict des versions d’images. Vous
trouverez une description plus détaillée des flux d’images dans une autre section de ce cours.
• Utilisez l’ID d’image SHA (Secure Hash Algorithm) au lieu d’une balise lorsque vous référencez la
version d’une image.
La distinction entre balise flottante et balise non flottante n’est pas de nature technique, mais
conventionnelle. Bien que cela soit déconseillé, il n’existe aucun mécanisme pour empêcher un
développeur d’envoyer (par push) une image différente vers une balise existante. Par conséquent,
DO180-OCP4.14-fr-2-20240530 443
chapitre 7 | Gestion des mises à jour des applications
vous devez spécifier l’ID d’image SHA pour garantir que l’image de conteneur référencée ne
change pas.
Pour faire référence à une image par son ID SHA, remplacez name:tag par name@SHA-ID dans le
nom de l’image. L’exemple suivant utilise l’ID d’image SHA au lieu d’une balise.
registry.access.redhat.com/ubi9/nginx-120@sha256:1be2006abd21735e7684eb4cc6eb62...
Pour récupérer l’ID d’image SHA à partir de la balise, utilisez la commande oc image info.
Note
Une image multi-architecture référence des images pour plusieurs architectures de
processeur. Les images multi-architectures contiennent un index qui pointe vers les
images pour différentes plateformes et architectures de processeur.
Pour ces images, la commande oc image info vous oblige à sélectionner une
architecture à l’aide de l’option --filter-by-os :
OS DIGEST
linux/amd64 sha256:1be2006abd21735e7684eb4cc6eb6295346a89411a187e37cd4...
linux/arm64 sha256:d765193e823bb89b878d2d2cb8be0e0073839a6c19073a21485...
linux/ppc64le sha256:0dd0036620f525b3ba9a46f9f1c52ac70414f939446b2ba3a07...
linux/s390x sha256:d8d95cc17764b82b19977bc7ef2f60ff56a3944b3c7c14071dd...
L’exemple suivant affiche l’ID SHA de l’image vers laquelle pointe actuellement la balise 1-86.
Vous pouvez également utiliser la commande skopeo inspect. Le format de sortie diffère de
celui de la commande oc image info, bien que les deux commandes renvoient des données
similaires.
444 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
ID d’image SHA, tandis que l’option --no-trunc lui indique d’afficher la chaîne SHA complète ;
sinon, la commande affiche uniquement les premiers caractères.
La colonne IMAGE ID affiche l’identifiant d’image local que le moteur de conteneur affecte à
l’image. Cet identifiant n’est pas lié à l’ID SHA.
Le format d’image de conteneur s’appuie sur des hachages SHA-256 pour identifier plusieurs
composants d’image, tels que les couches ou les métadonnées d’image. Étant donné que
certaines commandes renvoient également ces chaînes SHA-256, assurez-vous d’utiliser le
hachage SHA-256 qui correspond à l’ID d’image SHA. Les commandes font souvent référence à
l’ID d’image SHA en tant que condensé d’image.
L’exemple suivant montre la ressource de déploiement myapp. La politique d’extraction est définie
sur IfNotPresent.
DO180-OCP4.14-fr-2-20240530 445
chapitre 7 | Gestion des mises à jour des applications
IfNotPresent
Si l’image se trouve déjà sur le nœud de calcul, parce qu’un autre conteneur l’utilise ou parce
qu’OpenShift l’a extraite lors d’une exécution de pod précédente, OpenShift utilise cette
image locale. Sinon, OpenShift extrait l’image du registre de conteneurs.
Si vous utilisez une balise flottante dans votre déploiement et que l’image associée à cette
balise se trouve déjà sur le nœud, OpenShift n’extrait pas à nouveau l’image, même s’il se
peut que la balise flottante pointe vers une image plus récente dans le registre de conteneurs
source.
Par défaut, OpenShift définit l’attribut imagePullPolicy sur IfNotPresent lorsque vous
utilisez une balise ou l’ID SHA pour identifier l’image.
Always
OpenShift vérifie toujours si une version mise à jour de l’image est disponible dans le registre
de conteneurs source. Pour ce faire, OpenShift récupère l’ID SHA de l’image à partir du
registre. Si une image locale ayant le même ID SHA se trouve déjà sur le nœud de calcul,
OpenShift l’utilise. Sinon, OpenShift extrait l’image.
Si vous utilisez une balise flottante dans votre déploiement et qu’une image avec cette balise
se trouve déjà sur le nœud, OpenShift interroge quand même le registre pour s’assurer que la
balise pointe toujours vers la même version de l’image. Cependant, si le développeur a envoyé
(push) une nouvelle version de l’image et a mis à jour la balise flottante, OpenShift récupère
cette nouvelle version.
Par défaut, OpenShift définit l’attribut imagePullPolicy sur Always lorsque vous utilisez
la balise latest ou lorsque vous n’en spécifiez aucune.
Never
OpenShift n’extrait pas l’image et s’attend à ce qu’elle soit déjà disponible sur le nœud. Sinon,
le déploiement échoue.
Pour utiliser cette option, vous devez préremplir vos nœuds de calcul avec les images que
vous avez l’intention d’utiliser. Vous utilisez ce mécanisme pour améliorer les performances ou
pour éviter de dépendre d’un registre de conteneurs pour ces images.
Étant donné que les images utilisent de l’espace disque sur les nœuds de calcul, OpenShift
doit supprimer, ou nettoyer, les images inutilisées lorsque l’espace disque vient à manquer. Le
processus kubelet, qui s’exécute sur les nœuds de calcul, inclut un récupérateur de mémoire
(ou garbage collector) qui s’exécute toutes les cinq minutes. Si l’utilisation du système de fichiers
qui stocke les images est supérieure à 85 %, le récupérateur de mémoire supprime les images
inutilisées les plus anciennes. Le nettoyage de la mémoire s’arrête lorsque l’utilisation du système
de fichiers passe en dessous de 80 %.
Vous trouverez, dans la documentation de référence à la fin de ce cours, des instructions pour
ajuster ces seuils par défaut.
À partir d’un nœud de calcul, vous pouvez exécuter la commande crictl imagefsinfo pour
récupérer le nom du système de fichiers qui stocke les images :
446 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
D’après la sortie de la commande précédente, le système de fichiers qui stocke les images est /
var/lib/containers/storage/overlay-images. Les images utilisent 1 318 560 octets
d’espace disque.
Vous pouvez utiliser crictl rmi à partir du nœud de calcul pour supprimer une image inutilisée.
Cependant, le nettoyage d’objets à l’aide de la commande crictl peut perturber le récupérateur
de mémoire et le processus kubelet.
Il est recommandé de recourir au récupérateur de mémoire pour nettoyer les objets, images
et conteneurs inutilisés à partir des nœuds de calcul. Le récupérateur de mémoire peut être
configuré afin de mieux répondre aux besoins personnalisés que vous pourriez avoir.
DO180-OCP4.14-fr-2-20240530 447
chapitre 7 | Gestion des mises à jour des applications
Références
Pages de manuel skopeo-inspect(1) et podman-system-prune(1)
Pour plus d’informations sur les noms d’images, reportez-vous au chapitre Overview
of Images (Présentation des images) de la documentation Images de Red Hat
OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/images/index#overview-of-images
448 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Exercice guidé
Résultats
Vous devriez être en mesure d’examiner des images de conteneur, de lister les images de
conteneurs qui s’exécutent sur des nœuds de calcul et de déployer des applications en
utilisant des balises d’image ou des ID SHA.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet updates-ids et le fichier /home/student/DO180/
labs/updates-ids/resources.txt. Le fichier resources.txt contient le nom des
images et certaines des commandes que vous utiliserez au cours de l’exercice. Vous pouvez
utiliser le fichier pour copier et coller ces noms d’image et ces commandes.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet updates-ids.
DO180-OCP4.14-fr-2-20240530 449
chapitre 7 | Gestion des mises à jour des applications
Note
Pour améliorer la lisibilité, les instructions tronquent les chaînes SHA-256.
Sur votre système, les commandes renvoient les chaînes SHA-256 complètes. Vous
devez également saisir la chaîne SHA-256 complète pour fournir un tel paramètre à
une commande.
2.2. Examinez la version de l’image référencée par la balise 1-215. Notez que l’ID SHA, ou
condensé, diffère de la version d’image précédente.
2.3. Pour examiner des images, vous pouvez également utiliser la commande skopeo
inspect. Le format de sortie diffère de celui de la commande oc image info,
bien que les deux commandes renvoient des données similaires.
Connectez-vous au registre en tant qu’utilisateur developer avec le mot de passe
developer en utilisant la commande skopeo login. Utilisez ensuite la commande
skopeo inspect pour examiner la balise d’image 1-215.
450 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
3. Déployez une application à partir de la version d’image référencée par la balise 1-209.
3.2. Attendez que le pod démarre, puis récupérez le nom du nœud de cluster qui
l’exécute. Vous devrez peut-être exécuter la commande à plusieurs reprises pour que
le pod signale l’état Running. Il est probable que le nom du pod soit différent sur
votre système.
4.1. Vous devez vous connecter en tant qu’utilisateur admin pour accéder au nœud du
cluster. Utilisez le mot de passe redhatocp.
DO180-OCP4.14-fr-2-20240530 451
chapitre 7 | Gestion des mises à jour des applications
4.4. Utilisez la commande crictl ps pour vérifier que le conteneur httpd-24 est en
cours d’exécution. Ajoutez l’option -o yaml pour afficher les détails du conteneur au
format YAML.
Notez que la commande fait référence à l’image par son ID SHA, et non par la balise
que vous avez spécifiée lors de la création de la ressource de déploiement.
4.5. Utilisez la commande crictl images pour lister toutes les images disponibles
en local sur le nœud. L’image registry.ocp4.example.com:8443/ubi8/
httpd-24:1-209 figure dans cette liste, car le moteur de conteneur local l’a extraite
lorsque vous avez déployé l’application httpd1.
Note
La colonne IMAGE ID affiche l’identifiant d’image local que le moteur de conteneur
affecte à l’image. Cet identifiant n’est pas lié à l’ID d’image SHA que le registre de
conteneurs a affecté à l’image.
4.6. La commande crictl images précédente n’affiche pas les ID d’image SHA
par défaut. Exécutez à nouveau la commande et ajoutez l’option --digests
pour afficher les ID SHA. Ajoutez également l’ID de l’image locale à la commande
pour limiter la sortie à l’image registry.ocp4.example.com:8443/ubi8/
httpd-24:1-209.
452 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
La commande ne renvoie que les premiers caractères de l’ID d’image SHA. Ces
caractères correspondent à l’ID SHA de l’image utilisée par le conteneur httpd-24.
Par conséquent, le conteneur httpd-24 utilise l’image prévue.
sh-4.4# exit
exit
sh-4.4# exit
exit
5.2. Réexécutez la commande oc image info pour récupérer l’ID SHA de la version
d’image référencée par la balise 1-209. Spécifiez le format JSON pour la sortie de
la commande. Analysez la sortie JSON avec la commande jq -r pour récupérer la
valeur de l’objet .digest. Exportez l’ID SHA en tant que variable d’environnement
$IMAGE.
5.4. Vérifiez que le nouveau déploiement fait référence à la version d’image par son
ID SHA.
DO180-OCP4.14-fr-2-20240530 453
chapitre 7 | Gestion des mises à jour des applications
6. Mettez à jour l’application httpd2 en utilisant une version d’image plus récente.
6.1. Dans le déploiement httpd2, mettez à jour le conteneur httpd-24 pour qu’il utilise
la version d’image référencée par la balise 1-215.
6.3. Vérifiez que le redéploiement du pod est terminé. Vous devrez peut-être exécuter la
commande à plusieurs reprises pour que le pod signale l’état Running. Il est probable
que les noms des pods soient différents sur votre système.
6.4. Examinez le pod pour vérifier que le conteneur utilise la nouvelle image. Remplacez le
nom du pod par celui de l’étape précédente.
7. Ajoutez la balise latest à la version de l’image déjà référencée par la balise 1-209.
Déployez une application à partir de l’image associée à la balise latest.
7.1. Utilisez la commande skopeo login pour vous connecter au registre de conteneurs
de la salle de classe en tant qu’utilisateur developer. Utilisez developer comme
mot de passe.
7.2. Utilisez la commande skopeo copy pour ajouter la balise latest à l’image.
454 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
7.3. Utilisez la commande oc image info pour vérifier que les deux balises font bien
référence à la même image. Les deux commandes renvoient le même ID d’image
SHA, ce qui indique que les balises pointent vers la même version de l’image.
7.4. Utilisez la commande oc create deployment pour déployer une autre application.
Définissez le nom du déploiement sur httpd3. Pour vérifier que, par défaut, la
commande sélectionne la balise latest, n’indiquez pas la partie « balise » dans le
nom de l’image.
7.5. Vérifiez que le pod est en cours d’exécution. Vous devrez peut-être exécuter la
commande à plusieurs reprises pour que le pod signale l’état Running. Il est probable
que les noms des pods soient différents sur votre système.
7.6. Vérifiez que le pod utilise l’image prévue. Notez que l’ID d’image SHA correspond à
l’image référencée par la balise 1-209. Vous avez récupéré cet ID d’image SHA au
cours d’une étape précédente, en exécutant la commande oc image info.
DO180-OCP4.14-fr-2-20240530 455
chapitre 7 | Gestion des mises à jour des applications
8. Attribuez la balise latest à une autre version de l’image. Cette opération simule un
développeur qui envoie une nouvelle version d’une image par push et affecte la balise
latest à cette nouvelle version.
8.1. Utilisez la commande skopeo copy pour ajouter la balise latest à la version
de l’image déjà référencée par la balise 1-215. La commande supprime
automatiquement la balise latest de l’image précédente.
Note
La commande skopeo logout se déconnecte d’un serveur de registre spécifié en
supprimant les informations d’identification mises en cache qui sont stockées dans
le fichier ${XDG_RUNTIME_DIR}/containers/auth.json.
8.3. Même si la balise latest fait désormais référence à une version d’image différente,
OpenShift ne redéploie pas les pods qui s’exécutent avec la version d’image
précédente.
Exécutez à nouveau la commande oc describe pod pour vérifier que le pod utilise
toujours l’image précédente.
456 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
9.2. Listez les pods pour vérifier que deux d’entre eux sont en cours d’exécution pour le
déploiement httpd3. Il est probable que les noms des pods soient différents sur
votre système.
9.3. Récupérez l’ID d’image SHA pour le pod que le déploiement a initialement créé. L’ID
n’a pas changé. Le conteneur utilise toujours la version d’image d’origine.
9.4. Récupérez l’ID d’image SHA pour le pod supplémentaire. Comme vous pouvez le
voir, l’ID est différent. Le pod supplémentaire utilise l’image qui est actuellement
référencée par la balise latest.
DO180-OCP4.14-fr-2-20240530 457
chapitre 7 | Gestion des mises à jour des applications
L’état du déploiement est incohérent. Les deux pods répliqués utilisent une version
d’image différente. Par conséquent, il se peut que l’application mise à l’échelle ne se
comporte pas correctement. Red Hat vous recommande d’utiliser une balise moins
volatile que latest dans les environnements de production ou d’opérer un contrôle
plus strict des affectations de balises dans votre registre de conteneurs.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
458 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Résultats
• Mettez à jour les applications avec un temps d’arrêt minimal à l’aide de stratégies de
déploiement.
Étant donné qu’OpenShift déploie des applications à partir d’images de conteneur, les
développeurs doivent créer une nouvelle version de l’image lorsqu’ils mettent à jour le code de
leur application. Les entreprises utilisent généralement un pipeline d’intégration et de livraison
continues (CI/CD) pour générer automatiquement l’image à partir du code source de l’application,
puis pour envoyer (push) l’image obtenue à un registre de conteneurs.
Vous utilisez des ressources OpenShift, telles que des mappages de configuration et des secrets,
pour mettre à jour la configuration de l’application. Pour contrôler le processus de déploiement
d’une nouvelle version d’image, vous utilisez un objet Deployment.
Stratégies de déploiement
Le déploiement de modifications d’application fonctionnelles ou de nouvelles versions pour les
utilisateurs est une phase importante des pipelines CI/CD, au cours de laquelle vous valorisez le
processus de développement.
Apporter des modifications aux applications comporte des risques, comme des temps
d’arrêt pendant le déploiement, l’apparition de bogues ou la réduction des performances des
applications. Vous pouvez réduire ou atténuer certains risques en intégrant des étapes de test et
de validation dans vos pipelines.
L’indisponibilité d’une application ou d’un service peut impliquer, entre autres, une perte d’activité,
la perturbation d’autres services qui dépendent des vôtres et la violation de contrats de niveau
de service (SLA). Pour réduire les temps d’arrêt et minimiser les risques lors des déploiements,
utilisez une stratégie de déploiement. Cette stratégie permet de modifier ou de mettre à niveau
une application de manière à réduire l’impact de ces changements.
Dans OpenShift, vous utilisez des objets Deployment pour définir des déploiements et des
stratégies de déploiement. RollingUpdate et Recreate sont les principales stratégies de
déploiement disponibles dans OpenShift.
DO180-OCP4.14-fr-2-20240530 459
chapitre 7 | Gestion des mises à jour des applications
apiVersion: apps/v1
kind: Deployment
metadata:
...output omitted...
spec:
progressDeadlineSeconds: 600
replicas: 10
revisionHistoryLimit: 10
selector:
matchLabels:
app: myapp2
strategy:
type: Recreate
template:
...output omitted...
Stratégie RollingUpdate
La stratégie RollingUpdate consiste à mettre à jour une version d’une application par étapes.
Les instances sont remplacées les unes après les autres jusqu’à ce qu’il n’en reste plus aucune à
remplacer.
Dans cette stratégie, les deux versions de l’application s’exécutent simultanément, et les instances
de la version précédente ne sont réduites que lorsque la nouvelle version est prête. Le principal
inconvénient de cette stratégie est qu’elle nécessite une compatibilité entre les versions du
déploiement.
Le graphique suivant illustre le déploiement d’une nouvelle version d’une application à l’aide de la
stratégie RollingUpdate :
1. Certaines instances d’application exécutent une version de code qui doit être mise à jour
(v1). OpenShift effectue une mise à l’échelle vers le haut (scale-up) d’une nouvelle instance
avec la version mise à jour de l’application (v2). Étant donné que la nouvelle instance avec la
460 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
version v2 n’est pas prête, seules les instances avec la version v1 répondent aux demandes des
clients.
2. L’instance avec v2 est prête et accepte les demandes des clients. OpenShift effectue une
mise à l’échelle vers le bas (scale-down) d’une instance avec la version v1et vers le haut
(scale-up) d’une nouvelle instance avec la version v2. Les deux versions de l’application
répondent aux demandes des clients.
3. La nouvelle instance avec v2 est prête et accepte les demandes des clients. Red Hat
OpenShift met à l’échelle vers le bas (scale-down) l’instance restante avec la version v1.
4. Il ne reste plus aucune instance à remplacer. La mise à jour de l’application s’est déroulée avec
succès, et sans temps d’arrêt.
Note
La stratégie RollingUpdate est la stratégie par défaut si vous ne spécifiez pas de
stratégie sur les objets Deployment.
L’extrait de code suivant illustre un objet Deployment qui utilise la stratégie RollingUpdate :
apiVersion: apps/v1
kind: Deployment
metadata:
...output omitted...
spec:
progressDeadlineSeconds: 600
replicas: 10
revisionHistoryLimit: 10
selector:
matchLabels:
app: myapp2
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 50%
type: RollingUpdate
template:
...output omitted...
Au cours d’une mise à jour progressive, le nombre de pods de l’application varie, car OpenShift
démarre de nouveaux pods pour la nouvelle révision et supprime des pods de la révision
précédente. Le paramètre maxSurge indique le nombre de pods qu’OpenShift peut créer au-
dessus du nombre normal de réplicas. Le paramètre maxUnavailable indique le nombre de pods
qu’OpenShift peut supprimer en dessous du nombre normal de réplicas. Vous pouvez exprimer
ces paramètres sous la forme d’un pourcentage ou d’un nombre de pods.
DO180-OCP4.14-fr-2-20240530 461
chapitre 7 | Gestion des mises à jour des applications
Si vous ne configurez pas de sonde Readiness pour votre déploiement, lors d’une mise à jour
progressive, OpenShift commence à envoyer le trafic client vers les nouveaux pods dès qu’ils
sont en cours d’exécution. Cependant, il se peut que l’application à l’intérieur d’un conteneur ne
soit pas immédiatement prête à accepter les demandes des clients. Il se peut que l’application
doive charger des fichiers dans le cache, établir une connexion réseau à une base de données ou
effectuer des tâches initiales qui peuvent prendre du temps. Par conséquent, OpenShift redirige
les demandes des clients vers un conteneur qui n’est pas encore prêt, et ces demandes échouent.
L’ajout d’une sonde Readiness à votre déploiement empêche OpenShift d’envoyer du trafic vers
de nouveaux pods qui ne sont pas prêts.
Stratégie de recréation
Dans cette stratégie, toutes les instances d’une application sont d’abord arrêtées, puis remplacées
par de nouvelles. L’inconvénient majeur de cette stratégie est qu’elle entraîne un temps d’arrêt de
vos services. Pendant une certaine période, aucune instance d’application n’est disponible pour
répondre aux demandes.
Le graphique suivant illustre le déploiement d’une nouvelle version d’une application qui utilise la
stratégie Recreate :
1. Certaines instances de l’application exécutent une version de code à mettre à jour (v1).
2. OpenShift réduit (scale-down) à zéro les instances en cours d’exécution. Cette action
entraîne un temps d’arrêt de l’application, car aucune instance n’est disponible pour répondre
aux demandes.
3. OpenShift effectue une mise à l’échelle vers le haut des nouvelles instances avec une
nouvelle version de l’application (v2). Lorsque les nouvelles instances démarrent, le temps
d’arrêt continue.
4. Les nouvelles instances ont fini de démarrer, et sont prêtes à répondre aux demandes. Il s’agit
de la dernière étape de la stratégie Recreate et elle résout la panne de l’application.
Vous pouvez utiliser cette stratégie lorsque plusieurs versions du code de votre application ne
peuvent pas être exécutées en même temps. Vous pouvez également l’utiliser pour exécuter
des migrations ou des transformations de données avant le démarrage du nouveau code. Cette
stratégie n’est pas recommandée pour les applications qui nécessitent une haute disponibilité, par
exemple les systèmes médicaux.
462 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Déploiement d’applications
Lorsque vous mettez à jour un objet Deployment, OpenShift déploie automatiquement
l’application. Si vous appliquez plusieurs modifications d’affilée, telles que la modification de la
version de l’image, la mise à jour des variables d’environnement et la configuration de la sonde
Readiness, OpenShift déploie l’application pour chacune d’elles.
Pour éviter ces déploiements multiples, suspendez le déploiement, appliquez toutes vos
modifications à l’objet Deployment, puis reprenez le déploiement. OpenShift effectue ensuite un
déploiement unique pour appliquer toutes vos modifications :
• Appliquez toutes vos modifications à l’objet Deployment. L’exemple suivant modifie l’image,
une variable d’environnement et la sonde Readiness.
• Reprenez le déploiement :
OpenShift déploie l’application pour appliquer toutes vos modifications à l’objet Deployment.
Vous pouvez suivre un processus similaire lorsque vous créez et configurez un nouveau
déploiement :
• Créez le déploiement et définissez le nombre de réplicas sur zéro. De cette façon, OpenShift ne
déploie pas votre application et aucun pod n’est exécuté.
DO180-OCP4.14-fr-2-20240530 463
chapitre 7 | Gestion des mises à jour des applications
Pour déployer des pods, les jeux de réplicas utilisent la définition du modèle de pod à partir de
l’objet Deployment. OpenShift copie la définition du modèle à partir de l’objet Deployment
lorsqu’il crée l’objet ReplicaSet.
Lorsque vous mettez à jour l’objet Deployment, OpenShift ne met pas à jour l’objet ReplicaSet
existant. À la place, il crée un autre objet ReplicaSet avec la nouvelle définition du modèle de
pod. Ensuite, il déploie l’application conformément à la stratégie de mise à jour.
Il peut donc y avoir plusieurs objets ReplicaSet en même temps pour un déploiement sur
votre système. Lors d’une mise à jour progressive, l’ancien objet et le nouvel objet ReplicaSet
coexistent et coordonnent le déploiement de la nouvelle version de l’application. Une fois le
déploiement terminé, OpenShift conserve l’ancien objet ReplicaSet afin que vous puissiez
revenir en arrière si la nouvelle version ne fonctionne pas correctement.
Le graphique suivant illustre un objet Deployment et deux objets ReplicaSet. L’ancien objet
ReplicaSet pour la version 1 de l’application n’exécute aucun pod. L’objet ReplicaSet actuel
pour la version 2 de l’application gère trois pods répliqués.
Exécutez la commande oc get replicaset pour lister les objets ReplicaSet. OpenShift
utilise le nom d’objet Deployment comme préfixe pour les objets ReplicaSet.
464 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
La sortie précédente présente trois objets ReplicaSet pour le déploiement myapp2. Chaque
fois que vous modifiiez le déploiement myapp2, OpenShift créait un objet ReplicaSet. Le
deuxième objet de la liste est actif et surveille 10 pods. Les autres objets ReplicaSet ne gèrent
aucun pod. Ils représentent les versions précédentes de l’objet Deployment.
Lors d’une mise à jour progressive, deux objets ReplicaSet sont actifs. L’ancien objet
ReplicaSet est mis à l’échelle vers le bas (scale-down), tandis que le nouvel objet est mis à
l’échelle vers le haut (scale-up) :
Le nouvel objet ReplicaSet a déjà démarré quatre pods, mais la colonne READY indique
que, jusqu’à présent, la sonde Readiness n’a réussi que pour deux pods. Ces deux pods sont
susceptibles de recevoir du trafic client.
Gestion du déploiement
Étant donné qu’OpenShift conserve les objets ReplicaSet des versions de déploiement
antérieures, vous pouvez revenir en arrière si vous constatez que la nouvelle version de
l’application ne fonctionne pas.
Si l’opération de déploiement échoue, parce que vous spécifiez un nom d’image de conteneur
incorrect ou que la sonde Readiness échoue, OpenShift ne restaure pas automatiquement
votre déploiement. Dans ce cas, exécutez la commande oc rollout undo pour revenir à la
configuration valide précédente.
DO180-OCP4.14-fr-2-20240530 465
chapitre 7 | Gestion des mises à jour des applications
Note
La colonne CHANGE-CAUSE fournit un message défini par l’utilisateur qui décrit
la révision. Vous pouvez stocker le message dans l’annotation de déploiement
kubernetes.io/change-cause après chaque déploiement :
• Ajoutez l’option --revision à la commande oc rollout history pour plus de détails sur
une révision spécifique :
466 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Si vous utilisez des balises flottantes pour faire référence à des versions d’image de conteneur
dans des déploiements, il se peut que l’image obtenue lors de la restauration d’un déploiement ait
changé dans le registre de conteneurs. Ainsi, il est possible que l’image que vous exécutez après la
restauration ne soit pas l’image d’origine que vous avez utilisée.
Pour éviter ce problème, utilisez des flux d’images OpenShift pour référencer des images au lieu
de balises flottantes. Vous trouverez une description plus détaillée des flux d’images dans une
autre section de ce cours.
Références
Pour plus d’informations sur les stratégies de déploiement, reportez-vous à la
section Using Deployment Strategies (Utilisation de stratégies de déploiement) du
chapitre Deployments (Déploiements) de la documentation Building Applications
(Compilation d’applications) de Red Hat OpenShift Container Platform 4.14,
disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/building_applications/
index#deployment-strategies
DO180-OCP4.14-fr-2-20240530 467
chapitre 7 | Gestion des mises à jour des applications
Exercice guidé
Résultats
Vous serez en mesure de suspendre, mettre à jour et reprendre un déploiement, ainsi que de
restaurer une application défaillante.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet updates-rollout-db et y déploie une base de
données MySQL. Elle crée le projet updates-rollout-web, puis déploie une application
Web avec 10 réplicas.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet updates-rollout-db.
468 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
2. Examinez les ressources créées par la commande lab. Vérifiez que vous pouvez vous
connecter à la base de données. La base de données MySQL utilise un stockage
éphémère.
2.1. Listez l’objet Deployment et vérifiez que le pod est disponible. Récupérez le nom
du conteneur. Vous utiliserez ces informations lors de la mise à jour de l’image de
conteneur au cours d’une autre étape.
2.2. Listez les pods et vérifiez que le pod est en cours d’exécution. Il est probable que le
nom du pod soit différent sur votre système.
2.3. Récupérez le nom de l’image utilisée par le pod. Le pod utilise la version 1-224 de
l’image rhel9/mysql-80. Remplacez le nom du pod par celui de l’étape précédente.
2.4. Vérifiez que vous pouvez vous connecter au système de base de données en listant
les bases de données disponibles. Exécutez la commande mysql depuis l’intérieur du
pod et connectez-vous en tant qu’utilisateur operator1 avec test comme mot de
passe.
DO180-OCP4.14-fr-2-20240530 469
chapitre 7 | Gestion des mises à jour des applications
3.3. Étant donné que l’objet Deployment est suspendu, vérifiez que le nouveau mot de
passe n’est pas encore actif. Pour ce faire, exécutez à nouveau la commande mysql
en utilisant le mot de passe actuel. La connexion à la base de données est établie.
3.5. Étant donné que l’objet Deployment est suspendu, vérifiez que le pod utilise
toujours la version d’image 1-224.
3.7. Vérifiez que le nouveau déploiement est terminé en attendant que le nouveau pod
soit en cours d’exécution. Il est probable que le nom du pod soit différent sur votre
système.
470 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
4.1. Récupérez le nom de l’image utilisée par le nouveau pod. Dans la commande oc get
pod ci-dessous, utilisez le nom du nouveau pod comme paramètre. Le pod utilise à
présent la version d’image 1-228.
4.2. Vérifiez que vous pouvez vous connecter au système de base de données en
utilisant le nouveau mot de passe, redhat123, pour l’utilisateur de base de données
operator1.
5. Dans la deuxième partie de l’exercice, vous allez effectuer une mise à jour progressive
d’une application Web répliquée. Utilisez le projet updates-rollout-web et examinez les
ressources créées par la commande lab.
5.2. Listez l’objet Deployment et vérifiez que les pods sont disponibles. Récupérez le
nom des conteneurs. Vous utiliserez ces informations lors de la mise à jour de l’image
de conteneur au cours d’une autre étape.
5.3. Listez les objets ReplicaSet. Étant donné qu’OpenShift n’a pas encore effectué de
mises à jour progressives, il n’existe qu’un seul objet ReplicaSet. Il est probable que
le nom de l’objet ReplicaSet soit différent sur votre système.
DO180-OCP4.14-fr-2-20240530 471
chapitre 7 | Gestion des mises à jour des applications
5.4. Récupérez le nom et la version de l’image que l’objet ReplicaSet utilise pour
déployer les pods. Les pods utilisent la version v1.0 de l’image redhattraining/
versioned-hello.
5.5. Vérifiez qu’une sonde Readiness est incluse dans le déploiement version. La sonde
effectue une requête HTTP GET sur le port 8080.
6. Pour observer la mise à jour progressive qui sera effectuée lors d’une étape ultérieure,
ouvrez une nouvelle fenêtre de terminal, puis exécutez le script ~/DO180/labs/
updates-rollout/curl_loop.sh que la commande lab a préparé. Le script envoie
des requêtes Web à l’application dans une boucle.
7.1. Revenez à la première fenêtre de terminal, puis utilisez la commande oc set image
pour mettre à jour le déploiement.
472 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
...output omitted...
Hi!
Hi!
Hi!
Hi!
Hi! v1.1
Hi! v1.1
Hi!
Hi! v1.1
Hi!
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi! v1.1
...output omitted...
8. Vérifiez que le processus de déploiement est arrivé à son terme. Listez les objets
ReplicaSet et vérifiez que le nouvel objet utilise la nouvelle version de l’image.
8.2. Listez les objets ReplicaSet. L’objet initial a été réduit (scale-down) à zéro pod.
La taille du nouvel objet ReplicaSet a été augmentée (scale-up) sur 10 pods. Il est
probable que les noms des objets ReplicaSet soient différents sur votre système.
8.3. Récupérez le nom et la version de l’image que le nouvel objet ReplicaSet utilise.
Cette image fournit la nouvelle version de l’application.
DO180-OCP4.14-fr-2-20240530 473
chapitre 7 | Gestion des mises à jour des applications
9.2. Observez la sortie du script curl_loop.sh dans le deuxième terminal. Les pods qui
exécutent la version v1.0 de l’application répondent à nouveau. La sortie suivante
sera probablement différente sur votre système.
...output omitted...
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi!
Hi! v1.1
Hi!
Hi! v1.1
Hi! v1.1
Hi!
Hi!
Hi!
...output omitted...
Appuyez sur Ctrl+C pour arrêter le script. Fermez ce deuxième terminal lorsque
vous avez terminé.
9.3. Listez les objets ReplicaSet. La taille de l’objet initial a été augmentée (scale-up)
sur 10 pods. L’objet de la nouvelle version de l’application a été réduit (scale-down) à
zéro pod.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
474 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Résultats
• Garantir la reproductibilité des déploiements d’applications en utilisant des flux d’images et des
noms d’images courts.
Flux d’images
La distinction entre balise flottante et balise non flottante est de nature conventionnelle plutôt
que technique. Bien que cela soit déconseillé, il n’existe aucun mécanisme pour empêcher un
développeur d’envoyer (par push) une image différente vers une balise existante. Par conséquent,
il n’est pas garanti qu’un pod qui fait référence à une balise d’image récupère la même image
au redémarrage du pod. Les flux d’images résolvent ce problème et offrent également des
fonctionnalités de restauration essentielles.
Les flux d’images sont l’un des principaux éléments de différenciation entre OpenShift et
Kubernetes en amont. Les ressources Kubernetes font directement référence aux images
de conteneur, les ressources OpenShift, telles que les configurations de compilation, font
référence aux flux d’images. OpenShift étend également les ressources Kubernetes, telles que
les déploiements Kubernetes, avec des annotations qui les rendent compatibles avec des flux
d’images OpenShift.
Les flux d’images permettent à OpenShift d’assurer des déploiements reproductibles et stables
d’applications mises en conteneur, ainsi que des restaurations de déploiements sur leur dernier
état connu de fonctionnement correct.
Les flux d’images fournissent un nom stable et court pour faire référence à une image de
conteneur indépendante de toute configuration de serveur de registre et de configuration
d’exécution de conteneur.
Un flux d’images fournit des configurations par défaut pour un ensemble de balises de flux
d’images. Chaque balise de flux d’images fait référence à un flux d’images de conteneur et peut
remplacer la plupart des configurations de son flux d’images associé.
Dans l’illustration suivante, un déploiement qui utilise l’image Image-4 peut être restauré à
l’utilisation de l’image Image-3, car la balise de flux d’images ISTAT-B conserve un historique
des images utilisées :
DO180-OCP4.14-fr-2-20240530 475
chapitre 7 | Gestion des mises à jour des applications
Une balise de flux d’images stocke une copie des métadonnées relative à son image de conteneur
actuelle, notamment l’ID d’image SHA. L’ID d’image SHA est un identifiant unique que le registre
de conteneurs calcule et attribue aux images. Le stockage des métadonnées permet une
recherche et une inspection plus rapides des images de conteneur, dans la mesure où il n’est pas
nécessaire d’accéder au serveur de registre source.
Vous pouvez également configurer une balise de flux d’images de manière à stocker les couches
d’image source dans le registre de conteneur interne OpenShift, qui fait office de cache d’images
local. Le stockage des couches d’image évite d’aller les récupérer dans leur serveur de registre
source. Les consommateurs de l’image mise en cache, tels que les pods et les configurations de
déploiement, font simplement référence au registre interne comme registre source de l’image.
Pour mieux visualiser la relation entre les flux d’images et les balises de flux d’images, vous pouvez
explorer le projet openshift qui est créé au préalable dans tous les clusters OpenShift. Comme
vous pouvez le constater, il existe de nombreux flux d’images dans ce projet, y compris le flux
d’images php :
Il existe plusieurs balises pour le flux d’images php, et il existe une ressource de balise pour
chacune d’elles :
476 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
8.0-ubi9
tagged from registry.access.redhat.com/ubi9/php-80:latest
...output omitted...
8.0-ubi8 (latest)
tagged from registry.access.redhat.com/ubi8/php-80:latest
...output omitted...
7.4-ubi8
tagged from registry.access.redhat.com/ubi8/php-74:latest
...output omitted...
7.3-ubi7
tagged from registry.access.redhat.com/ubi7/php-73:latest
...output omitted...
Dans l’exemple précédent, chacune des balises de flux d’images php fait référence à un nom
d’image différent.
Un ID d’image SHA est un hachage SHA-256 qui identifie de façon unique une image de
conteneur immuable Vous ne pouvez pas modifier une image de conteneur. Au lieu de cela, vous
créez une image de conteneur qui possède un nouvel ID. Lorsque vous envoyez par push une
nouvelle image de conteneur à un serveur de registre, le serveur associe le nom textuel existant et
le nouvel ID d’image.
Lorsque vous démarrez un conteneur à partir d’un nom d’image, vous téléchargez l’image
actuellement associée à ce nom. L’ID d’image sous-jacent peut changer à tout moment et le
prochain conteneur que vous démarrerez aura peut-être un ID différent. Si l’image associée à un
nom d’image présente des problèmes, et que vous ne connaissez que le nom de l’image, vous ne
pouvez pas revenir à une image antérieure.
Les balises de flux d’images OpenShift conservent l’historique des derniers ID d’image qu’elles ont
récupérés d’un serveur de registre. L’historique des ID d’image est le flux d’images d’une balise
de flux d’images. Vous pouvez utiliser l’historique à l’intérieur d’une balise de flux d’images pour
revenir à une image précédente, si par exemple une nouvelle image de conteneur provoque une
erreur de déploiement.
La mise à jour d’une image de conteneur dans un registre externe ne met pas automatiquement
à jour une balise de flux d’images. La balise de flux d’images conserve la référence au dernier ID
d’image qu’elle a récupéré. Ce comportement est crucial pour l’évolutivité des applications, car il
isole OpenShift des changements qui se produisent au niveau d’un serveur de registre.
DO180-OCP4.14-fr-2-20240530 477
chapitre 7 | Gestion des mises à jour des applications
Supposons que vous déployiez une application à partir d’un registre externe, et qu’après quelques
jours de test avec quelques utilisateurs, vous décidiez d’étendre son déploiement pour accroître
son nombre d’utilisateurs. En attendant, votre fournisseur met à jour l’image du conteneur sur
le registre externe. Si OpenShift n’avait aucune balise de flux d’images, les nouveaux pods
obtiendraient la nouvelle image de conteneur, qui est différente de l’image sur le pod d’origine.
En fonction des modifications effectuées, cette nouvelle image pourrait entraîner l’échec de
votre application. Étant donné qu’OpenShift stocke l’ID de l’image d’origine dans une balise
de flux d’images, il peut créer des pods en utilisant le même ID d’image, et éviter ainsi toute
incompatibilité entre l’image d’origine et l’image mise à jour.
OpenShift conserve l’ID d’image du premier pod et s’assure que les nouveaux pods utilisent le
même ID. OpenShift garantit que tous les pods utilisent la même image.
Pour mieux visualiser la relation entre un flux d’images, une balise de flux d’images, un nom
d’image et un ID d’image, consultez la commande oc describe is suivante, qui affiche l’image
source et l’ID d’image actuelle pour chaque balise de flux d’images :
8.0-ubi9
tagged from registry.access.redhat.com/ubi9/php-80:latest
...output omitted...
* registry.access.redhat.com/ubi9/php-80@sha256:2b82...f544
2 days ago
8.0-ubi8 (latest)
tagged from registry.access.redhat.com/ubi8/php-80:latest
* registry.access.redhat.com/ubi8/php-80@sha256:2c74...5ef4
2 days ago
...output omitted...
Si votre administrateur de cluster OpenShift a déjà mis à jour la balise de flux d’images php:8.0-
ubi9, la commande oc describe is affiche plusieurs ID d’image pour cette balise :
8.0-ubi9
tagged from registry.access.redhat.com/ubi9/php-80:latest
...output omitted...
* registry.access.redhat.com/ubi9/php-80@sha256:2b82...f544
2 days ago
registry.access.redhat.com/ubi9/php-80@sha256:8840...94f0
5 days ago
registry.access.redhat.com/ubi9/php-80@sha256:506c...5d90
9 days ago
Dans l’exemple précédent, l’astérisque (*) indique quel ID d’image est l’ID actuel pour chaque
balise de flux d’images. Il s’agit généralement du dernier à être importé et du premier à être listé.
478 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Lorsqu’une balise de flux d’images OpenShift fait référence à une image de conteneur d’un
registre externe, vous devez mettre à jour explicitement cette balise pour obtenir de nouveaux ID
d’image du registre externe. Par défaut, OpenShift ne surveille pas les enregistrements externes
pour les modifications apportées à l’ID d’image associé à un nom d’image.
Vous pouvez configurer une balise de flux d’images pour vérifier dans le registre externe les mises
à jour qui ont eu lieu selon un calendrier établi. Par défaut, les nouvelles balises de flux d’images
ne vérifient pas les images mises à jour.
Par exemple, une organisation peut commencer par télécharger des images de conteneur
directement à partir du registre public Red Hat, et plus tard, mettre en place un registre
d’entreprise comme un miroir de ces images pour économiser de la bande passante. Les
utilisateurs d’OpenShift ne remarqueraient aucun changement, car ils se réfèrent toujours à ces
images en utilisant le même nom de flux d’images. Les utilisateurs des outils de conteneur RHEL
remarqueraient la modification parce qu’ils devraient changer les noms de registre dans leurs
commandes ou leurs configurations de moteur de conteneur pour rechercher le miroir local en
premier.
Dans d’autres scénarios, l’indirection fournie par un flux d’images peut s’avérer utile. Supposons
que vous commenciez avec une image de conteneur de base de données qui présente des
problèmes de sécurité et que le fournisseur prenne trop de temps pour mettre à jour l’image
avec des correctifs. Plus tard, vous trouvez un autre fournisseur qui propose une autre image de
conteneur pour la même base de données, où ces problèmes de sécurité ont déjà été corrigés.
Mieux encore, il a démontré sa capacité à fournir des mises à jour en temps opportun. Si ces
images de conteneur disposent d’une configuration compatible des volumes et des variables
d’environnement, vous pouvez modifier votre flux d’images pour qu’il pointe vers l’image de l’autre
fournisseur.
Red Hat fournit des images de conteneur prises en charge et renforcées, telles que la base de
données MariaDB, qui fonctionnent principalement comme des remplacements d’images de
conteneur de certains projets Open Source répandus. Le remplacement de sources d’images peu
fiables par des solutions Red Hat prises en charge, lorsqu'elles sont disponibles, est une utilisation
par défaut des flux d'images.
Utilisez la commande oc create is pour créer un flux d’images dans le projet en cours.
L’exemple suivant crée un flux d’images nommé keycloak :
Après avoir créé le flux d’images, utilisez la commande oc create istag pour ajouter des
balises de flux d’images. L’exemple suivant ajoute la balise 20.0 au flux d’images keycloak.
Dans cet exemple, la balise de flux d’images fait référence à l’image quay.io/keycloak/
keycloak:20.0.2 du référentiel public Quay.io.
DO180-OCP4.14-fr-2-20240530 479
chapitre 7 | Gestion des mises à jour des applications
Utilisez la commande oc describe is pour vérifier que la balise de flux d’images pointe vers
l’ID SHA de l’image source :
20.0
tagged from quay.io/keycloak/keycloak:20.0.3
* quay.io/keycloak/keycloak@sha256:c167...62e9
47 seconds ago
quay.io/keycloak/keycloak@sha256:5569...b311
5 minutes ago
19.0
tagged from quay.io/keycloak/keycloak:19.0
* quay.io/keycloak/keycloak@sha256:40cc...ffde
5 minutes ago
480 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
L’utilisation de balises de flux d’images vous permet de contrôler les images utilisées par vos
applications. Si vous souhaitez utiliser une nouvelle version de l’image, vous devez mettre à jour
manuellement la balise de flux d’images pour qu’elle pointe vers cette nouvelle version.
Cependant, pour certains registres de conteneurs auxquels vous faites confiance, ou pour
certaines images spécifiques, vous préférerez peut-être que les balises de flux d’images soient
actualisées automatiquement.
Par exemple, Red Hat met régulièrement à jour les images de Red Hat Ecosystem Catalog avec
des correctifs de bogues et de sécurité. Pour bénéficier de ces mises à jour dès que Red Hat les
publie, vous pouvez configurer vos balises de flux d’images de sorte qu’elles soient actualisées
régulièrement.
OpenShift peut vérifier périodiquement si une nouvelle version d’image est disponible. Lorsqu’il
détecte une nouvelle version, il met automatiquement à jour la balise de flux d’images. Pour
activer cette actualisation périodique, ajoutez l’option --scheduled à la commande oc tag.
Par défaut, OpenShift vérifie l’image toutes les 15 minutes. Il s’agit d’un paramètre que les
administrateurs de votre cluster peuvent adapter.
Si l’image provient d’un registre sur Internet, son extraction peut prendre du temps, voire échouer
en cas d’indisponibilité du réseau. Certains registres publics s’accompagnent de règles de
limitation de bande passante qui peuvent ralentir davantage encore vos téléchargements.
Pour atténuer ces problèmes, vous pouvez configurer vos balises de flux d’images de manière à
mettre en cache les images dans le registre de conteneurs OpenShift interne. La première fois
qu’OpenShift extrait l’image, il la télécharge à partir du référentiel source, puis la stocke dans son
registre interne. Après cette extraction initiale, OpenShift récupère l’image dans le registre interne.
• Créez l’objet de flux d’images dans le même projet que l’objet Deployment.
• Dans l’objet Deployment, référencez la balise de flux d’images par son nom, tel que
keycloak:20.0, et non par le nom d’image complet issu du registre source.
DO180-OCP4.14-fr-2-20240530 481
chapitre 7 | Gestion des mises à jour des applications
Utilisez la commande oc set image-lookup pour activer la politique de recherche locale pour
un flux d’images :
Vous pouvez également récupérer l’état de la politique de recherche locale pour tous les
flux d’images du projet en cours en exécutant la commande oc set image-lookup sans
paramètres :
Lorsque vous utilisez un nom court, OpenShift recherche un flux d’images correspondant dans le
projet en cours. OpenShift prend uniquement en compte les flux d’images pour lesquels vous avez
activé la politique de recherche locale. S’il ne trouve pas de flux d’images, il recherche une image
de conteneur standard dans les registres de conteneurs autorisés. Consultez la documentation de
référence à la fin de ce cours pour savoir comment configurer ces registres autorisés.
482 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Vous pouvez également utiliser des flux d’images avec d’autres ressources de charge de travail
Kubernetes :
Une autre section de ce cours explique comment la modification d’une balise de flux d’images
peut mettre en œuvre automatiquement les déploiements associés.
Références
Pour plus d’informations sur les flux d’images, reportez-vous au chapitre Managing
Image Streams (Gestion de flux d’images) de la documentation Images de Red Hat
OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/images/index#managing-image-
streams
Pour plus d’informations sur l’utilisation de flux d’images avec des déploiements,
reportez-vous au chapitre Using Image Streams with Kubernetes Resources
(Utilisation de flux d’images avec des ressources Kubernetes) de la documentation
Images de Red Hat OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/images/index#using-
imagestreams-with-kube-resources
Simplifier la gestion des images de conteneur dans Kubernetes avec des flux
d’images OpenShift
https://cloud.redhat.com/blog/image-streams-faq
DO180-OCP4.14-fr-2-20240530 483
chapitre 7 | Gestion des mises à jour des applications
Exercice guidé
Résultats
Vous serez en mesure de créer des flux d’images et des balises de flux d’images, ainsi que de
déployer des applications qui utilisent des balises de flux d’images.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour
cet exercice. Elle crée également le projet updates-imagestreams et le fichier /
home/student/DO180/labs/updates-imagestreams/resources.txt. Le fichier
resources.txt contient le nom des images et certaines des commandes que vous
utiliserez au cours de l’exercice. Vous pouvez utiliser le fichier pour copier et coller ces noms
d’image et ces commandes.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet updates-imagestreams.
484 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
2.2. Utilisez la commande oc create istag pour créer la balise de flux d’images.
3. Activez la résolution de flux d’images pour versioned-hello afin que les ressources
Kubernetes du projet en cours puissent l’utiliser.
3.2. Exécutez la commande oc set image-lookup sans aucun argument pour vérifier
votre travail.
Note
Pour améliorer la lisibilité, les instructions tronquent les chaînes SHA-256.
v1.0
tagged from registry.ocp4.example.com:8443/redhattraining/versioned-hello:v1.0
* registry.ocp4.example.com:8443/.../versioned-hello@sha256:66e0...105e
7 minutes ago
DO180-OCP4.14-fr-2-20240530 485
chapitre 7 | Gestion des mises à jour des applications
4.2. Utilisez la commande oc image info pour interroger l’image à partir du registre de
conteneurs de la salle de classe. L’ID d’image SHA est le même que celui de la balise
de flux d’images.
5. Créez un déploiement nommé version qui utilise la balise de flux d’images versioned-
hello:v1.0.
5.2. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à
plusieurs reprises pour que le pod signale l’état Running. Il est probable que le nom
du pod soit différent sur votre système.
6. Vérifiez que le déploiement et le pod font tous deux référence à l’image par son ID SHA.
6.2. Récupérez l’image utilisée par le pod. Le pod fait également référence à l’image par
son ID SHA.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
486 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
DO180-OCP4.14-fr-2-20240530 487
chapitre 7 | Gestion des mises à jour des applications
Résultats
• Garantir la mise à jour automatique des pods d’application en utilisant des flux d’images avec les
ressources de charge de travail Kubernetes.
Si une nouvelle version de l’image source est disponible, vous pouvez modifier la balise de flux
d’images pour qu’elle pointe vers cette nouvelle image. Cependant, un objet Deployment
qui utilise la balise de flux d’images n’est pas déployé automatiquement. Pour un déploiement
automatique, vous devez configurer l’objet Deployment avec un déclencheur d’image.
Si vous mettez à jour une balise de flux d’images pour qu’elle pointe vers une nouvelle version de
l’image et que vous constatez que cette version ne fonctionne pas comme prévu, vous pouvez
restaurer la balise en question. Les objets Deployment pour lesquels vous avez configuré un
déclencheur restaurent automatiquement cette image antérieure.
D’autres charges de travail Kubernetes acceptent également les déclencheurs d’image, tels que
les objets Pod, CronJob et Job.
• Créez l’objet de flux d’images dans le même projet que l’objet Deployment.
• Activez la politique de recherche locale dans l’objet de flux d’images à l’aide de la commande oc
set image-lookup.
• Dans l’objet Deployment, référencez les balises de flux d’images par leurs noms, comme
keycloak:20, et non par les noms d’images complets issus du registre source.
Les déclencheurs d’images s’appliquent au niveau du conteneur. Si votre objet Deployment inclut
plusieurs conteneurs, vous pouvez spécifier un déclencheur pour chacun d’eux. Avant de pouvoir
définir des déclencheurs, vous devez récupérer les noms des conteneurs :
488 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Pour fournir un déploiement d’image automatique pour les objets Deployment, OpenShift ajoute
l’annotation image.openshift.io/triggers afin de stocker la configuration au format JSON.
L’attribut fieldPath est une expression JSONPath qu’OpenShift utilise pour rechercher
l’attribut qui stocke le nom de l’image de conteneur. OpenShift met à jour cet attribut avec le
nouvel ID SHA et le nouveau nom d’image chaque fois que la balise de flux d’images est modifiée.
Pour une vue plus concise, utilisez la commande oc set triggers avec le nom de l’objet
Deployment comme argument :
La valeur true située sous la colonne AUTO indique que le déclencheur est activé.
DO180-OCP4.14-fr-2-20240530 489
chapitre 7 | Gestion des mises à jour des applications
Vous pouvez supprimer les déclencheurs de tous les conteneurs de l’objet Deployment en
ajoutant l’option --remove-all à la commande :
La balise de flux d’images peut changer, car vous la mettez à jour manuellement pour qu’elle
pointe vers une nouvelle version de l’image source. Ce changement peut également être effectué
automatiquement si vous configurez la balise pour une actualisation périodique, en ajoutant
l’option --scheduled à la commande oc tag. Lorsque la balise de flux d’images change
automatiquement, tous les objets Deployment disposant d’un déclencheur qui y fait référence
sont également déployés.
Vous pouvez réexécuter les commandes oc import-image et oc tag pour mettre à jour la
balise de flux d’images à partir de l’image source. Si l’image source change, les commandes
mettent à jour la balise de flux d’images pour qu’elle pointe vers cette nouvelle version.
Cependant, vous ne pouvez utiliser la commande oc create istag que pour la création
initiale de la balise de flux d’images. Vous ne pouvez pas mettre à jour les balises à l’aide de cette
commande.
Vous pouvez créer plusieurs balises de flux d’images pointant vers la même image. La commande
suivante crée la balise de flux d’images keycloak:20 qui pointe vers la même image que la balise
keycloak:20.0.2. En d’autres termes, la balise de flux d’images keycloak:20 est un alias de
la balise keycloak:20.0.2.
490 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
La commande oc describe is signale que les deux balises pointent vers la même image :
20.0.2 (20)
tagged from quay.io/keycloak/keycloak:20.0.2
* quay.io/keycloak/keycloak@sha256:5569...b311
3 minutes ago
L’utilisation d’alias est un concept semblable à celui des balises flottantes pour les images de
conteneur. Supposons qu’une nouvelle version d’image soit disponible dans le référentiel Quay.io.
Vous pouvez créer une balise de flux d’images pour cette nouvelle image :
20.0.3
tagged from quay.io/keycloak/keycloak:20.0.3
* quay.io/keycloak/keycloak@sha256:c167...62e9
36 seconds ago
20.0.2 (20)
tagged from quay.io/keycloak/keycloak:20.0.2
* quay.io/keycloak/keycloak@sha256:5569...b311
About an hour ago
La balise de flux d’images keycloak:20 ne change pas. Par conséquent, les objets Deployment
qui l’utilisent ne sont pas déployés.
Après avoir testé la nouvelle image, vous pouvez déplacer la balise keycloak:20 pour qu’elle
pointe vers la nouvelle balise de flux d’images :
DO180-OCP4.14-fr-2-20240530 491
chapitre 7 | Gestion des mises à jour des applications
20.0.3 (20)
tagged from quay.io/keycloak/keycloak:20.0.3
* quay.io/keycloak/keycloak@sha256:c167...62e9
10 minutes ago
20.0.2
tagged from quay.io/keycloak/keycloak:20.0.2
* quay.io/keycloak/keycloak@sha256:5569...b311
About an hour ago
Étant donné que la balise de flux d’images keycloak:20 pointe vers une nouvelle image,
OpenShift déploie tous les objets Deployment qui l’utilisent.
Si la nouvelle application ne fonctionne pas comme prévu, vous pouvez restaurer les déploiements
en réinitialisant la balise keycloak:20 sur la balise de flux d’images précédente :
En fournissant un niveau d’indirection, les flux d’images vous permettent de contrôler la gestion
des images de conteneur que vous utilisez dans votre cluster OpenShift.
Références
Pour plus d’informations sur les déclencheurs d’images, reportez-vous au chapitre
Triggering Updates on Image Stream Changes (Déclenchement de mises à jour
lors des changements du flux d’images) de la documentation Images de Red Hat
OpenShift Container Platform 4.14, disponible à l’adresse
https://access.redhat.com/documentation/en-us/
openshift_container_platform/4.14/html-single/images/index#triggering-updates-
on-imagestream-changes
492 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Exercice guidé
Résultats
• Ajouter un déclencheur d’image à un déploiement.
• Modifier une balise de flux d’images pour qu’elle pointe vers une nouvelle image.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet updates-triggers et déploie une application Web
avec 10 réplicas.
Instructions
1. Connectez-vous au cluster OpenShift en tant qu’utilisateur developer avec le mot de
passe developer. Utilisez le projet updates-triggers.
DO180-OCP4.14-fr-2-20240530 493
chapitre 7 | Gestion des mises à jour des applications
2.1. Vérifiez que la commande lab a activé la politique de recherche locale pour le flux
d’images versioned-hello.
2.2. Vérifiez que la commande lab a créé par la balise de flux d’images versioned-
hello:1. La balise de flux d’images fait référence à l’image dans le registre de la
salle de classe par son ID SHA.
Note
Pour améliorer la lisibilité, les instructions tronquent les chaînes SHA-256.
Sur votre système, les commandes renvoient les chaînes SHA-256 complètes. Vous
devez également saisir la chaîne SHA-256 complète pour fournir un tel paramètre à
une commande.
2.3. Vérifiez que la commande lab a créé par la balise de flux d’images versioned-
hello:1 à partir de l’image registry.ocp4.example.com:8443/
redhattraining/versioned-hello:1-123.
3. Examinez l’objet Deployment créé par la commande lab. Vérifiez que l’application est
disponible depuis l’extérieur du cluster.
3.1. Listez les objets Deployment. Le déploiement version a récupéré l’ID d’image
SHA à partir de la balise de flux d’images versioned-hello:1. L’objet
Deployment inclut un conteneur nommé versioned-hello. Vous utiliserez ces
informations au cours d’une étape ultérieure, lors de la configuration du déclencheur.
494 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
5. Mettez à jour la balise de flux d’images versioned-hello:1 pour qu’elle pointe vers la
balise 1-125 de l’image registry.ocp4.example.com:8443/redhattraining/
versioned-hello. Observez la sortie du script curl_loop.sh pour vérifier que l’objet
Deployment est déployé automatiquement.
5.2. La modification de la balise de flux d’images a déclenché une mise à jour progressive.
Observez la sortie du script curl_loop.sh dans le deuxième terminal.
DO180-OCP4.14-fr-2-20240530 495
chapitre 7 | Gestion des mises à jour des applications
Avant la mise à jour, seuls les pods qui exécutent la version précédente de l’image
répondent. Pendant les mises à jour progressives, les anciens et les nouveaux pods
répondent. Après la mise à jour, seuls les pods qui exécutent la dernière version
de l’image répondent. La sortie suivante sera probablement différente sur votre
système.
...output omitted...
Hi!
Hi!
Hi!
Hi!
Hi! v1.1
Hi! v1.1
Hi!
Hi! v1.1
Hi!
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi! v1.1
...output omitted...
6.2. Affichez les détails du flux d’images versioned-hello. La balise de flux d’images
versioned-hello:1 pointe vers l’image ayant le même ID SHA que dans l’objet
Deployment.
Notez que l’image précédente est toujours disponible. À l’étape suivante, vous allez
restaurer cette image en spécifiant son ID SHA.
1
tagged from registry.ocp4.example.com:8443/redhattraining/versioned-hello:1-125
* registry.ocp4.example.com:8443/.../versioned-hello@sha256:834d...fcb4
6 minutes ago
registry.ocp4.example.com:8443/.../versioned-hello@sha256:66e0...105e
37 minutes ago
496 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
7.1. Utilisez la commande oc tag. Pour l’image source, copiez et collez l’ancien nom
d’image et l’ID SHA à partir de la sortie de la commande précédente.
7.2. Observez la sortie du script curl_loop.sh dans le deuxième terminal. Les pods qui
exécutent la version v1.0 de l’application répondent à nouveau. La sortie suivante
sera probablement différente sur votre système.
...output omitted...
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi!
Hi! v1.1
Hi! v1.1
Hi! v1.1
Hi!
Hi! v1.1
Hi! v1.1
Hi!
Hi!
Hi!
...output omitted...
Appuyez sur Ctrl+C pour arrêter le script. Fermez ce deuxième terminal lorsque
vous avez terminé.
Fin
Sur la machine workstation , utilisez la commande lab pour mettre fin à l’exercice. Il s’agit
d’une étape importante pour vous assurer que les ressources des exercices précédents n’ont pas
d’impact sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 497
chapitre 7 | Gestion des mises à jour des applications
Open Lab
Résultats
Vous serez en mesure de configurer des objets Deployment avec des images et des
déclencheurs, ainsi que des alias et des balises de flux d’images.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet updates-review et y déploie deux applications,
app1 et app2.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
498 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 499
chapitre 7 | Gestion des mises à jour des applications
Solution
Résultats
Vous serez en mesure de configurer des objets Deployment avec des images et des
déclencheurs, ainsi que des alias et des balises de flux d’images.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour cet
exercice. Elle crée également le projet updates-review et y déploie deux applications,
app1 et app2.
Instructions
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
500 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
1.3. Vérifiez que le déploiement app1 utilise bien la balise latest. Récupérez le nom du
conteneur.
2. Le déploiement app2 utilise la balise de flux d’images php-ssl:1, qui est un alias de la
balise php-ssl:1-222.
Activez le déclenchement d’image pour le déploiement app2, de sorte que chaque fois que
la balise de flux d’images php-ssl:1 change, OpenShift déploie l’application. Vous testerez
votre configuration lors d’une étape ultérieure, lorsque vous réaffecterez l’alias php-ssl:1 à
une nouvelle balise de flux d’images.
DO180-OCP4.14-fr-2-20240530 501
chapitre 7 | Gestion des mises à jour des applications
3.2. Déplacez l’alias php-ssl:1 vers la nouvelle balise de flux d’images php-ssl:1-234.
3.3. Vérifiez que l’application app2 est déployée. Les noms des jeux de réplicas seront
probablement différents sur votre système.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu'utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
502 DO180-OCP4.14-fr-2-20240530
chapitre 7 | Gestion des mises à jour des applications
Résumé
• Vous référencez des images de conteneur par balises ou par ID SHA. Les développeurs
d’images affectent des balises aux images. Les registres de conteneurs calculent et affectent
des ID SHA aux images.
• Les objets Deployment possèdent un attribut imagePullPolicy qui spécifie la manière dont
les nœuds de calcul extraient l’image du registre.
• Une stratégie de déploiement est un moyen de modifier ou de mettre à niveau votre application
afin de minimiser l’impact de ces changements.
• Les ressources de balise et de flux d’images OpenShift fournissent des références stables aux
images de conteneur.
• Les ressources de charge de travail Kubernetes, telles que Deployments et Jobs, peuvent
utiliser des flux d’images. Vous devez créer les flux d’images dans le même projet que les
ressources Kubernetes, et vous devez activer la politique de recherche locale dans les flux
d’images pour les utiliser.
• Vous pouvez configurer la surveillance d’images dans les déploiements, de telle sorte
qu’OpenShift déploie l’application chaque fois que la balise de flux d’images change.
DO180-OCP4.14-fr-2-20240530 503
504 DO180-OCP4.14-fr-2-20240530
chapitre 8
Révision complète
Objectif Tâches de révision depuis Red Hat OpenShift
Administration I: Operating a Production Cluster.
DO180-OCP4.14-fr-2-20240530 505
chapitre 8 | Révision complète
Révision complète
Résultats
Après avoir terminé cette section, vous devriez avoir révisé et rafraîchi les connaissances et
compétences que vous avez acquises dans Red Hat OpenShift Administration I: Operating a
Production Cluster.
• Décrire la relation entre OpenShift, Kubernetes et d’autres projets Open Source, et lister les
principales fonctions des produits et éditions de Red Hat OpenShift.
• Naviguer dans la console Web OpenShift pour identifier les applications et les services de
cluster en cours d’exécution.
• Parcourir les panneaux Events, Compute et Observe de la console Web OpenShift pour évaluer
l’état général d’un cluster.
• Exécuter une requête pour connaître l’intégrité des services et composants de cluster
essentiels.
• Exécuter des conteneurs dans des pods, et identifier les espaces de noms et processus de
système d’exploitation hôtes utilisés par les conteneurs.
506 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
• Rechercher des applications en conteneur dans des registres de conteneurs et obtenir des
informations sur les paramètres d’exécution des images de conteneur de la communauté et
prises en charge.
• Résoudre les problèmes liés à un pod en démarrant des processus supplémentaires sur ses
conteneurs, en modifiant les systèmes de fichiers éphémères et en ouvrant des tunnels réseau à
courte durée de vie.
• Identifier les principaux paramètres et ressources utilisés par Kubernetes pour gérer les
applications de longue durée, et montrer comment OpenShift simplifie les workflows de
déploiement d’applications courants.
• Déployer des applications en conteneur en tant que pods gérés par des ressources de charge de
travail Kubernetes.
• Interconnecter les pods d’applications au sein du même cluster à l’aide des services Kubernetes.
• Exposer des applications aux clients situés à l’extérieur du cluster à l’aide d’une entrée
Kubernetes et de routes OpenShift.
• Fournir aux applications des volumes de stockage persistant pour les données basées sur des
blocs et des fichiers.
• Associer des applications à des classes de stockage qui fournissent des services de stockage
pour répondre aux exigences des applications.
• Déployer des applications qui peuvent être mises à l’échelle sans partager le stockage.
• Décrire comment Kubernetes essaie de faire en sorte que les applications continuent de
s’exécuter après une défaillance.
• Décrire comment Kubernetes utilise les sondes d’intégrité lors du déploiement, de la mise à
l’échelle et du basculement des applications.
• Configurer une application avec des demandes de ressources afin que Kubernetes puisse
prendre des décisions de planification.
DO180-OCP4.14-fr-2-20240530 507
chapitre 8 | Révision complète
• Configurer une application avec des limites de ressources afin que Kubernetes puisse en
protéger d’autres.
• Associer les balises d’image de conteneur à leurs hachages d’identifiant, et identifier les images
de conteneur à partir de pods et de conteneurs sur les nœuds Kubernetes.
• Mettez à jour les applications avec un temps d’arrêt minimal à l’aide de stratégies de
déploiement.
• Garantir la reproductibilité des déploiements d’applications en utilisant des flux d’images et des
noms d’images courts.
• Garantir la mise à jour automatique des pods d’application en utilisant des flux d’images avec les
ressources de charge de travail Kubernetes.
508 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
Open Lab
Configurer des applications à l’aide de secrets Kubernetes pour initialiser des variables
d’environnement.
Résultats
Vous serez en mesure de créer et de configurer des ressources OpenShift et Kubernetes,
telles que des projets, des secrets, des déploiements, des volumes persistants, des services
et des routes.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour
cet exercice. La commande crée également le fichier /home/student/DO180/labs/
compreview-deploy/resources.txt. Le fichier resources.txt contient les URL de
votre cluster OpenShift et les noms des images que vous utiliserez au cours de l’exercice.
Vous pouvez utiliser ce fichier pour copier et coller ces URL et ces noms d’images.
Spécifications
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
Au cours de cet exercice, vous allez déployer une application Web et sa base de données à des fins
de test. La configuration obtenue n’est pas prête pour la production, car vous ne configurez pas de
sondes ni de limites de ressources, deux éléments requis dans le cadre de la production. Ces sujets
sont traités dans un autre exercice de révision complète.
DO180-OCP4.14-fr-2-20240530 509
chapitre 8 | Révision complète
• Configurez votre projet de sorte que ses charges de travail fassent référence à l’image de base
de données par le nom court mysql8:1.
La configuration de la salle de classe a copié cette image à partir de Red Hat Ecosystem
Catalog. L’image d’origine est registry.redhat.io/rhel9/mysql-80:1-228.
– Assurez-vous que les ressources de charge de travail du projet review peuvent utiliser la
ressource mysql8:1. Vous créerez ces ressources de charge de travail au cours d’une étape
ultérieure.
• Créez le secret dbparams pour stocker les paramètres de la base de données MySQL. La
base de données et le déploiement frontal ont tous deux besoin de ces paramètres. Le secret
dbparams doit inclure les variables suivantes :
Name Valeur
user operator1
password redhat123
database quotesdb
Pour tester votre configuration, vous pouvez modifier l’image mysql8:1 pour qu’elle
pointe vers l’image de conteneur registry.ocp4.example.com:8443/rhel9/
mysql-80:1-237 fournie par la salle de classe, puis vérifier que le déploiement quotesdb
est bien effectué. N’oubliez pas de réinitialiser l’image mysql8:1 sur l’image de conteneur
registry.ocp4.example.com:8443/rhel9/mysql-80:1-228 avant de noter votre
travail.
– Définissez les variables d’environnement suivantes dans le déploiement à partir des clés du
secret dbparams :
MYSQL_USER user
MYSQL_PASSWORD password
MYSQL_DATABASE database
510 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
données MySQL stocke ses données dans le répertoire /var/lib/mysql. Utilisez la classe
de stockage lvms-vg1 pour le volume.
QUOTES_HOSTNAME quotesdb
• Vous ne pouvez pas encore tester l’application depuis l’extérieur du cluster. Exposez le
déploiement frontend afin que l’application soit accessible à l’adresse http://frontend-
review.apps.ocp4.example.com.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 511
chapitre 8 | Révision complète
Solution
Configurer des applications à l’aide de secrets Kubernetes pour initialiser des variables
d’environnement.
Résultats
Vous serez en mesure de créer et de configurer des ressources OpenShift et Kubernetes,
telles que des projets, des secrets, des déploiements, des volumes persistants, des services
et des routes.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour
cet exercice. La commande crée également le fichier /home/student/DO180/labs/
compreview-deploy/resources.txt. Le fichier resources.txt contient les URL de
votre cluster OpenShift et les noms des images que vous utiliserez au cours de l’exercice.
Vous pouvez utiliser ce fichier pour copier et coller ces URL et ces noms d’images.
512 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
2.1. Utilisez la commande oc create istag pour créer le flux d’images et la balise de
flux d’images.
2.3. Exécutez la commande oc set image-lookup sans aucun argument pour vérifier
votre travail.
DO180-OCP4.14-fr-2-20240530 513
chapitre 8 | Révision complète
8.2. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à plusieurs
reprises pour que le pod signale l’état Running. Il est probable que le nom du pod soit
différent sur votre système.
9.2. Vérifiez qu’OpenShift associe l’adresse IP du serveur MySQL au point d’accès. Il est
probable que l’adresse IP du point d’accès soit différente sur votre système.
514 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
11.1. Ajoutez les variables à partir du secret dbparams. Ajoutez le préfixe QUOTES_ à
chaque nom de variable.
12.2. Attendez que le pod démarre. Vous devrez peut-être exécuter la commande à plusieurs
reprises pour que le pod signale l’état Running. Il est probable que le nom du pod soit
différent sur votre système.
DO180-OCP4.14-fr-2-20240530 515
chapitre 8 | Révision complète
13. Exposez le déploiement frontend afin que l’application soit accessible depuis l’extérieur du
cluster. L’application Web écoute sur le port 8000.
<h1>Quote List</h1>
<ul>
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
516 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
DO180-OCP4.14-fr-2-20240530 517
chapitre 8 | Révision complète
Open Lab
Résultats
Vous serez en mesure de résoudre des problèmes de charge de travail, de configurer des
déploiements et de mettre à l’échelle des applications.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour
cet exercice. Elle crée également le projet compreview-scale et y déploie quelques
applications.
Spécifications
L’URL de l’API de votre cluster OpenShift est https://api.ocp4.example.com:6443, et la
commande oc est déjà installée sur votre machine workstation.
518 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
Name Valeur
Username operator1
Password redhat123
Mettez à jour le déploiement quotesdb pour qu’il utilise cette image. Assurez-vous que la
base de données est redéployée.
La configuration de la salle de classe a copié cette image à partir de Red Hat Ecosystem
Catalog. L’image d’origine est registry.redhat.io/rhel9/mysql-80:1-237.
– Ajoutez une sonde au déploiement quotesdb afin qu’OpenShift puisse détecter à quel
moment la base de données est prête à accepter des demandes. Utilisez la commande
mysqladmin ping pour la sonde.
– Ajoutez une deuxième sonde qui vérifie régulièrement l’état de la base de données. Utilisez
également la commande mysqladmin ping.
DO180-OCP4.14-fr-2-20240530 519
chapitre 8 | Révision complète
s’exécuter. Vous devez, en outre, limiter son utilisation du processeur à 500 millicores et son
utilisation de la mémoire à 1 Gio.
– Ajoutez une sonde au déploiement frontend afin qu’OpenShift puisse détecter à quel
moment l’application Web est prête à accepter des demandes. L’application est prête
lorsqu’une demande HTTP sur le port 8000 adressée au chemin /status aboutit.
– Ajoutez une deuxième sonde qui vérifie régulièrement l’état de l’application frontale Web.
L’application frontale fonctionne comme prévu lorsqu’une demande HTTP sur le port 8000
adressée au chemin /env aboutit.
– Mettez à l’échelle l’application frontend sur trois pods pour qu’elle accepte la charge de
production estimée.
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
520 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
Solution
Résultats
Vous serez en mesure de résoudre des problèmes de charge de travail, de configurer des
déploiements et de mettre à l’échelle des applications.
Avant De Commencer
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab
pour préparer votre système pour cet exercice.
Cette commande permet de s’assurer que toutes les ressources sont disponibles pour
cet exercice. Elle crée également le projet compreview-scale et y déploie quelques
applications.
1. Utilisez la console Web OpenShift pour identifier puis supprimer le pod qui utilise trop de
ressources processeur.
DO180-OCP4.14-fr-2-20240530 521
chapitre 8 | Révision complète
522 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
1.5. Réglez le zoom sur cinq minutes, puis survolez le graphique avec le pointeur de la
souris. Notez que l’interface liste l’espace de noms compreview-scale-load en
première position, ce qui indique que cet espace de noms est le premier consommateur
de ressources processeur.
1.6. Accédez à Observe > Dashboards, puis sélectionnez le tableau de bord Kubernetes /
Compute Resources / Namespace (Workloads). Sélectionnez l’espace de noms
compreview-scale-load, puis définissez la valeur Time Range (Période) sur Last
5 minutes (Les 5 dernières minutes). Le déploiement computeprime est la charge de
travail qui consomme une quantité excessive de ressources processeur.
DO180-OCP4.14-fr-2-20240530 523
chapitre 8 | Révision complète
2. Examinez les journaux du pod qui échoue pour le déploiement quotesdb. Définissez les
variables d’environnement manquantes dans le déploiement quotesdb.
2.3. Listez les pods pour identifier le pod défaillant à partir du déploiement quotesdb. Il est
probable que les noms des pods soient différents sur votre système.
2.4. Récupérez les journaux du pod défaillant. Il manque des variables d’environnement.
524 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
3.1. Récupérez le nom du conteneur qui s’exécute à l’intérieur du pod. Vous avez besoin du
nom du conteneur pour mettre à jour son image.
3.4. Attendez que le déploiement soit effectué. Vous devrez peut-être exécuter la
commande à plusieurs reprises pour que le pod signale l’état Running. Il est probable
que le nom du pod soit différent sur votre système.
4. Ajouter une sonde Readiness et une sonde Liveness au déploiement quotesdb qui exécute
la commande mysqladmin ping.
4.1. Utilisez la commande oc set probe avec l’option --readiness pour ajouter la
sonde Readiness.
DO180-OCP4.14-fr-2-20240530 525
chapitre 8 | Révision complète
4.2. Utilisez la commande oc set probe avec l’option --liveness pour ajouter la sonde
Liveness.
6.1. Utilisez la commande oc set probe avec l’option --readiness pour ajouter la
sonde Readiness qui teste le chemin /status sur le port HTTP 8000.
6.2. Utilisez la commande oc set probe avec l’option --liveness pour ajouter la sonde
Liveness qui teste le chemin /env sur le port HTTP 8000.
526 DO180-OCP4.14-fr-2-20240530
chapitre 8 | Révision complète
8.2. Attendez que le déploiement soit mis à l’échelle vers le haut (scale-up). Vous devrez
peut-être exécuter la commande à plusieurs reprises pour que les pods signalent l’état
Running. Il est probable que les noms des pods soient différents sur votre système.
<h1>Quote List</h1>
<ul>
Évaluation
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
évaluer votre travail. Corrigez toute erreur signalée et répétez la commande tant que des erreurs
persistent.
Fin
En tant qu’utilisateur student sur la machine workstation, utilisez la commande lab pour
effectuer cet exercice. Il s’agit d’une étape importante pour vous assurer que les ressources des
exercices précédents n’ont pas d’incidence sur les exercices à venir.
DO180-OCP4.14-fr-2-20240530 527
chapitre 8 | Révision complète
528 DO180-OCP4.14-fr-2-20240530