تخطَّ إلى المحتوى

Crossplane

مستوى تحكم البنية التحتية كشفرة الأصلي في Kubernetes لتركيب موارد السحابة.

الأمرالوصف
helm repo add crossplane-stable https://charts.crossplane.io/stableإضافة مستودع Helm لـ Crossplane
helm repo updateتحديث مستودعات Helm
helm install crossplane crossplane-stable/crossplane -n crossplane-system --create-namespaceتثبيت Crossplane على Kubernetes
helm install crossplane crossplane-stable/crossplane -n crossplane-system --set args='{"--debug"}'التثبيت مع تسجيل التصحيح
helm upgrade crossplane crossplane-stable/crossplane -n crossplane-systemترقية Crossplane
helm uninstall crossplane -n crossplane-systemإلغاء تثبيت Crossplane
kubectl get pods -n crossplane-systemالتحقق من أن Crossplane يعمل
kubectl get deployments -n crossplane-systemالتحقق من حالة النشر
الأمرالوصف
curl -sL https://raw.githubusercontent.com/crossplane/crossplane/master/install.sh | shتثبيت CLI الخاص بـ Crossplane
brew install crossplane/tap/crossplaneتثبيت CLI عبر Homebrew
crossplane --versionعرض إصدار CLI
الأمرالوصف
crossplane xpkg init my-config configurationتهيئة حزمة تكوين جديدة
crossplane xpkg init my-provider providerتهيئة حزمة provider جديدة
crossplane xpkg buildبناء حزمة Crossplane
crossplane xpkg build --package-root=./package --examples-root=./examplesالبناء بأدلة محددة
crossplane xpkg push index.docker.io/org/config:v1دفع الحزمة إلى السجل
crossplane xpkg install provider index.docker.io/org/provider:v1تثبيت حزمة provider
crossplane xpkg install configuration index.docker.io/org/config:v1تثبيت حزمة تكوين
الأمرالوصف
crossplane beta validate schema.yaml resources/التحقق من الموارد مقابل المخطط
crossplane beta trace kind/nameتتبع تبعيات الموارد
crossplane beta trace kind/name -o wideالتتبع مع مخرجات موسعة
crossplane beta convert composition comp.yamlتحويل Composition إلى وضع Pipeline
crossplane beta render xr.yaml composition.yaml functions.yamlعرض الموارد المركبة محلياً
الأمرالوصف
kubectl apply -f provider-aws.yamlتثبيت مزود AWS
kubectl apply -f provider-gcp.yamlتثبيت مزود GCP
kubectl apply -f provider-azure.yamlتثبيت مزود Azure
kubectl apply -f provider-kubernetes.yamlتثبيت مزود Kubernetes
kubectl apply -f provider-helm.yamlتثبيت مزود Helm
kubectl get providersعرض المزودين المثبتين
kubectl get provider.pkg provider-aws -o yamlعرض تفاصيل المزود
kubectl describe providerrevisionعرض حالة مراجعة المزود
kubectl get managedعرض جميع موارد السحابة المُدارة
kubectl get managed -o wideعرض الموارد المُدارة مع الحالة
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-creds
      key: credentials

إنشاء سر بيانات الاعتماد:

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
الأمرالوصف
kubectl apply -f xrd.yamlإنشاء CompositeResourceDefinition
kubectl get xrdعرض جميع XRDs
kubectl describe xrd xdatabases.custom.example.comعرض تفاصيل XRD
kubectl get compositeعرض جميع الموارد المركبة
kubectl describe compositeعرض حالة المورد المركب
kubectl delete xrd xdatabases.custom.example.comحذف XRD
تعيين spec.claimNames في XRDتفعيل المطالبات بنطاق مساحة الاسم
تعيين spec.versions[].schema في XRDتعريف مخطط OpenAPI لـ XRD
تعيين spec.connectionSecretKeys في XRDتعريف مفاتيح الاتصال المراد كشفها
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: "نوع محرك قاعدة البيانات"
                    engineVersion:
                      type: string
                      description: "إصدار المحرك"
                    storageGB:
                      type: integer
                      default: 20
                      description: "حجم التخزين بالجيجابايت"
                    instanceSize:
                      type: string
                      enum: ["small", "medium", "large"]
                      default: "small"
                  required:
                    - engine
              required:
                - parameters
