logotype

Implementando o Crossplane

Leitura estimada: 5 minutos 15 views Colaboradores

1. Pré-requisitos

  • Um cluster Kubernetes com pelo menos 2 GB de RAM
  • kubectl configurado
  • Helm >=3.2
  • Credenciais AWS (pode ser Access Key/Secret ou IAM + IRSA se estiver no EKS) (docs.crossplane.io, reddit.com)

2. Instalar o Crossplane via Helm

helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update
helm install crossplane crossplane-stable/crossplane \
  --namespace crossplane-system --create-namespace
kubectl get pods -n crossplane-system

3. Configurar autenticação AWS

3.1. Via Secret (Access Key / Secret)

Exemplo de credentials:

# Criar secret com credenciais AWS
kubectl create secret generic aws-secret \
  -n crossplane-system \
  --from-file=creds=./aws-credentials.txt

# Formato do arquivo aws-credentials.txt:
# [default]
# aws_access_key_id = YOUR_ACCESS_KEY
# aws_secret_access_key = YOUR_SECRET_KEY

Aguarde até que os pods crossplane-... e rbac-manager estejam Running (medium.com).

4. Instalar o AWS Provider (Provider Family Aws v1)

Crie um arquivo chamado aws-provider.yaml e coloque este blueprint abaixo

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: upbound-provider-family-aws
spec:
  package: xpkg.upbound.io/upbound/provider-family-aws:v1
kubectl apply -f aws-provider.yaml
kubectl get providers

Adicionado as configurações da aws como Access key ID e Secret access key

Crie um arquivo chamado aws-providerconfig.yaml e coloque este blueprint abaixo

apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-secret
      key: creds
kubectl apply -f aws-providerconfig.yaml
kubectl get providerconfigs -A

A coluna HEALTHY deve ficar como True após alguns segundos (cloud.theodo.com, docs.crossplane.io, github.com).

5. Criar um recurso AWS de exemplo (S3 Bucket)

Configurando provider para S3, crie um arquivo chamado provider-s3.yaml e coloque este blueprint abaixo

apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: upbound-provider-aws-s3
spec:
  package: xpkg.upbound.io/upbound/provider-aws-s3:v1
kubectl apply -f provider-s3.yaml
kubectl get providers

Agora vamos criar o bucket S3 para teste, crie um arquivo chamado s3-bucket.yaml

apiVersion: s3.aws.upbound.io/v1beta2
kind: Bucket
metadata:
  annotations:
    meta.upbound.io/example-id: s3/v1beta2/bucket
  labels:
    testing.upbound.io/example-name: s3
  name: s3-uday-com-br12124
spec:
  forProvider:
    objectLockEnabled: true
    region: us-east-1
    tags:
      Name: SampleBucket
kubectl apply -f s3-bucket.yaml
kubectl get bucket

Agora acesse a console aws e veja se o bucket foi criado, pode acontecer e alguém esta utilizando este nome então mude o name para qualquer nome.

Para remover e so usar o mesmo arquivo com o delete do kubernetes

kubectl delete -f s3-bucket.yaml

Crossplane provisionará o bucket no AWS (medium.com, barunavo.medium.com).


6. (Opcional) Composições & Blueprints AWS

Se quiser abstrair vários serviços em APIs customizadas, use:

  • AWS Crossplane Blueprints em EKS (via Helm ou Terraform)
    (awslabs.github.io)
    Ou defina suas próprias Compositions com XRDs.

7. Upgrade do provider

Para mudar versão:

kubectl edit provider provider-aws
# altere spec.package para: crossplane/provider-aws:v1.21.0
# > kubectl get providerrevisions

Crossplane gerencia múltiplas revisões e mantém apenas uma ativa (awslabs.github.io, github.com)


🧠 Dicas da comunidade

  • O AWS Provider instala centenas de CRDs — monitore uso de API do servidor (reddit.com).
  • Pode gerar loops de reconciliação que podem estourar limites da API da AWS, em especial para RDS (reddit.com).

✅ Resumo dos passos:

  1. Instalar Crossplane via Helm
  2. Instalar AWS Provider (v1)
  3. Configurar autenticação (Secret ou IRSA)
  4. Criar ProviderConfig
  5. Provisionar recursos AWS com CRDs
Remover tudo (CUIDADO)

Para deletar completamente o Crossplane e tudo o que foi instalado por ele no seu cluster Kubernetes, incluindo os providers, configurations, CRDs e quaisquer recursos gerenciados, você pode seguir os passos abaixo.


🧨 ATENÇÃO

Esse procedimento irá remover completamente o Crossplane, incluindo todos os:

  • Providers (ex: AWS, GCP, Azure)
  • Custom Resources criados por ele (como XRDs, CompositeResources)
  • CRDs instaladas
  • Configurations
  • Recursos gerenciados por providers (se aplicável)

⚠️ Se você usou Crossplane para criar recursos em nuvens públicas, como buckets, VPCs, etc., eles não serão deletados automaticamente. Só os recursos dentro do cluster serão removidos, a menos que você limpe os recursos externos manualmente ou via os managed resources.


✅ Passos para deletar tudo do Crossplane


1. Delete recursos criados por você com Crossplane

kubectl delete managed --all
kubectl delete xr --all
kubectl delete composition --all
kubectl delete claim --all
kubectl delete configuration --all
kubectl delete provider --all

Observação: alguns desses recursos podem ter nomes diferentes dependendo do seu setup.


2. Delete os Providers instalados (incluindo revisões)

kubectl delete providers.pkg --all
kubectl delete providerrevisions.pkg --all

3. Delete os Configurations instalados

kubectl delete configurations.pkg --all
kubectl delete configurationrevisions.pkg --all

4. Delete os CRDs instalados pelo Crossplane

⚠️ Esse passo remove todas as APIs do Crossplane. Faça só no final.

kubectl get crds | grep crossplane | awk '{print $1}' | xargs kubectl delete crd

5. Delete o Crossplane (instalação principal)

Se você instalou via Helm, remova o release:

helm uninstall crossplane -n crossplane-system

Se instalou via kubectl apply -f, delete o que foi aplicado:

kubectl delete -f https://raw.githubusercontent.com/crossplane/crossplane/release-<VERSAO>/cluster/install.yaml

(ou o seu arquivo local de instalação)


6. Delete namespace do Crossplane (opcional)

kubectl delete ns crossplane-system

7. Verifique se tudo foi removido

kubectl get all --all-namespaces | grep crossplane
kubectl get crds | grep crossplane

Se quiser, posso te ajudar com um script para fazer tudo isso em um comando só. Deseja isso?

Compartilhe este documento

Implementando o Crossplane

Ou copiar link

    CONTEÚDO