TypeScript auf Kubernetes bereitstellen: Ein grundlegender Leitfaden

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

Deploy von TypeScript auf Kubernetes: Grundlagenleitfaden



Die moderne Webentwicklung erfordert zunehmend nicht nur das Schreiben von qualitativ hochwertigem Code, sondern auch eine kompetente Bereitstellung von Anwendungen. TypeScript ist dank seiner strengen Typisierung und leistungsstarken Werkzeuge zu einer beliebten Wahl für Backend-Dienste auf Node.js geworden. Ohne das richtige Deployment bleibt jedoch selbst perfekter Code auf dem lokalen Rechner. Kubernetes – der Standard für die Container-Orchestrierung – ermöglicht die Automatisierung von Bereitstellung, Skalierung und Verwaltung von Anwendungen. In diesem Leitfaden gehen wir den schrittweisen Prozess des Deployments einer TypeScript-Anwendung auf Kubernetes durch.



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

Bevor der Code an den Cluster gesendet wird, muss sichergestellt werden, dass die Anwendung bereit für den Betrieb in einem Container ist. Betrachten wir ein typisches Projekt mit Express.js und TypeScript.



Projektstruktur

my-ts-app/├── src/│   ├── index.ts│   └── routes/├── dist/├── package.json├── tsconfig.json└── Dockerfile


Konfiguration von tsconfig.json

Stellen Sie sicher, dass der TypeScript-Compiler das Projekt in den Ordner dist kompiliert:

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


Einfacher Server (src/index.ts)

import express, { Request, Response } from 'express';

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

app.get('/health', (_req: Request, res: Response) => { res.json({ status: 'ok', timestamp: new Date().toISOString() });});

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


Fügen Sie Skripte in package.json hinzu:

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


2. Erstellung des Docker-Images für TypeScript

Die Containerisierung ist ein entscheidender Schritt vor dem Deployment in Kubernetes. Wir verwenden einen mehrstufigen Build (multi-stage build), um die Image-Größe zu reduzieren.



Dockerfile

# Stage 1: BuildFROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ciCOPY tsconfig.json ./COPY src/ ./src/RUN npm run build

# Stage 2: ProductionFROM node:18-alpine AS productionWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/package*.json ./RUN npm ci --only=productionEXPOSE 3000CMD ["node", "dist/index.js"]


Erstellen Sie das Image und senden Sie es an eine Registry (z. B. Docker Hub):

docker build -t yourusername/my-ts-app:v1 .docker push yourusername/my-ts-app:v1


3. Schreiben von Kubernetes-Manifesten

Für das Deployment in Kubernetes werden mindestens zwei Ressourcen benötigt: Deployment (Verwaltung der Pods) und Service (Zugriff auf die Anwendung).



deployment.yaml

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


service.yaml

apiVersion: v1kind: Servicemetadata:  name: my-ts-app-servicespec:  selector:    app: my-ts-app  ports:  - protocol: T                

Blogs

Buchempfehlungen