Déploiement d'applications distribuées modernes avec Kubernetes & MongoDB Atlas –
Cet article a été publié à l'origine le mongoDB . Merci de soutenir les partenaires qui rendent SitePoint possible.
Le storytelling est l'un des aspects d'être un promoteur de développement que j'aime. Parfois, les histoires sont sur les moments spéciaux où l'équipe se réunit pour garder un système en cours d'exécution ou le construire plus rapidement. Mais il y a des histoires moins que glorieuses à raconter au sujet des déploiements de logiciels auxquels j'ai participé. Et pour les situations où nous devions nous déployer plusieurs fois par jour, nous parlons maintenant de cauchemars.
une entreprise qui croyait que le déploiement en production plusieurs fois par jour était idéal pour la vitesse du projet. Notre équipe travaillait à faire en sorte que les logiciels publicitaires de notre plateforme média soient constamment mis à jour et publiés. L'un des problèmes était l'absence d'automatisation réelle dans le processus d'application du nouveau code sur nos serveurs d'applications.
Ce que les équipes de développement et les ops avaient en commun était une amélioration de la facilité et de l'agilité des déploiements d'applications et de configurations. Dans cet article, je présenterai quelques unes de mes expériences et comment MongoDB Atlas et Kubernetes peuvent être exploités ensemble pour simplifier le processus de déploiement et de gestion des applications et de leurs dépendances sous-jacentes.
Voyons comment se déroule un déploiement de logiciel typique:
- Le développeur enverrait un ticket demandant le déploiement
- Le développeur et moi serions d'accord sur un moment pour déployer la dernière révision logicielle
- Nous modifierions un script bash existant avec les informations de version git repository appropriées [19659007] Nous aurions besoin de sauvegarder manuellement l'ancien déploiement
- Nous aurions besoin de créer manuellement une sauvegarde de notre base de données actuelle
- Nous regarderions le script bash effectuer ce "Déploiement" sur environ six serveurs en parallèle
- Vague un poulet mort sur mon clavier
Certains de ces déploiements échoueraient, nécessitant un retour à la version précédente du code de l'application. Ce processus de «restauration» d'une version antérieure impliquait de copier manuellement le référentiel dans l'ancienne version, d'effectuer des restaurations manuelles de bases de données et enfin de confirmer avec l'équipe qui utilisait ce système que tout fonctionnait correctement. C'était vraiment un gâchis et je n'étais vraiment pas en mesure de le changer.
J'ai finalement pris une position qui m'a donné une plus grande visibilité sur ce que d'autres équipes de développeurs, en particulier dans l'espace open source, faisaient pour déploiements de logiciels. J'ai remarqué que – surprise! – Les gens n'étaient plus intéressés à faire le même travail encore et encore.
Les développeurs et leurs équipes de soutien ont reçu des clés pour un tout nouveau monde au cours des dernières années en utilisant des conteneurs et des plates-formes d'automatisation. Plutôt que de faire le travail manuel requis pour produire l'environnement dans lequel votre application va vivre, vous pouvez déployer des applications rapidement grâce à des outils comme Kubernetes.
What's Kubernetes
Kubernetes est un système open-source pour automatiser le déploiement , mise à l'échelle et gestion des applications conteneurisées. Kubernetes peut aider à réduire la quantité de travail que votre équipe devra faire lors du déploiement de votre application. Avec MongoDB Atlas, vous pouvez créer des applications évolutives et résilientes qui résistent à un trafic élevé ou peuvent être facilement réduites pour réduire les coûts. Kubernetes fonctionne à peu près partout et peut utiliser presque toutes les infrastructures. Si vous utilisez un cloud public, un cloud hybride ou même une solution complète, vous pouvez tirer parti de Kubernetes pour déployer et mettre à l'échelle rapidement vos applications.
Google Kubernetes Engine est intégré dans Google Cloud. Plate-forme et vous aide à déployer rapidement vos applications conteneurisées.
Pour les besoins de ce tutoriel, je téléchargerai notre image vers GCP, puis je la déploierai dans un cluster Kubernetes afin que je puisse rapidement faire évoluer notre application comme requis. Lorsque je crée de nouvelles versions de notre application ou que je fais des changements incrémentiels, je peux simplement créer une nouvelle image et la déployer à nouveau avec Kubernetes
Pourquoi Atlas avec Kubernetes?
En utilisant ces outils ensemble pour votre application MongoDB, vous pouvez produire et déployer rapidement des applications sans trop vous préoccuper de la gestion de l'infrastructure. Atlas vous fournit un magasin de données persistant pour vos données d'application sans avoir à gérer le logiciel de base de données, la réplication, les mises à niveau ou la surveillance. Toutes ces fonctionnalités sont livrées prêtes à l'emploi, ce qui vous permet de les compiler puis de les déployer rapidement.
Dans ce tutoriel, je vais construire un cluster MongoDB Atlas où nos données vont vivre pour une simple application Node.js. Je vais ensuite transformer l'application et les données de configuration pour Atlas en une image prête à l'emploi avec Docker
MongoDB Atlas est disponible dans la plupart des régions sur GCP, peu importe où votre application vit, vous pouvez garder vos données à proximité (ou distribuées
Exigences
Pour suivre ce tutoriel, les utilisateurs auront besoin des conditions suivantes pour commencer:
Tout d'abord, je vais télécharger le référentiel pour le code que je vais utiliser. Dans ce cas, il s'agit d'une application basique de gestion de documents utilisant MongoDB, Express, React et Node ( MERN ).
bash-3.2 $ git clone git@github.com: cefjoeii / mern-crud. git
Clonage dans 'mern-crud' ...
remote: Comptage d'objets: 326, terminé.
remote: Total 326 (delta 0), réutilisé 0 (delta 0), pack réutilisé 326
Objets récepteurs: 100% (326/326), 3,26 Mio | 2,40 MiB / s, fait.
Résolution des deltas: 100% (137/137), fait.
cd mern-crud
Ensuite, je vais installer npm
et obtenir tous les paquets npm nécessaires pour travailler avec notre application:
> uws@9.14.0 install / Users / jaygordon / work / mern-crud / node_modules / uws
> rebuild node-gyp> build_log.txt 2> & 1 || sortie 0
Sélection de votre région GCP pour Atlas
Chaque région GCP comprend un nombre défini de zones indépendantes. Chaque zone dispose de plans d'alimentation, de refroidissement, de mise en réseau et de contrôle isolés des autres zones. Pour les régions ayant au moins trois zones (3Z), Atlas déploie des clusters dans trois zones. Pour les régions qui n'ont que deux zones (2Z), Atlas déploie des clusters à travers deux zones.
L'Atlas Add New Cluster marque les régions qui supportent les clusters 3Z comme Recommandé comme ils fournir une disponibilité plus élevée. Si votre région préférée ne comporte que deux zones, envisagez d'activer la réplication entre régions et de placer un membre de jeu de réplicas dans une autre région pour augmenter la probabilité que votre cluster soit disponible pendant les interruptions régionales partielles.
aucun effet sur le nombre de nœuds MongoDB que Atlas peut déployer. Les clusters MongoDB Atlas sont toujours constitués de jeux de réplicas comportant au minimum trois nœuds MongoDB
Pour des informations générales sur les régions et zones GCP, voir la documentation de Google sur les régions et les zones . Ajouter un utilisateur
Dans l'image ci-dessous, vous pouvez voir que j'ai sélectionné le fournisseur de cloud "Google Cloud Platform". Ensuite, j'ai sélectionné une taille d'instance, dans ce cas un M10. Les déploiements utilisant des instances M10 sont idéaux pour le développement. Si je devais immédiatement mettre cette application en production, je pourrais envisager d'utiliser un déploiement M30. Comme il s'agit d'une démo, un M10 est suffisant pour notre application. Pour une vue complète de toutes les tailles de grappes, consultez la page de tarification Atlas . Une fois ces étapes terminées, je peux cliquer sur le bouton "Confirmer & Déployer". Atlas déploiera automatiquement mon déploiement dans quelques minutes
Créons un nom d'utilisateur et un mot de passe pour notre base de données que notre application déployée par Kubernetes utilisera pour accéder à MongoDB.
- Cliquez sur "Sécurité" au haut de la page.
- Cliquez sur "Utilisateurs MongoDB"
- Cliquez sur "Ajouter un nouvel utilisateur"
- Cliquez sur "Afficher les options avancées"
- Nous ajouterons ensuite un utilisateur "
mernuser
" pour notre applicationmern-crud
qui n'a accès qu'à une base de données nommée "mern-crud
" et lui donne un mot de passe complexe. Nous spécifierons les privilèges readWrite pour cet utilisateur:
Cliquez sur "Ajouter un utilisateur":
Votre base de données est maintenant créée et votre utilisateur a été ajouté. Vous avez toujours besoin de notre chaîne de connexion et de l'accès à la liste blanche via le réseau.
Chaîne de connexion
Obtenez votre chaîne de connexion en cliquant sur "Clusters" puis en cliquant sur "CONNECT". Panneau d'administration Atlas. Après avoir sélectionné la connexion, plusieurs options vous sont proposées pour vous connecter à votre cluster. Cliquez sur "connecter votre application."
Les options pour les versions 3.6 ou 3.4 du pilote MongoDB sont indiquées. J'ai construit le mien en utilisant le pilote 3.4, donc je vais juste sélectionner la chaîne de connexion pour cette version.
Je vais généralement coller cela dans un éditeur puis modifier les informations pour correspondre à mes informations d'application et ma base de données name:
Je vais maintenant ajouter ceci au fichier de configuration de la base de données de l'application et l'enregistrer.
Ensuite, je vais empaqueter ceci dans une image avec Docker et l'expédier
Docker et Google Kubernetes Engine
Commencez par créer un compte sur Google Cloud, puis suivez le quickstart pour créer un Google Kubernetes Project .
Une fois votre projet terminé Vous pouvez le trouver dans le panneau de configuration de Google Cloud Platform:
Il est temps de créer un conteneur sur votre poste de travail local:
Définissez la variable d'environnement PROJECT_ID
dans votre shell en récupérant l'ID de projet préconfiguré sur gcl oud avec la commande ci-dessous:
export PROJECT_ID = "jaygordon-mongodb"
gcloud config set project $ PROJECT_ID
gcloud ensemble de configuration config / zone us-central1-b
Ensuite, placez un Dockerfile
dans la racine de votre référentiel par ce qui suit:
FROM node: bore
Exécuter mkdir -p / usr / src / app
WORKDIR / usr / src / app
COPIE . / usr / src / app
EXPOSE 3000
CMD [npm, start]
Pour créer l'image conteneur de cette application et l'étiqueter pour le chargement, exécutez la commande suivante:
bash-3.2 $ docker build -t gcr.io/${PROJECT_ID}/mern-crud:v1.
Envoyer le contexte de construction au démon Docker 40.66MB
B8c5be5def8f a été construit avec succès
Étiqué avec succès gcr.io/jgordon-gc/mern-crud:v1
Téléchargez l'image du conteneur dans le registre des conteneurs afin de pouvoir la déployer:
Étiqueté avec succès gcr.io/jaygordon-mongodb/mern-crud:v1
bash-3.2 $ docker gcloud - push gcr.io/${PROJECT_ID}/mern-crud:v1La poussée fait référence au dépôt [gcr.io/jaygordon-mongodb/mern-crud]
Ensuite, je vais le tester localement sur mon poste de travail pour m'assurer que l'application se charge:
docker run --rm -p 3000: 3000 gcr.io/${PROJECT_ID}/mern-crud:v1
> mern-crud@0.1.0 start / usr / src / app
> serveur de noeud
Écoute sur le port 3000
Génial – pointer mon navigateur vers http: // localhost: 3000 m'amène sur le site. Il est maintenant temps de créer un cluster Kubernetes et de déployer notre application dessus
Construisez votre cluster avec Google Kubernetes Engine
Je vais utiliser le Google Cloud Shell dans le panneau de configuration Google Cloud pour gérer mon déploiement. Le shell cloud est livré avec toutes les applications et tous les outils nécessaires pour vous permettre de déployer l'image Docker que j'ai téléchargée dans le registre d'images sans installer de logiciel supplémentaire sur mon poste de travail local.
Je vais créer le cluster Kubernetes déployé qui aidera à apporter notre application à la production. J'inclurai trois noeuds pour assurer la disponibilité de notre application.
Configurez notre environnement en premier:
export PROJECT_ID = "jaygordon-mongodb"
gcloud config set project $ PROJECT_ID
gcloud ensemble de configuration config / zone us-central1-b
Lancer le cluster
Les clusters de conteneurs gcloud créent mern-crud --num-nodes = 3
Une fois terminé, vous aurez un cluster Kubernetes à trois nœuds visible dans votre panneau de contrôle. Après quelques minutes, la console répondra avec la sortie suivante:
Création de cluster mern-crud ... done.
Créé [https://container.googleapis.com/v1/projects/jaygordon-mongodb/zones/us-central1-b/clusters/mern-crud].
Pour consulter le contenu de votre cluster, accédez à: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-b/mern-crud?project=jaygordon-mongodb
Entrée kubeconfig générée pour mern-crud.
NOM EMPLACEMENT MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS
mern-crud nous-central1-b 1.8.7-gke.1 35.225.138.208 n1-standard-1 1.8.7-gke.1 3 FONCTIONNEMENT
Encore quelques pas à faire. Maintenant, nous allons déployer notre application avec kubectl sur notre cluster à partir de Google Cloud Shell:
kubectl exécuter mern-crud --image = gcr.io / $ {PROJECT_ID} / mern-crud: v1 --port 3000
Le résultat devrait être:
jay_gordon @ jaygordon-mongodb: ~ $ kubectl exécute mern-crud --image = gcr.io / $ {PROJECT_ID} / mern-crud: v1 --port 3000
déploiement "mern-crud" créé
Passons maintenant en revue l'état du déploiement de l'application:
jay_gordon @ jaygordon-mongodb: ~ $ kubectl obtient des pods
NOM ÉTAT PRÊT RESTARTS AGE
mern-crud-6b96b59dfd-4kqrr 1/1 en cours d'exécution 0 1m
jay_gordon @ jaygordon-mongodb: ~ $
Nous allons créer un équilibreur de charge pour les trois nœuds du cluster afin qu'ils puissent être correctement servis sur le Web pour notre application:
jay_gordon @ jaygordon-mongodb: ~ $ kubectl expose le déploiement mern-crud --type = LoadBalancer --port 80 --target-port 3000
service "mern-crud" exposé
Maintenant, récupérez l'adresse IP du loadbalancer, si nécessaire, il peut être lié à un nom DNS et vous pouvez le mettre en ligne!
jay_gordon @ jaygordon-mongodb: ~ $ kubectl get service
NOM TYPE CLUSTER-IP PORT (S) IP EXTERNE (S)
kubernetes ClusterIP 10.27.240.1 443 / TCP 11m
mern-crud LoadBalancer 10.27.243.208 35.226.15.67 80: 30684 / TCP 2m
Un test rapide de la courbe me montre que mon application est en ligne!
bash-3.2 $ curl -v 35.226.15.67
* URL reconstruite à: 35.226.15.67/
* Essayer 35.226.15.67 ...
* Ensemble TCP_NODELAY
* Connecté à 35.226.15.67 (35.226.15.67) port 80 (# 0)
> GET / HTTP / 1.1
> Hôte: 35.226.15.67
> User-Agent: curl / 7.54.0
> Accepter: * / *
>
<HTTP / 1.1 200 OK
<X-Powered-By: Express
J'ai ajouté quelques données de test et comme nous pouvons le voir, cela fait partie de mon application déployée via Kubernetes vers GCP et stocker mes données persistantes dans MongoDB Atlas.
Quand j'ai fini de travailler avec Kubernetes cluster, je peux le détruire facilement:
clusters de conteneurs gcloud supprimer mern-crud
Quelle est la suite?
Vous avez maintenant tous les outils en face de vous pour construire quelque chose d'énorme avec MongoDB Atlas et Kubernetes.
Consultez le reste des tutoriels de Google Kubernetes Engine pour plus d'informations sur la création d'applications avec Kubernetes. Pour plus d'informations sur MongoDB Atlas, cliquez ici .
Avez-vous d'autres questions? Rejoignez le MongoDB Community Slack !
Continuez à apprendre grâce à des conférences techniques de haute qualité, des ateliers et des didacticiels pratiques. Rejoignez-nous au MongoDB World
Source link