Implantação de aplicação Kotlin no Kubernetes: guia passo a passo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Implantação de Kotlin no Kubernetes: guia básico na prática

\n\n

O desenvolvimento moderno cada vez mais exige não apenas escrever código de qualidade, mas também sua implantação adequada. O Kubernetes tornou-se o padrão de facto para orquestração de contêineres. Neste guia, vamos abordar como empacotar uma aplicação Kotlin em um contêiner Docker e implantá-la em um cluster Kubernetes. Você receberá manifestos prontos e exemplos práticos em Kotlin (usando o framework Ktor).

\n\n

1. Preparação da aplicação Kotlin

\n\n

Para demonstração, usaremos uma API REST simples em Ktor. Certifique-se de ter o Gradle (ou Maven) configurado com o plugin application.

\n\n

Exemplo 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

O endpoint mais simples (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

Compile o fat JAR com o comando:

\n
./gradlew shadowJar
\n\n

O JAR pronto aparecerá em build/libs/.

\n\n

2. Criação da imagem Docker

\n\n

Crie o arquivo Dockerfile na raiz do projeto:

\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

Compile a imagem e envie para o registro (por exemplo, Docker Hub):

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

Certifique-se de substituir yourusername pelo seu login no Docker Hub ou informe o endereço do registro privado.

\n\n

3. Manifestos Kubernetes

\n\n

Para a implantação, precisaremos de dois arquivos YAML: Deployment (gerencia os pods) e Service (abre o acesso).

\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

Aplique os manifestos:

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

Verifique o status:

\n
kubectl get pods\nkubectl                

Blogs

Book Recommendations