arrow_back

Exécuter une base de données MongoDB dans Kubernetes avec les StatefulSets

Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Exécuter une base de données MongoDB dans Kubernetes avec les StatefulSets

Lab 1 heure universal_currency_alt 5 crédits show_chart Intermédiaire
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Nous avons développé cet atelier avec notre partenaire MongoDB. Si vous avez accepté de recevoir les actualités sur les produits, les annonces et les offres sur la page de profil de votre compte, il est possible que vos informations personnelles soient partagées avec MongoDB, le collaborateur d'atelier.

GSP022

Google Cloud – Ateliers adaptés au rythme de chacun

Présentation

Kubernetes est un outil d'orchestration de conteneurs Open Source qui gère les aspects complexes de l'exécution des applications conteneurisées. Vous pouvez exécuter des applications Kubernetes avec Kubernetes Engine, un service de calcul Google Cloud qui offre une grande variété d'options de personnalisation et d'intégration. Dans cet atelier, vous allez vous faire la main avec Kubernetes et apprendre à configurer une base de données MongoDB avec un StatefulSet. Exécuter une application avec état (une base de données) sur un service sans état (conteneur) peut sembler contradictoire. Toutefois, après quelques exercices pratiques dans cet atelier, vous découvrirez rapidement que ce n'est pas le cas. En fait, en utilisant quelques outils Open Source, vous découvrirez comment Kubernetes est parfaitement compatible avec des services sans état.

Objectifs de l'atelier

Dans cet atelier, vous allez apprendre à réaliser les opérations suivantes :

  • Déployer un cluster Kubernetes, un service sans adresse IP de cluster et un StatefulSet
  • Connecter un cluster Kubernetes à un ensemble d'instances répliquées MongoDB
  • Augmenter et réduire le nombre de membres d'ensembles d'instances répliquées
  • Supprimer les fichiers de l'atelier et arrêter les services ci-dessus

Prérequis

Cet atelier est d'un niveau avancé. Une bonne connaissance de Kubernetes ou des applications en conteneur est conseillée. Une expérience de Google Cloud Shell/SDK et de MongoDB est également recommandée. Si vous souhaitez vous familiariser avec ces services, consultez les ateliers suivants :

Lorsque vous êtes prêt, faites défiler la page vers le bas pour passer à la configuration de l'environnement de l'atelier.

Préparation

Avant de cliquer sur le bouton "Démarrer l'atelier"

Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Démarrer l'atelier, indique combien de temps les ressources Google Cloud resteront accessibles.

Cet atelier pratique vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Nous vous fournissons des identifiants temporaires pour vous connecter à Google Cloud le temps de l'atelier.

Pour réaliser cet atelier :

  • vous devez avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome) ;
Remarque : Ouvrez une fenêtre de navigateur en mode incognito/navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le temporaire étudiant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
  • vous disposez d'un temps limité ; une fois l'atelier commencé, vous ne pouvez pas le mettre en pause.
Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier afin d'éviter que des frais supplémentaires ne vous soient facturés.

Démarrer l'atelier et se connecter à la console Google Cloud

  1. 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
    • Le temps restant
    • Les identifiants temporaires que vous devez utiliser pour cet atelier
    • Des informations complémentaires vous permettant d'effectuer l'atelier
  2. Cliquez sur Ouvrir la console Google. 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.
  3. Si nécessaire, copiez le nom d'utilisateur inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue Se connecter. Cliquez sur Suivant.

  4. Copiez le mot de passe inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue de bienvenue. Cliquez sur Suivant.

    Important : Vous devez utiliser les identifiants fournis dans le panneau de gauche. Ne saisissez pas vos identifiants Google Cloud Skills Boost. Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
  5. 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 aux essais offerts.

Après quelques instants, la console Cloud s'ouvre dans cet onglet.

Remarque : Vous pouvez afficher le menu qui contient la liste des produits et services Google Cloud en cliquant sur le menu de navigation en haut à gauche. Icône du menu de navigation

Activer Cloud Shell

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. Cloud Shell vous permet d'accéder via une ligne de commande à vos ressources Google Cloud.

  1. Cliquez sur Activer Cloud Shell Icône Activer Cloud Shell en haut de la console Google Cloud.

Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Le résultat contient une ligne qui déclare YOUR_PROJECT_ID (VOTRE_ID_PROJET) pour cette session :

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

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.

  1. (Facultatif) Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
  1. Cliquez sur Autoriser.

  2. Vous devez à présent obtenir le résultat suivant :

