Despliegue de aplicaciones Java en Kubernetes: guía paso a paso

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

Despliegue de aplicaciones Java en Kubernetes: desde Dockerfile hasta un servicio en funcionamiento

\n\n

El desarrollo moderno de Java es impensable sin contenerización y orquestación. Kubernetes (K8s) se ha convertido en el estándar para la gestión de microservicios, y saber desplegar aplicaciones Java en un clúster es una habilidad obligatoria para cualquier desarrollador backend. En este artículo, analizaremos en la práctica el ciclo completo de despliegue: desde la construcción de la imagen Docker con la aplicación Java hasta la configuración del balanceo de carga a través de Ingress.

\n\n

1. Preparación de la aplicación Java y Dockerfile

\n\n

Antes de llegar a Kubernetes, su aplicación Java debe estar empaquetada en una imagen Docker. Consideremos el caso clásico: una aplicación Spring Boot compilada en un archivo JAR.

\n\n

Compilación del proyecto

\n

Supongamos que tenemos un proyecto que se compila con Maven. Ejecute el comando en la raíz del proyecto:

\n
mvn clean package -DskipTests
\n

Como resultado, en la carpeta target/ aparecerá el archivo my-app-1.0.0.jar.

\n\n

Creación del Dockerfile

\n

Para minimizar el tamaño de la imagen y aumentar la seguridad, utilizamos una compilación en múltiples etapas (multi-stage build).

\n
# Stage 1: compilación\nFROM maven:3.8.6-openjdk-17 AS builder\nWORKDIR /app\nCOPY pom.xml .\nRUN mvn dependency:go-offline -B\nCOPY src ./src\nRUN mvn package -DskipTests\n\n# Stage 2: imagen final\nFROM openjdk:17-jdk-slim\nWORKDIR /app\nCOPY --from=builder /app/target/my-app-1.0.0.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]
\n\n

Compilación y publicación de la imagen

\n
docker build -t my-java-app:1.0.0 .\ndocker tag my-java-app:1.0.0 your-dockerhub/my-java-app:1.0.0\ndocker push your-dockerhub/my-java-app:1.0.0
\n\n

2. Creación de manifiestos de Kubernetes

\n\n

Kubernetes utiliza un enfoque declarativo. Describiremos el estado deseado del sistema en archivos YAML.

\n\n

Deployment — gestión de pods

\n

Cree el archivo deployment.yaml:

\n
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: java-app-deployment\n  labels:\n    app: java-app\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: java-app\n  template:\n    metadata:\n      labels:\n        app: java-app\n    spec:\n      containers:\n      - name: java-app\n        image: your-dockerhub/my-java-app:1.0.0\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: /actuator/health\n            port: 8080\n          initialDelaySeconds: 30\n          periodSeconds: 10\n        readinessProbe:\n          httpGet:\n            path: /actuator/health\n            port: 8080\n          initialDelaySeconds: 20\n          periodSeconds: 5
\n\n

Service — garantizar el acceso

\n

Cree el archivo service.yaml:

\n
apiVersion: v1\nkind: Service\nmetadata:\n  name: java-app-service\nspec:\n  selector:\n    app: java-app\n  ports:\n  - protocol: TCP\n    port: 80\n    targetPort: 8080\n  type: ClusterIP
\n\n

ConfigMap — externalización de la configuración

\n

Para almacenar variables de entorno, cree configmap.yaml:

\n
apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: app-config\ndata:\n  SPRING_PROFILES_ACTIVE: "prod"\n  DB_URL: "jdbc:postgresql://postgres-service:5432/mydb"
\n\n

3. Despliegue en el clúster y verificación

\n\n

Ahora aplicaremos todos los manifiestos al clúster. Asegúrese de tener configurado kubectl y de estar conectado al contexto correcto.

\n\n

Aplicación de los manifiestos

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

Verificación del estado

\n
kubectl get pods\nkubectl get deployments\nkubectl get services
\n

Debería

Blogs

Book Recommendations