Deployment von TypeScript auf Kubernetes: Ein grundlegendes Praxis-Handbuch

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

Einleitung: Warum TypeScript und Kubernetes ein ideales Paar sind

\n

Moderne Webentwicklung erfordert nicht nur qualitativ hochwertigen Code, sondern auch eine zuverlässige Infrastruktur. TypeScript, als statisch typisierte Erweiterung von JavaScript, ermöglicht die Erstellung skalierbarer Serveranwendungen mit minimalen Fehlern während der Kompilierung. Kubernetes (K8s) ist der De-facto-Standard für die Container-Orchestrierung und gewährleistet automatisches Deployment, Skalierung und Verwaltung von Anwendungen.

\n

In diesem Handbuch werden wir praktisch durchgehen, wie man eine einfache TypeScript-Anwendung (Express API) erstellt, sie in ein Docker-Image packt und in einem Kubernetes-Cluster bereitstellt. Sie erhalten fertige Befehle, Konfigurationsdateien und eine Erklärung jedes Schrittes. Das Material richtet sich an Entwickler, die bereits mit den Grundlagen von TypeScript vertraut sind und DevOps-Prozesse erlernen möchten.

\n

Am Ende dieses Artikels werden Sie in der Lage sein, TypeScript-Projekte selbstständig in einer Produktionsumgebung mit Kubernetes bereitzustellen.

\n\n

1. Vorbereitung der TypeScript-Anwendung für die Containerisierung

\n

1.1. Erstellung eines einfachen Express-Servers mit TypeScript

\n

Zur Demonstration erstellen wir eine minimale API mit TypeScript. Stellen Sie sicher, dass Node.js und npm installiert sind.

\n
mkdir ts-k8s-app\ncd ts-k8s-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon
\n

Erstellen Sie tsconfig.json:

\n
{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "strict": true,\n    "esModuleInterop": true\n  },\n  "include": ["src/**/*"]\n}
\n

Schreiben wir nun den Server selbst. Erstellen Sie die Datei src/index.ts:

\n
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/health', (_req: Request, res: Response) => {\n  res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\napp.get('/', (_req: Request, res: Response) => {\n  res.send('Hello from TypeScript on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});
\n

Fügen Sie Skripte in package.json hinzu:

\n
"scripts": {\n  "build": "tsc",\n  "start": "node dist/index.js",\n  "dev": "nodemon src/index.ts"\n}
\n

Überprüfen Sie den Build: npm run build && npm start. Der Server sollte auf Port 3000 laufen.

\n\n

1.2. Optimierung für die Produktion

\n

Für die Produktion ist es wichtig, die Image-Größe zu minimieren. Fügen Sie .dockerignore hinzu:

\n
node_modules\ndist\n.git\n*.md\n.env
\n

Stellen Sie sicher, dass alle Abhängigkeiten in dependencies (nicht in devDependencies) aufgeführt sind, wenn sie zur Laufzeit benötigt werden.

\n\n

2. Erstellung des Docker-Images für die TypeScript-Anwendung

\n

2.1. Schreiben des Dockerfile

\n

Wir verwenden einen mehrstufigen Build (multi-stage build), um die Größe des endgültigen Images zu reduzieren.

\n
# Stage 1: Build\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nRUN npm run build\n\n# Stage 2: Production\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/node_modules ./node_modules\nCOPY --from=builder /app/package.json ./\nEXPOSE 3000\nCMD ["node", "dist/index.js"]
\n

Wichtige Punkte:

\n
    \n
  • npm ci — schnelle und deterministische Installation von Abhängigkeiten.
  • \n
  • Die zweite Schicht enthält nur den kompilierten JS-Code und die erforderlichen Module.
  • \n
  • Das Basis-Image node:18-alpine wiegt nur etwa 120 MB.
  • \n
\n\n

2.2. Bau und Überprüfung des Images

\n
docker build -t ts-k8s-app:latest .\ndocker run -p 3000:3000 ts-k8s-app:latest
\n

Öffnen Sie http://localhost:3000/health — Sie sollten eine JSON-Antwort sehen. Wenn in

Blogs

Buchempfehlungen