توفير البنية التحتية مع Crossplane

أساسيات Crossplane

4 دقيقة للقراءة

Crossplane هو مشروع CNCF في مرحلة الحضانة يحول مجموعة Kubernetes الخاصة بك إلى مستوى تحكم عالمي للبنية التحتية. يمكّن فرق المنصة من تقديم بنية تحتية ذاتية الخدمة للمطورين باستخدام واجهات Kubernetes الأصلية.

ما هو Crossplane؟

Crossplane يوسع Kubernetes لإدارة أي مورد بنية تحتية—خدمات سحابية، قواعد بيانات، شبكات—باستخدام نفس النهج التصريحي الذي تستخدمه للحاويات:

إدارة البنية التحتية التقليدية:
┌─────────────────────────────────────────────────────────┐
│                     المطور                               │
│                        │                                 │
│                        ▼                                 │
│              "أحتاج قاعدة بيانات"                        │
│                        │                                 │
│                        ▼                                 │
│                  [نظام التذاكر]                          │
│                        │                                 │
│                        ▼                                 │
│                  فريق العمليات                           │
│                        │                                 │
│          ┌─────────────┼─────────────┐                  │
│          ▼             ▼             ▼                  │
│     Terraform      CloudFormation   يدوي                │
│                        │                                 │
│                   أيام/أسابيع                            │
└─────────────────────────────────────────────────────────┘

مع Crossplane:
┌─────────────────────────────────────────────────────────┐
│                     المطور                               │
│                        │                                 │
│                        ▼                                 │
│           kubectl apply -f database.yaml                 │
│                        │                                 │
│                        ▼                                 │
│              ┌─────────────────┐                        │
│              │   CROSSPLANE    │                        │
│              │ (مستوى التحكم)  │                        │
│              └────────┬────────┘                        │
│                       │                                  │
│          ┌────────────┼────────────┐                    │
│          ▼            ▼            ▼                    │
│        AWS          GCP         Azure                   │
│                       │                                  │
│                    دقائق                                 │
└─────────────────────────────────────────────────────────┘

Crossplane مقابل Terraform

كلتا الأداتين تدير البنية التحتية، لكن بنهج مختلف:

الجانب Crossplane Terraform
وقت التشغيل Kubernetes (يعمل دائمًا) CLI (تشغيل عند الطلب)
الحالة Kubernetes etcd ملف حالة Terraform
كشف الانحراف مصالحة مستمرة terraform plan يدوي
API Kubernetes API (kubectl, GitOps) HCL/CLI
التجريد التركيبات (XRDs) الوحدات
الخدمة الذاتية أصلي (Kubernetes RBAC) يتطلب أدوات تغليف
GitOps أصلي (ArgoCD/Flux) يتطلب Atlantis/إلخ
# Crossplane يصالح باستمرار
# إذا غيّر شخص ما موردًا يدويًا في AWS،
# Crossplane يكتشف ويصحح الانحراف تلقائيًا

apiVersion: database.aws.crossplane.io/v1beta1
kind: RDSInstance
metadata:
  name: my-database
spec:
  forProvider:
    dbInstanceClass: db.t3.micro
    engine: postgres
    # Crossplane يضمن أن هذه الحالة صحيحة دائمًا

التثبيت

تثبيت Crossplane باستخدام Helm:

# إضافة مستودع Crossplane Helm
helm repo add crossplane-stable https://charts.crossplane.io/stable
helm repo update

# إنشاء مساحة الاسم والتثبيت
kubectl create namespace crossplane-system

helm install crossplane \
  crossplane-stable/crossplane \
  --namespace crossplane-system \
  --wait

# التحقق من التثبيت
kubectl get pods -n crossplane-system
# NAME                                      READY   STATUS
# crossplane-xxxxxxxxx-xxxxx                1/1     Running
# crossplane-rbac-manager-xxxxxxxxx-xxxxx   1/1     Running

# التحقق من إصدار Crossplane
kubectl crossplane --version

المفاهيم الأساسية

يقدم Crossplane عدة مفاهيم رئيسية:

# بنية Crossplane
architecture:

  providers:
    description: "الاتصال بـ APIs السحابية"
    examples:
      - provider-aws
      - provider-gcp
      - provider-azure
      - provider-kubernetes
      - provider-helm

  managed_resources:
    description: "تعيينات موارد السحابة المباشرة"
    examples:
      - RDSInstance (AWS)
      - CloudSQLInstance (GCP)
      - PostgreSQLServer (Azure)

  composite_resources:
    description: "تجريدات فريق المنصة"
    components:
      XRD: "تحديد مخطط API"
      Composition: "تحديد كيفية تحقيق API"
      XR: "مثيل من المورد المركب"

  claims:
    description: "API الموجه للمطور"
    purpose: "طلبات موارد مبسطة"

