Comment effectuer une installation de MongoDB Kubernetes

Les déploiements d’applications dans Kubernetes peuvent être difficiles, surtout pour les applications étatiques telles que MongoDB sur un cluster Kubernetes. Comment faciliter le déploiement ? Laissez l’opérateur Kubernetes MongoDB MongoDB déployer et gérer automatiquement les applications étatiques dans votre cluster Kubernetes.

Dans ce tutoriel, vous apprendrez comment déployer MongoDB sur Kubernetes en utilisant l’opérateur Kubernetes MongoDB.

Continuez à lire et commencez à automatiser vos déploiements Kubernetes !

Prérequis

Ce tutoriel sera une démonstration pratique. Pour suivre, assurez-vous d’avoir les exigences suivantes :

  • A Kubernetes cluster – This demo uses the Kubernetes cluster v1.23.
  • Kubectl installé sur la machine locale.
  • Git installé sur votre machine.
  • jq installé sur la machine locale.

Création de l’espace de noms pour MongoDB

Lors du déploiement d’applications sur Kubernetes, il est toujours recommandé de créer un espace de noms spécifique pour vos projets.

Les espaces de noms facilitent la gestion des ressources Kubernetes pour les administrateurs et évitent les collisions de noms. Dans le même temps, la création d’espaces de noms empêche une utilisation incorrecte des ressources dans l’environnement Kubernetes.

Ouvrez votre terminal et exécutez la commande kubectl create ci-dessous pour créer un nouvel espace de noms (ns) appelé mongodb sur votre cluster Kubernetes.

kubectl create ns mongodb

Exécutez maintenant la commande kubectl get ci-dessous pour vérifier la liste des espaces de noms sur votre cluster Kubernetes.

kubectl get ns

Vous verrez un nouvel espace de noms appelé mongodb disponible sur votre cluster, comme indiqué ci-dessous.

Creating and Verifying the mongodb Namespace

Téléchargement de l’opérateur Kubernetes MongoDB

Après avoir créé un espace de noms, il est temps de télécharger l’opérateur Kubernetes MongoDB. L’opérateur Kubernetes MongoDB est un ensemble d’opérateurs Kubernetes. Ces opérateurs Kubernetes offrent un déploiement, une configuration et une gestion automatiques de MongoDB Community sur l’environnement Kubernetes.

Exécutez la commande git ci-dessous pour cloner le projet MongoDB Kubernetes Operator sur votre machine locale.

git clone <https://github.com/mongodb/mongodb-kubernetes-operator.git>

Maintenant, exécutez chaque commande ci-dessous pour changer votre répertoire de travail actuel en mongodb-kubernetes-operator et lister (ls) tous les fichiers et répertoires disponibles.

# Changer le répertoire de travail en mongodb-kubernetes-operator
cd mongodb-kubernetes-operator/

# Liste des fichiers et répertoires
ls

Vous verrez un sous-répertoire nommé config à l’intérieur du répertoire du projet ~/mongodb-kubernetes-operator, comme indiqué ci-dessous. Le sous-répertoire config contient des exemples de fichiers YAML pour le déploiement de MongoDB sur Kubernetes.

Downloading mongodb-kubernetes-operator Source Code

Déploiement de l’opérateur MongoDB

Maintenant que votre espace de noms personnalisé et votre opérateur Kubernetes MongoDB sont configurés, vous êtes prêt à déployer l’opérateur MongoDB sur votre cluster Kubernetes. Comment ? Vous utiliserez la configuration à l’intérieur du répertoire config.

L’opérateur MongoDB gère le cycle de vie de votre déploiement MongoDB sur le cluster Kubernetes. L’opérateur créera, gérera et mettra automatiquement à l’échelle l’état de votre déploiement MongoDB.

Pour déployer l’opérateur MongoDB, vous devez créer une définition de ressources personnalisées (CRD) Kubernetes et le contrôleur. Le CRD Kubernetes est extensible à l’API Kubernetes, ce qui vous permet de créer des ressources personnalisées dans Kubernetes.

1. Exécutez la commande kubectl apply ci-dessous pour créer un nouveau CRD Kubernetes pour le déploiement de MongoDB.

Le l’opérateur Kubernetes a remplacé toute interaction humaine pour déployer une application sur Kubernetes. L’opérateur est un contrôleur de pod qui déploie et gère automatiquement votre application à état sur Kubernetes.

kubectl apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
Creating New Kubernetes CRD MongoDB Kubernetes Deployment

2. Ensuite, exécutez la commande kubectl get suivante pour vérifier la liste des crd disponibles dans votre cluster Kubernetes.

kubectl get crd/mongodbcommunity.mongodbcommunity.mongodb.com

Ci-dessous, vous pouvez voir le CRD avec le nom mongodbcommunity.mongodbcommunity.mongodb.org.

