با افزایش اندازه تیمهای توسعه نرمافزار مدرن، نیاز به ارائه مطمئن و خودکار زیرساختها بسیار حیاتی شده است. GitOps، یک روش عملیاتی که از Git به عنوان منبع واحد حقیقت برای ارائه زیرساخت و برنامهها استفاده میکند، به عنوان استاندارد طلایی برای مدیریت محیطهای پیچیده کوبیرنیتیس شناخته شده است. این پست وبلاگ به بررسی نحوه اجرای شیوههای GitOps با استفاده از دو ابزار باز منبع قدرتمند: Argo CD و Flux میپردازد.
درک مبانی GitOps
GitOps مجموعهای از شیوههاست که از Git به عنوان منبع حقیقت برای پیکربندیهای زیرساخت و برنامه استفاده میکند. اصلیترین اصل این است که تمام تغییرات زیرساخت باید اعلانی، کنترل شده نسخه و خودکار از طریق جریانهای کاری Git باشد. این رویکرد اطمینان میدهد که یکپارچگی، قابلیت پایش و قابلیت بازگشت به حالت قبلی در تمام محیطها حفظ شود.
هنگام اجرای GitOps، ما یک حلقه همگامسازی ایجاد میکنیم که در آن وضعیت مطلوب ذخیره شده در Git به طور مداوم با وضعیت واقعی خوشه مقایسه میشود و هرگونه تفاوت به صورت خودکار حل میشود.
معرفی Argo CD
Argo CD یک ابزار تحویل مداوم GitOps اعلانی برای کوبیرنیتیس است. این ابزار اصلی GitOps را با دنبال کردن مخازن Git و همگامسازی خودکار وضعیت خوشه با پیکربندی مطلوب پیادهسازی میکند.
# نمونه مانیفست برنامه Argo CD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/my-app.git
targetRevision: HEAD
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: my-app
syncPolicy:
automated:
prune: true
selfHeal: true
با استفاده از Argo CD، میتوانید برنامهها را به عنوان مخازن Git که حاوی مانیفستهای کوبیرنیتیس هستند تعریف کنید و این ابزار به طور خودکار این پیکربندیها را نصب و نگهداری خواهد کرد.
Flux: رویکرد جایگزین GitOps
Flux یک ابزار GitOps دیگر محبوب برای کوبیرنیتیس است که رویکرد متفاوتی برای همگامسازی ارائه میدهد. برخلاف مدل مبتنی بر ارسال (push) Argo CD، Flux از رویکردی مبتنی بر دریافت (pull) استفاده میکند که در آن خوشه به طور فعال درخواست بهروزرسانیهای پیکربندی از Git میکند.
# تعریف منبع Flux
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: GitRepository
metadata:
name: my-app
namespace: flux-system
spec:
interval: 1m0s
url: https://github.com/myorg/my-app.git
ref:
branch: main
Flux در ارائه رویکردی توزیعشدهتر به GitOps بهتر عمل میکند که این امر مدیریت پیکربندیها در بین چندین خوشه و محیطها را آسانتر میکند.
راهاندازی محیط GitOps
قبل از پیادهسازی هر یک از این ابزارها، شما نیاز به ایجاد یک ساختار مخزن Git که مسئولیتها را جدا کند دارید:
# ساختار معمول مخزن GitOps
├── apps/
│ ├── production/
│ │ └── my-app.yaml
│ └── staging/
│ └── my-app.yaml
├── infrastructure/
│ ├── base/
│ └── overlays/
└── kustomize/
هم Argo CD و هم Flux با Kustomize، چارتهای Helm یا مانیفستهای ساده کوبیرنیتیس کار میکنند. کلید این است که ساختاری یکنواخت حفظ کنید که امکان مدیریت آسان محیطها را فراهم کند.
مثال عملی پیادهسازی
فرض کنید یک سناریوی واقعی داریم که در آن یک برنامه میکروسرویس را با استفاده از اصول GitOps ارائه میدهیم:
# پیکربندی محیط تولید
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- port: 80
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: myorg/my-app:1.2.3
ports:
- containerPort: 8080
با این پیکربندی در مخزن Git شما، هر دو Argo CD و Flux اطمینان میدهند که خوشه تولید شما دقیقاً این پیکربندی را حفظ میکند و به طور خودکار هرگونه انحراف را تشخیص داده و اصلاح خواهند کرد.
شیوههای بهتر و ملاحظات
اجرای موفق GitOps نیازمند توجه به چندین شیوه کلیدی است:
- از درخواستهای کشیدن (pull request) برای تمام تغییرات زیرساخت استفاده کنید تا بررسی همتیمی فعال شود
- استراتژیهای شاخهگذاری مناسب را پیادهسازی کنید (شاخههای ویژگی، شاخههای انتشار)
- از هوکهای Git برای تست و اعتبارسنجی خودکار استفاده کنید
- سیاستهای مناسب RBAC را برای ابزارهای GitOps خود پیکربندی کنید
- نظارت و هشداردهی برای عملیات GitOps را راهاندازی کنید
نتیجهگیری
GitOps با Argo CD و Flux یک پایه قوی برای ارائه خودکار زیرساخت و مدیریت ارائه فراهم میکند. هر دو ابزار مزایای منحصر به فردی دارند: Argo CD در مدیریت بصری و همگامسازی قوی است، در حالی که Flux رویکردی غیر متمرکزتر به مدیریت پیکربندی ارائه میدهد. با پیادهسازی این شیوهها، تیمهای توسعه میتوانند قابلیت اطمینان بیشتر، چرخه ارائه سریعتر و یکپارچگی عملیاتی بهتر در محیطهای کوبیرنیتیس خود داشته باشند.
با افزایش پیچیدگی زیرساخت، GitOps بهطور فزایندهای برای حفظ کنترل بر فرآیندهای ارائه ارزشمند میشود. چه از Argo CD، Flux یا ترکیبی از هر دو استفاده کنید، کلید این است که فرآیندهای واضحی را ایجاد کنید و شیوههای یکنواختی را در جریان GitOps سازمان خود حفظ کنید.