Codifique sua nuvem e Kubernetes com Crossplane e IaC

À medida que as organizações adotam o Kubernetes para aplicações nativas na nuvem, a gestão eficiente da infraestrutura torna-se um desafio. Ferramentas tradicionais de Infraestrutura como Código (IaC), como Terraform, Pulumi e outras, fornecem configurações declarativas, mas carecem de integração perfeita nos fluxos de trabalho nativos do Kubernetes.

Crossplane efetivamente preenche a lacuna entre o Kubernetes e a infraestrutura de nuvem nessa situação. Neste blog, exploraremos como o Crossplane possibilita o IaC para o Kubernetes e além.

O Que É o Crossplane?

O Crossplane é um complemento Kubernetes de código aberto que permite a você provisionar e gerenciar a infraestrutura de nuvem usando Definições de Recursos Personalizados do Kubernetes (CRDs) e a API do Kubernetes. Ao contrário das ferramentas tradicionais de IaC que requerem execução externa, como scripts do Terraform sendo executados externamente, o Crossplane incorpora a gestão da infraestrutura no Kubernetes. Isso o torna verdadeiramente declarativo e amigável ao GitOps.

Casos de Uso: Terraform vs. Crossplane

Quando Usar o Terraform?

  • Melhor para gerenciar a infraestrutura fora do Kubernetes
  • Ideal para implantações tradicionais de múltiplas nuvens e VMs
  • Ecosistema forte com extensos módulos e provedores
  • Funciona bem com ferramentas como Ansible, Packer e Vault para automação

Quando Usar o Crossplane?

  • Melhor para ambientes centrados em Kubernetes
  • Ideal para fluxos de trabalho GitOps (ArgoCD, Flux)
  • Permite provisionamento self-service via CRDs do Kubernetes
  • Bom para controle multi-nuvem do Kubernetes (gerenciamento de serviços em nuvem via API do K8s)

Começando com o Crossplane

Para este exemplo, usaremos um minikube. Mas os mesmos passos podem ser aplicados a qualquer Kubernetes.

Passo 1: Implantar MySQL no Kubernetes

1. Implantar o MySQL como um Deployment com um Service para configuração usando o Crossplane. Você também pode usar o MySQL implantado de outro local.

2. Defina um mysql-deployment.yaml, que cria o segredo, a implantação e o serviço necessários para executar o MySQL.

YAML

 

3. Aplique o YAML usando o comando kubectl apply -f mysql-deployment.yaml.

4. Verifique se os pods estão funcionando usando o comando kubectl get pods.

5. Verifique a conexão MySQL iniciando um pod SQL temporário para checar a implantação do MySQL. Crie o cliente usando o comando kubectl run mysql-client --image=mysql:8.0 -it --rm -- bash.

6. Conecte-se ao MySQL dentro do pod usando o comando mysql -h mysql-service.default.svc.cluster.local -uroot -ppassword.

Passo 2:Instale o Crossplane no Kubernetes

1. Instale o Crossplane usando o Helm:

Shell

 

Nota: O Crossplane leva alguns minutos para iniciar.

2. Verifique a instalação do Crossplane usando o comando kubectl get pods -n crossplane-system.

Passo 3: Instale o Provedor Crossplane para SQL

1. Defina um provedor MySQL usando o conteúdo YAML abaixo.

YAML

 

2. Crie o provedor usando o comando kubectl apply -f provider.yaml.

3. Verifique o provedor usando os seguintes comandos: kubectl get pods -n crossplane-system e kubectl get providers.

Nota: Os provedores SQL levam alguns minutos para iniciar.

Passo 4: Configure o Provedor MySQL do Crossplane

A configuração do provedor informa ao Crossplane como autenticar com o MySQL. Defina os segredos a serem criados para uso do provedor. Atualize o stringData de acordo com o YAML abaixo. Aplique o YAML usando kubectl apply -f mysql-secret.yaml.

YAML

 

Aplique a configuração do provedor abaixo para o Crossplane, que utiliza os segredos acima. Aplique usando o comando kubectl apply -f providerconfig.yaml.

YAML

 

Verifique a criação da configuração do provedor usando os comandos — kubectl get providerconfigs.mysql.sql.crossplane.io e kubectl get crds | grep providerconfig.

