Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Portabilidade multiregião com Kubernetes, Quark...

Portabilidade multiregião com Kubernetes, Quarkus e Eclipse JKube

Palestra apresentada no DevNation São Paulo 2024

Víctor Orozco

October 10, 2024
Tweet

More Decks by Víctor Orozco

Other Decks in Programming

Transcript

  1. 2

  2. O problema IDP v1 • Inovação digital em modalidade Lean

    • Infraestrutura Lean = Clickops • Aproximadamente 200 locais de entrega IDP v2 • Mais clientes - America Central • A infraestrutura lean estava ficando limitada • Clickops (uma região) -> Disaster Recovery Warm Standby (Multirregião) 3
  3. 4

  4. Ideia 1: Seja cloud native sempre Um bom microservice chassis

    facilita a portabilidade Na camada de aplicativos, precisamos reconfigurar os pipelines, só! 5
  5. Ideia 1: Quarkus é um bom microservice chassis Quarkus Spring

    Boot Desenvolvimento Java/Jakarta EE Spring Framework Startup Time Muito bom Bom DevExperience Dev Services, hot reload Spring Dev Tools Documentação Docs. oficiais Docs. oficiais + comunidade 6
  6. Ideia 2: 12 factor app • 1. Codebase: Gitflow •

    2. Dependencies: Maven + Containers • 3. Config: SmallRye Config + Env vars • 4. Backing Services: Cloud, Hibernate Panache • 5. Build, Release, Run: Maven + Eclipse JKube • 6. Processes: JAX-RS, RestEasy MicroProfile Client • 7. Port Binding: K8S deployment + K8S services • 8. Concurrency: SmallRye Health/Micrometer + HPA • 9. Disposability: Quarkus Supersonic subatomic • 10. Dev/Prod Parity: Containers + SmallRye Config • 11. Logs: Fluentd, Cloud index • 12. Admin Processes: Flyway + Eclipse JKube 7
  7. Ideia 3: Configuração = Chave da portabilidade O chefe dos

    patterns https://microservices.io/index.html 8
  8. Ideia 3: Configuração = Chave da portabilidade application.properties 1 %dev.quarkus.datasource.username=postgres

    2 %dev.quarkus.datasource.password=chronicles 3 %dev.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost :5432/mydb 9
  9. Ideia 3: Configuração = Chave da portabilidade src/main/jkube/deployment.yaml 1 -

    name: QUARKUS_DATASOURCE_JDBC_URL 2 valueFrom: 3 secretKeyRef: 4 name: ${jkube.cluster.dbsecret} 5 key: url Sobrescrever com operadores dentro do cluster ou backing services 10
  10. Ideia 3: Configuração = Chave da portabilidade SmallRye Config (3)

    trabalha bem com: • Hibernate/JPA: Datasources (4) • SmallRye Reactive Messaging: Tópicos (4) • RestEasy MicroProfile Client: URL dos serviços (6) • Quarkus Profiles: Code Parity + Configuração por ambiente (10) 11
  11. Ideia 4: Kubernetes Maven friendly (2, 5 e 12) Maven

    • Propriedades de artefatos (nome, versão) • Ajustes e ambientes via perfis • Execução de tarefas (mvn) Kubernetes descriptor • Propriedades de artefatos (nome, versão de containers, tags) • Ajustes e ambientes (env vars + NS) • Execução de tarefas (kubectl) 12
  12. Zero (Spring Boot, Vert.x, Wildfly, Quarkus, Open Liberty, Micronaut) 1

    <plugin> 2 <groupId>org.eclipse.jkube</groupId> 3 <artifactId>kubernetes-maven-plugin</artifactId> 4 <version>1.17.0</version> 5 </plugin> 13
  13. 15

  14. Ideia 4: Kubernetes Maven friendly (2, 5 e 12) Criação

    de container 1 mvn clean verify k8s:build Criação de deployment plan (target/classes/META-INF/jkube/kubernetes.yml) 1 mvn k8s:resource Deployment 1 mvn k8s:apply 16
  15. Resultados • Migração: • Três meses de camada de infraestrutura

    (IaC, dados), <10 commits por artefato Java • Redução de riscos e erros: • Menos erros manuais • Deployments mais rápidos • Ideias para o futuro que o Quarkus já tem: • OpenTelemetry • GraalVM Native 19