Checking List of CRDs

3. Exécutez la commande ci-dessous pour créer un nouveau contrôle d’accès basé sur les rôles (RBAC) personnalisé pour l’opérateur MongoDB, et spécifiez la mise en œuvre du RBAC dans l’espace de noms mongodb.

Cette commande crée un nouveau rôle, un rolebinding et un serviceaccount pour l’opérateur MongoDB, qui sont des autorisations personnalisées sur votre cluster Kubernetes. Ces autorisations personnalisées sont nécessaires pour le déploiement et la gestion automatique de MongoDB.

kubectl apply -k config/rbac/ -n mongodb
Deploying RBAC for MongoDB Deployment

4. Maintenant, exécutez chaque commande kubectl ci-dessous pour vérifier le rôle, le rolebinding et le serviceaccount de l’opérateur MongoDB.

# Vérification de la liste des rôles
kubectl get role mongodb-kubernetes-operator -n mongodb

# Vérification de la liste des rolebindings
kubectl get rolebinding mongodb-kubernetes-operator -n mongodb

# Vérification du serviceaccount
kubectl get serviceaccount mongodb-kubernetes-operator -n mongodb

La sortie ci-dessous montre que le rôle, le rolebinding et le serviceaccount mongodb-kubernetes-operator sont créés dans l’espace de noms mongodb.

Checking role, rolebinding, and serviceaccount on Kubernetes

5. Une fois la vérification terminée, exécutez la commande kubectl ci-dessous pour déployer l’opérateur MongoDB dans l’espace de noms mongodb.

Cette commande crée un nouveau pod (mongodb-kubernetes-operator) avec l’image Docker de base (quay.io/mongodb/mongodb-kubernetes-operator). Ce pod servira de contrôleur pour le déploiement automatique de ReplicaSets MongoDB sur le cluster Kubernetes.

kubectl create -f config/manager/manager.yaml -n mongodb

Ci-dessous, vous pouvez voir que le déploiement de l’opérateur MongoDB est créé, mais le pod est encore en cours d’initialisation.

Deploying MongoDB Operator to the mongodb Namespace

6. Enfin, exécutez les commandes suivantes pour vérifier le déploiement et les pods dans l’espace de noms mongodb.

# Vérification du déploiement dans l'espace de noms mongodb
kubectl get deployment.apps -n mongodb

# Vérification des pods dans l'espace de noms mongodb
kubectl get pods -n mongodb

Comme vous pouvez le voir ci-dessous, le pod de l’opérateur MongoDB est en cours d’exécution.

Verifying MongoDB Operator Deployment and Pod

Déploiement de MongoDB ReplicaSet sur Kubernetes

Après le déploiement de votre MongoDB, vous déploierez ReplicaSet sur votre Kubernetes pour assurer une haute disponibilité et une redondance pour votre déploiement MongoDB. Vous ne voudriez pas de temps d’arrêt sur votre déploiement.

Le déploiement de ReplicaSets MongoDB à l’aide de l’opérateur Kubernetes MongoDB est sécurisé par défaut en utilisant l’authentification SCRAM pour les utilisateurs. Dans le même temps, vous pouvez utiliser une connexion sécurisée TLS pour les connexions des utilisateurs et des applications et exposer des métriques Prometheus pour surveiller les ressources.

Connexe: Démarrage avec la surveillance du cluster Kubernetes Grafana & Prometheus

A l’intérieur du répertoire config/samples/, vous verrez plusieurs exemples de fichiers YAML pour le déploiement de ReplicaSet. Chaque fichier peut être utilisé dans différents scénarios de déploiement, mais le fichier de déploiement ReplicaSet par défaut est mongodb.com_v1_mongodbcommunity_cr.yaml.

1. Modifiez le fichier YAML pour votre déploiement en utilisant votre éditeur préféré. Dans cette démonstration, nous utilisons le fichier /mongodb.com_v1_hostpath.yaml pour un déploiement local. Ce fichier YAML se trouve dans le répertoire config/samples/arbitrary_statefulset_configuration/.

Si vous déployez l’opérateur Kubernetes MongoDB sur des services cloud tels que GKE et AKS, utilisez le fichier YAML mongodb.com_v1_mongodbcommunity_cr.yaml. Mais si vous déployez localement à l’intérieur de Kind ou Minikube, vous pouvez utiliser le fichier YAML personnalisé (arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml), qui crée automatiquement des PV et PVC personnalisés pour les pods ReplicaSet de MongoDB.

ci-dessous, changez le nombre (membres) de ReplicaSets que vous souhaitez déployer en fonction de votre environnement, mais par défaut, c’est 3. Pour ce tutoriel, le nombre de ReplicaSets est fixé à 2.