Passo 5. Crie um Banco de Dados MySQL Usando o Crossplane

Agora, use o Crossplane para provisionar um novo banco de dados. Use o YAML abaixo e aplique usando kubectl apply -f mysqlinstance.yaml.

YAML

 

Passo 6: Verificar a Criação do Banco de Dados

Verifique a criação do banco de dados usando o comando kubectl get database.mysql.sql.crossplane.io/my-database.

Use os mesmos passos de verificação mencionados no Passo 1 para se conectar ao MySQL e verificar a criação do banco de dados.

Com os passos acima, você instalou o Crossplane, configurou o provedor MySQL e usou o Crossplane para provisionar um banco de dados.

O Terraform e o Crossplane Podem Funcionar Juntos?

O Terraform e o Crossplane podem ser usados juntos em muitos cenários.

Cenário 1

Em um cenário completo de IaC, o Terraform pode ser usado para inicializar clusters do Kubernetes e, em seguida, o Crossplane pode ser usado para gerenciar recursos de nuvem de dentro do Kubernetes. O Terraform também pode implantar o próprio Crossplane. Este Exemplo de Fluxo de Trabalho Híbrido pode ser

  • O Terraform provisiona o cluster do Kubernetes em qualquer provedor de nuvem.
  • O Crossplane gerencia serviços de nuvem (bancos de dados, armazenamento e rede) usando CRDs do Kubernetes.

Cenário 2

Crossplane também suporta um provedor Terraform, que pode ser usado para executar scripts Terraform como parte do modelo de IaC do Crossplane. Executar um provedor Terraform para o Crossplane pode ser útil em vários cenários onde os provedores nativos do Crossplane ainda não suportam certos recursos ou funcionalidades na nuvem. Seguem os motivos para executar um provedor Terraform para o Crossplane:

  • O Terraform possui um vasto ecossistema de provedores, suportando muitos serviços em nuvem para os quais o Crossplane ainda não possui provedores nativos.
  • Quando uma organização já utiliza o Terraform para gerenciamento de infraestrutura, não há necessidade de reescrever tudo em CRDs do Crossplane.
  • O Crossplane suporta gerenciamento multi-nuvem, mas seus provedores nativos podem não abranger todas as integrações on-premise ou SaaS.
  • Para organizações que desejam fazer uma transição gradual do Terraform para o Crossplane, o uso de provedores Terraform dentro do Crossplane pode funcionar como uma solução híbrida antes da migração completa.
  • Executar o Terraform dentro do Crossplane traz o Terraform para o modelo declarativo GitOps do Kubernetes.

Passos para Criar um Banco de Dados IBM Cloud Cloudant Usando o Crossplane

Passo 1. Definir o provedor Terraform.

YAML

 

Passo 2. Configurar o provedor.

YAML

 

Passo 3. Provisionar um banco de dados Cloudant na IBM Cloud usando scripts Terraform como parte do Crossplane.

YAML

 

Isso provisiona um banco de dados Cloudant chamado crossplanecloudant na IBM Cloud.

Como o Crossplane se Encaixa na Engenharia de Plataformas

A engenharia de plataformas foca na construção e manutenção de plataformas de desenvolvedores internos (IDPs) que simplificam a gestão da infraestrutura e implantação de aplicações. O Crossplane desempenha um papel significativo nisso, possibilitando uma abordagem nativa do Kubernetes.

O Crossplane garante o provisionamento declarativo, self-service e baseado em políticas de recursos na nuvem. Recursos do Crossplane, como infraestrutura declarativa com APIs do K8s, abstrações personalizadas para infraestrutura e aplicações, diretrizes de segurança e conformidade, implantações controladas por versão e automatizadas, e correção contínua de desvios, auxiliam a engenharia de plataformas.

Conclusão

O Crossplane transforma a maneira como gerenciamos a infraestrutura de nuvem ao trazer o IaC para o ecossistema do Kubernetes. As APIs do Kubernetes permitem uma abordagem verdadeiramente declarativa e orientada por GitOps para o provisionamento e gerenciamento de recursos na nuvem. Se você já está usando o Kubernetes e deseja modernizar sua estratégia de IaC, o Crossplane definitivamente vale a pena explorar.

Source:
https://dzone.com/articles/codify-cloud-kubernetes-crossplane-iac