Aller au contenu

Crossplane

Plan de contrôle Kubernetes-natif d’infrastructure as code pour composer des ressources cloud.

CommandeDescription
helm repo add crossplane-stable https://charts.crossplane.io/stableAjouter le dépôt Helm Crossplane
helm repo updateMettre à jour les dépôts Helm
helm install crossplane crossplane-stable/crossplane -n crossplane-system --create-namespaceInstaller Crossplane sur Kubernetes
helm install crossplane crossplane-stable/crossplane -n crossplane-system --set args='{"--debug"}'Installer avec la journalisation de débogage
helm upgrade crossplane crossplane-stable/crossplane -n crossplane-systemMettre à jour Crossplane
helm uninstall crossplane -n crossplane-systemDésinstaller Crossplane
kubectl get pods -n crossplane-systemVérifier que Crossplane fonctionne
kubectl get deployments -n crossplane-systemVérifier le statut du déploiement
CommandeDescription
curl -sL https://raw.githubusercontent.com/crossplane/crossplane/master/install.sh | shInstaller le CLI Crossplane
brew install crossplane/tap/crossplaneInstaller le CLI via Homebrew
crossplane --versionAfficher la version du CLI
CommandeDescription
crossplane xpkg init my-config configurationInitialiser un nouveau paquet de configuration
crossplane xpkg init my-provider providerInitialiser un nouveau paquet de provider
crossplane xpkg buildCompiler un paquet Crossplane
crossplane xpkg build --package-root=./package --examples-root=./examplesCompiler avec des répertoires spécifiques
crossplane xpkg push index.docker.io/org/config:v1Pousser un paquet vers un registre
crossplane xpkg install provider index.docker.io/org/provider:v1Installer un paquet de provider
crossplane xpkg install configuration index.docker.io/org/config:v1Installer un paquet de configuration
CommandeDescription
crossplane beta validate schema.yaml resources/Valider les ressources contre un schéma
crossplane beta trace kind/nameTracer les dépendances des ressources
crossplane beta trace kind/name -o wideTracer avec une sortie étendue
crossplane beta convert composition comp.yamlConvertir une Composition en mode pipeline
crossplane beta render xr.yaml composition.yaml functions.yamlRendre localement les ressources composées
CommandeDescription
kubectl apply -f provider-aws.yamlInstaller le provider AWS
kubectl apply -f provider-gcp.yamlInstaller le provider GCP
kubectl apply -f provider-azure.yamlInstaller le provider Azure
kubectl apply -f provider-kubernetes.yamlInstaller le provider Kubernetes
kubectl apply -f provider-helm.yamlInstaller le provider Helm
kubectl get providersLister les providers installés
kubectl get provider.pkg provider-aws -o yamlAfficher les détails du provider
kubectl describe providerrevisionAfficher le statut de révision du provider
kubectl get managedLister toutes les ressources cloud gérées
kubectl get managed -o wideLister les ressources gérées avec le statut
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-creds
      key: credentials