spec:
  members: 2 # Nombre d'ensembles de réplicas à créer
  security:
    authentication:
      modes:
      - SCRAM
  statefulSet:

Remplacez <votre-mot-de-passe-ici> par votre mot de passe fort. Vous utiliserez ce mot de passe pour vous connecter à la base de données MongoDB, et par défaut, vous utiliserez l’authentification SCRAM.

Enregistrez les modifications et fermez l’éditeur une fois satisfait de votre mot de passe.

---
apiVersion: v1
kind: Secret
metadata:
  name: my-user-password
type: Opaque
stringData:
  password: <your-password-here> # Définir le mot de passe pour l'administrateur MongoDB

Ensuite, exécutez la commande kubectl ci-dessous pour déployer (apply) le ReplicaSet MongoDB en utilisant le mongodb.com_v1_hostpath.yaml dans l’espace de noms mongodb.

Cette commande crée ce qui suit :

  • A new custom resource (MongoDBCommunity) with the name mdb0 under the mongodbcommunity.mongodb.com/v1 CRD
  • Secrets Kubernetes pour stocker les mots de passe des utilisateurs MongoDB. En même temps, certains PV et PVC avec le type en tant que hostPath pour le Replica Set MongoDB.

Le déploiement prendra un certain temps, en fonction de la taille des ReplicaSets à créer et du cluster Kubernetes lui-même.

kubectl apply -f config/samples/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml -n mongodb
Deploying MongoDB Replica Sets

3. Après le déploiement, exécutez chaque commande ci-dessous pour vérifier les ressources personnalisées et les pods sur l’espace de noms mongodb.

# Vérification de la crd mongodbcommunity
kubectl get mongodbcommunity -n mongodb

# Vérification des pods sur l'espace de noms mongodb
kubectl get pods -n mongodb

La sortie ci-dessous montre ce qui suit:

  • La ressource personnalisée MongoDBCommunity avec le nom mdb0 s’exécute avec MongoDB v4.4.0.
  • Les deux pods ReplicaSet MongoDB s’exécutent avec les noms mdb0-0 et mdb0-1. Chaque pod contient deux conteneurs différents, le mongod, et le conteneur mongodb-agent.
Verifying MongoDB ReplicaSet Deployment and Pods

4. Enfin, exécutez une autre commande kubectl ci-dessous pour vérifier les pv et pvc sur l’espace de noms mongodb.

kubectl get pv,pvc -n mongodb

La sortie ci-dessous vous montre certains pv et pvc utilisés par les pods ReplicaSet MongoDB.

Checking PV and PVC on the mongodb Namespace

Création d’un nouvel utilisateur et d’une base de données pour le déploiement de MongoDB

Vous avez terminé le déploiement de l’opérateur MongoDB et des ReplicaSets sur votre cluster Kubernetes à ce stade. La prochaine étape consiste à créer une nouvelle base de données et un nouvel utilisateur MongoDB pour votre application.

Vous allez créer un nouveau secret Kubernetes pour le nouvel utilisateur, modifier la ressource personnalisée du déploiement ReplicaSet et mettre à jour le ReplicaSet sur votre cluster.

1. Créez un nouveau fichier YAML en utilisant votre éditeur préféré et remplissez le secret Kubernetes suivant. Vous pouvez nommer le fichier YAML comme vous le souhaitez, mais le fichier est nommé new-user.yaml dans ce tutoriel.

Ce fichier YAML crée un nouveau secret Kubernetes avec le nom « myappdata » et le mot de passe « myapppassword ».

---
apiVersion: v1
kind: Secret
metadata:
  name: myappdata # nom du meta.data secret
type: Opaque
stringData:
  password: myapppassword # mot de passe pour le nouvel utilisateur

2. Ensuite, exécutez la commande kubectl ci-dessous pour exécuter la configuration new-user.yaml.

Cette commande crée et applique (apply) un nouveau secret Kubernetes à votre cluster et applique ce secret à l’espace de noms « mongodb ».

kubectl apply -f new-user.yaml -n mongodb
Creating Secret to Kubernetes Cluster

3. Modifiez le fichier YAML de votre configuration CRD ReplicaSet (mongodb.com_v1_hostpath.yaml) dans le répertoire config/samples/arbitrary_statefulset_configuration

Ajoutez la configuration suivante au fichier mongodb.com_v1_hostpath.yaml, qui crée la base de données et l’utilisateur pour MongoDB.

N’oubliez pas de remplacer « scram-secret-myapp » par vos propres informations d’identification scram, enregistrez les modifications apportées au fichier et fermez l’éditeur.

    - name: appuser # Nouvel utilisateur appuser
      db: admin # Autorise l'authentification à la base de données admin
      passwordSecretRef:
        name: myappdata # Le secret Kubernetes
      roles:
        - name: dbAdmin # Configuration du rôle dbAdmin
          db: appdb1 # pour l'appdb1
      scramCredentialsSecretName: scram-secret-myapp

