6.2. Comprendre les déploiements


Les objets API Déploiement et DéploiementConfig dans Red Hat OpenShift Service sur AWS fournissent deux méthodes similaires mais différentes pour une gestion fine sur les applications utilisateur courantes. Ils sont composés des objets API distincts suivants:

  • L’objet Déploiement ou DéploiementConfig décrit l’état souhaité d’un composant particulier de l’application comme un modèle de pod.
  • Les objets de déploiement impliquent un ou plusieurs ensembles de répliques, qui contiennent un enregistrement point dans le temps de l’état d’un déploiement en tant que modèle de pod. De même, les objets DeploymentConfig impliquent un ou plusieurs contrôleurs de réplication, qui ont précédé les ensembles de répliques.
  • C) un ou plusieurs pods, qui représentent une instance d’une version particulière d’une application.

Les objets de déploiement, sauf si vous avez besoin d’une fonctionnalité ou d’un comportement spécifique fournis par les objets DeploymentConfig.

Important

Depuis Red Hat OpenShift Service sur AWS 4.14, les objets DeploymentConfig sont obsolètes. Les objets DeploymentConfig sont toujours pris en charge, mais ne sont pas recommandés pour les nouvelles installations. Il n’y aura que des problèmes critiques et liés à la sécurité.

Au lieu de cela, utilisez des objets de déploiement ou une autre alternative pour fournir des mises à jour déclaratives pour les pods.

6.2.1. Éléments constitutifs d’un déploiement

Les déploiements et les configurations de déploiement sont activés par l’utilisation d’objets API Kubernetes natives ReplicaSet et ReplicationController, respectivement, comme blocs de construction.

Les utilisateurs n’ont pas à manipuler des ensembles de répliques, des contrôleurs de réplication ou des pods appartenant aux objets Deployment ou DeploymentConfig. Les systèmes de déploiement s’assurent que les changements sont propagés de manière appropriée.

Astuce

Lorsque les stratégies de déploiement existantes ne sont pas adaptées à votre cas d’utilisation et que vous devez exécuter des étapes manuelles pendant le cycle de vie de votre déploiement, alors vous devriez envisager de créer une stratégie de déploiement personnalisée.

Les sections suivantes fournissent de plus amples détails sur ces objets.

6.2.1.1. Ensembles de répliques

A ReplicaSet est un objet API Kubernetes natif qui garantit qu’un nombre spécifié de répliques de pod s’exécute à un moment donné.

Note

Il suffit d’utiliser des ensembles de répliques si vous avez besoin d’orchestration de mise à jour personnalisée ou si vous n’avez pas besoin de mises à jour du tout. Autrement, utilisez des déploiements. Les ensembles de répliques peuvent être utilisés indépendamment, mais sont utilisés par des déploiements pour orchestrer la création de pod, la suppression et les mises à jour. Les déploiements gèrent automatiquement leurs ensembles de répliques, fournissent des mises à jour déclaratives aux pods et n’ont pas à gérer manuellement les ensembles de répliques qu’ils créent.

Ce qui suit est un exemple de définition de ReplicaSet:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend-1
  labels:
    tier: frontend
spec:
  replicas: 3
  selector: 
1

    matchLabels: 
2

      tier: frontend
    matchExpressions: 
3

      - {key: tier, operator: In, values: [frontend]}
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - image: openshift/hello-openshift
        name: helloworld
        ports:
        - containerPort: 8080
          protocol: TCP
      restartPolicy: Always
Copy to Clipboard Toggle word wrap
1
Il s’agit d’une requête d’étiquette sur un ensemble de ressources. Le résultat de matchLabels et matchExpressions sont logiquement associés.
2
Le sélecteur basé sur l’égalité pour spécifier les ressources avec des étiquettes qui correspondent au sélecteur.
3
Définir le sélecteur pour filtrer les touches. Cela sélectionne toutes les ressources avec clé égale à niveau et valeur égale à frontend.

6.2.1.2. Contrôleurs de réplication

