6.2. Utilisation de conteneurs d'initiation pour effectuer des tâches avant le déploiement d'un module
OpenShift Container Platform fournit init containers, qui sont des conteneurs spécialisés qui s'exécutent avant les conteneurs d'application et peuvent contenir des utilitaires ou des scripts d'installation qui ne sont pas présents dans une image d'application.
6.2.1. Comprendre les conteneurs Init Copier lienLien copié sur presse-papiers!
Vous pouvez utiliser une ressource Init Container pour effectuer des tâches avant que le reste d'un pod ne soit déployé.
Un pod peut avoir des Init Containers en plus des conteneurs d'application. Les conteneurs Init permettent de réorganiser les scripts d'installation et le code de liaison.
Un conteneur Init peut :
- Contenir et exécuter des utilitaires qu'il n'est pas souhaitable d'inclure dans l'image du conteneur d'applications pour des raisons de sécurité.
- Contiennent des utilitaires ou du code personnalisé pour l'installation qui n'est pas présent dans l'image de l'application. Par exemple, il n'est pas nécessaire de créer une image à partir d'une autre image simplement pour utiliser un outil comme sed, awk, python ou dig pendant l'installation.
- Utiliser les espaces de noms Linux pour qu'ils aient des vues du système de fichiers différentes de celles des conteneurs d'applications, comme l'accès à des secrets auxquels les conteneurs d'applications ne peuvent pas accéder.
Chaque Init Container doit s'achever avec succès avant que le suivant ne soit lancé. Les conteneurs d'initialisation constituent donc un moyen simple de bloquer ou de retarder le démarrage des conteneurs d'applications jusqu'à ce qu'un certain nombre de conditions préalables soient remplies.
Par exemple, voici quelques façons d'utiliser les conteneurs Init :
Attendez qu'un service soit créé à l'aide d'une commande shell comme :
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Enregistrez ce pod auprès d'un serveur distant à partir de l'API descendante avec une commande comme :
curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’
$ curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
Attendez un peu avant de lancer l'application Container à l'aide d'une commande telle que
sleep 60
. - Cloner un dépôt git dans un volume.
- Placez des valeurs dans un fichier de configuration et exécutez un outil de modèle pour générer dynamiquement un fichier de configuration pour le conteneur de l'application principale. Par exemple, placez la valeur POD_IP dans une configuration et générez le fichier de configuration de l'application principale à l'aide de Jinja.
Voir la documentation de Kubernetes pour plus d'informations.
6.2.2. Création de conteneurs Init Copier lienLien copié sur presse-papiers!
L'exemple suivant décrit un pod simple qui possède deux conteneurs d'initialisation (Init Containers). Le premier attend myservice
et le second mydb
. Une fois les deux conteneurs terminés, le pod commence.
Procédure
Créer un fichier YAML pour le conteneur d'initiation :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer un fichier YAML pour le service
myservice
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créer un fichier YAML pour le service
mydb
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour créer le site
myapp-pod
:oc create -f myapp.yaml
$ oc create -f myapp.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
pod/myapp-pod created
pod/myapp-pod created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Visualiser l'état du pod :
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5s
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Notez que le statut du pod indique qu'il est en attente
Exécutez les commandes suivantes pour créer les services :
oc create -f mydb.yaml
$ oc create -f mydb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create -f myservice.yaml
$ oc create -f myservice.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Visualiser l'état du pod :
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2m
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow