في المشهد الحديث للبنية التحتية السحابية الأصلية، تتطور خطوط أنابيب CI/CD التقليدية. هنا يأتي دور GitOps: نموذج يستخدم Git كمصدر وحيد للحقيقة للبنية التحتية والتطبيقات التصريحية. من خلال اقتران Git بأدوات آلية، يمكن للفرق تحقيق نشرات متسقة وقابلة للتدقيق وآمنة. في قلب هذه الثورة الخاصة ببيئات Kubernetes يوجد ArgoCD، وهو أداة توصيل مستمر قوية تتيح المزامنة التلقائية بين مستودعات Git وحالة العنقود الخاص بك.
يستكشف هذا المنشور كيفية إعداد ArgoCD، وتكوين تعريفات التطبيقات، والاستفادة من ميزات المزامنة المدمجة للحفاظ على سير عمل GitOps قوي.
فهم الحلقة الأساسية لـ GitOps
قبل الغوص في التكوين، من الضروري فهم الآلية. في سير عمل GitOps، يقوم المطور بدفع التغييرات إلى مستودع Git (الحالة المرغوبة). يراقب ArgoCD، الذي يعمل داخل عنقود Kubernetes، ذلك المستودع. إذا اكتشف انحرافاً بين الحالة الحية في العنقود والحالة المرغوبة في Git، فإنه يقوم بمزامنتها تلقائياً. يوفر هذا النموذج القائم على السحب (pull-based) مزايا كبيرة مقارنة بخطوط الأنابيب القائمة على الدفع (push-based)، مثل الأمان الأفضل (لا حاجة لكشف بيانات اعتماد العنقود لخوادم CI الخارجية) والرؤية الفورية لصحة العنقود.
تثبيت ArgoCD
الخطوة الأولى هي تثبيت ArgoCD على عنقود Kubernetes الخاص بك. أسهل طريقة هي عبر واجهة سطر الأوامر الرسمية (CLI) أو عن طريق تطبيق المخطط مباشرة. تأكد من استهداف مساحة الاسم (namespace) حيث تريد أن يعمل ArgoCD، وعادة ما يكون argocd.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argocd/stable/manifests/install.yaml
بعد التثبيت، يمكنك التحقق من تشغيل الحاويات (pods):
kubectl get pods -n argocd
بمجرد أن يكون خادم واجهة برمجة التطبيقات (API) لـ ArgoCD وواجهة المستخدم جاهزين، احصل على كلمة مرور المسؤول الأولية:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
تعريف التطبيقات باستخدام تعريفات الموارد المخصصة (CRDs) للتطبيقات
بينما تسمح لك واجهة المستخدم لـ ArgoCD بإنشاء التطبيقات عبر واجهة الويب، فإن إدارتها برمجياً عبر Git هي القوة الحقيقية لـ GitOps. نستخدم تعريف الموارد المخصص (CRD) Application لتحديد ما يجب على ArgoCD إدارته.
أنشئ بنية دليل في مستودع Git الخاص بك تعكس بنية بيئتك. على سبيل المثال، أنشئ ملفاً باسم web-app.yml:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
لنقم بتفكيك الأقسام الرئيسية لهذا المخطط:
- source: يشير إلى مستودع Git الذي يحتوي على مخططات Kubernetes الخاصة بك. يضمن
targetRevision: HEADأنه يقوم دائماً بسحب أحدث التزامن (commit). - destination: يحدد المكان الذي يجب نشر التطبيق فيه (عنوان URL للعنقود ومساحة الاسم).
- syncPolicy: هذا حاسم للأتمتة. يضمن
automated.prune: trueأن الموارد المحذوفة من Git تتم إزالتها أيضاً من العنقود. يخبركselfHeal: trueArgoCD بإعادة أي تغييرات يدوية تم إجراؤها مباشرة على العنقود إلى الحالة المحددة في Git.
مثال عملي: إدارة الانحراف
واحد من السيناريوهات الأكثر شيوعاً في إدارة Kubernetes هو "الانحراف" (drift). تخيل أن مطوراً يقوم بالاتصال عن بُعد (SSH) إلى حاوية (pod) ويغير متغير بيئة يدوياً لأغراض التصحيح. في النشر القياسي، يستمر هذا التغيير، مما يؤدي إلى عدم اتساق في التكوين بين البيئات.
مع تفعيل سياسة selfHeal في المثال السابق، يقوم ArgoCD بمصالحة حالة العنقود مع Git باستمرار. خلال ثوانٍ، يكتشف ArgoCD التغيير اليدوي، ويصنفه على أنه "OutOfSync" في واجهة المستخدم، ويعيد تلقائياً مواصفات الحاوية لتتطابق مع تعريف Git. يضمن هذا أن بيئة الإنتاج تظل انعكاساً نقياً لمستودع الشفرة الخاص بك.
أفضل الممارسات للإنتاج
بينما يكون إعداد سير العمل الأساسي بسيطاً، تتطلب بيئات الإنتاج دقة إضافية:
- عزل مساحة الاسم: لا تقم أبداً بتثبيت ArgoCD في نفس مساحة الاسم الخاصة بأحمال العمل الخاصة بك. استخدم مساحات أسماء مخصصة لـ ArgoCD وتطبيقاتك.
- تكوين التحكم في الوصول القائم على الأدوار (RBAC): عرّف سياسات صارمة للتحكم في الوصول. قيّد من يمكنه تعديل تطبيقات ArgoCD ومن يمكنه فقط رؤية الحالة.
- إدارة الأسرار: تجنب الالتزام بالأسرار الحساسة في Git. استخدم ميزة مزامنة الأسرار في ArgoCD أو قم بالتكامل مع مديري الأسرار الخارجيين مثل HashiCorp Vault أو AWS Secrets Manager لحقن الأسرار عند التشغيل.
- عمليات المراجعة: تعامل مع التغييرات على مخططات
Applicationكتغييرات في الشفرة. اطلب طلبات السحب (Pull Requests) ومراجعات الشفرة قبل دمج التحديثات في مستودع Git.
الخاتمة
يغير تنفيذ GitOps مع ArgoCD الطريقة التي تنشر بها الفرق وتدير تطبيقات Kubernetes. من خلال الانتقال من الأوامر الأمرية إلى سير العمل التصريحي القائم على Git، تحصل على إمكانية التدقيق والأمان والموثوقية. يقلل القدرة على مزامنة حالة العنقود تلقائياً مع نظام التحكم في الإصدارات من الأخطاء البشرية ويسرع دورات التسليم. بينما تتبنى هذه الممارسات، تذكر أن GitOps ليس مجرد تغيير في الأدوات؛ إنه تحول ثقافي نحو معاملة البنية التحتية كشفرة. ابدأ بشكل صغير، وأتمت سياسات المزامنة الخاصة بك، وقم بتوسيع نضج GitOps الخاص بك تدريجياً لكشف الإمكانات الكاملة للبنية التحتية لـ Kubernetes الخاصة بك.