Résultat :

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (Facultatif) Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project

Résultat :

[core] project = <ID_Projet>

Exemple de résultat :

[core] project = qwiklabs-gcp-44776a13dea667a6 Remarque : Pour consulter la documentation complète sur gcloud, dans Google Cloud, accédez au guide de présentation de la gcloud CLI.

Tâche 1 : Définir une zone de calcul

Tout au long de cet atelier, vous allez utiliser l'outil de ligne de commande gcloud pour provisionner nos services.

  • Avant de créer notre cluster Kubernetes, nous devrons définir une zone de calcul afin que les machines virtuelles de notre cluster soient toutes créées dans la même région. Pour ce faire, nous pouvons utiliser la commande gcloud config set. Exécutez la commande suivante dans votre environnement Cloud Shell pour définir la zone sur  :
gcloud config set compute/zone {{{project_0.default_zone | ZONE}}} Remarque : Pour en savoir plus sur les régions et les zones, consultez le guide Régions et zones.

Tâche 2 : Créer un cluster

Maintenant que notre zone est définie, nous allons créer un cluster de conteneurs.

  • Exécutez la commande suivante pour instancier un cluster nommé hello-world :
gcloud container clusters create hello-world --num-nodes=2

Cette commande crée un cluster avec deux nœuds ou machines virtuelles. Vous pouvez configurer des indicateurs supplémentaires pour cette commande afin de modifier le nombre de nœuds, les autorisations par défaut et d'autres variables. Pour en savoir plus, consultez la documentation de référence sur gcloud container clusters create.

Le lancement du cluster peut prendre quelques minutes. Une fois le lancement terminé, vous devriez obtenir un résultat semblable à celui-ci :

NAME Location MATER_VERSION MASTER_IP ... hello-world {{{project_0.default_zone | ZONE}}} 1.9.7-gke.3 35.184.131.251 ...

Cliquez sur Vérifier ma progression pour valider l'objectif.

Créer un cluster

Tâche 3 : Configurer

Maintenant que notre cluster est opérationnel, il est temps de l'intégrer à MongoDB. Nous allons utiliser un ensemble d'instances répliquées afin de garantir la disponibilité élevée et la redondance de nos données, qui sont essentielles pour l'exécution des applications de production.

Avant de nous lancer, nous allons effectuer les opérations suivantes :

  1. Exécutez la commande suivante pour cloner l'ensemble d'instances répliquées MongoDB/Kubernetes à partir du dépôt GitHub :
gsutil -m cp -r gs://spls/gsp022/mongo-k8s-sidecar .
  1. Une fois le clonage effectué, accédez au répertoire StatefulSet à l'aide de la commande suivante :
cd ./mongo-k8s-sidecar/example/StatefulSet/

Après avoir vérifié que les fichiers ont été téléchargés et que vous avez accédé au répertoire approprié, vous êtes prêt à créer une StorageClass Kubernetes.

Créer la StorageClass

Une StorageClass indique à Kubernetes le type de stockage que vous voulez utiliser pour les nœuds de base de données. Sur Google Cloud, deux options de stockage sont disponibles : SSD et disques durs.