4. Maintenant, exécutez la commande ci-dessous pour appliquer les nouvelles modifications que vous avez apportées dans le fichier mongodb.com_v1_hostpath.yaml à l’étape trois.

kubectl apply -f config/samples/arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml -n mongodb
Creating New MongoDB User and Database on Kubernetes

5. Enfin, exécutez chaque commande ci-dessous pour générer les connexions détaillées à MongoDB pour votre application. Ces commandes génèrent la connexion détaillée à MongoDB pour vos applications en sortie JSON et analysent la sortie à l’aide de la commande jq en ligne de commande.

Remplacez mdb0-admin-mongoadmin par les détails de votre environnement comme suit :

  • mdb0 – Le nom des métadonnées des ressources MongoDB.
  • admin – La base de données à authentifier.
  • mongoadmin – L’utilisateur que vous utiliserez pour l’authentification
# Récupérer les détails d'authentification et les connexions d'administration
kubectl get secrets mdb0-admin-mongoadmin -n mongodb -o json | jq -r '.data | with_entries(.value |= @base64d)'

# Récupérer les détails d'authentification de l'utilisateur de l'application et les connexions
kubectl get secrets mdb0-admin-appuser -n mongodb -o json | jq -r '.data | with_entries(.value |= @base64d)'

La sortie ci-dessous montre que vous pouvez vous connecter à MongoDB en utilisant les connexions standard et standardSrv. Vous verrez également le nom d’utilisateur et le mot de passe de votre déploiement MongoDB.

Retrieving Details of MongoDB User and Password, and Connections

Connexion au déploiement MongoDB

Vous avez terminé le déploiement de MongoDB sur le cluster Kubernetes en utilisant l’opérateur Kubernetes MongoDB. Mais comment savoir si le déploiement fonctionne ? Vous vérifierez la base de données de votre machine locale et la connexion de l’utilisateur à MongoDB à l’intérieur du cluster Kubernetes.

Pour vérifier la connexion à votre déploiement MongoDB, vous utiliserez le transfert de port. Le transfert de port dans Kubernetes vous permet de créer un port de transfert à partir de n’importe quel service Kubernetes vers votre port local.

1. Exécutez la commande kubectl ci-dessous pour obtenir la liste des services (svc) dans l’espace de noms mongodb (-n).

kubectl get svc -n mongodb

Ci-dessous, vous verrez le service nommé mdb0-svc, qui expose le port 27017 (port par défaut de MongoDB).

Listing Services on the mongodb Namespace

2. Ensuite, exécutez la commande ci-dessous pour créer une redirection de port vers le cluster Kubernetes.

Cette commande crée une nouvelle redirection de port sur le service Kubernetes (mdb0-svc) et redirige le port local 27017 vers le port du service Kubernetes 27017.

kubectl port-forward service/mdb0-svc -n mongodb 27017:27017
Setting up Port-forward

3. Enfin, ouvrez votre application MongoDB Compass sur votre machine locale, ajoutez une nouvelle connexion avec le format suivant et cliquez sur Connecter pour vous connecter à MongoDB.

Modifiez le nom d’utilisateur et le mot de passe avec votre utilisateur et mot de passe MongoDB.

# Se connecter en tant que mongoadmin
mongodb://mongoadmin:secretpassword@localhost:27017/admin?ssl=false

# Se connecter en tant qu'appuser
mongodb://appuser:myapppassword@localhost:27017/admin?ssl=false
Connecting as mongoadmin user to MongoDB
Connecting as appuser to MongoDB

Lorsque la connexion réussit, vous obtiendrez la fenêtre suivante confirmant que le déploiement de MongoDB sur Kubernetes fonctionne correctement.

Pour l’utilisateur mongoadmin, vous verrez les bases de données par défaut (local, config et admin).

Verifying Connection to the MongoDB mongoadmin

Pour l’utilisateur appuser, vous ne verrez qu’une seule base de données de privilèges appelée appdb1.

Verifying Connection to the MongoDB as appuser

Conclusion

Tout au long de ce tutoriel, vous avez appris comment déployer MongoDB sur le cluster Kubernetes en utilisant l’opérateur Kubernetes MongoDB. Vous avez également abordé l’utilisation de base de l’opérateur Kubernetes. Et à ce stade, vous avez déjà une connaissance solide sur le déploiement et la gestion automatiques des applications sur Kubernetes.

Pourquoi ne pas mettre en place une connexion TLS sur votre déploiement MongoDB pour tirer parti de cette nouvelle connaissance ? La connexion TLS sécurise les connexions entre les ensembles de réplicas et sécurise les connexions client ou application vers MongoDB.

Source:
https://adamtheautomator.com/mongodb-kubernetes/