Bereitstellung einer Kotlin-Anwendung auf Kubernetes: Schritt-für-Schritt-Anleitung

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

Kotlin auf Kubernetes bereitstellen: Grundlagenanleitung in der Praxis

\n\n

Die moderne Entwicklung erfordert zunehmend nicht nur das Schreiben von qualitativ hochwertigem Code, sondern auch dessen fachgerechte Bereitstellung. Kubernetes hat sich zum De-facto-Standard für die Container-Orchestrierung entwickelt. In dieser Anleitung werden wir durchgehen, wie man eine Kotlin-Anwendung in einen Docker-Container packt und in einem Kubernetes-Cluster bereitstellt. Sie erhalten fertige Manifeste und praktische Beispiele in Kotlin (unter Verwendung des Ktor-Frameworks).

\n\n

1. Vorbereitung der Kotlin-Anwendung

\n\n

Zur Demonstration nehmen wir eine einfache REST-API mit Ktor. Stellen Sie sicher, dass Sie Gradle (oder Maven) mit dem application-Plugin eingerichtet haben.

\n\n

Beispiel build.gradle.kts:

\n
plugins {\n    kotlin("jvm") version "1.9.22"\n    application\n    id("com.github.johnrengelman.shadow") version "8.1.1"\n}\n\napplication {\n    mainClass.set("com.example.ApplicationKt")\n}\n\ndependencies {\n    implementation("io.ktor:ktor-server-netty:2.3.7")\n    implementation("io.ktor:ktor-server-content-negotiation:2.3.7")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")\n}
\n\n

Der einfachste Endpunkt (src/main/kotlin/com/example/Application.kt):

\n
package com.example\n\nimport io.ktor.server.engine.*\nimport io.ktor.server.netty.*\nimport io.ktor.server.routing.*\nimport io.ktor.server.response.*\nimport io.ktor.serialization.kotlinx.json.*\nimport io.ktor.server.plugins.contentnegotiation.*\n\nfun main() {\n    embeddedServer(Netty, port = 8080) {\n        install(ContentNegotiation) {\n            json()\n        }\n        routing {\n            get("/") {\n                call.respond(mapOf("message" to "Hello from Kotlin on K8s!"))\n            }\n            get("/health") {\n                call.respond(mapOf("status" to "UP"))\n            }\n        }\n    }.start(wait = true)\n}
\n\n

Erstellen Sie das Fat-JAR mit dem Befehl:

\n
./gradlew shadowJar
\n\n

Das fertige JAR erscheint in build/libs/.

\n\n

2. Erstellen des Docker-Images

\n\n

Erstellen Sie eine Datei Dockerfile im Projektstammverzeichnis:

\n
FROM openjdk:17-jdk-slim\n\nWORKDIR /app\n\nCOPY build/libs/*-all.jar app.jar\n\nEXPOSE 8080\n\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

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

\n
docker build -t yourusername/kotlin-k8s-demo:v1 .\ndocker push yourusername/kotlin-k8s-demo:v1
\n\n

Ersetzen Sie yourusername unbedingt durch Ihren eigenen Login bei Docker Hub oder geben Sie die Adresse einer privaten Registry an.

\n\n

3. Kubernetes-Manifeste

\n\n

Für die Bereitstellung benötigen wir zwei YAML-Dateien: Deployment (verwaltet die Pods) und Service (ermöglicht den Zugriff).

\n\n

3.1. Deployment (deployment.yaml)

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: kotlin-app\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: kotlin-app\n  template:\n    metadata:\n      labels:\n        app: kotlin-app\n    spec:\n      containers:\n      - name: kotlin-app\n        image: yourusername/kotlin-k8s-demo:v1\n        ports:\n        - containerPort: 8080\n        livenessProbe:\n          httpGet:\n            path: /health\n            port: 8080\n          initialDelaySeconds: 5\n          periodSeconds: 10\n        readinessProbe:\n          httpGet:\n            path: /health\n            port: 8080\n          initialDelaySeconds: 3\n          periodSeconds: 5
\n\n

3.2. Service (service.yaml)

\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: kotlin-app-service\nspec:\n  selector:\n    app: kotlin-app\n  ports:\n  - port: 80\n    targetPort: 8080\n  type: LoadBalancer
\n\n

Wenden Sie die Manifeste an:

\n
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml
\n\n

Überprüfen Sie den Status:

\n
kubectl get pods\nkubectl                

Blogs

Buchempfehlungen