8.2. Gestion des processus de déploiement
8.2.1. Gestion des objets DeploymentConfig
DeploymentConfig
peuvent être gérés depuis la page Workloads de la console web d'OpenShift Container Platform ou en utilisant le CLI oc
. Les procédures suivantes montrent l'utilisation de la CLI, sauf indication contraire.
8.2.1.1. Démarrer un déploiement
Vous pouvez lancer un rollout pour commencer le processus de déploiement de votre application.
Procédure
Pour lancer un nouveau processus de déploiement à partir d'un objet
DeploymentConfig
existant, exécutez la commande suivante :oc rollout latest dc/<name>
NoteSi un processus de déploiement est déjà en cours, la commande affiche un message et un nouveau contrôleur de réplication ne sera pas déployé.
8.2.1.2. Visualisation d'un déploiement
Vous pouvez visualiser un déploiement pour obtenir des informations de base sur toutes les révisions disponibles de votre application.
Procédure
Pour afficher les détails de tous les contrôleurs de réplication récemment créés pour l'objet
DeploymentConfig
fourni, y compris tout processus de déploiement en cours, exécutez la commande suivante :oc rollout history dc/<name>
Pour afficher les détails spécifiques à une révision, ajoutez le drapeau
--revision
:$ oc rollout history dc/<name> --revision=1
Pour obtenir des informations plus détaillées sur un objet
DeploymentConfig
et sa dernière révision, utilisez la commandeoc describe
:oc describe dc <name> $ oc describe dc <name>
8.2.1.3. Réessayer un déploiement
Si la révision actuelle de votre objet DeploymentConfig
n'a pas été déployée, vous pouvez relancer le processus de déploiement.
Procédure
Pour redémarrer un processus de déploiement qui a échoué :
oc rollout retry dc/<name>
Si la dernière révision a été déployée avec succès, la commande affiche un message et le processus de déploiement n'est pas réessayé.
NoteUne nouvelle tentative de déploiement redémarre le processus de déploiement et ne crée pas de nouvelle révision de déploiement. Le contrôleur de réplication redémarré a la même configuration que celle qu'il avait au moment de l'échec.
8.2.1.4. Revenir en arrière dans un déploiement
Les retours en arrière permettent de revenir à une révision précédente et peuvent être effectués à l'aide de l'API REST, de l'interface de programmation ou de la console web.
Procédure
Pour revenir à la dernière révision déployée avec succès de votre configuration :
oc rollout undo dc/<name>
Le modèle de l'objet
DeploymentConfig
est inversé pour correspondre à la révision de déploiement spécifiée dans la commande undo, et un nouveau contrôleur de réplication est démarré. Si aucune révision n'est spécifiée avec--to-revision
, la dernière révision déployée avec succès est utilisée.Les déclencheurs de changement d'image sur l'objet
DeploymentConfig
sont désactivés dans le cadre du retour en arrière afin d'éviter de lancer accidentellement un nouveau processus de déploiement peu après la fin du retour en arrière.Pour réactiver les déclencheurs de changement d'image :
oc set triggers dc/<name> --auto
Les configurations de déploiement permettent également de revenir automatiquement à la dernière révision réussie de la configuration en cas d'échec du dernier processus de déploiement. Dans ce cas, le dernier modèle dont le déploiement a échoué reste intact dans le système et c'est aux utilisateurs de corriger leurs configurations.
8.2.1.5. Exécuter des commandes dans un conteneur
Vous pouvez ajouter une commande à un conteneur, qui modifie le comportement de démarrage du conteneur en remplaçant l'image ENTRYPOINT
. Ceci est différent d'un crochet de cycle de vie, qui peut être exécuté une fois par déploiement à un moment spécifié.
Procédure
Ajoutez les paramètres
command
au champspec
de l'objetDeploymentConfig
. Vous pouvez également ajouter un champargs
, qui modifie le champcommand
(ouENTRYPOINT
sicommand
n'existe pas).spec: containers: - name: <container_name> image: 'image' command: - '<command>' args: - '<argument_1>' - '<argument_2>' - '<argument_3>'
Par exemple, pour exécuter la commande
java
avec les arguments-jar
et/opt/app-root/springboots2idemo.jar
:spec: containers: - name: example-spring-boot image: 'image' command: - java args: - '-jar' - /opt/app-root/springboots2idemo.jar
8.2.1.6. Visualisation des journaux de déploiement
Procédure
Pour diffuser les journaux de la dernière révision d'un objet
DeploymentConfig
donné :$ oc logs -f dc/<name>
Si la dernière révision est en cours ou a échoué, la commande renvoie les journaux du processus responsable du déploiement de vos pods. En cas de succès, elle renvoie les journaux d'un pod de votre application.
Vous pouvez également consulter les journaux des anciens processus de déploiement qui ont échoué, si et seulement si ces processus (anciens contrôleurs de réplication et leurs pods de déploiement) existent et n'ont pas été élagués ou supprimés manuellement :
oc logs --version=1 dc/<name>
8.2.1.7. Déclencheurs de déploiement
Un objet DeploymentConfig
peut contenir des déclencheurs, qui entraînent la création de nouveaux processus de déploiement en réponse à des événements survenant dans le cluster.
Si aucun déclencheur n'est défini sur un objet DeploymentConfig
, un déclencheur de changement de configuration est ajouté par défaut. Si les déclencheurs sont définis comme un champ vide, les déploiements doivent être lancés manuellement.
Déclencheurs de déploiement des changements de configuration
Le déclencheur de changement de configuration entraîne la création d'un nouveau contrôleur de réplication lorsque des changements de configuration sont détectés dans le modèle de pod de l'objet DeploymentConfig
.
Si un déclencheur de changement de configuration est défini sur un objet DeploymentConfig
, le premier contrôleur de réplication est automatiquement créé peu après la création de l'objet DeploymentConfig
lui-même et il n'est pas mis en pause.
Déclenchement du déploiement des changements de configuration
triggers: - type: "ConfigChange"
Déclencheurs de déploiement de changement d'image
Le déclencheur de changement d'image entraîne la création d'un nouveau contrôleur de réplication chaque fois que le contenu d'une balise de flux d'images change (lorsqu'une nouvelle version de l'image est poussée).
Déclencheur de déploiement de changement d'image
triggers:
- type: "ImageChange"
imageChangeParams:
automatic: true 1
from:
kind: "ImageStreamTag"
name: "origin-ruby-sample:latest"
namespace: "myproject"
containerNames:
- "helloworld"
- 1
- Si le champ
imageChangeParams.automatic
est défini surfalse
, le déclencheur est désactivé.
Dans l'exemple ci-dessus, lorsque la valeur de la balise latest
du flux d'images origin-ruby-sample
change et que la nouvelle valeur de l'image diffère de l'image actuelle spécifiée dans le conteneur helloworld
de l'objet DeploymentConfig
, un nouveau contrôleur de réplication est créé à l'aide de la nouvelle image pour le conteneur helloworld
.
Si un déclencheur de changement d'image est défini sur un objet DeploymentConfig
(avec un déclencheur de changement de configuration et automatic=false
, ou avec automatic=true
) et que la balise de flux d'images pointée par le déclencheur de changement d'images n'existe pas encore, le processus de déploiement initial démarrera automatiquement dès qu'une image sera importée ou poussée par une construction vers la balise de flux d'images.
8.2.1.7.1. Définition des déclencheurs de déploiement
Procédure
Vous pouvez définir des déclencheurs de déploiement pour un objet
DeploymentConfig
à l'aide de la commandeoc set triggers
. Par exemple, pour définir un déclencheur de changement d'image, utilisez la commande suivante :$ oc set triggers dc/<dc_name> \ --from-image=<project>/<image>:<tag> -c <container_name>
8.2.1.8. Définition des ressources de déploiement
Un déploiement est complété par un module qui consomme des ressources (mémoire, CPU et stockage éphémère) sur un nœud. Par défaut, les modules consomment des ressources illimitées sur le nœud. Toutefois, si un projet spécifie des limites de conteneurs par défaut, les modules consomment des ressources jusqu'à ces limites.
La limite minimale de mémoire pour un déploiement est de 12 Mo. Si un conteneur ne démarre pas en raison d'un événement pod Cannot allocate memory
, la limite de mémoire est trop basse. Augmentez ou supprimez la limite de mémoire. La suppression de la limite permet aux pods de consommer des ressources de nœuds illimitées.
Vous pouvez également limiter l'utilisation des ressources en spécifiant des limites de ressources dans le cadre de la stratégie de déploiement. Les ressources de déploiement peuvent être utilisées avec les stratégies de recréation, de roulement ou de déploiement personnalisé.
Procédure
Dans l'exemple suivant, chacun des éléments suivants :
resources
,cpu
,memory
etephemeral-storage
est facultatif :type: "Recreate" resources: limits: cpu: "100m" 1 memory: "256Mi" 2 ephemeral-storage: "1Gi" 3
Toutefois, si un quota a été défini pour votre projet, l'un des deux éléments suivants est nécessaire :
Un ensemble de sections
resources
avec unrequests
explicite :type: "Recreate" resources: requests: 1 cpu: "100m" memory: "256Mi" ephemeral-storage: "1Gi"
- 1
- L'objet
requests
contient la liste des ressources correspondant à la liste des ressources du quota.
-
Une plage de limites définie dans votre projet, où les valeurs par défaut de l'objet
LimitRange
s'appliquent aux pods créés au cours du processus de déploiement.
Pour définir les ressources de déploiement, choisissez l'une des options ci-dessus. Dans le cas contraire, la création d'un pod de déploiement échoue, en raison d'un quota non atteint.
Ressources complémentaires
- Pour plus d'informations sur les limites et les demandes de ressources, voir Comprendre la gestion de la mémoire des applications.
8.2.1.9. Mise à l'échelle manuelle
Outre les retours en arrière, vous pouvez exercer un contrôle fin sur le nombre de répliques en les échelonnant manuellement.
Les pods peuvent également être mis à l'échelle automatiquement à l'aide de la commande oc autoscale
.
Procédure
Pour mettre à l'échelle manuellement un objet
DeploymentConfig
, utilisez la commandeoc scale
. Par exemple, la commande suivante définit les répliques de l'objetfrontend
DeploymentConfig
sur3
.$ oc scale dc frontend --replicas=3
Le nombre de répliques se propage finalement à l'état souhaité et actuel du déploiement configuré par l'objet
DeploymentConfig
frontend
.
8.2.1.10. Accès aux dépôts privés à partir d'objets DeploymentConfig
Vous pouvez ajouter un secret à votre objet DeploymentConfig
afin qu'il puisse accéder aux images d'un dépôt privé. Cette procédure présente la méthode de la console web d'OpenShift Container Platform.
Procédure
- Créer un nouveau projet.
- Sur la page Workloads, créez un secret contenant les informations d'identification permettant d'accéder à un dépôt d'images privé.
-
Créer un objet
DeploymentConfig
. -
Sur la page de l'éditeur d'objets
DeploymentConfig
, définissez l'objet Pull Secret et enregistrez vos modifications.
8.2.1.11. Affectation de pods à des nœuds spécifiques
Vous pouvez utiliser des sélecteurs de nœuds en conjonction avec des nœuds étiquetés pour contrôler le placement des pods.
Les administrateurs de clusters peuvent définir le sélecteur de nœuds par défaut pour un projet afin de restreindre le placement des pods à des nœuds spécifiques. En tant que développeur, vous pouvez définir un sélecteur de nœuds sur une configuration Pod
afin de restreindre encore davantage les nœuds.
Procédure
Pour ajouter un sélecteur de nœud lors de la création d'un module, modifiez la configuration
Pod
et ajoutez la valeurnodeSelector
. Cette valeur peut être ajoutée à une seule configurationPod
ou à un modèlePod
:apiVersion: v1 kind: Pod spec: nodeSelector: disktype: ssd ...
Les pods créés lorsque le sélecteur de nœuds est en place sont assignés aux nœuds avec les étiquettes spécifiées. Les étiquettes spécifiées ici sont utilisées conjointement avec les étiquettes ajoutées par un administrateur de cluster.
Par exemple, si l'administrateur du cluster a ajouté les labels
type=user-node
etregion=east
à un projet et que vous ajoutez le labeldisktype: ssd
ci-dessus à un module, ce dernier n'est jamais planifié que sur les nœuds qui ont les trois labels.NoteLes étiquettes ne peuvent être définies que sur une seule valeur, de sorte que la définition d'un sélecteur de nœud de
region=west
dans une configurationPod
qui aregion=east
comme valeur par défaut définie par l'administrateur, entraîne la création d'un module qui ne sera jamais programmé.
8.2.1.12. Exécuter un pod avec un compte de service différent
Vous pouvez exécuter un pod avec un compte de service autre que celui par défaut.
Procédure
Modifiez l'objet
DeploymentConfig
:oc edit dc/<deployment_config>
Ajoutez les paramètres
serviceAccount
etserviceAccountName
au champspec
et indiquez le compte de service que vous souhaitez utiliser :spec: securityContext: {} serviceAccount: <service_account> serviceAccountName: <service_account>