Déploiement d’une application Node.js complète dans Kubernetes

-

Introduction

Tout d’abord, vous devez avoir installé Docker sur votre ordinateur pour que ce processus soit facile pour vous. Docker et Kubernetes sont deux choses différentes, mais vous avez besoin de Docker comme moteur d’exécution pour vos conteneurs dans les pods Kubernetes.

Téléchargez Docker Desktop sur votre ordinateur en utilisant le lien ci-dessous. Ensuite, installez-le et assurez-vous d’obtenir le résultat en exécutant la version de docker sur votre terminal.

Créer une application Node.js

Vous pouvez créer votre application Node.js selon vos préférences, et si vous avez déjà créé une application node, vous pouvez l’utiliser pour ce tutoriel. Je vais mettre mon application node ci-dessous, afin que vous puissiez avoir une idée de l’application node.

const express = require('express');
const app = express();
const PORT = process.env.PORT || 8080
const packageJson = require('./package.json');
const path = require('path');

// Serve static files
app.use(express.static(path.join(__dirname, 'docs')));
app.use('/assets', express.static(path.join(__dirname, 'docs/assets')))

// Index page
app.get('/', (req, res) => {
  console.log('request made');
  res.sendFile("./docs/index.html", { root: __dirname })
});

app.get('/api/health', (req, res) => {
  res.status(200).json({
    version: packageJson.version
  })
})

app.use((req, res) => {
  res.status(404).sendFile('./docs/404.html', { root: __dirname });
});

app.listen(PORT, () => {
  console.log(`listening for request on port ${PORT}`);
});

Ici, vous pouvez voir une application node simple créée en utilisant express et j’ai défini le port 8080 pour cette application. J’ai également créé un dossier docs dans le projet et j’y ai placé tous mes fichiers HTML. J’ai défini un routage de base pour accéder aux différentes pages de mon application node et j’ai ajouté une route 404 au bas du code pour capturer les autres requêtes.

Créer un fichier Docker

Voici le continue du fichier Dockerfile que j’ai créé à la racine du projet.

FROM node:16
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD ["node", "index.js"]

J’ai utilisé l’image Docker officielle de Node depuis docker hub et j’ai exposé le port 8080 comme je l’ai fait dans mon application node. Une fois que vous avez terminé avec le Dockerfile, allez-y et créez votre image Docker pour votre application Node.

Vous pouvez vous référer à l’article ci-dessous pour voir comment créer une image Docker pour votre application si vous ne savez pas comment créer des images Docker.

N’oubliez pas de créer un conteneur docker, puis de l’exécuter et de voir la réponse dans le navigateur pour vous assurer que vous l’avez fait correctement jusqu’à ce point.

Installer Minikube

J’utilise Minikube, qui est un cluster à un nœud et qui nous est très utile pour déployer nos applications dans Kubernetes. Si Minikube n’est pas installé sur votre ordinateur, prenez quelques minutes et consultez cet article pour savoir comment installer Minikube sur votre ordinateur.

Créer des composants Kubernetes

Lorsque vous avez terminé jusqu’à ce point, vous pouvez continuer à configurer les composants Kubernetes à l’aide de fichiers YAML. Commençons par créer notre déploiement Kubernetes.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node-app-deployment
  labels:
    app: node-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app 
    spec:
      containers:
      - name: node-app
        image: alfreddagenais/kilukru-dev-node-app-docker-kubernetes #path to your docker image
        ports:
        - containerPort: 8080

Vous n’avez pas besoin de vous souvenir de chaque ligne de la configuration YAML et la plupart du temps, ce fichier pourrait varier en fonction des besoins. Vous pouvez toujours vous référer à la documentation officielle de Kubernetes pour créer ces fichiers.

Lorsque vous créez un déploiement Kubernetes, vous devez ajouter le chemin de votre image docker à ce fichier de configuration. Dans le code ci-dessus, vous pouvez voir que j’ai indiqué cet endroit avec #path à votre image docker.

