Crossplane: תשתית כקוד ב-Kubernetes

ניהול משאבי ענן באמצעות Terraform או קונסולה מאט את הפיתוח ויוצר קונפליקטים. אנחנו מיישמים Crossplane — Infrastructure as Code ב-Kubernetes, והופכים את הקלאסטר למישור בקרה אחיד. הצוות שלנו מספק את הפרויקט במפתח מלא, תוך הבטחת פעילות יציבה ותמיכה שוטפת.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

תארו לעצמכם: הצוות שלכם כבר משתמש ב-Kubernetes, אבל משאבי ענן—RDS, S3, תורים—עדיין נוצרים דרך Terraform, סקריפטים או קונסולת הענן. כל שירות חדש דורש PR נפרד, אישור והרצת plan/apply. מצב ה-Terraform חי ב-S3, ושינויים מקבילים גורמים להתנגשויות ושגיאות. אנחנו מכירים את הכאב הזה: בפרויקט אחד עם ארכיטקטורת מיקרוסרוויסים (>50 שירותים), הקצאת מסד נתונים ארכה יומיים עד שלושה. הפתרון הוא Crossplane, אופרטור Kubernetes שהופך את הקלאסטר שלכם למישור בקרה יחיד. כעת מפתחים מתארים מסד נתונים כ-Custom Resource ב-namespace שלהם, בעוד שצוות התשתית מנהל הפשטות ומדיניות דרך GitOps. התקנת Crossplane בקלאסטר אורכת 15 דקות ומעניקה לכם גישה לניהול משאבי ענן דרך Kubernetes.

"Crossplane מרחיב את ה-API של Kubernetes לניהול משאבים חיצוניים" — תיעוד Crossplane

במה Crossplane שונה מ-Terraform?

Terraform הוא כלי אימפרטיבי עם תחביר דקלרטיבי. הוא רץ, משווה את התוכנית למצב, מחיל שינויים ויוצא. המצב מאוחסן חיצונית (S3, Terraform Cloud). ריצות מקבילות נעולות באמצעות state locking. אם הוא קורס באמצע, המצב עלול להישאר שונה חלקית.

Crossplane רץ כקונטרולר Kubernetes: לולאת reconciliation מנטרת ברציפות את המצב הרצוי והמצב בפועל. אם מישהו מוחק מופע RDS בקונסולת AWS, Crossplane יוצר אותו מחדש. זיהוי סטייה מובנה בזכות ה-reconciliation של Kubernetes. המצב חי ישירות ב-etcd כ-Custom Resources.

