Pular para o conteúdo

Crossplane

Plano de controle de infraestrutura como código nativo do Kubernetes para composição de recursos em nuvem.

ComandoDescrição
helm repo add crossplane-stable https://charts.crossplane.io/stableAdicionar repositório Helm do Crossplane
helm repo updateAtualizar repositórios Helm
helm install crossplane crossplane-stable/crossplane -n crossplane-system --create-namespaceInstalar Crossplane no Kubernetes
helm install crossplane crossplane-stable/crossplane -n crossplane-system --set args='{"--debug"}'Instalar com logging de depuração
helm upgrade crossplane crossplane-stable/crossplane -n crossplane-systemAtualizar Crossplane
helm uninstall crossplane -n crossplane-systemDesinstalar Crossplane
kubectl get pods -n crossplane-systemVerificar se o Crossplane está rodando
kubectl get deployments -n crossplane-systemVerificar status do deployment
ComandoDescrição
curl -sL https://raw.githubusercontent.com/crossplane/crossplane/master/install.sh | shInstalar CLI do Crossplane
brew install crossplane/tap/crossplaneInstalar CLI via Homebrew
crossplane --versionMostrar versão da CLI
ComandoDescrição
crossplane xpkg init my-config configurationInicializar novo pacote de configuração
crossplane xpkg init my-provider providerInicializar novo pacote de provider
crossplane xpkg buildConstruir um pacote Crossplane
crossplane xpkg build --package-root=./package --examples-root=./examplesConstruir com diretórios específicos
crossplane xpkg push index.docker.io/org/config:v1Enviar pacote para registro
crossplane xpkg install provider index.docker.io/org/provider:v1Instalar um pacote de provider
crossplane xpkg install configuration index.docker.io/org/config:v1Instalar um pacote de configuração
ComandoDescrição
crossplane beta validate schema.yaml resources/Validar recursos contra esquema
crossplane beta trace kind/nameRastrear dependências de recursos
crossplane beta trace kind/name -o wideRastrear com saída estendida
crossplane beta convert composition comp.yamlConverter Composition para modo pipeline
crossplane beta render xr.yaml composition.yaml functions.yamlRenderizar recursos compostos localmente
ComandoDescrição
kubectl apply -f provider-aws.yamlInstalar provider AWS
kubectl apply -f provider-gcp.yamlInstalar provider GCP
kubectl apply -f provider-azure.yamlInstalar provider Azure
kubectl apply -f provider-kubernetes.yamlInstalar provider Kubernetes
kubectl apply -f provider-helm.yamlInstalar provider Helm
kubectl get providersListar providers instalados
kubectl get provider.pkg provider-aws -o yamlMostrar detalhes do provider
kubectl describe providerrevisionMostrar status da revisão do provider
kubectl get managedListar todos os recursos gerenciados na nuvem
kubectl get managed -o wideListar recursos gerenciados com status
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-creds
      key: credentials

Criar o secret de credenciais:

kubectl create secret generic aws-creds \
  -n crossplane-system \
  --from-file=credentials=./aws-credentials.txt
apiVersion: gcp.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  projectID: my-gcp-project
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: gcp-creds
      key: credentials
apiVersion: azure.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: azure-creds
      key: credentials
ComandoDescrição
kubectl apply -f xrd.yamlCriar CompositeResourceDefinition
kubectl get xrdListar todos os XRDs
kubectl describe xrd xdatabases.custom.example.comMostrar detalhes do XRD
kubectl get compositeListar todos os recursos compostos
kubectl describe compositeMostrar status do recurso composto
kubectl delete xrd xdatabases.custom.example.comDeletar XRD
Definir spec.claimNames no XRDHabilitar claims com escopo de namespace
Definir spec.versions[].schema no XRDDefinir esquema OpenAPI para XRD
Definir spec.connectionSecretKeys no XRDDefinir quais chaves de conexão expor
apiVersion: apiextensions.crossplane.io/v1
kind: CompositeResourceDefinition
metadata:
  name: xdatabases.platform.example.com
spec:
  group: platform.example.com
  names:
    kind: XDatabase
    plural: xdatabases
  claimNames:
    kind: Database
    plural: databases
  connectionSecretKeys:
    - endpoint
    - port
    - username
    - password
  versions:
    - name: v1alpha1
      served: true
      referenceable: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                parameters:
                  type: object
                  properties:
                    engine:
                      type: string
                      enum: ["postgres", "mysql", "mariadb"]
                      description: "Tipo do motor de banco de dados"
                    engineVersion:
                      type: string
                      description: "Versão do motor"
                    storageGB:
                      type: integer
                      default: 20
                      description: "Tamanho do armazenamento em GB"
                    instanceSize:
                      type: string
                      enum: ["small", "medium", "large"]
                      default: "small"
                  required:
                    - engine
              required:
                - parameters
