المحتويات
المقدمة
نادرًا ما تفشل المنصات الداخلية بانقطاع. إنها تفشل ببطء، عندما تعود الفرق إلى نصوصها الخاصة لأن الطريق الرسمي أبطأ من الالتفاف عليه. جعل Kubernetes المشكلة أوضح، فهو يمنح مرونة هائلة ثم يتوقع من كل فريق منتج إتقان ملفات البيان ومتحكمات الدخول وسياسات الشبكة والتوسع التلقائي. ومهمة فريق المنصة استيعاب هذا التعقيد مرة واحدة، حتى لا تستوعبه الفرق الأخرى عشرين مرة.
أدر المنصة كمنتج
المطورون الذين يستخدمون منصتك هم عملاؤها، ويمكنهم رفض الشراء بهدوء. تتعامل الفرق الناجحة مع المنصة كمنتج له خارطة طريق وقائمة عمل مستمدة من العقبات الفعلية وشخص مهمته التحدث إلى المستخدمين كل أسبوع.
- رافق فريقًا في أول عملية نشر له، واكتب كل نقطة اضطر فيها إلى طلب المساعدة أو انتظار طلب.
- احتفظ بخارطة طريق علنية وسجل تغييرات. فالتغييرات المفاجئة تضعف الثقة أسرع من الميزات الناقصة.
- قس الاعتماد لا التوافر. المنصة التي تحقق خمس تسعات ولها ثلاثة مستخدمين مشروع فاشل.
مسارات موصى بها مع مخرج
المسار الموصى به هو الطريق المدعوم والممهد لمهمة شائعة: إنشاء خدمة، أو إضافة قاعدة بيانات، أو كشف API. وعند تنفيذه جيدًا، تصل الخدمة الجديدة خلال دقائق مع مستودع ومسار CI وبناء حاوية وملفات نشر ولوحات وتنبيهات وSLO افتراضي مجهز. وBackstage، بوابة المطورين من CNCF، طريقة شائعة لتقديم هذه القوالب مع فهرس برمجي يوضح من يملك ماذا.
يجب أن تتمكن الفرق من مغادرة المسار عندما يكون لديها سبب وجيه. فإذا كان المخرج الوحيد طلبًا إلى فريق المنصة، فسيلتف الناس حولك. يجب أن يكون المسار ببساطة أسهل خيار بفارق كبير.
GitOps كعمود فقري للتسليم
في GitOps، تعيش الحالة المطلوبة لكل بيئة في Git، ويقوم متحكم مثل Argo CD أو Flux بمطابقة المجموعة معها باستمرار. تصبح عمليات النشر pull requests، ويصبح التراجع عكسًا للتغيير، ويُكتشف الانحراف ويُصحح تلقائيًا. والترقية بين البيئات تغيير قابل للتدقيق في ملف، لا سلسلة أوامر نفذها أحدهم من حاسوبه.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: orders-api
namespace: argocd
spec:
project: default
source:
repoURL: https://git.example.com/platform/deployments.git
targetRevision: main
path: apps/orders-api/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: orders
syncPolicy:
automated:
prune: true
selfHeal: trueأبقِ الأسرار خارج المستودع. فمشغل الأسرار الخارجية الذي يجلبها أثناء التشغيل من خزنة أو مدير أسرار سحابي هو النمط الأنظف، ويعني أن تدوير بيانات الاعتماد لا يتطلب commit أبدًا.
ضوابط حماية بدل البوابات
قوائم الموافقة اليدوية هي أسوأ أعداء تجربة المطور. استبدلها بسياسات آلية تعمل في مسار النشر وعند الدخول إلى المجموعة، بأدوات مثل OPA Gatekeeper أو Kyverno. وترفض ضوابط الحماية المعتادة الحاويات الامتيازية، وتشترط طلبات الموارد وحدودها، ولا تسمح إلا بالصور الموقعة في مسارك (مثلًا عبر Sigstore cosign)، وتمنع موازنات الحمل العامة خارج مساحات الأسماء المعتمدة.
جودة رسالة الخطأ لا تقل أهمية عن القاعدة. فعبارة “مرفوض بموجب السياسة” ترسل الشخص إلى Slack. أما “تحتاج حاويات الإنتاج إلى حدود ذاكرة، أضف resources.limits.memory، وراجع قالب الخدمة للقيم الافتراضية” فتتيح له الإصلاح والمتابعة.
اختر مستوى التجريد المناسب
إذا أخفيت القليل، فسيظل كل فريق بحاجة إلى خبير Kubernetes. وإذا أخفيت الكثير، فسيكسر أول متطلب غير معتاد التجريد. والنمط الناجح وصف قصير للخدمة يملكه فريق المنتج (الصورة والمنافذ وحدود التوسع والاعتماديات وSLO) توسعه المنصة إلى مجموعة الملفات الكاملة. ويمكن للفرق التي تحتاج إلى المزيد النزول مستوى واحدًا لخدمة واحدة دون نسخ المنصة كلها.
إثبات نجاحها
- مقاييس DORA الأربعة: تكرار النشر، ووقت تنفيذ التغييرات، ومعدل فشل التغييرات، ووقت استعادة الخدمة، مقيسة لكل فريق ومتابعة كل ربع سنة.
- الوقت من “خدمة جديدة” إلى أول نشر في الإنتاج. يكشف هذا الرقم كل خطوة يدوية مخفية.
- نسبة الخدمات على المسار الموصى به، والأسباب التي تذكرها الفرق لمغادرته.
- استبيان قصير لرضا المطورين كل ربع سنة، بإجابات حرة يقرأها أحد فعلًا.
الخاتمة
تؤتي هندسة المنصات ثمارها عندما تجعل الطريقة الصحيحة لبناء البرمجيات هي الأسرع. عندها تأتي ضوابط الأمن والموثوقية والتكلفة دون عناء، لأنها مبنية في الطريق الذي يسلكه الجميع بالفعل.
- هندسة المنصات
- Kubernetes
- GitOps
- تجربة المطور