Einleitung: Warum JavaScript auf Kubernetes bereitstellen?
\n\nModerne Webentwicklung ist ohne Containerisierung undenkbar. Wenn Sie in JavaScript (Node.js) schreiben und möchten, dass Ihre Anwendung stabil läuft, sich automatisch skaliert und ausfallsicher ist, wird Kubernetes (K8s) Ihr bester Freund.
\n\nKubernetes ist eine Plattform zur Container-Orchestrierung. Sie verwaltet die Bereitstellung, Skalierung und den Betrieb Ihrer Anwendungen. In diesem Leitfaden werden wir die grundlegende Bereitstellung einer einfachen Node.js-Anwendung auf Kubernetes durchgehen. Sie erfahren, wie Sie Code in ein Docker-Image packen und Pod, Service und Deployment erstellen.
\n\nDer Artikel richtet sich an Anfänger. Es wird vorausgesetzt, dass Sie Docker und Minikube bereits installiert haben (oder Zugang zu einem K8s-Cluster haben).
\n\nSchritt 1: Vorbereitung der Node.js-Anwendung und des Docker-Images
\n\nZunächst erstellen wir eine einfache Webanwendung mit Express. Sie wird auf HTTP-Anfragen antworten.
\n\n1.1. Anwendungscode (app.js)
\n\nErstellen Sie eine Datei app.js:
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n res.send('Hallo aus Kubernetes!');\n});\n\napp.listen(PORT, () => {\n console.log(`Server läuft auf Port ${PORT}`);\n});\n\n\n1.2. Datei package.json
\n\nErstellen Sie package.json:
{\n "name": "k8s-node-app",\n "version": "1.0.0",\n "main": "app.js",\n "scripts": {\n "start": "node app.js"\n },\n "dependencies": {\n "express": "^4.18.2"\n }\n}\n\n\n1.3. Dockerfile
\n\nJetzt erstellen wir ein Dockerfile zum Bauen des Images:
FROM node:18-alpine\n\nWORKDIR /usr/src/app\n\nCOPY package*.json ./\nRUN npm install\n\nCOPY . .\n\nEXPOSE 3000\n\nCMD ["node", "app.js"]\n\n\n1.4. Image bauen und hochladen
\n\nFühren Sie die folgenden Befehle aus:
\n\ndocker build -t my-node-app:v1 .\n\n\nWenn Sie Minikube verwenden, bauen Sie das Image in seiner Umgebung:
\n\nminikube image build -t my-node-app:v1 .\n\n\nOder laden Sie das Image in Docker Hub / eine beliebige Registry hoch und geben Sie es im Manifest an.
\n\nSchritt 2: Grundlegende Kubernetes-Objekte (Pod, Deployment, Service)
\n\nKubernetes arbeitet mit Objekten. Für die Bereitstellung benötigen wir drei grundlegende:
\n\n- \n
- Pod — die kleinste Einheit, ein oder mehrere Container. \n
- Deployment — verwaltet Pods, ermöglicht Skalierung und Updates. \n
- Service — stabiler Zugangspunkt zu den Pods (normalerweise über ClusterIP oder NodePort). \n
2.1. Deployment erstellen
\n\nErstellen Sie eine Datei deployment.yaml:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: node-app-deployment\nspec:\n replicas: 3\n selector:\n matchLabels:\n app: node-app\n template:\n metadata:\n labels:\n app: node-app\n spec:\n containers:\n - name: node-app\n image: my-node-app:v1\n ports:\n - containerPort: 3000\n env:\n - name: PORT\n value: "3000"\n\n\nErklärung:
\n- \n
replicas: 3— wir starten 3 Kopien der Anwendung für Ausfallsicherheit. \n selectorundlabels— verbinden das Deployment mit den Pods. \n image— der Name Ihres Docker-Images. \n
2.2. Service erstellen
\n\nErstellen Sie eine Datei service.yaml für den Zugriff auf die Anwendung:
apiVersion: v1\nkind: Service\nmetadata:\n name: node-app-service\nspec:\n selector:\n app: node-app\n ports:\n - protocol: TCP\n port: 80\n targetPort: 3000\n type: NodePort\n\n\nWas hier passiert:
\n- \n
- Der Service leitet den Datenverkehr von Port