Implementando o Crossplane
1. Pré-requisitos
- Um cluster Kubernetes com pelo menos 2 GB de RAM
kubectl
configuradoHelm >=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:
- Instalar Crossplane via Helm
- Instalar AWS Provider (v1)
- Configurar autenticação (Secret ou IRSA)
- Criar
ProviderConfig
- 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?