Vous pouvez utiliser n’importe quel registre de conteneurs pour stocker votre image Docker et vous devez définir son chemin dans ce fichier de configuration. En outre, si vous êtes un débutant dans Kubernetes, vous pouvez utiliser Docker Hub comme registre de conteneurs, qui est gratuit, et y pousser votre image Docker.
Si vous utilisez Docker Hub, créez d’abord un compte dans Docker Hub via ce lien. Ensuite, créez un dépôt dans Docker Hub et ouvrez votre terminal et tapez docker login et fournissez votre nom d’utilisateur et votre mot de passe. Une fois votre connexion réussie, vous pouvez étiqueter votre image Docker et la pousser vers le Docker Hub en utilisant les commandes docker tag & docker push. Vous pouvez suivre les instructions à l’écran pour compléter ce processus. Si vous trouvez que quelque chose ne fonctionne pas, n’hésitez pas à laisser un commentaire ci-dessous, je vous répondrai dès que possible.

Très bien, maintenant vous pouvez appliquer votre déploiement Kubernetes au cluster en utilisant la commande ci-dessous. Assurez-vous que vous avez démarré Minikube sur votre ordinateur

kubectl apply -f node-app-deployment.yaml
// output
// deployment.apps/node-app-deployment created

Exécutez kubectl get pods pour voir les pods et ce processus peut prendre un certain temps, car il faut généralement un certain temps pour tirer l’image de Docker Hub. Vous pouvez décrire le pod en utilisant la commande kubectl describe pod pod_name et utiliser la commande kubectl get pod --watch pour voir les événements de création de conteneurs en direct.

Une fois que votre pod a été créé, vous pouvez commencer à créer le service Kubernetes. Créer le fichier node-app-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: node-app-service
spec:
  selector:
    app: node-app 
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 5000
    targetPort: 8080
    nodePort: 32006

Vous pouvez créer le service en utilisant la commande ci-dessous. Dans les services Kubernetes, vous pouvez allouer le port de nœud de votre choix entre 30000 et 32767. J’ai donc sélectionné 32006 comme port de nœud et vous verrez ce port une fois que votre application de nœud aura commencé à fonctionner sur votre navigateur. De plus, j’ai défini le type de service comme LoadBalancer, car en utilisant Minikube, nous pouvons obtenir une IP externe et ouvrir notre application dans le navigateur facilement.

kubectl apply -f node-app-service.yaml
// output
// service/node-app-service created

Vous pouvez vérifier vos services à l’intérieur du cluster en exécutant la commande ci-dessous.

kubectl get service

Ici, EXTERNAL-IP est toujours en attente pour le service. Mais en utilisant Minikube, vous pouvez obtenir un External-IP. Exécutez la commande ci-dessous pour activer l’External-IP pour votre application.

minikube service <service_name>

dans notre cas nous aurons

minikube service node-app-service

Ouverture de l’application Node.js dans le navigateur

La commande ci-dessus ouvrira automatiquement votre application Node.js dans le navigateur et vous verrez l’URL comme dans la capture d’écran ci-dessus. Si ce n’est pas le cas, vous pouvez aller sur l’URL ci-dessus dans votre navigateur, et vous verrez que votre application s’y exécute. Remarquez également que le port NodeJS a été ajouté à l’URL.

Conclusion – Félicitations ! 🎉

Vous avez déployé une application Node.js complète dans Kubernetes.

Vous pouvez consulter le repo github ici : github.com/alfreddagenais/kilukru-dev-node-app-docker-kubernetes

Vous pouvez consulter le repo docker image ici : hub.docker.com/repository/docker/alfreddagenais/kilukru-dev-node-app-docker-kubernetes

Merci de votre lecture. J’espère que vous avez trouvé les informations utiles dans cet article. Si vous avez des questions, n’hésitez pas à laisser une réponse ci-dessous.
Bon codage ! 👨🏻 + 💻 = 👨🏻‍💻

Alfredhttps://www.alfreddagenais.com
Je suis un développeur Web Full Stack sénior. Chaque jour est pour moi une journée de plus pour découvrir de nouvelles idées. Le développement web et l'informatique sont omniprésents dans mon quotidien. Pour que la créativité soit à son maximum, il ne faut pas avoir peur d’expérimenter et nous avons tous que le Web est infiniment grand pour expérimenter nos idées.

Buy me a coffee Paypal Patreon Ko-Fi

Share this article

Recent posts

Popular categories

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Recent comments