À l’instar d’un ensemble de répliques, un contrôleur de réplication s’assure qu’un nombre spécifié de répliques d’un pod s’exécute à tout moment. Lorsque les pods sortent ou sont supprimés, le contrôleur de réplication instancie davantage jusqu’au nombre défini. De même, s’il y a plus de fonctionnement que souhaité, il supprime autant que nécessaire pour correspondre au montant défini. La différence entre un ensemble de répliques et un contrôleur de réplication est qu’un ensemble de répliques prend en charge les exigences de sélecteur basées sur des ensembles alors qu’un contrôleur de réplication ne prend en charge que les exigences de sélecteur basées sur l’égalité.

La configuration du contrôleur de réplication consiste en:

  • Le nombre de répliques souhaitées, qui peuvent être ajustées au moment de l’exécution.
  • Définition de Pod à utiliser lors de la création d’un pod répliqué.
  • D’un sélecteur pour identifier les gousses gérées.

Le sélecteur est un ensemble d’étiquettes attribuées aux pods qui sont gérées par le contrôleur de réplication. Ces étiquettes sont incluses dans la définition de Pod que le contrôleur de réplication instantanée. Le contrôleur de réplication utilise le sélecteur pour déterminer combien d’instances de la gousse sont déjà en cours d’exécution afin de s’ajuster au besoin.

Le contrôleur de réplication n’effectue pas de mise à l’échelle automatique basée sur la charge ou le trafic, car il ne suit pas non plus. Cela nécessite plutôt que son nombre de répliques soit ajusté par un auto-scaleur externe.

Note

Faites appel à un DeploymentConfig pour créer un contrôleur de réplication au lieu de créer des contrôleurs de réplication directement.

Lorsque vous avez besoin d’orchestration personnalisée ou que vous n’avez pas besoin de mises à jour, utilisez des ensembles de répliques au lieu de contrôleurs de réplication.

Ce qui suit est une définition d’un contrôleur de réplication:

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend-1
spec:
  replicas: 1  
1

  selector:    
2

    name: frontend
  template:    
3

    metadata:
      labels:  
4

        name: frontend 
5

    spec:
      containers:
      - image: openshift/hello-openshift
        name: helloworld
        ports:
        - containerPort: 8080
          protocol: TCP
      restartPolicy: Always
Copy to Clipboard Toggle word wrap
1
Le nombre d’exemplaires de la gousse à exécuter.
2
Le sélecteur d’étiquette de la gousse à exécuter.
3
C’est un modèle pour le pod que le contrôleur crée.
4
Les étiquettes sur la gousse doivent inclure celles du sélecteur d’étiquettes.
5
La longueur maximale du nom après avoir étendu n’importe quel paramètre est de 63 caractères.

6.2.2. Déploiements

Kubernetes fournit un type d’objet API native de première classe dans Red Hat OpenShift Service sur AWS appelé Déploiement. Les objets de déploiement décrivent l’état souhaité d’un composant particulier d’une application comme un modèle de pod. Les déploiements créent des ensembles de répliques, qui orchestrent les cycles de vie des pod.

À titre d’exemple, la définition de déploiement suivante crée une réplique pour mettre en place une pod hello-openshift:

Définition du déploiement

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
Copy to Clipboard Toggle word wrap

6.2.3. Déploiement des objetsConfig

Important

Depuis Red Hat OpenShift Service sur AWS 4.14, les objets DeploymentConfig sont obsolètes. Les objets DeploymentConfig sont toujours pris en charge, mais ne sont pas recommandés pour les nouvelles installations. Il n’y aura que des problèmes critiques et liés à la sécurité.

Au lieu de cela, utilisez des objets de déploiement ou une autre alternative pour fournir des mises à jour déclaratives pour les pods.

En s’appuyant sur des contrôleurs de réplication, Red Hat OpenShift Service sur AWS ajoute une prise en charge étendue du développement logiciel et du cycle de vie du déploiement avec le concept d’objets DeploymentConfig. Dans le cas le plus simple, un objet DeploymentConfig crée un nouveau contrôleur de réplication et permet de démarrer des pods.

Cependant, le service OpenShift Red Hat sur les déploiements AWS à partir d’objets DeploymentConfig offre également la possibilité de passer d’un déploiement existant d’une image à une nouvelle et de définir également des crochets à exécuter avant ou après la création du contrôleur de réplication.