Créer le secret d’identifiants :

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
CommandeDescription
kubectl apply -f xrd.yamlCréer une CompositeResourceDefinition
kubectl get xrdLister toutes les XRDs
kubectl describe xrd xdatabases.custom.example.comAfficher les détails d’une XRD
kubectl get compositeLister toutes les ressources composites
kubectl describe compositeAfficher le statut des ressources composites
kubectl delete xrd xdatabases.custom.example.comSupprimer une XRD
Définir spec.claimNames dans la XRDActiver les claims à portée namespace
Définir spec.versions[].schema dans la XRDDéfinir le schéma OpenAPI pour la XRD
Définir spec.connectionSecretKeys dans la XRDDéfinir les clés de connexion à exposer
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
CommandeDescription
kubectl apply -f composition.yamlCréer une Composition
kubectl get compositionsLister toutes les Compositions
kubectl describe compositionAfficher les détails d’une Composition
Définir spec.compositeTypeRef dans la CompositionLier à une XRD
Définir spec.resources[] dans la CompositionDéfinir les ressources composées
Utiliser patches dans la CompositionMapper les champs entre composite et ressources
patch: { type: FromCompositeFieldPath }Patcher du composite vers la ressource
patch: { type: ToCompositeFieldPath }Patcher de la ressource vers le composite
patch: { type: CombineFromComposite }Combiner plusieurs champs en un seul
Définir spec.mode: Pipeline dans la CompositionUtiliser le mode pipeline avec des fonctions
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
CommandeDescription
kubectl apply -f claim.yamlCréer un claim de ressource
kubectl get claimLister tous les claims dans le namespace
kubectl get databaseLister les claims de type Database
kubectl describe claim my-databaseAfficher le statut et les événements du claim
kubectl delete claim my-databaseSupprimer le claim et les ressources gérées
Définir spec.compositionRef.name dans le claimSélectionner une Composition spécifique
Définir spec.compositionSelector.matchLabels dans le claimSélectionner une Composition par labels
kubectl get events --field-selector involvedObject.name=my-dbVoir les événements du claim
kubectl get secret my-db-conn -o jsonpath='{.data.endpoint}'Lire les détails de connexion
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
CommandeDescription
kubectl apply -f function.yamlInstaller une fonction de Composition
kubectl get functionsLister les fonctions installées
kubectl describe function function-patch-and-transformAfficher les détails d’une fonction
crossplane beta render xr.yaml composition.yaml functions.yamlTester le pipeline localement
# Installer 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
---
# Installer 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
---
# Installer 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
CommandeDescription
kubectl create secret generic aws-creds -n crossplane-system --from-file=creds=./aws-creds.txtCréer le secret d’identifiants du provider
Définir spec.credentials.source: Secret dans le ProviderConfigRéférencer le secret d’identifiants
kubectl apply -f environmentconfig.yamlCréer un EnvironmentConfig
kubectl get storeconfigLister les configurations de stockage
Définir spec.publishConnectionDetailsTo dans la CompositionConfigurer la publication des secrets de connexion
Définir spec.writeConnectionSecretToRef dans le claimÉcrire les détails de connexion dans un secret
kubectl get secrets -l crossplane.io/claim-name=my-dbLister les secrets pour 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
CommandeDescription
kubectl get managed -o wideAfficher les ressources gérées avec le statut
kubectl describe managedAfficher les informations détaillées des ressources gérées
kubectl logs -n crossplane-system deploy/crossplaneVoir les journaux du contrôleur Crossplane
kubectl logs -n crossplane-system deploy/crossplane -fSuivre les journaux du contrôleur
kubectl get events --sort-by='.lastTimestamp'Voir les événements récents du cluster
crossplane beta trace xdatabase my-dbTracer l’arbre complet des ressources
crossplane beta trace xdatabase my-db -o wideTracer avec un statut détaillé
kubectl get managed -l crossplane.io/composite=my-dbTrouver les ressources pour un composite
kubectl annotate managed resource.api.example.com/name crossplane.io/paused=trueMettre en pause la réconciliation d’une ressource
kubectl annotate managed resource.api.example.com/name crossplane.io/paused-Reprendre la réconciliation d’une ressource
CommandeDescription
kubectl get providerrevisionVérifier si le provider est en bonne santé
kubectl describe providerrevisionVoir les erreurs d’installation du provider
kubectl get managed -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[*].reason}{"\n"}{end}'Statut rapide de toutes les ressources gérées
kubectl patch managed resource.api.example.com/name --type merge -p '{"metadata":{"annotations":{"crossplane.io/paused":"true"}}}'Mettre en pause via patch
kubectl delete managed --allSupprimer toutes les ressources gérées (à utiliser avec précaution)
  1. Utiliser les Claims plutôt que les Composites directs — les claims ont une portée namespace et fournissent des limites RBAC appropriées entre les équipes.

  2. Fixer les versions des providers — spécifiez toujours des versions exactes de providers pour éviter des changements inattendus lors des mises à jour.

  3. Utiliser le mode Pipeline pour les nouvelles Compositions — le mode Pipeline avec des fonctions est plus flexible et testable que le mode Resources.

  4. Implémenter les EnvironmentConfigs — stockez les données d’environnement partagées comme les IDs de VPC et les listes de sous-réseaux pour éviter la duplication entre les Compositions.

  5. Configurer la publication des secrets de connexion — définissez toujours writeConnectionSecretToRef dans les claims pour que les applications puissent consommer les détails de connexion.

  6. Utiliser crossplane beta trace — c’est le moyen le plus rapide de déboguer les problèmes en visualisant l’arbre complet des ressources du claim à la ressource gérée.

  7. Étiqueter les Compositions pour la sélection — utilisez des labels comme provider: aws et engine: postgres pour que les claims puissent sélectionner les Compositions par label plutôt que par nom.

  8. Tester localement avec crossplane beta render — rendez vos Compositions localement avant de les appliquer sur un cluster.

  9. Implémenter les vérifications de disponibilité — utilisez function-auto-detect-ready ou des vérifications personnalisées pour que les ressources composites rapportent un statut précis.

  10. Versionner vos XRDs — commencez avec v1alpha1 et progressez vers v1beta1 puis v1 à mesure que votre API se stabilise.