توفير البنية التحتية مع 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
في الدرس التالي، سنغوص عميقًا في المزودين والموارد المُدارة للبنية التحتية الحقيقية. :::