Despliegue de Kotlin en Kubernetes: guía básica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course
```html

Despliegue de Kotlin en Kubernetes: guía básica



El desarrollo moderno es impensable sin contenedores y orquestación. Kubernetes (K8s) se ha convertido en el estándar para gestionar microservicios, y Kotlin en uno de los lenguajes más populares para crear aplicaciones backend robustas. En esta guía recorreremos el camino desde una aplicación simple en Kotlin hasta su despliegue completo en un clúster de Kubernetes. Aprenderá cómo empaquetar el código en una imagen Docker, escribir manifiestos y configurar el acceso al servicio.



1. Preparación de la aplicación Kotlin



Como ejemplo, tomaremos una API REST simple con Ktor, un framework ligero para Kotlin. Crearemos el archivo Main.kt:



import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.routing.*import io.ktor.http.*import io.ktor.server.response.*

fun main() { embeddedServer(Netty, port = 8080) { routing { get("/") { call.respondText("Hello from Kotlin on K8s!", ContentType.Text.Plain) } get("/health") { call.respondText("OK", ContentType.Text.Plain) } } }.start(wait = true)}


Este código inicia un servidor en el puerto 8080 con dos endpoints: raíz y health check. Asegúrese de que en build.gradle.kts estén incluidas las dependencias de Ktor y Netty.



2. Creación de la imagen Docker



Para el despliegue en Kubernetes, la aplicación debe estar empaquetada en un contenedor. Crearemos un Dockerfile en la raíz del proyecto:



FROM gradle:8.5-jdk21 AS buildWORKDIR /appCOPY build.gradle.kts settings.gradle.kts ./COPY src ./srcRUN gradle build --no-daemon

FROM openjdk:21-jdk-slimWORKDIR /appCOPY --from=build /app/build/libs/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


La compilación se realiza en dos etapas: primero la compilación con Gradle, luego la copia del archivo JAR a una imagen limpia. Construya la imagen con el comando:



docker build -t my-kotlin-app:1.0 .


Para publicar en un registro (por ejemplo, Docker Hub), ejecute:



docker tag my-kotlin-app:1.0 yourusername/my-kotlin-app:1.0docker push yourusername/my-kotlin-app:1.0


3. Manifiestos de Kubernetes



Ahora crearemos los archivos YAML para el despliegue en el clúster. Empezamos con deployment.yaml:



apiVersion: apps/v1kind: Deploymentmetadata:  name: kotlin-appspec:  replicas: 2  selector:    matchLabels:      app: kotlin-app  template:    metadata:      labels:        app: kotlin-app    spec:      containers:      - name: kotlin-app        image: yourusername/my-kotlin-app:1.0        ports:        - containerPort: 8080        livenessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /health            port: 8080          initialDelaySeconds: 3          periodSeconds: 5


Este manifiesto crea dos réplicas de la aplicación, añade comprobaciones de actividad y disponibilidad. A continuación, service.yaml:



apiVersion: v1kind: Servicemetadata:  name: kotlin-app-svcspec:  selector:    app: kotlin-app  ports:  - port: 80    targetPort: 8080  type: ClusterIP


El servicio dirige el tráfico del puerto 80 al puerto 8080 del contenedor. Si necesita acceso externo, cambie el tipo a NodePort o LoadBalancer.



4. Configuración de Ingress y despliegue



Para el enrutamiento de solicitudes externas, utilizamos un controlador Ingress. Cree ingress.yaml:



apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: kotlin-app-ingress  annotations:    nginx.ingress.kubernetes.io/rewrite-target: /spec:  rules:  - host: kotlin.example.com    http:```                

Blogs

Book Recommendations