Introdução: Por que Kubernetes para o desenvolvedor Java?
O desenvolvimento Java moderno cada vez mais ultrapassa os limites da simples execução de arquivos JAR em um servidor. A arquitetura de microsserviços, a necessidade de escalabilidade horizontal e tolerância a falhas levam ao uso de contêineres e orquestradores. Kubernetes (K8s) tornou-se o padrão de facto para gerenciar aplicações conteinerizadas. Neste guia, vamos abordar como realizar a implantação de uma aplicação Java típica (por exemplo, em Spring Boot) em um cluster Kubernetes. Você aprenderá como empacotar a aplicação em uma imagem Docker, criar os manifestos necessários e executá-la.
1. Preparação da aplicação Java e criação da imagem Docker
Antes de chegar ao Kubernetes, a aplicação Java deve ser empacotada em um contêiner. Vamos considerar um exemplo simples em Spring Boot.
1.1. Exemplo de aplicação Java
Criaremos um controlador REST mínimo que retornará a versão da aplicação:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication@RestControllerpublic class App { public static void main(String[] args) { SpringApplication.run(App.class, args); }
@GetMapping("/") public String home() { return "Java App running on Kubernetes v1.0"; }}1.2. Criação do Dockerfile
Para aplicações Java, é ideal usar a construção em múltiplos estágios (multi-stage build) para reduzir o tamanho da imagem final:
FROM maven:3.8.6-eclipse-temurin-17 AS builderWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offline -BCOPY src ./srcRUN mvn package -DskipTests
FROM eclipse-temurin:17-jre-alpineWORKDIR /appCOPY --from=builder /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]1.3. Criação e publicação da imagem
Crie a imagem e envie-a para um registro (por exemplo, Docker Hub):
docker build -t yourusername/java-k8s-demo:1.0 .docker push yourusername/java-k8s-demo:1.02. Principais objetos do Kubernetes para implantação de Java
Para implantar a aplicação Java, serão necessários pelo menos dois recursos: Deployment (gerencia réplicas e atualizações) e Service (fornece acesso à rede).
2.1. Manifesto Deployment
Crie o arquivo deployment.yaml:
apiVersion: apps/v1kind: Deploymentmetadata: name: java-app labels: app: java-appspec: replicas: 2 selector: matchLabels: app: java-app template: metadata: labels: app: java-app spec: containers: - name: java-app image: yourusername/java-k8s-demo:1.0 ports: - containerPort: 8080 resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m" livenessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 20 periodSeconds: 5Importante: Para Spring Boot, use o Actuator para health checks. Especifique requests e limits para que o Kubernetes distribua os recursos corretamente.
2.2. Manifesto Service
Crie o service.yaml para acesso interno aos pods:
apiVersion: v1kind: Servicemetadata: name: java-app-servicespec: selector: app: java-app ports: - protocol: TCP port