Présentation
Dans cet atelier, vous allez configurer des PersistentVolumes et des PersistentVolumeClaims. Les PersistentVolumes sont des espaces de stockage disponibles au niveau d'un cluster Kubernetes. Les PersistentVolumeClaims permettent aux pods d'accéder aux PersistentVolumes. Sans les PersistentVolumeClaims, les pods sont généralement éphémères, c'est pourquoi nous vous conseillons de les appliquer aux données que vous souhaitez conserver après le scaling, la mise à jour ou la migration d'un pod.
Objectifs
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Créer des fichiers manifestes de PersistentVolumes (PV) et de PersistentVolumeClaims (PVC) pour les disques persistants de Google Cloud, créés de manière dynamique ou existants
- Installer des PVC de disque persistant Google Cloud en tant que volumes dans des pods
- Utiliser des fichiers manifestes pour créer des StatefulSets
- Installer des PVC de disque persistant Google Cloud en tant que volumes dans des StatefulSets
- Vérifier que les pods des StatefulSets sont bien restés connectés à leurs PV respectifs après avoir été arrêtés et redémarrés
Prérequis 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.
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 PV et des PVC
Dans cette tâche, vous allez créer un PVC, ce qui crée automatiquement un PV dans Kubernetes.
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=autopilot-cluster-1
- Configurez la complétion par tabulation dans l'outil de ligne de commande kubectl :
source <(kubectl completion bash)
- Configurez l'accès à votre cluster pour kubectl :
gcloud container clusters get-credentials $my_cluster --region $my_region
Créer et appliquer un fichier manifeste avec un PVC
La plupart du temps, il n'est pas nécessaire de configurer directement des objets PV ou de créer des disques persistants Compute Engine. À la place, vous pouvez créer un PVC, et Kubernetes va automatiquement provisionner un disque persistant pour vous.
Nous allons créer un PVC de 30 gigaoctets appelé hello-web-disk
pouvant être installé en tant que volume en lecture/écriture sur un seul nœud.
- Dans nano, créez et ouvrez un fichier nommé
pvc-demo.yaml
à l'aide de la commande suivante :
nano pvc-demo.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
pvc-demo.yaml
:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: hello-web-disk
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
-
Pour confirmer que le cluster ne contient pas de PVC, exécutez la commande suivante :
kubectl get persistentvolumeclaim
Résultat :
No resources found in default namespace.
- Pour créer le PVC, exécutez la commande suivante :
kubectl apply -f pvc-demo.yaml
- Pour afficher le PVC que vous venez de créer, exécutez la commande suivante :
kubectl get persistentvolumeclaim
Résultat partiel :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
hello-web-disk Pending standard-rwo unset 15s
Remarque : L'état "Pending" (en attente) est maintenu jusqu'à l'issue de la prochaine étape.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer des PV et des PVC
Tâche 2 : Installer et vérifier des PVC de disques persistants Google Cloud dans des pods
Dans cette tâche, vous allez rattacher le PVC de votre disque persistant à un pod. Vous allez installer le PVC en tant que volume dans le fichier manifeste du pod.
Installer le PVC dans un pod
Créez un fichier manifeste nommé pod-volume-demo.yaml
pour déployer un conteneur nginx. Associez le fichier pvc-demo-volume
au pod et installez ce volume à l'adresse /var/www/html
, à l'intérieur du conteneur nginx. Les fichiers enregistrés dans ce répertoire de conteneur seront aussi stockés dans le volume persistant, c'est-à-dire qu'ils seront conservés même si le pod et le conteneur sont désactivés et recréés.
- Dans nano, créez et ouvrez un fichier nommé
pod-volume-demo.yaml
à l'aide de la commande suivante :
nano pod-volume-demo.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
pod-volume-demo.yaml
:
kind: Pod
apiVersion: v1
metadata:
name: pvc-demo-pod
spec:
containers:
- name: frontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: pvc-demo-volume
volumes:
- name: pvc-demo-volume
persistentVolumeClaim:
claimName: hello-web-disk
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
-
Pour créer le pod avec le volume, exécutez la commande suivante :
kubectl apply -f pod-volume-demo.yaml
- Affichez la liste des pods du cluster :
kubectl get pods
Résultat :
NAME READY STATUS RESTARTS AGE
pvc-demo-pod 0/1 ContainerCreating 0 18s
Si vous réalisez cette opération juste après avoir créé le pod, vous verrez apparaître l'état "ContainerCreating" (Création du conteneur en cours) pendant l'installation du volume. Celle-ci terminée, l'état passera à "Running" (En cours d'exécution).
- Pour vérifier que le PVC est accessible depuis votre pod, vous devez accéder à son shell. Pour lancer la session de shell, exécutez la commande suivante :
kubectl exec -it pvc-demo-pod -- sh
- Pour ajouter au pod un message texte simple sous forme de page Web, saisissez les commandes suivantes :
echo Test webpage in a persistent volume!>/var/www/html/index.html
chmod +x /var/www/html/index.html
- Vérifiez que votre message apparaît dans le fichier texte :
cat /var/www/html/index.html
Résultat :
Test webpage in a persistent volume!
- Pour quitter le shell interactif du conteneur nginx, saisissez la commande suivante :
exit
Tester la persistance du PV
Vous allez maintenant supprimer le pod du cluster, vérifier si le PV a été conservé, puis redéployer le pod et vous assurer que le contenu du PV est intact.
- Supprimez pvc-demo-pod :
kubectl delete pod pvc-demo-pod
- Affichez la liste des pods du cluster :
kubectl get pods
Résultat :
No resources found in default namespace.
Le cluster ne devrait contenir aucun pod.
- Pour afficher votre PVC, exécutez la commande suivante :
kubectl get persistentvolumeclaim
Résultat partiel :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
hello-web-disk Bound pvc-8...34 30Gi RWO standard-rwo unset 22m
Votre PVC existe toujours et n'a pas été supprimé avec votre pod.
- Redéployez pvc-demo-pod :
kubectl apply -f pod-volume-demo.yaml
- Affichez la liste des pods du cluster :
kubectl get pods
Résultat :
NAME READY STATUS RESTARTS AGE
pvc-demo-pod 1/1 Running 0 15s
Cette fois, le pod va se déployer et passer à l'état "Running" (En cours d'exécution) plus rapidement, car le PV a déjà été créé.
- Pour vérifier que le PVC est toujours accessible depuis votre pod, vous devez accéder à son shell. Pour lancer la session de shell, exécutez la commande suivante :
kubectl exec -it pvc-demo-pod -- sh
- Pour vérifier que votre message apparaît toujours dans le fichier texte, exécutez la commande suivante :
cat /var/www/html/index.html
Résultat :
Test webpage in a persistent volume!
Le contenu du volume persistant a été conservé, bien que le pod ait été supprimé et recréé.
- Pour quitter le shell interactif du conteneur nginx, saisissez la commande suivante :
exit
Cliquez sur Vérifier ma progression pour valider l'objectif.
Installer des PVC de disques persistants Google Cloud dans des pods et les vérifier
Tâche 3 : Créer des StatefulSets à partir de PVC
Dans cette tâche, vous allez utiliser votre PVC avec un StatefulSet. Un StatefulSet est semblable à un Deployment, à la différence près que les pods reçoivent des identifiants uniques.
Séparer le PVC du pod
- Avant d'utiliser le PVC avec le StatefulSet, vous devez supprimer le pod auquel il est rattaché. Exécutez la commande suivante pour supprimer le pod :
kubectl delete pod pvc-demo-pod
- Vérifiez que le pod a été supprimé :
kubectl get pods
Résultat :
No resources found in default namespace.
Créer un StatefulSet
Créons un fichier manifeste statefulset-demo.yaml
. Celui-ci crée un StatefulSet comprenant un service LoadBalancer et trois instances répliquées de pod comportant chacun un conteneur nginx ainsi qu'un volumeClaimTemplate qui définit des PVC de 30 gigaoctets nommés hello "-web-disk"
Les conteneurs nginx installent le PVC hello-web-disk
à l'adresse /var/www/html
, comme dans la tâche précédente.
- Dans nano, créez et ouvrez un fichier nommé
statefulset-demo.yaml
à l'aide de la commande suivante :
nano statefulset-demo.yaml
- Une fois nano ouvert, collez la commande suivante dans le fichier
statefulset-demo.yaml
:
kind: Service
apiVersion: v1
metadata:
name: statefulset-demo-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: LoadBalancer
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-demo
spec:
selector:
matchLabels:
app: MyApp
serviceName: statefulset-demo-service
replicas: 3
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app: MyApp
spec:
containers:
- name: stateful-set-container
image: nginx
ports:
- containerPort: 80
name: http
volumeMounts:
- name: hello-web-disk
mountPath: "/var/www/html"
volumeClaimTemplates:
- metadata:
name: hello-web-disk
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 30Gi
-
Appuyez sur Ctrl+O, puis sur Entrée pour enregistrer les modifications.
-
Appuyez sur Ctrl+X pour quitter l'éditeur de texte nano.
- Pour créer le StatefulSet avec le volume, exécutez la commande suivante :
kubectl apply -f statefulset-demo.yaml
Résultat :
service "statefulset-demo-service" created
statefulset.apps "statefulset-demo" created
Vous disposez maintenant d'un StatefulSet exécuté sous un service nommé statefulset-demo-service
.
Vérifier que les pods des StatefulSets sont bien connectés
- Utilisez la commande "kubectl describe" pour afficher les détails du StatefulSet :
kubectl describe statefulset statefulset-demo
Observez l'état de l'événement à la fin du résultat. Le service et le StatefulSet ont bien été créés.
Normal SuccessfulCreate 10s statefulset-controller
Message: create Claim hello-web-disk-statefulset-demo-0 Pod statefulset-demo-0 in StatefulSet statefulset-demo success
Normal SuccessfulCreate 10s statefulset-controller
Message: create Pod statefulset-demo-0 in StatefulSet statefulset-demo successful
- Affichez la liste des pods du cluster :
kubectl get pods
Résultat :
NAME READY STATUS RESTARTS AGE
statefulset-demo-0 1/1 Running 0 6m
statefulset-demo-1 1/1 Running 0 3m
statefulset-demo-2 1/1 Running 0 2m
- Pour afficher la liste des PVC, exécutez la commande suivante :
kubectl get pvc
Résultat :
NAME STATUS VOLUME CAPACITY ACCESS
hello-web-disk Bound pvc-86117ea6-...34 30Gi RWO
hello-web-disk-st...-demo-0 Bound pvc-92d21d0f-...34 30Gi RWO
hello-web-disk-st...-demo-1 Bound pvc-9bc84d92-...34 30Gi RWO
hello-web-disk-st...-demo-2 Bound pvc-a526ecdf-...34 30Gi RWO
Le PVC original, hello-web-disk, est toujours présent, et vous pouvez désormais aussi voir les PVC individuels créés pour chaque pod du nouveau pod StatefulSet.
- Utilisez "kubectl describe" pour afficher des informations sur le premier PVC du pod StatefulSet :
kubectl describe pvc hello-web-disk-statefulset-demo-0
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer des StatefulSets à partir de PVC
Tâche 4 : Vérifier la persistance des connexions entre les volumes persistants et les pods contrôlés par des StatefulSets
Dans cette tâche, vous allez vérifier que les pods des StatefulSets sont bien restés connectés à leurs PV respectifs après avoir été arrêtés et redémarrés.
- Pour vérifier que le PVC est accessible depuis le pod, vous devez accéder à son shell. Pour lancer la session de shell, exécutez la commande suivante :
kubectl exec -it statefulset-demo-0 -- sh
- Vérifiez que le répertoire
/var/www/html
ne contient pas de fichier texte index.html
:
cat /var/www/html/index.html
- Pour ajouter au pod un message texte simple sous forme de page Web, saisissez les commandes suivantes :
echo Test webpage in a persistent volume!>/var/www/html/index.html
chmod +x /var/www/html/index.html
- Vérifiez que votre message apparaît dans le fichier texte :
cat /var/www/html/index.html
Résultat :
Test webpage in a persistent volume!
- Pour quitter le shell interactif du conteneur nginx, saisissez la commande suivante :
exit
- Supprimez le pod dans lequel vous avez mis à jour le fichier du PVC :
kubectl delete pod statefulset-demo-0
- Affichez la liste des pods du cluster :
kubectl get pods
Le StatefulSet va automatiquement redémarrer le pod statefulset-demo-0
.
Remarque : Vous devez attendre que l'état du Pod indique qu'il est à nouveau en cours d'exécution.
- Connectez-vous au shell du nouveau pod
statefulset-demo-0
:
kubectl exec -it statefulset-demo-0 -- sh
- Vérifiez que votre message apparaît toujours dans le fichier texte :
cat /var/www/html/index.html
Résultat :
Test webpage in a persistent volume!
Le StatefulSet redémarre le pod et rétablit la connexion entre le PVC dédié existant et le nouveau pod, tout en s'assurant que les données du pod ont été conservées.
- Pour quitter le shell interactif du conteneur nginx, saisissez la commande suivante :
exit
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.