Présentation
Cet atelier aborde les principes de base pour utiliser des fichiers manifestes de déploiement. Les fichiers manifestes contiennent les configurations nécessaires à un déploiement et pouvant être utilisées sur différents pods. Ils sont faciles à modifier.
Objectifs
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Créer des fichiers manifestes de déploiement, les déployer sur le cluster et vérifier la replanification des pods lorsque les nœuds sont désactivés
- Déclencher manuellement le scaling des pods à la hausse ou à la baisse dans les déploiements
- Déclencher un déploiement (mise à jour progressive vers une nouvelle version) et des rollbacks
- Effectuer un déploiement Canary
Préparation de l'atelier
Accéder à l'atelier
Pour chaque atelier, nous vous attribuons un nouveau projet Google Cloud et un nouvel ensemble de ressources pour une durée déterminée, sans frais.
-
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement.
Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :
- Le bouton Ouvrir la console Google Cloud
- Le temps restant
- Les identifiants temporaires que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier
-
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans la fenêtre de navigation privée si vous utilisez le navigateur Chrome).
L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.
Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.
Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
Vous trouverez également le nom d'utilisateur dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
-
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. Ne saisissez pas ceux de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
-
Accédez aux pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour afficher un menu contenant la liste des produits et services Google Cloud, cliquez sur le menu de navigation en haut à gauche, ou saisissez le nom du service ou du produit dans le champ Recherche.
Une fois la connexion initiale effectuée, le tableau de bord du projet s'affiche.
Activer Google Cloud Shell
Google Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud.
Google Cloud Shell vous permet d'accéder à vos ressources Google Cloud grâce à une ligne de commande.
-
Dans la barre d'outils située en haut à droite dans la console Cloud, cliquez sur le bouton "Ouvrir Cloud Shell".

-
Cliquez sur Continuer.
Le provisionnement et la connexion à l'environnement prennent quelques instants. Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Par exemple :

gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
Résultat :
Credentialed accounts:
- @.com (active)
Exemple de résultat :
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project =
Exemple de résultat :
[core]
project = qwiklabs-gcp-44776a13dea667a6
Remarque : Pour consulter la documentation complète sur gcloud, accédez au guide de présentation de la gcloud CLI.
Tâche 1 : Créer des fichiers manifestes de déploiement et les déployer sur le cluster
Dans cette tâche, vous allez créer un fichier manifeste de déploiement pour un pod du cluster.
Se connecter au cluster GKE de l'atelier
- Dans Cloud Shell, définissez les variables d'environnement correspondant à la zone et au nom du cluster en saisissant la commande suivante :
export my_region={{{ project_0.default_region | REGION }}}
export my_cluster=dev-cluster
- Dans Cloud Shell, configurez la complétion par tabulation pour kubectl :
source <(kubectl completion bash)
- Dans Cloud Shell, configurez l'accès de l'outil de ligne de commande kubectl à votre cluster en saisissant la commande suivante :
gcloud container clusters get-credentials $my_cluster --region $my_region
Créer un fichier manifeste de déploiement
Vous allez créer un déploiement à l'aide d'un exemple de fichier manifeste de déploiement nommé nginx-deployment.yaml. Ce déploiement est configuré pour exécuter trois instances répliquées de pod. Chaque pod qui écoute sur le port TCP 80 ne comprend qu'un seul conteneur nginx.
- Dans nano, créez et ouvrez un fichier nommé
nginx-deployment.yaml à l'aide de la commande suivante :
nano nginx-deployment.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
nginx-deployment.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.0
ports:
- containerPort: 80
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
-
Exécutez la commande suivante pour déployer votre fichier manifeste :
kubectl apply -f ./nginx-deployment.yaml
- Pour afficher la liste des déploiements, exécutez la commande suivante :
kubectl get deployments
Le résultat doit ressembler à cet exemple.
Résultat :
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 0/3 3 0 3s
- Patientez quelques minutes, puis répétez la commande jusqu'à ce que le nombre de déploiements EN COURS indiqué par la commande corresponde au nombre de déploiements VOULUS.
Le résultat final doit ressembler à cet exemple.
Résultat :
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 42s
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer et déployer le fichier manifeste nginx-deployment
Tâche 2 : Effectuer manuellement un scaling à la hausse ou à la baisse du nombre de pods dans les déploiements
Parfois, vous voudrez arrêter une instance de pod ou, au contraire, vous voudrez exécuter dix pods. Dans Kubernetes, vous pouvez effectuer le scaling d'un pod donné, afin d'ajuster le nombre de ses instances. Pour arrêter ces instances, il suffit d'effectuer un scaling à zéro instance.
Dans cette tâche, vous allez effectuer un scaling à la hausse et à la baisse des pods dans la console Google Cloud et Cloud Shell.
Effectuer le scaling à la hausse et à la baisse des pods dans la console
- Basculez vers l'onglet de la console Cloud Console.
- Dans le menu de navigation (
), cliquez sur Kubernetes Engine > Charges de travail.
- Cliquez sur nginx-deployment (votre déploiement) pour ouvrir la page d'informations sur le déploiement.
- En haut de la page, cliquez sur Actions > Scaling > Modifier les instances répliquées.
- Saisissez 1, puis cliquez sur Scaling.
Cela provoque le scaling de votre cluster à la baisse. L'état du pod se met à jour sous Pods gérés. Vous devrez peut-être cliquer sur Actualiser.
Effectuer un scaling des pods à la hausse ou à la baisse dans le shell
- Revenez à l'onglet Cloud Shell du navigateur.
- Dans Cloud Shell, exécutez la commande suivante pour afficher la liste des pods du déploiement :
kubectl get deployments
Résultat :
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 1/1 1 1 3m
- Pour effectuer le scaling à la hausse du pod en revenant à trois instances répliquées, exécutez la commande suivante :
kubectl scale --replicas=3 deployment nginx-deployment
- Pour afficher la liste des pods du déploiement, exécutez la commande suivante :
kubectl get deployments
Résultat :
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 4m
Tâche 3 : Déclencher un déploiement et un rollback
Seule la modification du modèle de déploiement du pod (par exemple .spec.template) peut déclencher un déploiement. Il peut s'agir, par exemple, de la mise à jour des étiquettes ou des images de conteneurs. Les autres types de mise à jour (par exemple, le scaling du déploiement) ne déclenchent pas de déploiement.
Dans cette tâche, vous allez déclencher un déploiement, puis un rollback.
Déclencher un déploiement
- Pour mettre à jour la version de nginx dans le déploiement, exécutez la commande suivante :
kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.28.0
Cela permet de mettre à jour l'image de conteneur stockée dans votre déploiement vers la version v1.28.0 de nginx.
- Pour annoter le déploiement avec des détails sur la modification, exécutez la commande suivante :
kubectl annotate deployment nginx-deployment kubernetes.io/change-cause="version change to 1.28.0" --overwrite=true
- Exécutez la commande suivante pour afficher l'état du déploiement :
kubectl rollout status deployment.v1.apps/nginx-deployment
Le résultat doit ressembler à cet exemple.
Résultat :
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 1 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 2 out of 3 new replicas updated...
Waiting for rollout to finish: 1 old replicas pending termination...
Waiting for rollout to finish: 1 old replicas pending termination...
deployment "nginx-deployment" successfully rolled out
- Récupérez la liste des déploiements pour vérifier la modification :
kubectl get deployments
Le résultat doit ressembler à cet exemple.
Résultat :
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 6m
Cliquez sur Vérifier ma progression pour valider l'objectif.
Mettre à jour la version de nginx dans le déploiement
- Affichez l'historique du déploiement :
kubectl rollout history deployment nginx-deployment
Le résultat doit ressembler à cet exemple. Il est possible qu'il ne soit pas identique.
Résultat :
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1
2 version change to 1.28.0
Déclencher un rollback du déploiement
La commande kubectl rollout undo vous permet de procéder au rollback du déploiement d'un objet.
- Pour effectuer un rollback vers la version précédente du déploiement nginx, exécutez la commande suivante :
kubectl rollout undo deployments nginx-deployment
- Affichez l'historique du déploiement mis à jour :
kubectl rollout history deployment nginx-deployment
Le résultat doit ressembler à cet exemple. Il est possible qu'il ne soit pas identique.
Résultat :
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
2 version change to 1.28.0
3
Remarque : La modification la plus récente est vide pour CHANGE-CAUSE, car nous n'avons pas utilisé la commande kubectl annotate.
- Affichez les détails de la dernière révision du déploiement :
kubectl rollout history deployment/nginx-deployment --revision=3
Le résultat doit ressembler à cet exemple. Il peut ne pas être identique, mais il indique que la révision est revenue à la version nginx:1.27.0.
Résultat :
deployments "nginx-deployment" with revision #3
Pod Template:
Labels: app=nginx
pod-template-hash=3123191453
Containers:
nginx:
Image: nginx:1.27.0
Port: 80/TCP
Host Port: 0/TCP
Environment:
Mounts:
Volumes:
Tâche 4 : Définir le type de service dans le fichier manifeste
Dans cette tâche, vous allez créer et vérifier un service qui contrôle le trafic entrant vers une application. Lorsque vous configurez les services, vous pouvez choisir les types ClusterIP, NodePort ou LoadBalancer. Dans cet atelier, vous allez configurer un type de service LoadBalancer.
Définir des types de services dans le fichier manifeste
Nous vous avons fourni un fichier manifeste nommé service-nginx.yaml, qui déploie un type de service LoadBalancer. Ce service est configuré pour distribuer le trafic entrant sur le port TCP 60000 vers le port 80 de tous les conteneurs portant l'étiquette app: nginx.
- Dans nano, créez et ouvrez un fichier nommé
service-nginx.yaml à l'aide de la commande suivante :
nano service-nginx.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
service-nginx.yaml :
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
-
Dans Cloud Shell, exécutez la commande suivante pour déployer votre fichier manifeste :
kubectl apply -f ./service-nginx.yaml
Ce fichier manifeste définit un service et l'applique aux pods qui correspondent au sélecteur. Dans le cas présent, le manifeste est appliqué au conteneur nginx que vous avez déployé dans la tâche 1. Ce service s'applique également à tous les pods portant l'étiquette app: nginx, y compris ceux qui sont créés après le service.
Vérifier la création du type de service LoadBalancer
- Exécutez la commande suivante pour afficher les détails du service nginx :
kubectl get service nginx
Le résultat doit ressembler à cet exemple.
Résultat :
NAME Type CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.X.X.X X.X.X.X 60000:31798/TCP 1m
- Lorsque l'adresse IP externe s'affiche, ouvrez la page
http://[EXTERNAL_IP]:60000/ dans un nouvel onglet du navigateur pour constater que le serveur est livré via l'équilibrage de charge réseau.
Remarque : Le remplissage du champ ExternalIP pour votre service peut prendre quelques secondes. Cela est normal. Il vous suffit d'exécuter de nouveau la commande kubectl get services nginx à quelques secondes d'intervalle jusqu'à ce que le champ soit renseigné.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Déployer le fichier manifeste qui déploie le type de service LoadBalancer
Tâche 5 : Effectuer un déploiement Canary
Un déploiement Canary est un déploiement distinct qui sert à tester une nouvelle version de votre application. Un seul service cible à la fois le déploiement Canary et les déploiements standards. Il peut diriger un sous-ensemble d'utilisateurs vers la version Canary, afin de limiter les risques liés aux nouvelles versions.
Dans cette tâche, vous allez créer un déploiement Canary pour déployer un seul pod exécutant une version de nginx plus récente que celle de votre déploiement principal.
- Dans nano, créez et ouvrez un fichier nommé
nginx-canary.yaml à l'aide de la commande suivante :
nano nginx-canary.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
nginx-canary.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-canary
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
track: canary
Version: 1.28.0
spec:
containers:
- name: nginx
image: nginx:1.28.0
ports:
- containerPort: 80
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
Le fichier manifeste du service nginx que vous avez déployé dans la tâche précédente utilise un sélecteur d'étiquettes pour cibler les pods portant l'étiquette app: nginx. Le déploiement standard et le nouveau déploiement Canary ont tous les deux l'étiquette app: nginx. Le service répartira les connexions entrantes entre les pods de déploiement standard et les pods de déploiement Canary. Le déploiement Canary présente moins d'instances répliquées (pods) que le déploiement standard. Il est donc accessible à moins d'utilisateurs que le déploiement standard.
- Créez le déploiement Canary à partir du fichier de configuration :
kubectl apply -f ./nginx-canary.yaml
- Une fois le déploiement terminé, vérifiez que les déploiements nginx et nginx-canary sont présents :
kubectl get deployments
- Dans le navigateur, revenez à l'onglet connecté à l'adresse IP externe du service LoadBalancer et actualisez la page. La page de bienvenue standard
Welcome to nginx doit toujours être affichée.
- Revenez à Cloud Shell et ramenez le déploiement principal à zéro instance répliquée :
kubectl scale --replicas=0 deployment nginx-deployment
- Vérifiez que la seule instance répliquée en cours d'exécution est désormais le déploiement Canary :
kubectl get deployments
- Dans le navigateur, revenez à l'onglet connecté à l'adresse IP externe du service LoadBalancer et actualisez la page. La page de bienvenue standard
Welcome to nginx s'affiche toujours et indique que le service équilibre automatiquement le trafic vers le déploiement Canary.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer un déploiement Canary
Affinité de session
La configuration de service utilisée dans le cadre de l'atelier ne garantit pas que toutes les requêtes reçues d'un même client se connecteront toujours au même pod. Chaque requête est traitée séparément et peut se connecter soit au déploiement standard nginx, soit au déploiement nginx-canary.
La possibilité de passer d'une version à l'autre peut entraîner des problèmes si des modifications importantes sont apportées aux fonctionnalités de la version Canary. Pour éviter cela, vous pouvez définir le champ sessionAffinity sur ClientIP dans la spécification du service, si vous avez besoin que la première requête d'un client détermine le pod à utiliser pour toutes les connexions suivantes.
Exemple :
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
sessionAffinity: ClientIP
selector:
app: nginx
ports:
- protocol: TCP
port: 60000
targetPort: 80
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
- 1 étoile = très insatisfait(e)
- 2 étoiles = insatisfait(e)
- 3 étoiles = ni insatisfait(e), ni satisfait(e)
- 4 étoiles = satisfait(e)
- 5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.