Bereitstellung von TypeScript auf Kubernetes: Ein grundlegender Leitfaden für Anfänger
\n\nModerne Webentwicklung ist ohne Containerisierung und Orchestrierung nicht denkbar. Wenn Sie in TypeScript schreiben und möchten, dass Ihre Anwendung stabil läuft, sich automatisch skaliert und ausfallsicher ist, wird Kubernetes (K8s) Ihr bester Freund. In diesem Leitfaden gehen wir Schritt für Schritt durch, wie Sie eine TypeScript-Anwendung in Docker verpacken und in einem Kubernetes-Cluster bereitstellen. Das Material richtet sich an Anfänger: keine Magie, nur verständliche Beispiele und Erklärungen.
\n\n1. Vorbereitung der TypeScript-Anwendung
\n\nBevor Sie an Kubernetes denken, müssen Sie sicherstellen, dass Ihre Anwendung bereit für den Betrieb in einem Container ist. Wir erstellen einen einfachen HTTP-Server mit Express und TypeScript.
\n\n1.1. Projektinitialisierung
\nErstellen Sie einen Projektordner und führen Sie die Initialisierung durch:
\nmkdir my-ts-app && cd my-ts-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon\n\n1.2. TypeScript-Konfiguration
\nErstellen Sie die Datei tsconfig.json:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\n1.3. Anwendungscode
\nErstellen Sie den Ordner src und die Datei index.ts:
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req: Request, res: Response) => {\n res.json({ message: 'Hello from TypeScript on Kubernetes!' });\n});\n\napp.listen(PORT, () => {\n console.log(`Server running on port ${PORT}`);\n});\n\n1.4. Build und Ausführung
\nFügen Sie Skripte in package.json hinzu:
"scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node src/index.ts"\n}\nÜberprüfen Sie die lokale Ausführung: npm run dev und öffnen Sie http://localhost:3000.
2. Containerisierung mit Docker
\n\nKubernetes arbeitet mit Containern. Wir müssen ein Docker-Image unserer TypeScript-Anwendung erstellen.
\n\n2.1. Dockerfile
\nErstellen Sie die Datei Dockerfile im Projektstammverzeichnis:
FROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\nFROM node:18-alpine AS production\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/package*.json ./\nRUN npm ci --only=production\nEXPOSE 3000\nCMD ["node", "dist/index.js"]\nWir verwenden einen Multi-Stage-Build: Zuerst wird TypeScript kompiliert, dann erstellen wir ein leichtes finales Image.
\n\n2.2. Image-Build
\ndocker build -t my-ts-app:latest .\nÜberprüfen Sie lokal:
\ndocker run -p 3000:3000 my-ts-app:latest\n\n2.3. .dockerignore
\nUm unnötige Dateien nicht zu kopieren, erstellen Sie .dockerignore:
node_modules\ndist\n.git\n*.md\n\n3. Bereitstellung in Kubernetes
\n\nDa wir nun ein Docker-Image haben, können wir zu Kubernetes übergehen. Für lokale Tests empfehle ich Minikube oder Kind.
\n\n3.1. Minikube starten
\nminikube start --driver=docker\nminikube status\n\n3.2. Image in Minikube laden
\nDamit Kubernetes unser Image finden kann, laden wir es in die Minikube-Umgebung:
\nminikube image load my-ts-app:latest\n\n3.3. Deployment erstellen
\nErstellen Sie die Datei deployment.yaml:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-ts-app-deployment\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: my-ts