مدیریت زیرساخت مدرن به شدت از عملیات دستی خط فرمان به سمت جریانهای کاری اعلانی و مبتنی بر کد تغییر کرده است. در قلب این تغییر، GitOps قرار دارد که یک پارادایم است و از گیت به عنوان تنها منبع حقیقت برای استقرار زیرساخت و برنامه استفاده میکند. در میان ابزارهایی که این رویکرد را محبوب کردهاند، ArgoCD به عنوان استاندارد صنعتی برای تحویل مستمر در کوبرنیتس برجسته است.
در این راهنمای جامع، ما بررسی خواهیم کرد که چگونه ArgoCD را برای خودکارسازی استقرارهای کوبرنیتس خود پیادهسازی کنید. ما مفاهیم اصلی را پوشش داده، مراحل پیادهسازی عملی را نشان میدهیم و بحث میکنیم که چگونه قابلیتهای تشخیص انحراف بومی ArgoCD تضمین میکند که وضعیت خوشه شما همیشه با مخزن گیت شما مطابقت داشته باشد.
درک پارادایم GitOps
خط لولههای CI/CD سنتی اغلب به مدل "push" (فشار دادن) متکی هستند، جایی که یک سرور ساخت، تصاویر Docker را مستقیماً به یک رجیستری فشار داده و سپس استقرارها را از طریق اسکریپتها راه میاندازد. اگرچه این رویکرد موثر است، اما میتواند منجر به انحراف پیکربندی شود، جایی که وضعیت واقعی خوشه از وضعیت مورد نظر که در کنترل نسخه ذخیره شده است، منحرف میشود.
GitOps این مدل را معکوس میکند. این مدل بر یک مکانیسم "pull" (دریافت) عمل میکند. عامل ArgoCD در داخل خوشه کوبرنیتس اجرا میشود و مخزن گیت را به طور مداوم نظارت میکند. وقتی یک توسعهدهنده تغییری را به مخزن فشار میدهد (برای مثال، بهروزرسانی یک تگ تصویر)، ArgoCD تغییر را تشخیص داده و خوشه را همگامسازی میکند تا با آن وضعیت مورد نظر مطابقت داشته باشد. این تضمین میکند که:
- مخزن گیت منبع حقیقت نهایی است.
- همه تغییرات از طریق تاریخچه کامیتهای گیت قابل حسابرسی هستند.
- تغییرات دستی که مستقیماً روی خوشه انجام میشوند، تشخیص داده شده و میتوان آنها را به طور خودکار اصلاح کرد.
راهاندازی ArgoCD
شروع کار با ArgoCD ساده است. شما میتوانید آن را با استفاده از نمودار رسمی Helm یا مانیفست ارائه شده نصب کنید. برای شروع سریع در یک محیط توسعه، میتوانید مانیفست را مستقیماً اعمال کنید:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
پس از نصب، باید به سرور ArgoCD دسترسی داشته باشید. به طور پیشفرض، آن یک رابط کاربری وب را در معرض نمایش قرار میدهد. میتوانید برای دسترسی محلی، پورت را فوروارد کنید:
kubectl port-forward service/argocd-server -n argocd 8080:443
سپس میتوانید رابط کاربری را در https://localhost:8080 دسترسی پیدا کنید. رمز عبور اولیه را میتوان با استفاده از دستور زیر بازیابی کرد:
kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d
تعریف برنامهها و خودکارسازی استقرارها
اجزای اصلی ArgoCD، منبع Application است. این تعریف منبع سفارشی (CRD) به ArgoCD میگوید که کد برنامه شما کجا زندگی میکند (گیت)، وضعیت هدف چیست و به کدام خوشه استقرار داده شود.
بیایید یک مانیفست YAML ساده برای استقرار یک برنامه Nginx ایجاد کنیم. این فایل باید در مخزن گیت شما در کنار کد برنامه شما ذخیره شود.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/your-org/guestbook-app.git
targetRevision: HEAD
path: kubernetes/base
destination:
server: https://kubernetes.default.svc
namespace: guestbook
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
پیکربندیهای کلیدی در این مانیفست شامل موارد زیر است:
- Source (منبع): به مخزن گیت شما و مسیر خاصی که شامل مانیفستهای کوبرنیتس است اشاره میکند.
- Destination (مقصد): خوشه هدف و نامفضا را مشخص میکند.
- Sync Policy (سیستم همگامسازی): این مورد حیاتی است. تنظیم
automated.prune: trueتضمین میکند که منابعی که در گیت حذف شدهاند، از خوشه نیز حذف میشوند. تنظیمselfHeal: trueتشخیص و اصلاح خودکار انحراف را فعال میکند.
پس از اینکه این فایل Application.yml را به مخزن گیت خود فشار دادید، ArgoCD به طور خودکار منبع جدید را تشخیص داده، آن را همگامسازی کرده و برنامه را در خوشه کوبرنیتس شما استقرار میدهد.
تسلط بر تشخیص انحراف
یکی از قدرتمندترین ویژگیهای ArgoCD توانایی آن در تشخیص انحراف پیکربندی است. انحراف زمانی رخ میدهد که شخصی تغییرات دستی را روی خوشه کوبرنیتس انجام دهد (برای مثال، با استفاده از kubectl edit)، که باعث میشود وضعیت زنده با وضعیت گیت متفاوت شود.
با فعال بودن selfHeal: true، ArgoCD به طور خودکار این تغییرات دستی را برای مطابقت با مخزن گیت بازگردانی میکند. با این حال، شما میتوانید از selfHeal: false نیز استفاده کنید تا فقط از انحراف مطلع شوید. در رابط کاربری، برنامههای دارای انحراف با نشانگر وضعیت زرد یا قرمز ظاهر میشوند.
برای محیطهایی که گاهی اوقات نیاز به لغو دستی وجود دارد، میتوانید موجهای همگامسازی را پیکربندی کنید یا از ignoreDifferences در سیستم همگامسازی استفاده کنید. برای مثال، اگر اجازه مقیاسدهی دستی replicas را میدهید اما میخواهید بقیه پیکربندی را اعمال کنید، میتوانید تغییرات در spec.replicas را نادیده بگیرید:
spec:
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- IgnoreDifferences={"group":"apps","kind":"Deployment","jsonPointers":["/spec/replicas"]}
بهترین شیوهها برای محیط تولید
- زیرساخت غیرقابل تغییر: هرگز منابع زنده را به صورت دستی تغییر ندهید. برای همه تغییرات از گیت استفاده کنید.
- محافظت از شاخه: از درخواستهای کشش (Pull Requests) برای بازبینی تغییرات قبل از رسیدن به شاخه اصلی، که ArgoCD آن را نظارت میکند، استفاده کنید.
- مدیریت چند خوشهای: ArgoCD در مدیریت چندین خوشه عالی عمل میکند. از
cluster-secretبرای ثبت خوشهها و مدیریت آنها از یک داشبورد واحد استفاده کنید. - مدیریت رمزهای عبور: از ذخیره دادههای حساس به صورت متن ساده در گیت خودداری کنید. از رمزگذاری رمزهای عبور داخلی ArgoCD استفاده کنید یا با مدیران رمزهای عبور خارجی مانند HashiCorp Vault یا AWS Secrets Manager از طریق پلاگینها یکپارچه شوید.
نتیجهگیری
پیادهسازی GitOps با ArgoCD نحوه مدیریت برنامههای کوبرنیتس شما را دگرگون میکند. با بهرهگیری از استقرارهای خودکار و تشخیص انحراف قوی، خطای انسانی را کاهش میدهید، امنیت را بهبود میبخشید و در وضعیت زیرساخت خود اطمینان حاصل میکنید. همانطور که به سمت پیکربندیهای پیچیدهتر چند خوشهای و چند محیطی حرکت میکنید، ArgoCD مقیاسپذیری و دید مورد نیاز برای حفظ کنترل بدون قربانی کردن سرعت را فراهم میکند.
با خودکارسازی یک استقرار واحد به صورت کوچک شروع کنید، با سیستمهای همگامسازی آزمایش کنید و به تدریج جریان کاری GitOps خود را گسترش دهید. سفر به سمت مدیریت زیرساخت کاملاً خودکار ارزش تلاش را دارد.