بنية المزود

المزودون هم الجسر بين Crossplane وـ APIs السحابية:

┌─────────────────────────────────────────────────────────┐
│                   مجموعة KUBERNETES                      │
├─────────────────────────────────────────────────────────┤
│                                                          │
│   ┌──────────────┐   ┌──────────────┐                   │
│   │  Crossplane  │   │    RBAC      │                   │
│   │    Core      │   │   Manager    │                   │
│   └──────────────┘   └──────────────┘                   │
│                                                          │
│   ┌─────────────────────────────────────────────────┐   │
│   │                   المزودون                       │   │
│   ├─────────────┬─────────────┬─────────────────────┤   │
│   │provider-aws │provider-gcp │  provider-azure     │   │
│   │             │             │                     │   │
│   │  يراقب:     │  يراقب:     │  يراقب:             │   │
│   │  - RDSInstance│ - CloudSQL │  - SQLServer       │   │
│   │  - S3Bucket │  - GKECluster│  - StorageAccount  │   │
│   │  - VPC      │  - VPCNetwork│  - VirtualNetwork  │   │
│   └──────┬──────┴──────┬──────┴──────────┬──────────┘   │
│          │             │                  │              │
└──────────┼─────────────┼──────────────────┼──────────────┘
           │             │                  │
           ▼             ▼                  ▼
        ┌─────┐      ┌─────┐           ┌─────┐
        │ AWS │      │ GCP │           │Azure│
        │ API │      │ API │           │ API │
        └─────┘      └─────┘           └─────┘

تثبيت مزود

تثبيت مزود AWS:

# provider-aws.yaml
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
  name: provider-aws
spec:
  package: xpkg.upbound.io/upbound/provider-aws-ec2:v1.1.0
  # استخدام مزودات العائلة للتثبيت المعياري
  # provider-aws-ec2: موارد EC2, VPC
  # provider-aws-rds: قواعد بيانات RDS
  # provider-aws-s3: حاويات S3
# تطبيق المزود
kubectl apply -f provider-aws.yaml

# مراقبة تثبيت المزود
kubectl get providers -w
# NAME           INSTALLED   HEALTHY   PACKAGE                                        AGE
# provider-aws   True        True      xpkg.upbound.io/upbound/provider-aws-ec2:v1.1.0   60s

# فحص pods المزود
kubectl get pods -n crossplane-system | grep provider

تكوين المزود

تكوين بيانات الاعتماد للمزود:

# aws-credentials.yaml (Secret)
apiVersion: v1
kind: Secret
metadata:
  name: aws-credentials
  namespace: crossplane-system
type: Opaque
stringData:
  credentials: |
    [default]
    aws_access_key_id = AKIAIOSFODNN7EXAMPLE
    aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

---
# provider-config.yaml
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      namespace: crossplane-system
      name: aws-credentials
      key: credentials
# للإنتاج، استخدم IRSA (أدوار IAM لحسابات الخدمة)
# provider-config-irsa.yaml
apiVersion: aws.upbound.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: IRSA  # يستخدم ServiceAccount Kubernetes مع دور IAM

أول مورد مُدار

إنشاء حاوية S3 باستخدام Crossplane:

# s3-bucket.yaml
apiVersion: s3.aws.upbound.io/v1beta1
kind: Bucket
metadata:
  name: my-crossplane-bucket
spec:
  forProvider:
    region: us-east-1
    tags:
      Environment: development
      ManagedBy: crossplane
  providerConfigRef:
    name: default
# تطبيق المورد
kubectl apply -f s3-bucket.yaml

# مراقبة مزامنة المورد
kubectl get bucket my-crossplane-bucket -w
# NAME                   READY   SYNCED   EXTERNAL-NAME          AGE
# my-crossplane-bucket   True    True     my-crossplane-bucket   2m

# الوصف للتفاصيل
kubectl describe bucket my-crossplane-bucket

دورة حياة المورد

Crossplane يدير دورة الحياة الكاملة:

# حالات المورد
states:

  creating:
    READY: "False"
    SYNCED: "False"
    message: "إنشاء المورد في مزود السحابة"

  ready:
    READY: "True"
    SYNCED: "True"
    message: "المورد موجود ويطابق الحالة المطلوبة"

  out_of_sync:
    READY: "True"
    SYNCED: "False"
    message: "تم اكتشاف انحراف، جاري المصالحة..."

  deleting:
    action: "kubectl delete"
    behavior: "Crossplane يحذف مورد السحابة"

# سياسة الحذف
# deletionPolicy: Delete (افتراضي) - حذف مورد السحابة
# deletionPolicy: Orphan - الاحتفاظ بمورد السحابة، الإزالة من Crossplane

في الدرس التالي، سنغوص عميقًا في المزودين والموارد المُدارة للبنية التحتية الحقيقية. :::