Déploiement de Kotlin sur Kubernetes : guide de base pour débutants

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 de base pour débutants

\n\n

Kubernetes (K8s) est devenu le standard de facto pour l'orchestration de conteneurs dans le développement moderne. Si vous codez en Kotlin, que ce soit un backend Spring Boot, un microservice Ktor ou une application console, savoir le déployer dans un cluster Kubernetes est une compétence cruciale. Dans ce guide, nous allons parcourir le chemin d'une simple application Kotlin jusqu'à un pod en fonctionnement dans un cluster. Le contenu est conçu pour les débutants : pas de sujets complexes comme Service Mesh ou Helm, seulement les bases.

\n\n

1. Préparation de l'application Kotlin pour la conteneurisation

\n\n

Avant de penser à Kubernetes, nous devons empaqueter notre application dans une image Docker. Prenons l'exemple d'une API REST simple avec Ktor, un framework léger idéal pour les microservices.

\n\n

Créons un fichier build.gradle.kts avec les dépendances minimales :

\n\n
plugins {\n    kotlin("jvm") version "1.9.0"\n    application\n}\n\napplication {\n    mainClass.set("com.example.AppKt")\n}\n\ndependencies {\n    implementation("io.ktor:ktor-server-netty:2.3.0")\n    implementation("io.ktor:ktor-server-content-negotiation:2.3.0")\n    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0")\n}
\n\n

Écrivons une application simple qui répond aux requêtes GET :

\n\n
// src/main/kotlin/com/example/App.kt\npackage 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.http.*\n\nfun main() {\n    embeddedServer(Netty, port = 8080) {\n        routing {\n            get("/") {\n                call.respondText("Hello from Kotlin on Kubernetes!", ContentType.Text.Plain)\n            }\n        }\n    }.start(wait = true)\n}
\n\n

L'application écoute sur le port 8080. C'est important à retenir — nous utiliserons ce port dans le Dockerfile et les manifestes.

\n\n

2. Création de l'image Docker

\n\n

Pour construire l'image, nous avons besoin d'un Dockerfile. La meilleure pratique est d'utiliser une construction multi-étapes pour que l'image finale soit de taille minimale.

\n\n
FROM gradle:7.6-jdk17 AS build\nWORKDIR /app\nCOPY build.gradle.kts settings.gradle.kts ./\nCOPY src ./src\nRUN gradle build --no-daemon\n\nFROM openjdk:17-jre-slim\nWORKDIR /app\nCOPY --from=build /app/build/libs/*.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

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

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

Si vous n'avez pas accès à un registre, vous pouvez utiliser minikube et charger l'image localement avec la commande minikube image load.

\n\n

3. Manifestes Kubernetes de base

\n\n

Passons maintenant à la partie la plus intéressante — la rédaction des manifestes YAML pour déployer l'application dans le cluster. Nous aurons besoin de deux objets de base : Deployment (gère les répliques de pods) et Service (assure l'accès aux pods).

\n\n

3.1 Deployment

\n\n

Le Deployment décrit l'état souhaité des pods : quelle image utiliser, combien de répliques, quels ports ouvrir.

\n\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        resources:\n          requests:\n            memory: "256Mi"\n            cpu: "250m"\n          limits:\n            memory: "512Mi"\n            cpu: "500m"\n        livenessProbe:\n          httpGet:\n            path: /\n            port: 8080\n          initialDelaySeconds: 10\n          periodSeconds: 5\n        readinessProbe:\n          httpGet:\n                

Blogs

Book Recommendations