Si vous examinez le répertoire StatefulSet (à l'aide de la commande ls), vous pouvez y voir les fichiers de configuration SSD et HDD à la fois pour Azure et Google Cloud.

  1. Exécutez la commande suivante pour examiner le fichier googlecloud_ssd.yaml :
cat googlecloud_ssd.yaml

Résultat :

kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: name: fast provisioner: kubernetes.io/gce-pd parameters: type: pd-ssd

Cette configuration crée une nouvelle StorageClass appelée "fast" qui repose sur des volumes SSD.

  1. Exécutez la commande suivante pour déployer la StorageClass :
kubectl apply -f googlecloud_ssd.yaml

Maintenant que la StorageClass est configurée, notre StatefulSet peut demander un volume qui sera automatiquement créé.

Cliquez sur Vérifier ma progression pour valider l'objectif.

Créer la StorageClass

Tâche 4 : Déployer le service sans adresse IP de cluster et le StatefulSet

Rechercher et inspecter les fichiers

  1. Avant de découvrir plus en détail en quoi consistent le service sans adresse IP de cluster et les StatefulSets, nous allons ouvrir le fichier de configuration (mongo-statefulset.yaml) qui les contient :
nano mongo-statefulset.yaml

Vous devez obtenir le résultat suivant (sans les pointeurs vers le service sans adresse IP de cluster et le contenu StatefulSet) :

apiVersion: v1 <----------- Headless Service configuration kind: Service metadata: name: mongo labels: name: mongo spec: ports: - port: 27017 targetPort: 27017 clusterIP: None selector: role: mongo --- apiVersion: apps/v1 <------- StatefulSet configuration kind: StatefulSet metadata: name: mongo spec: serviceName: "mongo" replicas: 3 selector: matchLabels: role: mongo template: metadata: labels: role: mongo environment: test spec: terminationGracePeriodSeconds: 10 containers: - name: mongo image: mongo command: - mongod - "--replSet" - rs0 - "--smallfiles" - "--noprealloc" ports: - containerPort: 27017 volumeMounts: - name: mongo-persistent-storage mountPath: /data/db - name: mongo-sidecar image: cvallance/mongo-k8s-sidecar env: - name: MONGO_SIDECAR_POD_LABELS value: "role=mongo,environment=test" volumeClaimTemplates: - metadata: name: mongo-persistent-storage annotations: volume.beta.kubernetes.io/storage-class: "fast" spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 50Gi
  1. Supprimez les options suivantes du fichier (lignes 49 et 50) :
- "--smallfiles" - "--noprealloc"
  1. Assurez-vous que cette section de votre fichier se présente comme suit :
containers: - name: mongo image: mongo command: - mongod - "--replSet" - rs0 ports: - containerPort: 27017 volumeMounts: - name: mongo-persistent-storage mountPath: /data/db
  1. Quittez l'éditeur nano avec le raccourci CTRL+XYENTRÉE.

Présentation du service sans adresse IP de cluster

La première section de mongo-statefulset.yaml renvoie à un service sans adresse IP de cluster. Dans la terminologie Kubernetes, un service décrit des stratégies ou des règles pour accéder à des pods spécifiques. En résumé, un service sans adresse IP de cluster est un service qui n'impose pas l'équilibrage de charge. Combiné à des StatefulSet, il nous fournit des DNS individuels pour accéder à nos pods, et ainsi un moyen pour établir individuellement la connexion avec l'ensemble de nos nœuds MongoDB. Dans le fichier yaml, vous pouvez vous assurer que le service est sans adresse IP de cluster en vérifiant que le champ clusterIP est défini sur None (Sans).

Présentation de la configuration StatefulSet

La configuration StatefulSet constitue la seconde section de mongo-statefulset.yaml. C'est le principe de base de cette application : c'est la charge de travail qui exécute MongoDB et qui orchestre vos ressources Kubernetes. En examinant le fichier yaml, nous constatons que la première section décrit l'objet StatefulSet. Ensuite, la section "Metadata" (Métadonnées) définit les libellés et le nombre d'instances répliquées.

La spécification du pod. terminationGracePeriodSeconds ferme alors le pod en douceur lorsque vous réduisez le nombre d'instances répliquées. C'est à ce stade que la configuration des deux conteneurs intervient. Le premier exécute MongoDB avec des indicateurs de ligne de commande qui configurent le nom de l'ensemble d'instances répliquées. Il installe également le volume de stockage persistant dans /data/db : l'emplacement où MongoDB enregistre ses données. Le deuxième conteneur exécute le side-car. Ce conteneur side-car va configurer automatiquement l'ensemble d'instances répliquées MongoDB. Comme indiqué précédemment, un "sidecar" est un conteneur auxiliaire qui aide le conteneur principal à traiter ses tâches.

Enfin, la dernière section présente la configuration des volumeClaimTemplates, qui utilisent la classe de stockage précédemment créée pour le provisionnement du volume. Cela permet de provisionner un disque de 100 Go pour chaque instance dupliquée MongoDB.

Déployer le service sans adresse IP de cluster et le StatefulSet

Maintenant que nous savons en quoi consistent un service sans adresse IP de cluster et un StatefulSet, nous pouvons passer à l'étape suivante : leur déploiement.

  • Les deux étant empaquetés dans mongo-statefulset.yaml, nous pouvons les exécuter tous les deux à l'aide de la commande suivante :
kubectl apply -f mongo-statefulset.yaml

Vous devez obtenir le résultat suivant :

service/mongo created statefulset.apps/mongo created

Cliquez sur Vérifier ma progression pour valider l'objectif.

Déployer le service sans adresse IP de cluster et le StatefulSet

Tâche 5 : Se connecter à l'ensemble d'instances répliquées MongoDB

Maintenant que nous avons un cluster en cours d'exécution et que notre ensemble d'instances répliquées est déployé, nous pouvons nous y connecter.

Attendre le déploiement complet de l'ensemble d'instances répliquées MongoDB

L'objet StatefulSet Kubernetes déploie chaque pod tour à tour. Il attend que le membre de l'ensemble d'instances répliquées MongoDB démarre complètement et crée le disque de sauvegarde avant de lancer le membre suivant.

  • Exécutez la commande suivante pour vérifier que les trois membres sont opérationnels :
kubectl get statefulset

Résultat : les trois membres sont opérationnels :

NAME READY AGE mongo 3/3 103s

Lancer et afficher l'ensemble d'instances répliquées MongoDB

À ce stade, vous devez avoir trois pods créés dans votre cluster. Ils correspondent aux trois nœuds de votre ensemble d'instances répliquées MongoDB.

  1. Exécutez la commande suivante pour les afficher :
kubectl get pods

Résultat :

NAME READY STATUS RESTARTS AGE mongo-0 2/2 Running 0 3m mongo-1 2/2 Running 0 3m mongo-2 2/2 Running 0 3m
  1. Attendez que les trois membres soient créés avant de poursuivre.

  2. Connectez-vous au premier membre de l'ensemble d'instances répliquées :

kubectl exec -ti mongo-0 -- mongosh

Vous disposez maintenant d'un environnement REPL connecté à MongoDB.

  1. Nous allons maintenant instancier l'ensemble d'instances répliquées avec une configuration par défaut à l'aide de la commande rs.initiate() :
rs.initiate()
  1. Imprimez la configuration de l'ensemble d'instances répliquées, puis exécutez la commande rs.conf() :
rs.conf()

Cette commande fournit les détails du membre actuel de l'ensemble d'instances répliquées rs0. Dans cet atelier, un seul membre est affiché. Pour obtenir les détails de tous les membres, vous devez exposer l'ensemble d'instances répliquées par le biais de services supplémentaires tels que NodePort ou LoadBalancer.

rs0:OTHER> rs.conf() { "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "writeConcernMajorityJournalDefault" : true, "members" : [ { "_id" : 0, "host" : "localhost:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "catchUpTakeoverDelayMillis" : 30000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("5c526b6501fa2d29fc65c48c") } }
  1. Saisissez "exit" (quitter), puis appuyez sur Entrée pour quitter l'environnement REPL.