ComandoDescrição
kubectl apply -f composition.yamlCriar uma Composition
kubectl get compositionsListar todas as Compositions
kubectl describe compositionMostrar detalhes da Composition
Definir spec.compositeTypeRef na CompositionVincular ao XRD
Definir spec.resources[] na CompositionDefinir recursos compostos
Usar patches na CompositionMapear campos entre composto e recursos
patch: { type: FromCompositeFieldPath }Patch do composto para o recurso
patch: { type: ToCompositeFieldPath }Patch do recurso para o composto
patch: { type: CombineFromComposite }Combinar múltiplos campos em um
Definir spec.mode: Pipeline na CompositionUsar modo pipeline com funções
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: xdatabase-aws
  labels:
    provider: aws
    engine: postgres
spec:
  compositeTypeRef:
    apiVersion: platform.example.com/v1alpha1
    kind: XDatabase
  resources:
    - name: rds-instance
      base:
        apiVersion: rds.aws.upbound.io/v1beta1
        kind: Instance
        spec:
          forProvider:
            engine: postgres
            instanceClass: db.t3.micro
            allocatedStorage: 20
            publiclyAccessible: false
            skipFinalSnapshot: true
            region: us-east-1
      patches:
        - type: FromCompositeFieldPath
          fromFieldPath: spec.parameters.engineVersion
          toFieldPath: spec.forProvider.engineVersion
        - type: FromCompositeFieldPath
          fromFieldPath: spec.parameters.storageGB
          toFieldPath: spec.forProvider.allocatedStorage
        - type: FromCompositeFieldPath
          fromFieldPath: spec.parameters.instanceSize
          toFieldPath: spec.forProvider.instanceClass
          transforms:
            - type: map
              map:
                small: db.t3.micro
                medium: db.t3.medium
                large: db.t3.large
      connectionDetails:
        - type: FromFieldPath
          name: endpoint
          fromFieldPath: status.atProvider.endpoint
        - type: FromFieldPath
          name: port
          fromFieldPath: status.atProvider.port
    - name: subnet-group
      base:
        apiVersion: rds.aws.upbound.io/v1beta1
        kind: SubnetGroup
        spec:
          forProvider:
            region: us-east-1
            description: "Gerenciado pelo Crossplane"
  writeConnectionSecretsToNamespace: crossplane-system
apiVersion: apiextensions.crossplane.io/v1
kind: Composition
metadata:
  name: xdatabase-pipeline
spec:
  compositeTypeRef:
    apiVersion: platform.example.com/v1alpha1
    kind: XDatabase
  mode: Pipeline
  pipeline:
    - step: patch-and-transform
      functionRef:
        name: function-patch-and-transform
      input:
        apiVersion: pt.fn.crossplane.io/v1beta1
        kind: Resources
        resources:
          - name: rds-instance
            base:
              apiVersion: rds.aws.upbound.io/v1beta1
              kind: Instance
              spec:
                forProvider:
                  engine: postgres
                  instanceClass: db.t3.micro
                  region: us-east-1
            patches:
              - type: FromCompositeFieldPath
                fromFieldPath: spec.parameters.storageGB
                toFieldPath: spec.forProvider.allocatedStorage
    - step: auto-ready
      functionRef:
        name: function-auto-detect-ready
ComandoDescrição
kubectl apply -f claim.yamlCriar um claim de recurso
kubectl get claimListar todos os claims no namespace
kubectl get databaseListar claims do tipo Database
kubectl describe claim my-databaseMostrar status e eventos do claim
kubectl delete claim my-databaseDeletar claim e recursos gerenciados
Definir spec.compositionRef.name no claimSelecionar Composition específica
Definir spec.compositionSelector.matchLabels no claimSelecionar Composition por labels
kubectl get events --field-selector involvedObject.name=my-dbVer eventos do claim
kubectl get secret my-db-conn -o jsonpath='{.data.endpoint}'Ler detalhes de conexão
apiVersion: platform.example.com/v1alpha1
kind: Database
metadata:
  name: my-app-db
  namespace: default
spec:
  parameters:
    engine: postgres
    engineVersion: "15"
    storageGB: 50
    instanceSize: medium
  compositionSelector:
    matchLabels:
      provider: aws
      engine: postgres
  writeConnectionSecretToRef:
    name: my-app-db-conn
ComandoDescrição
kubectl apply -f function.yamlInstalar uma função de Composition
kubectl get functionsListar funções instaladas
kubectl describe function function-patch-and-transformMostrar detalhes da função
crossplane beta render xr.yaml composition.yaml functions.yamlTestar pipeline localmente
# Instalar function-patch-and-transform
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: function-patch-and-transform
spec:
  package: xpkg.upbound.io/crossplane-contrib/function-patch-and-transform:v0.7.0
