Salta ai contenuti

Crossplane

Control plane per infrastructure as code nativo Kubernetes per la composizione di risorse cloud.

ComandoDescrizione
helm repo add crossplane-stable https://charts.crossplane.io/stableAggiungi il repo Helm di Crossplane
helm repo updateAggiorna i repository Helm
helm install crossplane crossplane-stable/crossplane -n crossplane-system --create-namespaceInstalla Crossplane su Kubernetes
helm install crossplane crossplane-stable/crossplane -n crossplane-system --set args='{"--debug"}'Installa con logging di debug
helm upgrade crossplane crossplane-stable/crossplane -n crossplane-systemAggiorna Crossplane
helm uninstall crossplane -n crossplane-systemDisinstalla Crossplane
kubectl get pods -n crossplane-systemVerifica che Crossplane sia in esecuzione
kubectl get deployments -n crossplane-systemControlla lo stato del deployment
ComandoDescrizione
curl -sL https://raw.githubusercontent.com/crossplane/crossplane/master/install.sh | shInstalla la CLI di Crossplane
brew install crossplane/tap/crossplaneInstalla la CLI tramite Homebrew
crossplane --versionMostra la versione della CLI
ComandoDescrizione
crossplane xpkg init my-config configurationInizializza nuovo pacchetto di configurazione
crossplane xpkg init my-provider providerInizializza nuovo pacchetto provider
crossplane xpkg buildBuild di un pacchetto Crossplane
crossplane xpkg build --package-root=./package --examples-root=./examplesBuild con directory specifiche
crossplane xpkg push index.docker.io/org/config:v1Push del pacchetto nel registro
crossplane xpkg install provider index.docker.io/org/provider:v1Installa un pacchetto provider
crossplane xpkg install configuration index.docker.io/org/config:v1Installa un pacchetto di configurazione
ComandoDescrizione
crossplane beta validate schema.yaml resources/Valida risorse rispetto allo schema
crossplane beta trace kind/nameTraccia le dipendenze delle risorse
crossplane beta trace kind/name -o wideTraccia con output esteso
crossplane beta convert composition comp.yamlConverti Composition in modalita pipeline
crossplane beta render xr.yaml composition.yaml functions.yamlRendering locale delle risorse composte
ComandoDescrizione
kubectl apply -f provider-aws.yamlInstalla il provider AWS
kubectl apply -f provider-gcp.yamlInstalla il provider GCP
kubectl apply -f provider-azure.yamlInstalla il provider Azure
kubectl apply -f provider-kubernetes.yamlInstalla il provider Kubernetes
kubectl apply -f provider-helm.yamlInstalla il provider Helm
kubectl get providersElenca i provider installati
kubectl get provider.pkg provider-aws -o yamlMostra dettagli del provider
kubectl describe providerrevisionMostra lo stato della revisione del provider
kubectl get managedElenca tutte le risorse cloud gestite
kubectl get managed -o wideElenca risorse gestite con stato
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-creds
      key: credentials

Crea il secret delle credenziali:

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
ComandoDescrizione
kubectl apply -f xrd.yamlCrea CompositeResourceDefinition
kubectl get xrdElenca tutte le XRD
kubectl describe xrd xdatabases.custom.example.comMostra dettagli della XRD
kubectl get compositeElenca tutte le risorse composite
kubectl describe compositeMostra stato della risorsa composita
kubectl delete xrd xdatabases.custom.example.comElimina XRD
Imposta spec.claimNames nella XRDAbilita claim con scope namespace
Imposta spec.versions[].schema nella XRDDefinisci schema OpenAPI per la XRD
Imposta spec.connectionSecretKeysDefinisci quali chiavi di connessione esporre
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: "Database engine type"
                    engineVersion:
                      type: string
                      description: "Engine version"
                    storageGB:
                      type: integer
                      default: 20
                      description: "Storage size in GB"
                    instanceSize:
                      type: string
                      enum: ["small", "medium", "large"]
                      default: "small"
                  required:
                    - engine
              required:
                - parameters