קריטריון Terraform Crossplane
מצב חיצוני (S3 וכו') etcd (Kubernetes)
ניהול ביצוע מבוסס טריגר reconciliation רציף
זיהוי סטייה plan ידני אוטומטי
אינטגרציית GitOps דרך Atlantis/CI טבעי (CRD)
התאמה זרימות עבודה מורכבות מרובות שלבים אקוסיסטם Kubernetes

זה לא אומר ש-Crossplane עדיף על Terraform בכל דבר. Terraform בוגר יותר, יש לו אקוסיסטם ספקים עשיר יותר (1000+) והוא טוב יותר לזרימות הקצאה מורכבות מרובות שלבים. Crossplane הוא הבחירה הנכונה כשכבר יש לכם Kubernetes ואתם רוצים מישור בקרה יחיד להכל.

איך Crossplane עובד עם GitOps?

Managed Resources, XRDs, Compositions, ProviderConfigs—כל אלה הם משאבי Kubernetes שחיים במאגר GitOps. ArgoCD מסנכרן אותם כמו כל manifest אחר. מסד נתונים חדש פירושו PR למאגר התצורה שמוסיף Claim. מבנה מאגר לדוגמה:

gitops-config/
└── infrastructure/
    └── crossplane/
        ├── providers/
        │   ├── provider-aws-rds.yaml
        │   └── provider-aws-s3.yaml
        ├── compositions/
        │   └── postgresql-instance.yaml
        └── xrds/
            └── postgresql-instance-xrd.yaml

ארכיטקטורת Crossplane

Provider — תוסף שמיישם ניהול לענן ספציפי. לדוגמה, התקנת Provider AWS RDS נעשית עם gitops-config/ └── infrastructure/ └── crossplane/ ├── providers/ │ ├── provider-aws-rds.yaml │ └── provider-aws-s3.yaml ├── compositions/ │ └── postgresql-instance.yaml └── xrds/ └── postgresql-instance-xrd.yaml . ProviderConfig מאחסן אישורי ענן. Managed Resource הוא משאב ענן ספציפי, למשל מופע RDS:

---
apiVersion: rds.aws.upbound.io/v1beta1
kind: Instance
metadata:
  name: myapp-postgres
  annotations:
    crossplane.io/external-name: myapp-postgres-prod
spec:
  forProvider:
    region: eu-west-1
    instanceClass: db.t3.medium
    engine: postgres
    engineVersion: "15.4"
    dbName: myapp
    username: myapp
    passwordSecretRef:
      namespace: myapp-prod
      name: db-password
      key: password
    allocatedStorage: 50
    storageType: gp3
    multiAz: true
    backupRetentionPeriod: 7
    skipFinalSnapshot: false
    finalSnapshotIdentifierPrefix: myapp-postgres-final
    vpcSecurityGroupIdSelector:
      matchLabels:
        app: myapp
  writeConnectionSecretToRef:
    namespace: myapp-prod
    name: myapp-db-conn

kubectl apply הוא תכונה מרכזית: Crossplane יוצר אוטומטית Kubernetes Secret עם פרטי חיבור (endpoint, port, username, password). האפליקציה קוראת מה-Secret—ללא העתקה ידנית של אישורים.

משאבים מרוכבים (XR) ו-Claims

משאבים מנוהלים גולמיים הם הפשטה ברמה נמוכה. מפתחים לא צריכים לדעת על apiVersion: rds.aws.upbound.io/v1beta1 kind: Instance metadata: name: myapp-postgres annotations: crossplane.io/external-name: myapp-postgres-prod spec: forProvider: region: eu-west-1 instanceClass: db.t3.medium engine: postgres engineVersion: "15.4" dbName: myapp username: myapp passwordSecretRef: namespace: myapp-prod name: db-password key: password allocatedStorage: 50 storageType: gp3 multiAz: true backupRetentionPeriod: 7 skipFinalSnapshot: false finalSnapshotIdentifierPrefix: myapp-postgres-final vpcSecurityGroupIdSelector: matchLabels: app: myapp writeConnectionSecretToRef: namespace: myapp-prod name: myapp-db-conn או writeConnectionSecretToRef. Crossplane פותר זאת דרך Compositions—תבניות המורכבות ממספר משאבים מנוהלים עם API ברמה גבוהה.

CompositeResourceDefinition (XRD) מגדיר סוג משאב חדש; Composition ממפה את ה-XRD למשאבים מנוהלים. כעת מפתח יוצר Claim ב-namespace שלו:

---
apiVersion: platform.example.com/v1alpha1
kind: PostgreSQLInstance
metadata:
  name: my-database
  namespace: myapp-prod
spec:
  parameters:
    storageGB: 50
    tier: medium
  compositionSelector:
    matchLabels:
      provider: aws
  writeConnectionSecretToRef:
    name: my-database-conn
---

אין צורך בידע ב-AWS API, סוגי מופעים או אזורים. Crossplane יוצר הכל ומכניס אישורים ל-db.t3.medium.

היתרונות של Crossplane לתשתית שלכם

  • מישור בקרה יחיד: Kubernetes הופך לנקודת השליטה גם לאפליקציות וגם לתשתית. מאגר GitOps אחד, pipeline אחד.
  • האצת הקצאת משאבים: יצירת מופע RDS דרך Claim אורכת פחות מ-5 שניות לאחר החלת ה-manifest. זמן ההקצאה יורד מימים לדקות.
  • זיהוי סטייה אוטומטי: כל שינוי במשאב מחוץ ל-Kubernetes—Crossplane מחזיר למצב הרצוי. אין צורך בהתערבות ידנית.
  • הפחתה של עד 40% בעלויות תפעול: באמצעות אוטומציה ואיחוד כלים. לפי הערכותינו, החיסכון הממוצע משמעותי ומחזיר את ההשקעה בתוך שישה חודשים לפרויקטים עם 20 מסדי נתונים או יותר.

מה כלול בעבודה

  1. ביקורת תשתית: מלאי של משאבי ענן, בחירת סדרי עדיפויות להעברה.
  2. התקנה ותצורה של Crossplane, ספקים ו-ProviderConfigs.
  3. פיתוח Compositions מותאמים לצרכים שלכם, לפי שיטות עבודה מומלצות.
  4. אינטגרציה עם GitOps (ArgoCD/Flux) והגדרת pipeline.
  5. ייבוא משאבים קיימים באמצעות storageType: gp3.
  6. תיעוד והדרכת צוות: איך ליצור Claims, לשנות זרימת עבודה.
  7. תמיכה לאחר היישום (חודש אחד).

שלבי יישום

שלב תוכן משך
ביקורת תשתית מלאי של משאבי ענן, קביעת סדרי עדיפויות להעברה 3-5 ימים
התקנת Crossplane ספקים, ProviderConfigs, RBAC 2-3 ימים
ייבוא משאבים קיימים crossplane import לתשתית קיימת 3-5 ימים
פיתוח Compositions הפשטות לצרכי הצוות 1-2 שבועות
אינטגרציית GitOps הצבה במאגר התצורה, ArgoCD Application 2-3 ימים
הדרכת צוות איך ליצור Claims, לשנות זרימת עבודה 1-2 ימים

יישום מלא אורך בין שבועיים לשלושה חודשים, תלוי במורכבות התשתית ובמספר המשאבים המנוהלים. אנו מבטיחים האצה פי 5 בהקצאת משאבים והפחתה של עד 40% בעלויות תפעול. עלות הפרויקט מחושבת באופן אישי, אך ההשקעה בדרך כלל מחזירה את עצמה תוך 3-6 חודשים.

איך להתחיל במהירות עם Crossplane?

  1. התקינו את Crossplane בקלאסטר שלכם: apiVersion: platform.example.com/v1alpha1 kind: PostgreSQLInstance metadata: name: my-database namespace: myapp-prod spec: parameters: storageGB: 50 tier: medium compositionSelector: matchLabels: provider: aws writeConnectionSecretToRef: name: my-database-conn (או דרך Helm).
  2. הגדירו ספק: צרו ProviderConfig עם אישורי הענן שלכם.
  3. צרו Composition: הגדירו תבנית משאב (למשל PostgreSQL).
  4. מפתח יוצר Claim: my-database-conn—המשאב מופיע תוך שניות.

דוגמה מלאה זמינה בתיעוד הרשמי של Crossplane.

טיפ: לסביבת ייצור, השתמשו בלפחות 3 רפליקות של Crossplane ו-RBAC עם הגבלות. Crossplane הוא רכיב קריטי, לכן ודאו סובלנות לתקלות ובקרת גישה.

בחנו את היעילות של Crossplane בפרויקט שלכם—קבעו הדגמה. צרו קשר לביקורת תשתית וקבלו הצעה ליישום.