---
# Instalar function-auto-detect-ready
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: function-auto-detect-ready
spec:
  package: xpkg.upbound.io/crossplane-contrib/function-auto-detect-ready:v0.2.1
---
# Instalar function-go-templating
apiVersion: pkg.crossplane.io/v1beta1
kind: Function
metadata:
  name: function-go-templating
spec:
  package: xpkg.upbound.io/crossplane-contrib/function-go-templating:v0.6.0
apiVersion: apiextensions.crossplane.io/v1alpha1
kind: EnvironmentConfig
metadata:
  name: production
data:
  region: us-east-1
  environment: production
  vpcId: vpc-0abc123def456
  subnetIds:
    - subnet-0abc123
    - subnet-0def456
    - subnet-0ghi789
  tags:
    team: platform
    costCenter: engineering
ComandoDescrição
kubectl create secret generic aws-creds -n crossplane-system --from-file=creds=./aws-creds.txtCriar secret de credenciais do provider
Definir spec.credentials.source: Secret no ProviderConfigReferenciar secret de credenciais
kubectl apply -f environmentconfig.yamlCriar EnvironmentConfig
kubectl get storeconfigListar configurações de store
Definir spec.publishConnectionDetailsTo na CompositionConfigurar publicação de secrets de conexão
Definir spec.writeConnectionSecretToRef no claimEscrever detalhes de conexão em secret
kubectl get secrets -l crossplane.io/claim-name=my-dbListar secrets de um claim
apiVersion: secrets.crossplane.io/v1alpha1
kind: StoreConfig
metadata:
  name: vault
spec:
  type: Vault
  defaultScope: crossplane-system
  vault:
    mountPath: secret
    version: v2
    auth:
      method: Token
      token:
        source: Secret
        secretRef:
          namespace: crossplane-system
          name: vault-token
          key: token
ComandoDescrição
kubectl get managed -o wideMostrar recursos gerenciados com status
kubectl describe managedMostrar informações detalhadas de recursos gerenciados
kubectl logs -n crossplane-system deploy/crossplaneVer logs do controlador Crossplane
kubectl logs -n crossplane-system deploy/crossplane -fSeguir logs do controlador
kubectl get events --sort-by='.lastTimestamp'Ver eventos recentes do cluster
crossplane beta trace xdatabase my-dbRastrear árvore completa de recursos
crossplane beta trace xdatabase my-db -o wideRastrear com status detalhado
kubectl get managed -l crossplane.io/composite=my-dbEncontrar recursos de um composto
kubectl annotate managed resource.api.example.com/name crossplane.io/paused=truePausar reconciliação do recurso
kubectl annotate managed resource.api.example.com/name crossplane.io/paused-Retomar reconciliação do recurso
ComandoDescrição
kubectl get providerrevisionVerificar se o provider está saudável
kubectl describe providerrevisionVer erros de instalação do provider
kubectl get managed -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[*].reason}{"\n"}{end}'Status rápido de todos os recursos gerenciados
kubectl patch managed resource.api.example.com/name --type merge -p '{"metadata":{"annotations":{"crossplane.io/paused":"true"}}}'Pausar via patch
kubectl delete managed --allDeletar todos os recursos gerenciados (use com cautela)
  1. Usar Claims em vez de Composites diretos — claims têm escopo de namespace e fornecem limites adequados de RBAC entre equipes.

  2. Fixar versões de providers — sempre especifique versões exatas de providers para evitar mudanças inesperadas durante atualizações.

  3. Usar modo Pipeline para novas Compositions — o modo Pipeline com funções é mais flexível e testável que o modo Resources.

  4. Implementar EnvironmentConfigs — armazene dados compartilhados do ambiente como IDs de VPC e listas de subnets para evitar duplicação entre Compositions.

  5. Configurar publicação de secrets de conexão — sempre defina writeConnectionSecretToRef nos claims para que as aplicações possam consumir detalhes de conexão.

  6. Usar crossplane beta trace — esta é a forma mais rápida de depurar problemas visualizando a árvore completa de recursos do claim ao recurso gerenciado.

  7. Rotular Compositions para seleção — use labels como provider: aws e engine: postgres para que claims possam selecionar Compositions por label em vez de por nome.

  8. Testar localmente com crossplane beta render — renderize suas Compositions localmente antes de aplicá-las a um cluster.

  9. Implementar verificações de prontidão — use function-auto-detect-ready ou verificações personalizadas para garantir que recursos compostos reportem status preciso.

  10. Versionar seus XRDs — comece com v1alpha1 e promova através de v1beta1 até v1 conforme sua API estabiliza.