Bereitstellung von JavaScript (Node.js) auf Kubernetes: Schritt-für-Schritt-Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Bereitstellung von JavaScript (Node.js) auf Kubernetes: Grundlegende Anleitung für die Praxis



Moderne Webentwicklung ist ohne Containerisierung und Orchestrierung undenkbar. Wenn Sie in JavaScript (Node.js) schreiben, stellt sich früher oder später die Frage: Wie kann man die Anwendung zuverlässig in der Produktion ausführen, ihre Skalierung und Ausfallsicherheit gewährleisten? Die Antwort ist Kubernetes. Es ist nicht nur ein trendiges Tool, sondern der De-facto-Standard für die Verwaltung containerisierter Anwendungen.

In diesem Leitfaden werden wir den gesamten Bereitstellungszyklus einer einfachen Node.js-Anwendung auf Kubernetes durchgehen. Sie erfahren, wie Sie den Code in ein Docker-Image verpacken, die erforderlichen Manifeste erstellen und alles in einem Cluster ausführen. Das Material richtet sich an Entwickler, die bereits mit den Grundlagen von Node.js vertraut sind und DevOps-Praktiken erlernen möchten.



1. Vorbereitung der Node.js-Anwendung für die Containerisierung

Bevor Sie die Anwendung auf Kubernetes bereitstellen, muss sie in einen Container verpackt werden. Dazu erstellen wir eine einfache Express-Anwendung. Stellen Sie sicher, dass Node.js und npm installiert sind.

Erstellen Sie die Datei app.js:

const express = require('express');const app = express();const port = process.env.PORT || 3000;

app.get('/', (req, res) => { res.json({ message: 'Hello from Node.js on Kubernetes!' });});

app.get('/health', (req, res) => { res.status(200).send('OK');});

app.listen(port, () => { console.log(`Server running on port ${port}`);});

Es ist wichtig, den Endpunkt /health hinzuzufügen – Kubernetes wird ihn für die Überprüfung der Betriebsbereitschaft (liveness probe) verwenden.

Erstellen Sie nun eine Dockerfile im Stammverzeichnis des Projekts:

FROM node:18-alpine

WORKDIR /usr/src/app

COPY package*.json ./RUN npm install --production

COPY . .

EXPOSE 3000

CMD ["node", "app.js"]

Erstellen Sie das Image und testen Sie es lokal:

docker build -t my-node-app:latest .docker run -p 3000:3000 my-node-app:latest

Öffnen Sie http://localhost:3000 – Sie sollten eine JSON-Antwort sehen.



2. Grundlegende Kubernetes-Manifeste für Node.js

Kubernetes arbeitet mit deklarativen Konfigurationen (YAML). Für die Bereitstellung einer Node.js-Anwendung benötigen wir mindestens zwei grundlegende Ressourcen: Deployment und Service.



2.1. Deployment

Das Deployment verwaltet die Replikate Ihrer Anwendung. Erstellen Sie die Datei deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  name: node-app-deployment  labels:    app: node-appspec:  replicas: 3  selector:    matchLabels:      app: node-app  template:    metadata:      labels:        app: node-app    spec:      containers:      - name: node-app        image: my-node-app:latest        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        livenessProbe:          httpGet:            path: /health            port: 3000          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /            port: 3000          initialDelaySeconds: 3          periodSeconds: 5

Wichtige Punkte:

  • replicas: 3 – Kubernetes erstellt 3 Kopien Ihrer Anwendung für Ausfallsicherheit.
  • livenessProbe – Prüft, ob die Anwendung lebt. Wenn keine Antwort erfolgt, startet Kubernetes den Container neu.
  • readinessProbe – Prüft, ob die Anwendung bereit ist, Traffic zu empfangen. Bis die Prüfung bestanden ist, erhält der Pod keine Anfragen.


2.2. Service

Der Service ermöglicht den Netzwerkzugriff auf die Pods. Erstellen Sie service.yaml:

apiVersion: v1kind: Servicemetadata:  name: node-app-servicespec:  selector:    app: node-app  ports:    - protocol: TCP                

Blogs

Buchempfehlungen