ComandoDescrizione
kubectl apply -f composition.yamlCrea una Composition
kubectl get compositionsElenca tutte le Composition
kubectl describe compositionMostra dettagli della Composition
Imposta spec.compositeTypeRef nella CompositionCollega alla XRD
Imposta spec.resources[] nella CompositionDefinisci risorse composte
Usa patches nella CompositionMappa campi tra composita e risorse
patch: { type: FromCompositeFieldPath }Patch dalla composita alla risorsa
patch: { type: ToCompositeFieldPath }Patch dalla risorsa alla composita
patch: { type: CombineFromComposite }Combina piu campi in uno
Imposta spec.mode: Pipeline nella CompositionUsa modalita pipeline con funzioni
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: "Managed by 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
ComandoDescrizione
kubectl apply -f claim.yamlCrea un claim per una risorsa
kubectl get claimElenca tutti i claim nel namespace
kubectl get databaseElenca claim di tipo Database
kubectl describe claim my-databaseMostra stato ed eventi del claim
kubectl delete claim my-databaseElimina claim e risorse gestite
Imposta spec.compositionRef.name nel claimSeleziona Composition specifica
Imposta spec.compositionSelector.matchLabels nel claimSeleziona Composition per label
kubectl get events --field-selector involvedObject.name=my-dbVisualizza eventi del claim
kubectl get secret my-db-conn -o jsonpath='{.data.endpoint}'Leggi dettagli di connessione
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
ComandoDescrizione
kubectl apply -f function.yamlInstalla una funzione di Composition
kubectl get functionsElenca le funzioni installate
kubectl describe function function-patch-and-transformMostra dettagli della funzione
crossplane beta render xr.yaml composition.yaml functions.yamlTesta pipeline localmente
# Installa 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
---
# Installa 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
---
# Installa 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
ComandoDescrizione
kubectl create secret generic aws-creds -n crossplane-system --from-file=creds=./aws-creds.txtCrea secret delle credenziali del provider
Imposta spec.credentials.source: Secret nel ProviderConfigReferenzia secret delle credenziali
kubectl apply -f environmentconfig.yamlCrea EnvironmentConfig
kubectl get storeconfigElenca configurazioni dello store
Imposta spec.publishConnectionDetailsTo nella CompositionConfigura pubblicazione dei secret di connessione
Imposta spec.writeConnectionSecretToRef nel claimScrivi dettagli di connessione nel secret
kubectl get secrets -l crossplane.io/claim-name=my-dbElenca secret per un 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
ComandoDescrizione
kubectl get managed -o wideMostra risorse gestite con stato
kubectl describe managedMostra informazioni dettagliate sulle risorse gestite
kubectl logs -n crossplane-system deploy/crossplaneVisualizza log del controller Crossplane
kubectl logs -n crossplane-system deploy/crossplane -fSegui i log del controller
kubectl get events --sort-by='.lastTimestamp'Visualizza eventi recenti del cluster
crossplane beta trace xdatabase my-dbTraccia l’intero albero delle risorse
crossplane beta trace xdatabase my-db -o wideTraccia con stato dettagliato
kubectl get managed -l crossplane.io/composite=my-dbTrova risorse per una composita
kubectl annotate managed resource.api.example.com/name crossplane.io/paused=trueMetti in pausa la riconciliazione della risorsa
kubectl annotate managed resource.api.example.com/name crossplane.io/paused-Riprendi la riconciliazione della risorsa
ComandoDescrizione
kubectl get providerrevisionControlla se il provider e in salute
kubectl describe providerrevisionVisualizza errori di installazione del provider
kubectl get managed -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[*].reason}{"\n"}{end}'Stato rapido di tutte le risorse gestite
kubectl patch managed resource.api.example.com/name --type merge -p '{"metadata":{"annotations":{"crossplane.io/paused":"true"}}}'Metti in pausa tramite patch
kubectl delete managed --allElimina tutte le risorse gestite (usa con cautela)
  1. Usa i Claim invece dei Composite diretti — i claim hanno scope a livello di namespace e forniscono confini RBAC appropriati tra i team.

  2. Fissa le versioni dei provider — specifica sempre versioni esatte dei provider per prevenire modifiche inaspettate durante gli aggiornamenti.

  3. Usa la modalita Pipeline per le nuove Composition — la modalita Pipeline con funzioni e piu flessibile e testabile della modalita Resources.

  4. Implementa gli EnvironmentConfig — archivia dati ambientali condivisi come ID VPC e liste di subnet per evitare duplicazioni tra le Composition.

  5. Configura la pubblicazione dei secret di connessione — definisci sempre writeConnectionSecretToRef nei claim cosi le applicazioni possono consumare i dettagli di connessione.

  6. Usa crossplane beta trace — e il modo piu veloce per fare debug visualizzando l’intero albero delle risorse dal claim alla risorsa gestita.

  7. Etichetta le Composition per la selezione — usa label come provider: aws e engine: postgres cosi i claim possono selezionare le Composition per label invece che per nome.

  8. Testa localmente con crossplane beta render — renderizza le tue Composition localmente prima di applicarle a un cluster.

  9. Implementa i controlli di readiness — usa function-auto-detect-ready o controlli di readiness personalizzati per assicurarti che le risorse composite riportino uno stato accurato.

  10. Versiona le tue XRD — inizia con v1alpha1 e promuovi attraverso v1beta1 fino a v1 man mano che la tua API si stabilizza.