Codifique sua nuvem e Kubernetes com Crossplane e IaC

À medida que as organizações adotam o Kubernetes para aplicações nativas de nuvem, gerenciar a infraestrutura de forma eficiente se torna 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.

O 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 de Kubernetes de código aberto que permite provisionar e gerenciar 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 exigem execução externa, como scripts do Terraform sendo executados externamente, o Crossplane incorpora o gerenciamento de 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 infraestrutura fora do Kubernetes
  • Ideal para implantações tradicionais multi-nuvem 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 no Kubernetes
  • Ideal para fluxos de trabalho do GitOps (ArgoCD, Flux)
  • Permite a autoaprovisionamento via CRDs do Kubernetes
  • Bom para controle de Kubernetes em várias nuvens (gerenciando serviços em nuvem via API do K8s)

Começando com o Crossplane

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

Passo 1: Implantar o 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. Definir um mysql-deployment.yaml, que cria o segredo, o deployment e o serviço necessários para executar o MySQL.

YAML

 

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

4. Verificar se os pods estão ativos usando o comando kubectl get pods.

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

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

Passo 2: Instalar o Crossplane no Kubernetes

1. Instale o Crossplane usando o Helm:

Shell

 

Observação: 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: Instalar 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

Observação: Os provedores SQL levam alguns minutos para iniciar.

Passo 4: Configurar 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 conforme necessário no 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-o 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. Criar 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.

Utilize 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 Trabalhar Juntos?

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

Cenário 1

Em um cenário completo de IaC, o Terraform pode ser usado para inicializar clusters Kubernetes e depois 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 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 IaC do Crossplane. Executar um provedor Terraform para Crossplane pode ser útil em vários cenários onde os provedores nativos do Crossplane ainda não suportam determinados recursos ou funcionalidades na nuvem. Seguem as razões para executar um provedor Terraform para Crossplane:

  • O Terraform possui um vasto ecossistema de provedores, suportando muitos serviços de 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 cobrir todas as integrações locais ou SaaS.
  • Para organizações que desejam fazer uma transição gradual do Terraform para o Crossplane, usar provedores Terraform dentro do Crossplane pode atuar 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 o 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 internas para desenvolvedores (IDPs) que simplificam o gerenciamento de infraestrutura e implantação de aplicativos. O Crossplane desempenha um papel significativo nisso, permitindo uma abordagem nativa do Kubernetes.

O Crossplane garante o provisionamento declarativo, self-service e orientado por políticas de recursos na nuvem. Recursos do Crossplane como infraestrutura declarativa com APIs do K8s, abstrações personalizadas para infraestrutura e aplicativos, diretrizes de segurança e conformidade, implantações automatizadas e controladas por versão, e correção contínua de desvios auxiliam na 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 pelo GitOps para o provisionamento e gerenciamento de recursos na nuvem. Se você já está utilizando 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