بنية ArgoCD والإعداد
بنية ArgoCD والإعداد
ArgoCD هو مشغّل GitOps الأكثر انتشاراً في الصناعة. قبل تثبيته، يجب أن تفهم آلياته الداخلية — وإلا فإن كل حادثة إنتاجية ستبدو كصندوق أسود. يتكون ArgoCD من ثلاثة مكونات رئيسية: Application Controller، وRepo Server، وAPI Server (إضافةً إلى واجهة المستخدم وـ Dex لإدارة SSO). لكل مكوّن مسؤولية محددة في حلقة المصالحة التي تُبقي الكتلة متزامنةً مع Git.
المكوّن الأول: Repo Server
Repo Server هو قارئ المصدر الحقيقي في ArgoCD. مسؤوليته هي استنساخ مستودعات Git، وتصيير المانيفستات باستخدام أي محرك قوالب تستخدمه التطبيقات (YAML خام، أو Helm، أو Kustomize، أو Jsonnet، أو مكوّنات مخصصة)، وإعادة كائنات Kubernetes المُصيَّرة كقائمة. وهو مُصمَّم عن قصد ليكون عديم الحالة (stateless) — لا يحتفظ ببيانات اعتماد الكتلة ولا يتحدث مباشرةً مع Kubernetes API. هذا العزل هو حاجز أمني: Repo Server المخترَق لا يستطيع بشكل مباشر تعديل الكتلة.
يُخزّن Repo Server المانيفستات المُصيَّرة في ذاكرة تخزين مؤقت محلية. عند تشغيل تحديث، يُعيد Repo Server استنساخ أو جلب آخر commit، ثم يُعيد التصيير ويُسلّم النتيجة إلى Application Controller. يمكنك تشغيل نسخ متعددة من Repo Server لتحقيق التوافر العالي — كل نسخة عديمة الحالة، لذا يُعدّ توسيعها آمناً.
المكوّن الثاني: Application Controller
Application Controller هو قلب ArgoCD. إنه كنترولر Kubernetes — يُشغّل حلقة مصالحة، تماماً مثل كنترولر Deployment الذي تعرفه. كل N ثانية (القيمة الافتراضية: 3 دقائق، يمكن ضبطها عبر --app-resync-period)، يقوم بما يلي:
- قراءة الحالة المطلوبة من Repo Server (المانيفستات المُصيَّرة من Git).
- قراءة الحالة الحية من الكتلة (عبر Kubernetes API).
- مقارنة الحالتين.
- إذا كانت
syncPolicy.automatedمُفعَّلة، يُطبّق الفرق. وإلا، يُصنّف التطبيق بـOutOfSync وينتظر إجراءً بشرياً أو استجابةً من CI.
يُقيّم Application Controller أيضاً حالة الصحة. يعرف كيف يقيّم صحة أنواع موارد Kubernetes المضمّنة (Deployment وStatefulSet وDaemonSet وService وIngress)، ويسمح لك بتعريف فحوصات صحة مخصصة بـ Lua لموارد CRD. لا يُعتبر التطبيق Healthy إلا عندما يكون كل مورد فرعي سليماً.
ARGOCD_CONTROLLER_REPLICAS — تمتلك كل شريحة قسماً من مجموعة التطبيقات. هكذا تُشغّل شركات مثل Intuit (مؤلفة ArgoCD الأصلية) آلاف التطبيقات على مستوى تحكم واحد.المكوّن الثالث: API Server وـ Application CRD
يكشف API Server عن واجهة REST وـ gRPC التي تستخدمها أداة CLI وواجهة المستخدم وأنظمة CI الخارجية. يتولى المصادقة (المستخدمون المحليون، OIDC/Dex، LDAP)، وتطبيق RBAC عبر سياسات AppProject، وتوجيه الأوامر (sync، rollback، refresh) إلى Application Controller عبر نموذج Redis المشترك.
Application CRD هو وحدة العمل التعريفية في ArgoCD. كل تطبيق ArgoCD هو مورد Kubernetes مخصص من نوع Application في مجموعة API argoproj.io/v1alpha1. تحتوي مواصفاته على ثلاثة أقسام إلزامية:
source— مستودع Git، والمراجعة (فرع/وسم/SHA)، والمسار (أو اسم المخطط + الإصدار لمستودعات Helm).destination— الكتلة المستهدفة (عبر URL أو داخل الكتلة) والـ namespace المُستهدف.project— AppProject الذي يتحكم في RBAC والكتل والمستودعات المسموح بها لهذا التطبيق.
تثبيت ArgoCD — إعداد جاهز للإنتاج
مانيفست التثبيت الرسمي هو نقطة بداية جيدة، لكن عمليات النشر الإنتاجية تحتاج بعض التعديلات قبل أن تكون جاهزة. فيما يلي تسلسل التثبيت القياسي متبوعاً بخطوات الضبط ما بعد التثبيت التي يتجاهلها معظم المبتدئين.
أول Application CRD
بمجرد تثبيت ArgoCD، تُعرّف التطبيقات كـ YAML. المانيفست التالي يُوزّع مخططاً Helm من مستودع Git على namespace باسم staging، مع تفعيل المزامنة التلقائية والإصلاح الذاتي:
prune: true وselfHeal: true معاً يُطبّقان GitOps الصارم. بدون prune، تبقى الموارد المحذوفة من Git موجودةً في الكتلة. وبدون selfHeal، سيُنشئ تطبيق يدوي عبر kubectl apply أو helm upgrade من لابتوب المطوّر انحرافاً لا تُصلحه ArgoCD أبداً. كلا الخيارين مُعطَّلان افتراضياً — فعّلهما في بيئات غير الإنتاج أولاً، راقب السلوك، ثم فعّلهما في الإنتاج.فحص حالة التطبيق عبر CLI
أداة argocd CLI هي الأداة الرئيسية لتشخيص الأعطال. هذه الأوامر تغطي أكثر الاستعلامات الإنتاجية شيوعاً:
فهم سير العمل البنية → الإعداد → الفحص هو الأساس لكل موضوعات ArgoCD المتقدمة: إدارة متعددة الكتل، وApp-of-Apps، وApplicationSets، وإدارة الأسرار. المكونات التي تعلّمتها هنا — Repo Server، وApplication Controller، وAPI Server، وApplication CRD — تُعيَّن مباشرةً على أنماط الأعطال التي ستُشخّصها في حوادث الإنتاج.