الأمرالوصف
kubectl apply -f composition.yamlإنشاء Composition
kubectl get compositionsعرض جميع التركيبات
kubectl describe compositionعرض تفاصيل التركيبة
تعيين spec.compositeTypeRef في Compositionالربط بـ XRD
تعيين spec.resources[] في Compositionتعريف الموارد المركبة
استخدام patches في Compositionتعيين الحقول بين المركب والموارد
patch: { type: FromCompositeFieldPath }تصحيح من المركب إلى المورد
patch: { type: ToCompositeFieldPath }تصحيح من المورد إلى المركب
patch: { type: CombineFromComposite }دمج حقول متعددة في واحد
تعيين spec.mode: Pipeline في Compositionاستخدام وضع خط أنابيب الدوال
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: "مُدار بواسطة 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
الأمرالوصف
kubectl apply -f claim.yamlإنشاء مطالبة مورد
kubectl get claimعرض جميع المطالبات في مساحة الاسم
kubectl get databaseعرض مطالبات من نوع Database
kubectl describe claim my-databaseعرض حالة وأحداث المطالبة
kubectl delete claim my-databaseحذف المطالبة والموارد المُدارة
تعيين spec.compositionRef.name في المطالبةاختيار Composition محددة
تعيين spec.compositionSelector.matchLabels في المطالبةاختيار Composition بالتسميات
kubectl get events --field-selector involvedObject.name=my-dbعرض أحداث المطالبة
kubectl get secret my-db-conn -o jsonpath='{.data.endpoint}'قراءة تفاصيل الاتصال
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
الأمرالوصف
kubectl apply -f function.yamlتثبيت دالة Composition
kubectl get functionsعرض الدوال المثبتة
kubectl describe function function-patch-and-transformعرض تفاصيل الدالة
crossplane beta render xr.yaml composition.yaml functions.yamlاختبار خط الأنابيب محلياً
# تثبيت 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
---
# تثبيت 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
---
# تثبيت 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
الأمرالوصف
kubectl create secret generic aws-creds -n crossplane-system --from-file=creds=./aws-creds.txtإنشاء سر بيانات اعتماد المزود
تعيين spec.credentials.source: Secret في ProviderConfigالإشارة إلى سر بيانات الاعتماد
kubectl apply -f environmentconfig.yamlإنشاء EnvironmentConfig
kubectl get storeconfigعرض تكوينات التخزين
تعيين spec.publishConnectionDetailsTo في Compositionتكوين نشر أسرار الاتصال
تعيين spec.writeConnectionSecretToRef في المطالبةكتابة تفاصيل الاتصال في سر
kubectl get secrets -l crossplane.io/claim-name=my-dbعرض الأسرار لمطالبة

تكوين التخزين لمخزن أسرار خارجي

Section titled “تكوين التخزين لمخزن أسرار خارجي”
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

استكشاف الأخطاء وإصلاحها

Section titled “استكشاف الأخطاء وإصلاحها”
الأمرالوصف
kubectl get managed -o wideعرض الموارد المُدارة مع الحالة
kubectl describe managedعرض معلومات تفصيلية للموارد المُدارة
kubectl logs -n crossplane-system deploy/crossplaneعرض سجلات متحكم Crossplane
kubectl logs -n crossplane-system deploy/crossplane -fمتابعة سجلات المتحكم
kubectl get events --sort-by='.lastTimestamp'عرض أحداث المجموعة الأخيرة
crossplane beta trace xdatabase my-dbتتبع شجرة الموارد الكاملة
crossplane beta trace xdatabase my-db -o wideالتتبع مع حالة تفصيلية
kubectl get managed -l crossplane.io/composite=my-dbالعثور على موارد لمركب
kubectl annotate managed resource.api.example.com/name crossplane.io/paused=trueإيقاف مؤقت لمطابقة المورد
kubectl annotate managed resource.api.example.com/name crossplane.io/paused-استئناف مطابقة المورد
الأمرالوصف
kubectl get providerrevisionالتحقق مما إذا كان المزود سليماً
kubectl describe providerrevisionعرض أخطاء تثبيت المزود
kubectl get managed -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.conditions[*].reason}{"\n"}{end}'حالة سريعة لجميع الموارد المُدارة
kubectl patch managed resource.api.example.com/name --type merge -p '{"metadata":{"annotations":{"crossplane.io/paused":"true"}}}'الإيقاف المؤقت عبر التصحيح
kubectl delete managed --allحذف جميع الموارد المُدارة (استخدم بحذر)
  1. استخدام المطالبات بدلاً من المركبات المباشرة — المطالبات لها نطاق مساحة الاسم وتوفر حدود RBAC مناسبة بين الفرق.

  2. تثبيت إصدارات المزودين — حدد دائماً إصدارات المزودين بدقة لمنع التغييرات غير المتوقعة أثناء الترقيات.

  3. استخدام وضع Pipeline للتركيبات الجديدة — وضع Pipeline مع الدوال أكثر مرونة وقابلية للاختبار من وضع Resources.

  4. تنفيذ EnvironmentConfigs — خزّن بيانات البيئة المشتركة مثل معرفات VPC وقوائم الشبكات الفرعية لتجنب التكرار عبر التركيبات.

  5. إعداد نشر أسرار الاتصال — حدد دائماً writeConnectionSecretToRef في المطالبات حتى تتمكن التطبيقات من استهلاك تفاصيل الاتصال.

  6. استخدام crossplane beta trace — هذه أسرع طريقة لتصحيح المشاكل عبر تصور شجرة الموارد الكاملة من المطالبة إلى المورد المُدار.

  7. تسمية التركيبات للاختيار — استخدم تسميات مثل provider: aws وengine: postgres حتى تتمكن المطالبات من اختيار التركيبات بالتسمية بدلاً من الاسم.

  8. الاختبار محلياً باستخدام crossplane beta render — اعرض تركيباتك محلياً قبل تطبيقها على مجموعة.

  9. تنفيذ فحوصات الجاهزية — استخدم function-auto-detect-ready أو فحوصات جاهزية مخصصة لضمان أن الموارد المركبة تُبلّغ عن حالة دقيقة.

  10. إصدار XRDs الخاصة بك — ابدأ بـ v1alpha1 وارتقِ عبر v1beta1 إلى v1 مع استقرار واجهة API الخاصة بك.