Déploiement d'une application Kotlin sur Kubernetes : guide étape par étape

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Déploiement de Kotlin sur Kubernetes : guide pratique de base

\n\n

Le développement moderne exige de plus en plus non seulement l'écriture d'un code de qualité, mais aussi son déploiement judicieux. Kubernetes est devenu le standard de facto pour l'orchestration de conteneurs. Dans ce guide, nous allons voir comment empaqueter une application Kotlin dans un conteneur Docker et la déployer dans un cluster Kubernetes. Vous obtiendrez des manifestes prêts à l'emploi et des exemples pratiques en Kotlin (avec le framework Ktor).

\n\n

1. Préparation de l'application Kotlin

\n\n

Pour la démonstration, prenons une simple API REST avec Ktor. Assurez-vous d'avoir configuré Gradle (ou Maven) avec le plugin application.

\n\n

Exemple de 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

Le point d'accès le plus simple (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

Construisez le fat JAR avec la commande :

\n
./gradlew shadowJar
\n\n

Le JAR prêt apparaîtra dans build/libs/.

\n\n

2. Création de l'image Docker

\n\n

Créez un fichier Dockerfile à la racine du projet :

\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

Construisez l'image et envoyez-la dans un registre (par exemple, Docker Hub) :

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

Remplacez impérativement votrenomutilisateur par votre identifiant Docker Hub ou indiquez l'adresse de votre registre privé.

\n\n

3. Manifestes Kubernetes

\n\n

Pour le déploiement, nous aurons besoin de deux fichiers YAML : Deployment (gère les pods) et Service (ouvre l'accès).

\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: votrenomutilisateur/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

Appliquez les manifestes :

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

Vérifiez le statut :

\n
kubectl get pods\nkubectl                

Blogs

Book Recommendations