Le système de déploiement DeploymentConfig fournit les capacités suivantes:

  • L’objet DeploymentConfig, qui est un modèle pour l’exécution d’applications.
  • Déclencheurs qui génèrent des déploiements automatisés en réponse à des événements.
  • Des stratégies de déploiement personnalisables par l’utilisateur pour passer de la version précédente à la nouvelle version. La stratégie s’exécute à l’intérieur d’un pod communément appelé processus de déploiement.
  • Ensemble de crochets (hameçons du cycle de vie) pour exécuter un comportement personnalisé dans différents points pendant le cycle de vie d’un déploiement.
  • La version de votre application pour prendre en charge les redémarrages manuellement ou automatiquement en cas de défaillance de déploiement.
  • L’échelle manuelle de réplication et l’autoscaling.

Lorsque vous créez un objet DeploymentConfig, un contrôleur de réplication est créé représentant le modèle de pod de l’objet DeploymentConfig. En cas de changement de déploiement, un nouveau contrôleur de réplication est créé avec le dernier modèle de pod, et un processus de déploiement s’exécute pour réduire l’ancien contrôleur de réplication et faire évoluer le nouveau.

Les instances de votre application sont automatiquement ajoutées et supprimées des équilibreurs de charge de service et des routeurs au fur et à mesure qu’ils sont créés. Aussi longtemps que votre application prend en charge l’arrêt gracieux lorsqu’elle reçoit le signal TERM, vous pouvez vous assurer que les connexions utilisateur en cours d’exécution ont une chance de compléter normalement.

L’objet Red Hat OpenShift sur AWS DeploymentConfig définit les détails suivants:

  1. Les éléments d’une définition de RéplicationController.
  2. Déclencheurs pour créer un nouveau déploiement automatiquement.
  3. La stratégie de transition entre les déploiements.
  4. Des crochets de cycle de vie.

Chaque fois qu’un déploiement est déclenché, que ce soit manuellement ou automatiquement, un pod de déploiement gère le déploiement (y compris la mise à l’échelle de l’ancien contrôleur de réplication, la mise à l’échelle du nouveau et l’exécution de crochets). Le pod de déploiement reste pour une durée indéterminée après avoir terminé le déploiement pour conserver ses journaux de déploiement. Lorsqu’un déploiement est remplacé par un autre, le contrôleur de réplication précédent est conservé pour permettre un retour facile si nécessaire.

Exemple DeploymentConfig Définition

apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
  name: frontend
spec:
  replicas: 5
  selector:
    name: frontend
  template: { ... }
  triggers:
  - type: ConfigChange 
1

  - imageChangeParams:
      automatic: true
      containerNames:
      - helloworld
      from:
        kind: ImageStreamTag
        name: hello-openshift:latest
    type: ImageChange  
2

  strategy:
    type: Rolling      
3
Copy to Clipboard Toggle word wrap

1
Le déclencheur d’un changement de configuration se traduit par un nouveau contrôleur de réplication chaque fois que des modifications sont détectées dans le modèle de pod de la configuration de déploiement.
2
Le déclenchement d’un changement d’image provoque la création d’un nouveau déploiement chaque fois qu’une nouvelle version de l’image de support est disponible dans le flux d’images nommé.
3
La stratégie Rolling par défaut permet une transition sans temps d’arrêt entre les déploiements.

Les objets de déploiement Kubernetes et le service OpenShift Red Hat sur les objets DeploymentConfig fournis par AWS sont pris en charge dans Red Hat OpenShift Service sur AWS; cependant, il est recommandé d’utiliser des objets de déploiement à moins que vous ayez besoin d’une fonctionnalité ou d’un comportement spécifique fourni par les objets DeploymentConfig.

Les sections suivantes donnent plus de détails sur les différences entre les deux types d’objets pour vous aider à décider quel type utiliser.

Important

Depuis Red Hat OpenShift Service sur AWS 4.14, les objets DeploymentConfig sont obsolètes. Les objets DeploymentConfig sont toujours pris en charge, mais ne sont pas recommandés pour les nouvelles installations. Il n’y aura que des problèmes critiques et liés à la sécurité.

