Implantação de Kotlin no Kubernetes: guia básico para iniciantes

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 para iniciantes

\n\n

Kubernetes (K8s) tornou-se o padrão de facto para orquestração de contêineres no desenvolvimento moderno. Se você programa em Kotlin, seja um backend com Spring Boot, um microsserviço com Ktor ou um aplicativo de console, saber como implantá-lo em um cluster Kubernetes é uma habilidade crucial. Neste guia, percorreremos o caminho desde um simples aplicativo Kotlin até um pod em execução no cluster. O material é voltado para iniciantes: nada de tópicos complexos como Service Mesh ou Helm — apenas o básico.

\n\n

1. Preparando o aplicativo Kotlin para conteinerização

\n\n

Antes de pensar em Kubernetes, precisamos empacotar nosso aplicativo em uma imagem Docker. Vamos considerar o exemplo de uma API REST simples com Ktor — um framework leve, ideal para microsserviços.

\n\n

Criaremos o arquivo build.gradle.kts com dependências mínimas:

\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

Escreveremos um aplicativo simples que responde a requisições 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

O aplicativo escuta na porta 8080. É importante lembrar disso — usaremos esta porta no Dockerfile e nos manifestos.

\n\n

2. Criando a imagem Docker

\n\n

Para construir a imagem, precisaremos de um Dockerfile. A melhor prática é usar uma compilação multi-estágio para que a imagem final seja mínima em tamanho.

\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

Construiremos a imagem e a enviaremos para um registro (por exemplo, Docker Hub):

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

Se você não tiver acesso a um registro, pode usar minikube e carregar a imagem localmente com o comando minikube image load.

\n\n

3. Manifestos básicos do Kubernetes

\n\n

Agora vamos para a parte mais interessante — escrever os manifestos YAML para implantar o aplicativo no cluster. Precisaremos de dois objetos básicos: Deployment (gerencia as réplicas dos pods) e Service (fornece acesso aos pods).

\n\n

3.1 Deployment

\n\n

O Deployment descreve o estado desejado dos pods: qual imagem usar, quantas réplicas, quais portas abrir.

\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