Despliegue de Java en Kubernetes: guía básica para principiantes
\n\nEl desarrollo moderno en Java es impensable sin contenerización y orquestación. Kubernetes (K8s) se ha convertido en el estándar de facto para gestionar aplicaciones contenerizadas. En esta guía, analizaremos paso a paso el proceso de despliegue de una aplicación Java simple en un clúster de Kubernetes. Aprenderá cómo empaquetar el código en una imagen Docker, crear los manifiestos necesarios y ejecutar la aplicación en un entorno similar al de producción.
\n\n1. Preparación de la aplicación Java y la imagen Docker
\n\nComencemos con una aplicación Spring Boot simple. Cree un archivo Dockerfile en el directorio raíz del proyecto:
FROM openjdk:17-jdk-alpine\nWORKDIR /app\nCOPY target/my-app.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]\n\nConstruya la imagen y envíela a un registro (por ejemplo, Docker Hub):
\n\nmvn clean package -DskipTests\ndocker build -t myregistry/my-java-app:v1 .\ndocker push myregistry/my-java-app:v1\n\nAsegúrese de que la imagen funcione localmente:
\n\ndocker run -p 8080:8080 myregistry/my-java-app:v1\n\n2. Objetos principales de Kubernetes
\n\nPara desplegar una aplicación Java, necesitaremos tres recursos clave:
\n\n- \n
- Deployment — gestiona réplicas y actualizaciones \n
- Service — proporciona acceso de red a los pods \n
- Ingress — (opcional) enrutamiento del tráfico externo \n
Creación del Deployment (deployment.yaml)
\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: java-app-deployment\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: myregistry/my-java-app: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: /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\nCreación del Service (service.yaml)
\n\napiVersion: 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\n3. Despliegue en el clúster Kubernetes
\n\nAplique los manifiestos a su clúster (asegúrese de que kubectl esté configurado):
kubectl apply -f deployment.yaml\nkubectl apply -f service.yaml\n\nVerifique el estado de los pods y del servicio:
\n\nkubectl get pods\nkubectl get svc java-app-service\n\nPara el acceso externo (por ejemplo, para pruebas), use port-forward:
\n\nkubectl port-forward service/java-app-service 8080:80\n\nAhora la aplicación está disponible en http://localhost:8080.
4. Escalado y actualización
\n\nKubernetes permite escalar la aplicación fácilmente:
\n\nkubectl scale deployment java-app-deployment --replicas=5\n\nPara actualizar la imagen (rolling update), cambie la etiqueta en el Deployment y aplíquela:
\n\nkubectl set image deployment/java-app-deployment java-app=myregistry/my-java-app:v2\nkubectl rollout status deployment/java-app-deployment\n\nSi es necesario, revierta los cambios:
\n\nkubectl rollout undo deployment/java-app-deployment\n\nConclusión
\n\nHemos cubierto el proceso básico de despliegue de una aplicación Java en Kubernetes