Au lieu de cela, utilisez des objets de déploiement ou une autre alternative pour fournir des mises à jour déclaratives pour les pods.

6.2.4.1. Conception

Les propriétés du théorème CAP que chaque conception a choisi pour le processus de déploiement constituent une différence importante entre le déploiement et le déploiement des objetsConfig. Les objets DeploymentConfig préfèrent la cohérence, tandis que les objets de déploiement prennent la disponibilité plutôt que la cohérence.

Dans le cas des objets DeploymentConfig, si un nœud exécutant un pod de déploiement diminue, il ne sera pas remplacé. Le processus attend jusqu’à ce que le nœud revienne en ligne ou soit supprimé manuellement. La suppression manuelle du nœud supprime également le pod correspondant. Cela signifie que vous ne pouvez pas supprimer la gousse pour décoller le déploiement, car le kubelet est responsable de la suppression de la gousse associée.

Cependant, les déploiements de déploiement sont conduits par un gestionnaire de contrôleur. Le gestionnaire de contrôleur fonctionne en mode haute disponibilité sur les maîtres et utilise des algorithmes d’élection leader pour valoriser la disponibilité par rapport à la cohérence. En cas d’échec, il est possible pour d’autres maîtres d’agir sur le même déploiement en même temps, mais ce problème sera réconcilié peu de temps après l’échec.

6.2.4.2. Caractéristiques spécifiques au déploiement

Le roulement

Le processus de déploiement des objets de déploiement est piloté par une boucle de contrôleur, contrairement aux objets DeploymentConfig qui utilisent des pods de déploiement pour chaque nouveau déploiement. Cela signifie que l’objet Déploiement peut avoir autant d’ensembles de répliques actives que possible, et finalement le contrôleur de déploiement réduira tous les anciens ensembles de répliques et mettra à l’échelle le plus récent.

Les objets DeploymentConfig peuvent avoir au plus un pod de déploiement en cours d’exécution, sinon plusieurs déployeurs pourraient entrer en conflit lorsqu’ils tentent de développer ce qu’ils pensent être le plus récent contrôleur de réplication. De ce fait, seuls deux contrôleurs de réplication peuvent être actifs à tout moment. En fin de compte, cela entraîne des déploiements rapides plus rapides pour les objets de déploiement.

Échelle proportionnelle

Étant donné que le contrôleur de déploiement est la seule source de vérité pour les tailles de nouveaux et anciens ensembles de répliques appartenant à un objet de déploiement, il peut faire évoluer les déploiements en cours. Des répliques supplémentaires sont distribuées proportionnellement en fonction de la taille de chaque ensemble de répliques.

Les objets DeploymentConfig ne peuvent pas être mis à l’échelle lorsqu’un déploiement est en cours, car le contrôleur aura des problèmes avec le processus de déploiement de la taille du nouveau contrôleur de réplication.

La pause à mi-démarrage

Les déploiements peuvent être mis en pause à tout moment, ce qui signifie que vous pouvez également mettre en pause les déploiements en cours. Cependant, vous ne pouvez actuellement pas mettre en pause les pods de déploiement; si vous essayez de mettre un terme à un déploiement au milieu d’un déploiement, le processus de déploiement n’est pas affecté et se poursuit jusqu’à ce qu’il soit terminé.

Les retours automatiques

Actuellement, les déploiements ne prennent pas en charge le retour automatique à la dernière réplique déployée avec succès en cas d’échec.

Déclencheurs

Les déploiements ont un déclencheur de modification de configuration implicite en ce sens que chaque changement dans le modèle de pod d’un déploiement déclenche automatiquement un nouveau déploiement. Lorsque vous ne voulez pas de nouveaux déploiements sur les modifications de modèles de pod, arrêtez le déploiement:

$ oc rollout pause deployments/<name>
Copy to Clipboard Toggle word wrap
Crochets de cycle de vie

Les déploiements ne prennent pas encore en charge les crochets du cycle de vie.

Des stratégies personnalisées

Les déploiements ne prennent pas en charge les stratégies de déploiement personnalisées spécifiées par l’utilisateur.

Retour au début
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. Découvrez nos récentes mises à jour.

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 le Blog 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.

Theme

© 2025 Red Hat