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: 5Wichtige 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