Déployer une application Linux sans état


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 :

  1. Accédez à la page Charges de travail dans la console Google Cloud.

    Accéder à la page Charges de travail

  2. Cliquez sur Déployer.

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

  4. 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
  5. Cliquez sur OK, puis sur Continuer.

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

  7. Sous Libellés, vous pouvez éventuellement ajouter des libellés Kubernetes au déploiement.

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

  9. Dans le menu déroulant Cluster Kubernetes, choisissez le cluster souhaité.

  10. 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 :

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 :

  1. Accédez à la page Charges de travail dans la console Google Cloud.

    Accéder à la page Charges de travail

  2. Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez inspecter.

  3. 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 ou selector de la spécification de pod à l'aide de la commande kubectl 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 :

  1. Accédez à la page Charges de travail dans la console Google Cloud.

    Accéder à la page Charges de travail

  2. Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez modifier.

  3. Cliquez sur Actions > Mise à jour progressive.

  4. 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.
  5. Sous Images de conteneur, saisissez le chemin d'accès et la version de l'image de conteneur mise à jour.

  6. 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 :

  1. Accédez à la page Charges de travail dans la console Google Cloud.

    Accéder à la page Charges de travail

  2. Dans la liste des charges de travail, cliquez sur le nom du déploiement que vous souhaitez modifier.

  3. Cliquez sur Actions > Effectuer le scaling > Modifier les instances dupliquées

  4. Saisissez le nouveau nombre d'instances dupliquées du déploiement.

  5. 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 :

  1. Accédez à la page Charges de travail dans la console Google Cloud.

    Accéder à la page Charges de travail

  2. Dans la liste des charges de travail, sélectionnez un ou plusieurs déploiements à supprimer.

  3. Cliquez sur Supprimer.

  4. Lorsque vous êtes invité à confirmer l'opération, cliquez sur Supprimer.

Étape suivante