Implantação de aplicações Java no Kubernetes: guia passo a passo

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 aplicações Java no Kubernetes: do Dockerfile ao serviço em funcionamento

\n\n

O desenvolvimento Java moderno é impensável sem conteinerização e orquestração. Kubernetes (K8s) tornou-se o padrão para gerenciamento de microsserviços, e saber implantar aplicações Java em um cluster é uma habilidade obrigatória para desenvolvedores backend. Neste artigo, vamos analisar na prática o ciclo completo de implantação: desde a construção da imagem Docker com a aplicação Java até a configuração do balanceamento de carga via Ingress.

\n\n

1. Preparação da aplicação Java e Dockerfile

\n\n

Antes de chegar ao Kubernetes, sua aplicação Java deve ser empacotada em uma imagem Docker. Vamos considerar o caso clássico — uma aplicação Spring Boot, compilada em um arquivo JAR.

\n\n

Compilação do projeto

\n

Suponha que temos um projeto que é compilado via Maven. Execute o comando na raiz do projeto:

\n
mvn clean package -DskipTests
\n

Como resultado, na pasta target/ aparecerá o arquivo my-app-1.0.0.jar.

\n\n

Criação do Dockerfile

\n

Para minimizar o tamanho da imagem e aumentar a segurança, usamos compilação multi-estágio (multi-stage build).

\n
# Stage 1: compilação\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: imagem 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

Compilação e publicação da imagem

\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. Criação de manifestos Kubernetes

\n\n

Kubernetes usa uma abordagem declarativa. Vamos descrever o estado desejado do sistema em arquivos YAML.

\n\n

Deployment — gerenciamento de pods

\n

Crie o arquivo 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 — garantindo acesso

\n

Crie o arquivo 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 — externalizando configuração

\n

Para armazenar variáveis de ambiente, crie 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. Implantação no cluster e verificação

\n\n

Agora vamos aplicar todos os manifestos ao cluster. Certifique-se de que o kubectl está configurado e você está conectado ao contexto correto.

\n\n

Aplicação dos manifestos

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

Verificação do estado

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

Você deve

Blogs

Book Recommendations