Tâche 6 : Mettre à l'échelle l'ensemble d'instances répliquées MongoDB

Kubernetes et les StatefulSets présentent un grand avantage : ils vous offrent la possibilité d'augmenter ou de diminuer le nombre d'instances répliquées MongoDB grâce à une seule commande.

  1. Pour que le nombre de membres de l'ensemble d'instances répliquées passe de trois à cinq, exécutez la commande suivante :
kubectl scale --replicas=5 statefulset mongo

Cinq pods MongoDB sont disponibles en l'espace de quelques minutes.

  1. Exécutez la commande suivante pour les afficher :
kubectl get pods

Vous devez normalement obtenir le résultat suivant :

NAME READY STATUS RESTARTS AGE mongo-0 2/2 Running 0 41m mongo-1 2/2 Running 0 39m mongo-2 2/2 Running 0 37m mongo-3 2/2 Running 0 4m mongo-4 2/2 Running 0 2m
  1. Pour que le nombre de membres de l'ensemble d'instances répliquées passe de cinq à trois, exécutez la commande suivante :
kubectl scale --replicas=3 statefulset mongo

Trois pods MongoDB sont disponibles en l'espace de quelques minutes.

  1. Exécutez la commande suivante pour les afficher :
kubectl get pods

Vous devez normalement obtenir le résultat suivant :

