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

  1. Pour lancer un nouveau processus de déploiement à partir d'un objet DeploymentConfig existant, exécutez la commande suivante :

    oc rollout latest dc/<name>
    Note

    Si 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

  1. 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>
  2. Pour afficher les détails spécifiques à une révision, ajoutez le drapeau --revision:

    $ oc rollout history dc/<name> --revision=1
  3. Pour obtenir des informations plus détaillées sur un objet DeploymentConfig et sa dernière révision, utilisez la commande oc 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

  1. 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é.

    Note

    Une 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

  1. 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.

  2. 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
Note

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

  1. Ajoutez les paramètres command au champ spec de l'objet DeploymentConfig. Vous pouvez également ajouter un champ args, qui modifie le champ command (ou ENTRYPOINT si command 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

  1. 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.

  2. 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.

Avertissement

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.

Note

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 sur false, 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.

Note

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

  1. Vous pouvez définir des déclencheurs de déploiement pour un objet DeploymentConfig à l'aide de la commande oc 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.

Note

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

  1. Dans l'exemple suivant, chacun des éléments suivants : resources, cpu, memory et ephemeral-storage est facultatif :

    type: "Recreate"
    resources:
      limits:
        cpu: "100m" 1
        memory: "256Mi" 2
        ephemeral-storage: "1Gi" 3
    1
    cpu is in CPU units: 100m represents 0.1 CPU units (100 * 1e-3).
    2
    memory is in bytes: 256Mi represents 268435456 bytes (256 * 2 ^ 20).
    3
    ephemeral-storage est en octets : 1Gi représente 1073741824 octets (2 ^ 30).

    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 un requests 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

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.

Note

Les pods peuvent également être mis à l'échelle automatiquement à l'aide de la commande oc autoscale.

Procédure

  1. Pour mettre à l'échelle manuellement un objet DeploymentConfig, utilisez la commande oc scale. Par exemple, la commande suivante définit les répliques de l'objet frontend DeploymentConfig sur 3.

    $ 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

  1. Créer un nouveau projet.
  2. Sur la page Workloads, créez un secret contenant les informations d'identification permettant d'accéder à un dépôt d'images privé.
  3. Créer un objet DeploymentConfig.
  4. 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

  1. Pour ajouter un sélecteur de nœud lors de la création d'un module, modifiez la configuration Pod et ajoutez la valeur nodeSelector. Cette valeur peut être ajoutée à une seule configuration Pod ou à un modèle Pod:

    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 et region=east à un projet et que vous ajoutez le label disktype: ssd ci-dessus à un module, ce dernier n'est jamais planifié que sur les nœuds qui ont les trois labels.

    Note

    Les é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 configuration Pod qui a region=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

  1. Modifiez l'objet DeploymentConfig:

    oc edit dc/<deployment_config>
  2. Ajoutez les paramètres serviceAccount et serviceAccountName au champ spec et indiquez le compte de service que vous souhaitez utiliser :

    spec:
      securityContext: {}
      serviceAccount: <service_account>
      serviceAccountName: <service_account>
Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.