Cette page décrit les objets de déploiement Kubernetes et leur utilisation dans Google Kubernetes Engine.
Qu'est-ce qu'un déploiement ?
Les déploiements représentent un ensemble de pods identiques sans identités uniques. Un déploiement exécute plusieurs instances dupliquées de votre application et remplace automatiquement les instances qui échouent ou ne répondent plus. De cette manière, les déploiements permettent de s’assurer qu’une ou plusieurs instances de votre application sont disponibles pour répondre aux demandes des utilisateurs. Les déploiements sont gérés par le contrôleur de déploiement Kubernetes.
Les déploiements utilisent un modèle de pod qui contient une spécification pour ses pods. La spécification du pod détermine l'apparence de chaque pod : les applications à exécuter dans ses conteneurs, les volumes que les pods doivent monter, ses libellés, etc.
Lorsqu'un modèle de pod de déploiement est modifié, de nouveaux pods sont automatiquement créés un à un.
Schémas d'utilisation
Les déploiements conviennent parfaitement aux applications sans état qui utilisent des volumes ReadOnlyMany ou ReadWriteMany montés sur plusieurs instances dupliquées, mais ne conviennent pas aux charges de travail utilisant des volumes ReadWriteOnce. Pour les applications avec état utilisant des volumes ReadWriteOnce, utilisez des objets StatefulSet. Les objets StatefulSet sont conçus pour déployer des applications avec état et des applications en cluster qui sauvegardent des données sur un espace de stockage persistant, comme des disques persistants Compute Engine. Les StatefulSets conviennent au déploiement de Kafka, MySQL, Redis, ZooKeeper et d'autres applications nécessitant des identités uniques et persistantes et des noms d'hôte stables.
Créer des déploiements
Vous pouvez créer un déploiement en utilisant les commandes kubectl apply
ou kubectl create
.
Une fois créé, le déploiement garantit que le nombre souhaité de pods est en cours d'exécution et disponible à tout moment. Le déploiement remplace automatiquement les pods qui échouent ou sont évincés de leurs nœuds.
Voici un exemple de fichier manifeste de déploiement au format YAML :
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Dans cet exemple :
- Un déploiement nommé
nginx
est créé, indiqué par le champmetadata: name
. - Le déploiement crée trois pods répliqués, indiqués par le champ
replicas
. - Le modèle de pod, ou le champ
spec: template
, indique que ses pods sont libellésapp: nginx
. - La spécification du modèle de pod, ou du champ
template: spec
, indique que les pods exécutent un conteneur,nginx
, qui exécute l'image Docker Hubnginx
dans sa version 1.7.9. - Le déploiement ouvre le port 80 pour une utilisation par les pods.
Pour en savoir plus sur les spécifications du déploiement, consultez la documentation de l'API Kubernetes.
En résumé, le modèle de pod contient les instructions suivantes pour les pods créés par ce déploiement :
- Chaque pod est libellé
app: nginx
. - Créez un conteneur et nommez-le
nginx
. - Exécutez l'image
nginx
dans sa version1.7.9
. - Ouvrez le port
80
pour envoyer et recevoir du trafic.
Pour plus d'informations sur la création de déploiements, reportez-vous à la section Créer un déploiement.
Mettre à jour des déploiements
Vous pouvez mettre à jour un déploiement en apportant des modifications à la spécification du modèle de pod du déploiement. Les modifications apportées au champ de spécification déclenchent automatiquement le déploiement de la mise à jour. Vous pouvez utiliser kubectl
, l'API Kubernetes ou le menu des charges de travail GKE dans Google Cloud Console.
Par défaut, lorsqu'un déploiement déclenche une mise à jour, le déploiement arrête les pods, réduit progressivement le nombre de pods à zéro, puis draine et met fin aux pods. Ensuite, le déploiement utilise le modèle de pod mis à jour pour générer de nouveaux pods.
Les anciens pods ne sont supprimés que lorsqu'un nombre suffisant de nouveaux pods sont en cours d'exécution et les nouveaux pods ne sont pas créés tant qu'un nombre suffisant d'anciens pods n'a pas été supprimé.
Pour voir dans quel ordre les pods sont déployés et supprimés, vous pouvez exécuter la commande kubectl describe deployments
.
Les déploiements peuvent garantir que le nombre d'instances dupliquées en cours d'exécution est au minimum égal au nombre souhaité moins une instance, avec au maximum un pod indisponible. De même, les déploiements peuvent garantir que le nombre d'instances dupliquées en cours d'exécution est au maximum égal au nombre souhaité plus une instance, avec au maximum un pod en cours d’exécution de plus que le nombre souhaité.
Vous pouvez effectuer un rollback de la mise à jour à l'aide de la commande kubectl rollout undo
. Vous pouvez également utiliser kubectl rollout pause
pour interrompre temporairement un déploiement.
Gérer les déploiements
Voici une liste des tâches de gestion courantes pour les déploiements :
- Inspecter un déploiement
- Procéder au scaling d'un déploiement
- Procéder à l'autoscaling d'un déploiement à l'aide d'un objet
HorizontalPodAutoscaler
- Supprimer un déploiement
Statut et cycle de vie
Les déploiements peuvent se trouver dans l'un des trois états au cours de leur cycle de vie : en progression, terminé ou en échec.
Un état progression indique que le déploiement est en train d'exécuter ses tâches, telles que le déploiement ou la mise à l'échelle de ses pods.
Un état terminé indique que le déploiement a terminé ses tâches avec succès, que tous ses pods sont disponibles et qu'ils s'exécutent avec la dernière spécification, et qu'aucun ancien pod n'est en cours d'exécution.
Un état d'échec indique que le déploiement a rencontré un ou plusieurs problèmes qui l'empêchent d'exécuter ses tâches. Certaines causes incluent des quotas ou des autorisations insuffisants, des erreurs d'extraction d'image, des plages limites ou des erreurs d'exécution. Pour rechercher les causes de l'échec d'un déploiement, vous pouvez exécuter kubectl get deployment [DEPLOYMENT+NAME] -o yaml
et examiner les messages dans le champ status: conditions
.
Vous pouvez surveiller la progression d'un déploiement ou vérifier son état à l'aide de la commande kubectl rollout status
.
Étape suivante
- Apprenez à déployer une application sans état.
- Apprenez-en plus sur les pods.
- Lisez les informations à propos des déploiements dans la documentation de Kubernetes.
- Apprenez-en plus sur Kubernetes.