NAME READY STATUS RESTARTS AGE mongo-0 2/2 Running 0 41m mongo-1 2/2 Running 0 39m mongo-2 2/2 Running 0 37m

Cliquez sur Vérifier ma progression pour valider l'objectif.

Mettre à l'échelle l'ensemble d'instances répliquées MongoDB

Tâche 7 : Utiliser l'ensemble d'instances répliquées MongoDB

Chaque pod d'un StatefulSet assisté par un service sans adresse IP de cluster aura un nom DNS stable. Le format du modèle est : <nom-pod>.<nom-service>

Cela signifie que les noms DNS de l'ensemble d'instances répliquées MongoDB sont les suivants :

mongo-0.mongo mongo-1.mongo mongo-2.mongo

Vous pouvez utiliser ces noms directement dans l'URI de la chaîne de connexion de votre application.

L'utilisation d'une base de données ne fait pas partie des notions abordées dans cet atelier. Toutefois, dans ce cas, l'URI de la chaîne de connexion est la suivante :

"mongodb://mongo-0.mongo,mongo-1.mongo,mongo-2.mongo:27017/dbname_?"

Tâche 8 : Effectuer un nettoyage

Dans la mesure où vous travaillez dans un environnement d'atelier, toutes vos ressources et votre projet seront nettoyés et supprimés automatiquement à l'issue de l'atelier. Cependant, nous souhaitons vous expliquer comment nettoyer les ressources vous-même afin que vous puissiez limiter vos dépenses et avoir un comportement responsable dans le cloud lorsque vous serez dans votre propre environnement.

Pour nettoyer les ressources déployées, exécutez les commandes suivantes afin de supprimer le StatefulSet, le service sans adresse IP de cluster et les volumes provisionnés.

  1. Supprimez le StatefulSet :
kubectl delete statefulset mongo
  1. Supprimez le service :
kubectl delete svc mongo
  1. Supprimez les volumes :
kubectl delete pvc -l role=mongo
  1. Enfin, vous pouvez supprimer le cluster de test :
gcloud container clusters delete "hello-world"
  1. Appuyez sur Y, puis sur Entrée pour confirmer la suppression du cluster de test.

Félicitations !

Avec Kubernetes Engine, vous disposez d'une solution efficace et flexible pour exécuter des conteneurs sur Google Cloud. Les StatefulSets vous permettent d'exécuter des charges de travail avec état sur Kubernetes, comme des bases de données. Vous avez découvert ces opérations :

  • Création d'un ensemble d'instances répliquées MongoDB avec des StatefulSets Kubernetes
  • Connexion à l'ensemble d'instances répliquées MongoDB
  • Mise à l'échelle de l'ensemble d'instances répliquées

Terminer votre quête

Cet atelier d'auto-formation fait partie de la quête Cloud Architecture. Une quête est une série d'ateliers associés qui constituent un parcours de formation. Si vous terminez une quête, vous obtenez un badge attestant de votre réussite. Vous pouvez rendre publics les badges que vous recevez et ajouter leur lien dans votre CV en ligne ou sur vos comptes de réseaux sociaux. Inscrivez-vous à n'importe quelle quête contenant cet atelier pour obtenir immédiatement les crédits associés. Découvrez toutes les quêtes disponibles dans le catalogue Google Cloud Skills Boost.

Atelier suivant

Continuez la quête en suivant le prochain atelier ou consultez ces suggestions :

Étapes suivantes et informations supplémentaires

Formations et certifications Google Cloud

Les formations et certifications Google Cloud vous aident à tirer pleinement parti des technologies Google Cloud. Nos cours portent sur les compétences techniques et les bonnes pratiques à suivre pour être rapidement opérationnel et poursuivre votre apprentissage. Nous proposons des formations pour tous les niveaux, à la demande, en salle et à distance, pour nous adapter aux emplois du temps de chacun. Les certifications vous permettent de valider et de démontrer vos compétences et votre expérience en matière de technologies Google Cloud.

Dernière modification du manuel : 9 octobre 2023

Dernier test de l'atelier : 9 octobre 2023

Copyright 2024 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.