6.4. En utilisant des stratégies de déploiement
Les stratégies de déploiement sont utilisées pour modifier ou mettre à niveau les applications sans temps d’arrêt afin que les utilisateurs remarquent à peine un changement.
Étant donné que les utilisateurs accèdent généralement aux applications via une route gérée par un routeur, les stratégies de déploiement peuvent se concentrer sur les fonctionnalités d’objet DeploymentConfig ou les fonctionnalités de routage. Les stratégies qui se concentrent sur l’objet DeploymentConfig ont un impact sur tous les itinéraires qui utilisent l’application. Les stratégies qui utilisent le routeur comprennent des itinéraires individuels ciblés.
La plupart des stratégies de déploiement sont prises en charge par l’objet DeploymentConfig, et certaines stratégies supplémentaires sont prises en charge par le biais de fonctionnalités de routeur.
6.4.1. Choisir une stratégie de déploiement Copier lienLien copié sur presse-papiers!
Considérez ce qui suit lors du choix d’une stratégie de déploiement:
- Les connexions de longue durée doivent être gérées gracieusement.
- Les conversions de bases de données peuvent être complexes et doivent être faites et retournées avec l’application.
- Lorsque l’application est un hybride de microservices et de composants traditionnels, des temps d’arrêt pourraient être nécessaires pour terminer la transition.
- Il faut avoir l’infrastructure nécessaire pour le faire.
- Lorsque vous disposez d’un environnement de test non isolé, vous pouvez casser les versions nouvelles et anciennes.
La stratégie de déploiement utilise des vérifications de préparation pour déterminer si un nouveau pod est prêt à être utilisé. En cas d’échec d’une vérification de préparation, l’objet DeploymentConfig se répète pour exécuter le pod jusqu’à ce qu’il soit éteint. Le timeout par défaut est 10m, une valeur définie dans TimeoutSeconds dans dc.spec.strarategy.*params.
6.4.2. La stratégie de roulement Copier lienLien copié sur presse-papiers!
Le déploiement mobile remplace lentement les instances de la version précédente d’une application par des instances de la nouvelle version de l’application. La stratégie de roulement est la stratégie de déploiement par défaut utilisée si aucune stratégie n’est spécifiée sur un objet DeploymentConfig.
En général, un déploiement roulant attend que les nouveaux pods deviennent prêts via un contrôle de préparation avant de réduire les anciens composants. En cas de problème important, le déploiement roulant peut être avorté.
Lors de l’utilisation d’un déploiement roulant:
- Lorsque vous voulez ne pas prendre de temps d’arrêt lors d’une mise à jour de l’application.
- Lorsque votre application prend en charge l’ancien code et le nouveau code en même temps.
Le déploiement continu signifie que vous avez des versions anciennes et nouvelles de votre code en même temps. Cela nécessite généralement que votre application gère la compatibilité N-1.
Définition d’une stratégie de roulement
- 1
- Le temps d’attendre entre les mises à jour individuelles des pod. En cas d’absence de précision, cette valeur par défaut à 1.
- 2
- Le temps d’attendre entre le sondage de l’état du déploiement après la mise à jour. En cas d’absence de précision, cette valeur par défaut à 1.
- 3
- Le temps d’attendre un événement de mise à l’échelle avant d’abandonner. Facultatif; la valeur par défaut est 600. Ici, abandonner signifie retourner automatiquement au déploiement complet précédent.
- 4
- le maxSurge est facultatif et par défaut à 25% s’il n’est pas spécifié. Consultez les informations ci-dessous la procédure suivante.
- 5
- le maxUnavailable est optionnel et par défaut à 25% s’il n’est pas spécifié. Consultez les informations ci-dessous la procédure suivante.
- 6
- les pré et post sont tous deux des crochets du cycle de vie.
La stratégie de roulement:
- Exécute n’importe quel crochet de cycle de vie.
- Augmente le nouveau contrôleur de réplication en fonction du nombre de surtensions.
- Réduit l’ancien contrôleur de réplication en fonction du nombre maximum indisponible.
- Il répète cette mise à l’échelle jusqu’à ce que le nouveau contrôleur de réplication ait atteint le nombre de répliques souhaité et que l’ancien contrôleur de réplication ait été mis à l’échelle à zéro.
- Exécute n’importe quel crochet après le cycle de vie.
Lors de la mise à l’échelle, la stratégie de roulement attend que les pods deviennent prêts afin qu’il puisse décider si une autre mise à l’échelle affecterait la disponibilité. En cas de mise à l’échelle des pods ne deviennent jamais prêts, le processus de déploiement finira par s’achever et entraînera une défaillance du déploiement.
Le paramètre maxUnavailable est le nombre maximum de pods qui peuvent être indisponibles pendant la mise à jour. Le paramètre maxSurge est le nombre maximum de gousses qui peuvent être programmées au-dessus du nombre original de gousses. Les deux paramètres peuvent être définis sur un pourcentage (par exemple, 10 %) ou une valeur absolue (par exemple, 2). La valeur par défaut pour les deux est de 25%.
Ces paramètres permettent de régler le déploiement pour la disponibilité et la vitesse. À titre d’exemple:
- le maxUnavailable*=0 et maxSurge*=20% assurent le maintien de la pleine capacité pendant la mise à jour et la mise à l’échelle rapide.
- * maxUnavailable*=10% et maxSurge*=0 effectue une mise à jour sans capacité supplémentaire (une mise à jour en place).
- le maxUnavailable*=10% et maxSurge*=10% augmentent et diminuent rapidement avec un certain potentiel de perte de capacité.
Généralement, si vous voulez des déploiements rapides, utilisez maxSurge. Dans le cas où vous devez prendre en compte le quota de ressources et accepter l’indisponibilité partielle, utilisez maxUnavailable.
Le paramètre par défaut pour maxUnavailable est 1 pour tous les pools de configuration de la machine dans Red Hat OpenShift Service sur AWS. Il est recommandé de ne pas modifier cette valeur et de mettre à jour un nœud de plan de contrôle à la fois. Il ne faut pas changer cette valeur à 3 pour le pool de plan de contrôle.
6.4.2.1. Déploiements des Canaries Copier lienLien copié sur presse-papiers!
Les déploiements roulants dans Red Hat OpenShift Service sur AWS sont des déploiements canaris ; une nouvelle version (le canari) est testée avant que toutes les anciennes instances ne soient remplacées. Lorsque la vérification de préparation ne réussit jamais, l’instance canari est supprimée et l’objet DeploymentConfig sera automatiquement redéployé.
La vérification de préparation fait partie du code d’application et peut être aussi sophistiquée que nécessaire pour s’assurer que la nouvelle instance est prête à être utilisée. Lorsque vous devez implémenter des vérifications plus complexes de l’application (comme l’envoi de véritables charges de travail utilisateur à la nouvelle instance), envisagez de mettre en œuvre un déploiement personnalisé ou d’utiliser une stratégie de déploiement bleu-vert.
6.4.2.2. Création d’un déploiement mobile Copier lienLien copié sur presse-papiers!
Les déploiements roulants sont le type par défaut dans Red Hat OpenShift Service sur AWS. Il est possible de créer un déploiement mobile à l’aide du CLI.
Procédure
Créer une application basée sur l’exemple d’images de déploiement trouvées dans Quay.io:
oc new-app quay.io/openshifttest/deployment-example:latest
$ oc new-app quay.io/openshifttest/deployment-example:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteCette image n’expose aucun port. Lorsque vous souhaitez exposer vos applications sur un service externe LoadBalancer ou activer l’accès à l’application via Internet public, créez un service en utilisant la commande oc expose dc/déployment-exemple --port=<port> après avoir terminé cette procédure.
Lorsque vous avez installé le routeur, rendez l’application disponible via un itinéraire ou utilisez l’IP du service directement.
oc expose svc/deployment-example
$ oc expose svc/deployment-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Accédez à l’application à l’exemple de déploiement.<project>.<router_domain> pour vérifier que vous voyez l’image v1.
Faites évoluer l’objet DeploymentConfig jusqu’à trois répliques:
oc scale dc/deployment-example --replicas=3
$ oc scale dc/deployment-example --replicas=3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Déclenchez automatiquement un nouveau déploiement en étiquetant une nouvelle version de l’exemple comme la dernière balise:
oc tag deployment-example:v2 deployment-example:latest
$ oc tag deployment-example:v2 deployment-example:latest
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Dans votre navigateur, actualisez la page jusqu’à ce que vous voyez l’image v2.
Lors de l’utilisation du CLI, la commande suivante indique combien de pods sont sur la version 1 et combien sont sur la version 2. Dans la console web, les pods sont progressivement ajoutés à v2 et supprimés de v1:
oc describe dc deployment-example
$ oc describe dc deployment-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Au cours du processus de déploiement, le nouveau contrôleur de réplication est progressivement mis à l’échelle. Après que les nouveaux pods soient marqués comme prêts (en passant leur vérification de préparation), le processus de déploiement se poursuit.
Dans le cas où les pods ne deviennent pas prêts, le processus s’absente et le déploiement revient à sa version précédente.
6.4.2.3. Éditer un déploiement en utilisant la perspective Développeur Copier lienLien copié sur presse-papiers!
En utilisant la perspective Développeur, vous pouvez modifier la stratégie de déploiement, les paramètres d’image, les variables d’environnement et les options avancées pour votre déploiement.
Conditions préalables
- Dans la perspective Développeur de la console web.
- C’est vous qui avez créé une application.
Procédure
- Accédez à la vue Topology.
- Cliquez sur votre application pour voir le panneau Détails.
- Dans le menu déroulant Actions, sélectionnez Modifier le déploiement pour afficher la page Modifier le déploiement.
Il est possible d’éditer les options avancées suivantes pour votre déploiement:
Facultatif: Vous pouvez mettre fin aux déploiements en cliquant sur les déploiements de Pause, puis en sélectionnant les déploiements de Pause pour cette case à cocher de déploiement.
En mettant en pause les déploiements, vous pouvez apporter des modifications à votre application sans déclencher un déploiement. À tout moment, vous pouvez reprendre les déploiements.
- Facultatif: Cliquez sur Évoluer pour modifier le nombre d’instances de votre image en modifiant le nombre de répliques.
- Cliquez sur Save.
6.4.2.4. Démarrage d’un déploiement mobile en utilisant la perspective Développeur Copier lienLien copié sur presse-papiers!
Il est possible de mettre à niveau une application en démarrant un déploiement mobile.
Conditions préalables
- Dans la perspective Développeur de la console web.
- C’est vous qui avez créé une application.
Procédure
- Dans la vue Topologie, cliquez sur le nœud de l’application pour voir l’onglet Aperçu dans le panneau latéral. Il est à noter que la stratégie de mise à jour est définie sur la stratégie de roulement par défaut.
Dans le menu déroulant Actions, sélectionnez Démarrer le déploiement pour lancer une mise à jour continue. Le déploiement roulant fait tourner la nouvelle version de l’application, puis met fin à l’ancienne.
Figure 6.1. La mise à jour continue
6.4.3. Créer une stratégie Copier lienLien copié sur presse-papiers!
La stratégie de recréation a un comportement de déploiement de base et prend en charge les crochets du cycle de vie pour injecter du code dans le processus de déploiement.
Exemple recréer la définition de stratégie
La stratégie de recréer:
- Exécute n’importe quel crochet de cycle de vie.
- Réduit le déploiement précédent à zéro.
- Exécute n’importe quel crochet de cycle de vie moyen.
- Augmente le nouveau déploiement.
- Exécute n’importe quel crochet après le cycle de vie.
Lors de la mise à l’échelle, si le nombre de répliques du déploiement est supérieur à un, la première réplique du déploiement sera validée pour la préparation avant d’augmenter complètement le déploiement. En cas d’échec de la validation de la première réplique, le déploiement sera considéré comme un échec.
Lors de l’utilisation d’un déploiement recréé:
- Lorsque vous devez effectuer des migrations ou d’autres transformations de données avant le début de votre nouveau code.
- Lorsque vous ne supportez pas d’avoir des versions nouvelles et anciennes de votre code d’application en même temps.
- Lorsque vous souhaitez utiliser un volume RWO, qui n’est pas pris en charge étant partagé entre plusieurs répliques.
Le déploiement recrée entraîne des temps d’arrêt parce que, pendant une courte période, aucune instance de votre application n’est en cours d’exécution. Cependant, votre ancien code et votre nouveau code ne s’exécutent pas en même temps.
6.4.3.1. Éditer un déploiement en utilisant la perspective Développeur Copier lienLien copié sur presse-papiers!
En utilisant la perspective Développeur, vous pouvez modifier la stratégie de déploiement, les paramètres d’image, les variables d’environnement et les options avancées pour votre déploiement.
Conditions préalables
- Dans la perspective Développeur de la console web.
- C’est vous qui avez créé une application.
Procédure
- Accédez à la vue Topology.
- Cliquez sur votre application pour voir le panneau Détails.
- Dans le menu déroulant Actions, sélectionnez Modifier le déploiement pour afficher la page Modifier le déploiement.
Il est possible d’éditer les options avancées suivantes pour votre déploiement:
Facultatif: Vous pouvez mettre fin aux déploiements en cliquant sur les déploiements de Pause, puis en sélectionnant les déploiements de Pause pour cette case à cocher de déploiement.
En mettant en pause les déploiements, vous pouvez apporter des modifications à votre application sans déclencher un déploiement. À tout moment, vous pouvez reprendre les déploiements.
- Facultatif: Cliquez sur Évoluer pour modifier le nombre d’instances de votre image en modifiant le nombre de répliques.
- Cliquez sur Save.
6.4.3.2. Démarrage d’un déploiement recréé en utilisant la perspective Développeur Copier lienLien copié sur presse-papiers!
La stratégie de déploiement peut passer de la mise à jour par défaut à une mise à jour recréée en utilisant la perspective Développeur dans la console Web.
Conditions préalables
- Assurez-vous que vous êtes dans la perspective Développeur de la console Web.
- Assurez-vous d’avoir créé une application à l’aide de la vue Ajouter et de la voir déployée dans la vue Topology.
Procédure
De passer à une stratégie de recréer la mise à jour et de mettre à niveau une application:
- Cliquez sur votre application pour voir le panneau Détails.
- Dans le menu déroulant Actions, sélectionnez Edit Deployment Config pour voir les détails de configuration de déploiement de l’application.
- Dans l’éditeur YAML, modifiez spec.strarategy.type pour Recréer et cliquez sur Enregistrer.
- Dans la vue Topologie, sélectionnez le nœud pour voir l’onglet Aperçu dans le panneau latéral. La stratégie de mise à jour est maintenant définie sur Recreate.
Dans le menu déroulant Actions, sélectionnez Démarrer le déploiement pour lancer une mise à jour à l’aide de la stratégie de recréation. La stratégie de recréation termine d’abord les pods pour l’ancienne version de l’application, puis tourne les pods pour la nouvelle version.
Figure 6.2. Créer une mise à jour
6.4.4. La stratégie personnalisée Copier lienLien copié sur presse-papiers!
La stratégie personnalisée vous permet de fournir votre propre comportement de déploiement.
Exemple de définition de stratégie personnalisée
Dans l’exemple ci-dessus, l’image du conteneur d’organisation/stratégie fournit le comportement de déploiement. Le tableau de commande optionnel remplace toute directive CMD spécifiée dans le Dockerfile de l’image. Les variables d’environnement optionnelles fournies sont ajoutées à l’environnement d’exécution du processus de stratégie.
De plus, Red Hat OpenShift Service sur AWS fournit les variables d’environnement suivantes au processus de déploiement:
La variable d’environnement | Description |
---|---|
| Le nom du nouveau déploiement, un contrôleur de réplication. |
| L’espace nom du nouveau déploiement. |
Le nombre de répliques du nouveau déploiement sera initialement nul. La responsabilité de la stratégie est de rendre le nouveau déploiement actif en utilisant la logique qui répond le mieux aux besoins de l’utilisateur.
Alternativement, utilisez l’objet CustomParams pour injecter la logique de déploiement personnalisée dans les stratégies de déploiement existantes. Fournissez une logique de script shell personnalisé et appelez le binaire openshift-déploy. Les utilisateurs n’ont pas à fournir leur image de conteneur de déploiement personnalisé; dans ce cas, le service par défaut Red Hat OpenShift sur l’image de déploiement AWS est utilisé à la place:
Il en résulte un déploiement suivant:
Lorsque le processus de stratégie de déploiement personnalisé nécessite l’accès au service Red Hat OpenShift sur AWS API ou à l’API Kubernetes, le conteneur qui exécute la stratégie peut utiliser le jeton de compte de service disponible à l’intérieur du conteneur pour l’authentification.
6.4.4.1. Éditer un déploiement en utilisant la perspective Développeur Copier lienLien copié sur presse-papiers!
En utilisant la perspective Développeur, vous pouvez modifier la stratégie de déploiement, les paramètres d’image, les variables d’environnement et les options avancées pour votre déploiement.
Conditions préalables
- Dans la perspective Développeur de la console web.
- C’est vous qui avez créé une application.
Procédure
- Accédez à la vue Topology.
- Cliquez sur votre application pour voir le panneau Détails.
- Dans le menu déroulant Actions, sélectionnez Modifier le déploiement pour afficher la page Modifier le déploiement.
Il est possible d’éditer les options avancées suivantes pour votre déploiement:
Facultatif: Vous pouvez mettre fin aux déploiements en cliquant sur les déploiements de Pause, puis en sélectionnant les déploiements de Pause pour cette case à cocher de déploiement.
En mettant en pause les déploiements, vous pouvez apporter des modifications à votre application sans déclencher un déploiement. À tout moment, vous pouvez reprendre les déploiements.
- Facultatif: Cliquez sur Évoluer pour modifier le nombre d’instances de votre image en modifiant le nombre de répliques.
- Cliquez sur Save.
6.4.5. Crochets de cycle de vie Copier lienLien copié sur presse-papiers!
Les stratégies de roulement et de recréation prennent en charge les crochets du cycle de vie, ou les crochets de déploiement, qui permettent d’injecter le comportement dans le processus de déploiement à des points prédéfinis dans la stratégie:
Exemple de crochet pré cycle de vie
pre: failurePolicy: Abort execNewPod: {}
pre:
failurePolicy: Abort
execNewPod: {}
- 1
- execNewPod est un crochet de cycle de vie à base de pod.
Chaque crochet a une politique d’échec, qui définit l’action que la stratégie doit prendre lorsqu’une défaillance de crochet est rencontrée:
| Le processus de déploiement sera considéré comme un échec si le crochet échoue. |
| L’exécution du crochet doit être récupérée jusqu’à ce qu’elle réussisse. |
| Les pannes de crochet doivent être ignorées et le déploiement doit se poursuivre. |
Les crochets ont un champ spécifique qui décrit comment exécuter le crochet. Actuellement, les crochets à base de pod sont le seul type de crochet pris en charge, spécifié par le champ execNewPod.
Crochet de cycle de vie à base de pod
Les crochets de cycle de vie à base de pod exécutent le code de crochet dans une nouvelle pod dérivée du modèle dans un objet DeploymentConfig.
L’exemple de déploiement simplifié suivant utilise la stratégie de roulement. Les déclencheurs et d’autres détails mineurs sont omis pour la brièveté:
- 1
- Le nom helloworld fait référence à spec.template.spec.containers[0].name.
- 2
- Cette commande remplace toute ENTRYPOINT définie par l’image openshift/origin-ruby-sample.
- 3
- ENV est un ensemble optionnel de variables d’environnement pour le conteneur de crochet.
- 4
- les volumes sont un ensemble facultatif de références de volume pour le récipient à crochets.
Dans cet exemple, le crochet pré sera exécuté dans un nouveau pod en utilisant l’image openshift/origin-ruby-sample du conteneur helloworld. La gousse de crochet a les propriétés suivantes:
- La commande crochet est /usr/bin/command arg1 arg2.
- Le conteneur de crochet a la variable d’environnement CUSTOM_VAR1=custom_value1.
- La politique d’échec du crochet est Abort, ce qui signifie que le processus de déploiement échoue si le crochet échoue.
- La gousse de crochet hérite du volume de données de la pod objet DeploymentConfig.
6.4.5.1. Réglage des crochets du cycle de vie Copier lienLien copié sur presse-papiers!
Il est possible de définir des crochets de cycle de vie, ou des crochets de déploiement, pour un déploiement à l’aide du CLI.
Procédure
La commande oc set déploiement-hook permet de définir le type de crochet que vous souhaitez: --pre, --mid, ou --post. À titre d’exemple, pour définir un crochet de pré-déploiement:
oc set deployment-hook dc/frontend \ --pre -c helloworld -e CUSTOM_VAR1=custom_value1 \ --volumes data --failure-policy=abort -- /usr/bin/command arg1 arg2
$ oc set deployment-hook dc/frontend \ --pre -c helloworld -e CUSTOM_VAR1=custom_value1 \ --volumes data --failure-policy=abort -- /usr/bin/command arg1 arg2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow