Cette page explique comment déployer une application Linux sans état à l'aide de Google Kubernetes Engine (GKE). Vous pouvez également apprendre à déployer une application Windows sans état.
Présentation
Les applications sans état sont des applications qui ne stockent pas de données ni d'état d'application dans le cluster ou dans l'espace de stockage persistant. Au lieu de cela, les données et l'état de l'application sont conservés par le client, ce qui rend les applications sans état plus évolutives. Par exemple, une application d'interface est une application sans état : vous déployez plusieurs instances dupliquées pour augmenter sa disponibilité et procédez à une réduction lorsque la demande est faible, et les instances dupliquées n'ont pas besoin d'identités uniques.
Kubernetes utilise le contrôleur Déploiement pour déployer des applications sans état en tant que pods uniformes non uniques. Les déploiements gèrent l'état souhaité de l'application : nombre de pods devant exécuter l'application, version de l'image de conteneur à exécuter, étiquettes des pods, etc. L'état souhaité peut être modifié de manière dynamique par le biais de mises à jour de la spécification de pod du déploiement.
Les applications sans état s'opposent aux applications avec état, dans lesquelles un espace de stockage persistant permet d'enregistrer les données et des objets StatefulSet déploient des pods avec des identités uniques.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Assurez-vous que votre application conteneurisée est stockée dans un registre d'images, tel qu'Artifact Registry.
Si vous débutez avec GKE, vous devez d'abord suivre le guide de démarrage rapide, dans lequel vous allez activer l’API GKE et découvrir le fonctionnement du produit.
Anatomie d'un objet Déploiement
Voici un exemple de fichier manifeste de déploiement simple. Ce déploiement crée trois pods répliqués portant l'étiquette app=my-app
, qui exécutent l'image hello-app
stockée dans Artifact Registry :
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
run: my-app
template:
metadata:
labels:
run: my-app
spec:
containers:
- name: hello-app
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
Dans cet exemple :
.spec.replicas
: est le nombre de pods répliqués gérés par le déploiement..spec.template.metadata.labels
: est l'étiquette attribuée à chaque pod, grâce à laquelle le déploiement gère les pods..spec.template.spec
: est la spécification de pod, qui définit le fonctionnement de chaque pod.spec.containers
inclut le nom du conteneur à exécuter dans chaque pod et l'image de conteneur à exécuter.
Pour plus d'informations sur la spécification de déploiement, consultez la documentation de référence de l'API de déploiement.
Créer un déploiement
Créez un déploiement à l'aide de l'une des méthodes suivantes :
- Vous pouvez utiliser la fonctionnalité de déploiement du menu "Charges de travail" de la console Google Cloud pour créer un déploiement simple à partir d'une image de conteneur stockée dans Artifact Registry.
Vous pouvez écrire un fichier manifeste de déploiement et exécuter
kubectl apply
pour créer la ressource.
kubectl apply
Vous pouvez créer et mettre à jour de façon déclarative des déploiements à partir de fichiers manifestes avec kubectl apply
. Cette méthode conserve également les mises à jour apportées aux ressources actives sans fusionner les modifications dans les fichiers manifestes.
Pour créer un déploiement à partir de son fichier manifeste, exécutez la commande suivante :
kubectl apply -f DEPLOYMENT_FILE
Remplacez DEPLOYMENT_FILE
par le fichier manifeste, tel que config.yaml
.
Vous pouvez également utiliser kubectl apply -f DIRECTORY/
pour créer tous les objets (sauf ceux existants) définis dans des fichiers manifestes stockés dans un répertoire.
Console
Pour créer un déploiement, procédez comme suit :
Accédez à la page Charges de travail dans la console Google Cloud.
Cliquez sur add_box Déployer.
Sous Spécifier un conteneur, sélectionnez l'une des options suivantes :
Image existante du conteneur pour choisir une image du conteneur disponible dans Artifact Registry ou Docker Hub. Dans le champ Chemin de l'image, indiquez le chemin d'accès à l'image du conteneur et la version.
Nouvelle image de conteneur pour utiliser une image créée avec Cloud Source Repositories et Cloud Build.
Vous pouvez également configurer votre déploiement avec les éléments suivants :
- Des variables d'environnement à transmettre au conteneur
- Des commandes initiales pour personnaliser le point d'entrée du conteneur au moment de l'exécution
Cliquez sur OK, puis sur Continuer.
Dans la section Configuration, attribuez un nom d'application à votre déploiement et spécifiez l'espace de noms Kubernetes dans lequel le déployer.
Sous Libellés, vous pouvez éventuellement ajouter des libellés Kubernetes au déploiement.
Pour enregistrer le code YAML qui crée ce déploiement pour le mettre à jour ultérieurement, cliquez sur Afficher le contenu YAML. Copiez et collez le code YAML dans un fichier, puis enregistrez-le et cliquez sur Fermer dans la boîte de dialogue Résultats YAML.
Dans le menu déroulant Cluster Kubernetes, choisissez le cluster souhaité.
Cliquez sur Déployer.
Inspecter le déploiement
Après avoir créé un déploiement, vous pouvez appliquer l'une des méthodes suivantes pour l'inspecter :
- Vous pouvez utiliser le menu Charges de travail.
Vous pouvez utiliser
kubectl describe
etkubectl get
.
kubectl
Pour obtenir des informations détaillées sur le déploiement, exécutez la commande suivante :
kubectl describe deployment DEPLOYMENT_NAME
Remplacez DEPLOYMENT_NAME
par le nom du déploiement.
Pour répertorier les pods créés par le déploiement, exécutez la commande suivante :
kubectl get pods -l KEY=VALUE
Dans cette commande, l'indicateur -l
demande à kubectl
d'obtenir tous les pods dotés d'une étiquette de paire clé/valeur. Par exemple, si vous avez attribué l'étiquette app: my-app
au déploiement, vous devez exécuter kubectl get pods -l app=my-app
pour afficher les pods portant cette étiquette.
Pour obtenir des informations sur un pod spécifique, exécutez la commande suivante :
kubectl describe pod POD_NAME
Pour afficher le fichier manifeste d'un déploiement, exécutez la commande suivante :
kubectl get deployments DEPLOYMENT_NAME -o yaml
Cette commande affiche la configuration active du déploiement au format YAML.
Console
Pour inspecter un déploiement, procédez comme suit :
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez inspecter.
Sur la page Informations sur le déploiement, effectuez l'une des opérations suivantes :
- Cliquez sur l'onglet Historique des révisions pour afficher l'historique des révisions du déploiement.
- Cliquez sur l'onglet Événements pour afficher tous les événements liés au déploiement.
- Cliquez sur l'onglet Journaux pour afficher les journaux d'activité du conteneur dans le déploiement.
- Cliquez sur l'onglet YAML pour afficher, copier et télécharger le fichier manifeste YAML pour le déploiement.
Mettre à jour le déploiement
Vous pouvez déployer des mises à jour de la spécification de pod d'un déploiement telles que l'image, les requêtes/l'utilisation des ressources ou la configuration.
Vous pouvez mettre à jour un déploiement à l'aide des méthodes suivantes :
- Vous pouvez utiliser le menu Mettre à jour progressivement et l'éditeur YAML à partir du menu Charges de travail de Google Cloud Console.
- Vous pouvez apporter des modifications à un fichier manifeste et les appliquer avec
kubectl apply
. - Vous pouvez mettre à jour les champs
image
,resources
ouselector
de la spécification de pod à l'aide de la commandekubectl set
. Vous pouvez mettre à jour un déploiement directement à partir de votre interface système ou dans l'éditeur de votre choix à l'aide de la commande
kubectl edit
.
kubectl apply
Vous pouvez mettre à jour le déploiement en appliquant un fichier manifeste nouveau ou mis à jour. Cette pratique est utile pour apporter diverses modifications au déploiement, telles que le scaling ou la spécification d'une nouvelle version de votre application.
Pour mettre à jour un objet Déploiement, exécutez la commande suivante :
kubectl apply -f DEPLOYMENT_FILE
Remplacez DEPLOYMENT_FILE
par le fichier manifeste mis à jour.
La commande kubectl apply
applique un fichier manifeste à une ressource. Si la ressource spécifiée n'existe pas, elle est créée par la commande.
kubectl set
Vous pouvez exécuter une commande kubectl set
pour modifier l'image, les ressources (requêtes ou limites) ou les champs de sélecteur d'un déploiement.
Pour modifier l'image d'un déploiement, exécutez la commande suivante :
kubectl set image deployment DEPLOYMENT_NAME IMAGE IMAGE:TAG
Par exemple, pour mettre à jour un déploiement de la version 1.7.9 vers la version 1.9.1 de nginx
, exécutez la commande suivante :
kubectl set image deployment nginx nginx=nginx:1.9.1
Console
Pour accéder au menu Mise à jour progressive du déploiement, procédez comme suit :
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez modifier.
Cliquez sur list Actions > Mise à jour progressive.
Configurez les paramètres facultatifs suivants pour la stratégie de mise à jour :
- Nombre de secondes au minimum avant d'être prêt : spécifie le nombre minimal de secondes pendant lesquelles les pods nouvellement créés doivent rester prêts pour être considérés comme disponibles.
- Surutilisation maximale : spécifie le nombre maximal de pods pouvant être créés sur le nombre de pods souhaité. La valeur peut être un nombre absolu ou un pourcentage.
- Nombre maximal de pods indisponibles : indique le nombre maximal de pods pouvant être indisponibles pendant le processus de mise à jour. La valeur peut être un nombre absolu ou un pourcentage.
Sous Images de conteneur, saisissez le chemin d'accès et la version de l'image de conteneur mise à jour.
Cliquez sur Mettre à jour.
Restaurer une mise à jour
Vous pouvez effectuer un rollback d'une mise à jour à l'aide de la commande kubectl rollout undo
.
Vous pouvez restaurer la révision précédente d'une mise à jour en cours ou terminée :
kubectl rollout undo deployment my-deployment
Vous pouvez également revenir à une révision spécifique :
kubectl rollout undo deployment my-deployment --to-revision=3
Mettre à l'échelle un déploiement
Vous pouvez effectuer le scaling manuel d'un déploiement à l'aide de la console Google Cloud ou de la commande kubectl scale
.
Pour en savoir plus, consultez la page sur l'autoscaling des déploiements.
kubectl
kubectl scale
peut permettre à tout moment de procéder au scaling de votre déploiement.
Pour effectuer le scaling manuel d'un déploiement, exécutez la commande suivante :
kubectl scale deployment DEPLOYMENT_NAME --replicas NUMBER_OF_REPLICAS
Remplacez NUMBER_OF_REPLICAS
par le nombre souhaité de pods répliqués.
Console
Pour effectuer le scaling d'un déploiement, procédez comme suit :
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez modifier.
Cliquez sur listActions > Effectuer le scaling > Modifier les instances dupliquées
Saisissez le nouveau nombre d'instances dupliquées du déploiement.
Cliquez sur Faire évoluer.
Supprimer un déploiement
Vous pouvez supprimer un déploiement à l'aide de la console Google Cloud ou de la commande kubectl delete
.
kubectl
Pour supprimer un déploiement, exécutez la commande suivante :
kubectl delete deployment DEPLOYMENT_NAME
Console
Pour supprimer un déploiement, procédez comme suit :
Accédez à la page Charges de travail dans la console Google Cloud.
Dans la liste des charges de travail, sélectionnez un ou plusieurs déploiements à supprimer.
Cliquez sur delete Supprimer.
Lorsque vous êtes invité à confirmer l'opération, cliquez sur Supprimer.