آشنایی با GitOps و Argo و مزایای استفاده از آن ها
در یک دنیای ایده آل، توسعه دهندگان می توانند به سرعت محصولات و ویژگی های جدیدی را در محیط های توسعه از مرحله تولید به عرضه برسانند و در عین حال مجبور نیستند در مورد خرابی محصول استرس داشته باشند. دستیابی به سرعت در توسعه و همچنین حفظ قابلیت اطمینان نرم افزار، نیازمند داشتن زنجیره ای از ابزار مناسب و اتوماسیون هستند.
چندین روش و ابزار مختلف وجود دارند که تلاش می کنند این مشکلات را حل کنند، اما در این مقاله به طور خاص در مورد GitOps و Argo و نحوه استفاده از آن ها برای بهبود نحوه انتشار نرم افزار را به شما آموزش می دهیم. شرکت های بزرگ و کوچک با بسیاری از این مشکلات مواجه اند و ارزش استفاده از Argo زمانی مشخص می شود که ببینید چه شرکت هایی از آن استفاده می کنند:
- Adobe
- Alibaba
- ByteDance(TikTok)
- Datadog
- GitHub
- NVIDIA
- Red Hat
- IBM
GitOps چیست؟
برای شروع بهتر است کمی درمورد مفهوم کلی GitOps بدانیم و دلیل ایجاد Argo و مشکلاتی که سعی در حل آن ها دارد را بفهمیم.
GitOps اساسا یک فریم وورک یا گروهی از بهترین روش ها برای مدیریت زیرساخت های مبتنی بر ابر است. GitOps با استفاده از روش های DevOps و شیوه های مدرن توسعه اپلیکیشن، سعی در مدیریت زیرساخت ها دارد که این روش ها شامل مفاهیم یا ابزارهایی مانند استقرار مداوم (CD) و زیرساخت به عنوان کد برای پر کردن شکاف بین تیم های توسعه و عملیات است.
همانطور که از نام آن پیداست، Git نقش کلیدی در GitOps ایفا می کند. Git به عنوان یک منبع مرجع برای تعیین تنظیمات لازم در زیرساخت ها و برنامه ها استفاده می شود. تفاوت GitOps با DevOps در اینجا این است که تنظیمات و پیکربندی باید براساس مجموعه ای از حقایق باشند؛ حقایقی در مورد اینکه زیرساخت شما چگونه باید به نظر برسد، نه اینکه فقط مجموعه ای از دستورالعمل ها برای انجام مرحله به مرحله برای ایجاد یک محیط توسعه باشد.
برای این کار از فرآیندهای خودکار برای انجام این پیکربندی استفاده می شود و اطمینان حاصل می شود که محیط تولید یا توسعه با وضعیت توصیف شده در مخزن مطابقت دارد. استفاده از Git همچنین به شما یک تاریخچه از ورژن های مختلف اپلیکیشن تان می دهد و به شما کمک می کند تا زمانی که commitهای جدید وارد می شوند، آن را اجرا کنید یا در صورت نیاز به commit قبلی برگردید.
زمانی که GitOps به درستی اجرا شود دارای مزایای زیر است:
- راه اندازی سریع تر و مکرر – اتوماسیون کل فرآیند توسعه، ارائه ویژگی های جدید را سرعت می بخشد و کار را برای توسعه دهندگان آسان تر می کند.
- حل سریعتر خطاها – با استفاده از ابزارهایی مانند Argo برای مدیریت استقرار و راه اندازی، اگر هرگونه مشکلی بر اساس معیارهای تعریف شده شناسایی شود، راه اندازی می تواند به طور خودکار به نسخه کاری قبلی برگردد. استفاده از Argo Rollouts برای پیاده سازی پیشرونده، شناسایی مشکلات را قبل از رسیدن به مرحله تولید آسان تر می کند.
- بررسی داخلی – استفاده از Git به شما این مزیت را می دهد که کل تاریخچه نرم افزار خود را در طول زمان ردیابی کنید.
Argo چیست؟
پروژه Argo مجموعه ای از ابزارهایی است که می توانند با هم یا به طور مستقل برای پیاده سازی و استفاده از بهترین شیوه های GitOps برای برنامه های مبتنی بر Kubernetes استفاده شوند.
این پروژه در ابتدا توسط Applatix برای کمک به مدیریت معماری نرم افزار بومی ابری آن ها ایجاد شد. Applatix توسط Intuit خریداری شد و در ژانویه 2018 اولین جزء پروژه Argo به عنوان Argo Workflows منبع باز شد. Argo CD و Argo Events بعداً در سال 2018 و Argo Rollouts در سال 2019 ارائه شدند. در سال 2020 Argo به عنوان یک پروژه انکوباتور توسط CNCF پذیرفته شد.
Argo در حال حاضر ششمین پروژه CNCF فعال است و بیش از 25000 رای مثبت در GitHub را در ابزارهای سازنده پروژه Argo به دست آورده است.
ویژگی های Argo
بهتر است که نگاه عمیق تری به هر یک از ابزارهای مختلفی که پروژه Argo را تشکیل می دهند بیاندازیم و برخی از ویژگی هایی را که ارائه می دهند را بررسی کنیم.
Argo workflows
Argo Workflows یک موتور گردش کار است که برای کار به صورت بومی در Kubernetes طراحی شده است. گردش های کاری به عنوان تعاریفی از منابع سفارشی Kubernetes اجرا می شوند و به شما امکان می دهند گردش های کاری چند مرحله ای ایجاد کنید که در آن هر مرحله به عنوان یک کانتینر مستقل اجرا می شود. این گردش ها می توانند دنباله ای از وظایف یا یک نمودار غیر چرخه ای جهت دار (DAG) باشند که به سایر وظایف در گردش کار وابستگی دارند.
نقطه قوت اصلی Argo Workflows این است که می تواند روی هر کدام از خوشه های Kubernetes اجرا شود. به دلیل استفاده از کانتینرها به جای VM یا سرورهای اختصاصی، بسیار سبک و کارآمد است و به لطف Kubernetes بسته به حجم کار، وظایف را می توان به راحتی افزایش یا کاهش داد.
برخی از موارد استفاده متداول برای Argo Workflows کانال های استاندارد CI/CD هستند که می توان از Workflows برای ادغام ابزارهای مختلف با یکدیگر استفاده کرد. یکی دیگر از موارد استفاده به عنوان یک کانال پردازش داده یا ابزار MLOps است که در آن مقیاس پذیری Kubernetes یک مزیت بزرگ است و تمام پیچیدگی ها توسط Argo ساده می شوند. بسته به نیازهای سخت افزاری در حین کار، Argo را می توان به گونه ای پیکربندی کرد که CPU یا حافظه های بهینه سازی شده در حافظه را به کار بیاندازد تا از نظر هزینه سخت افزاری نیز کارآمدتر باشد.
برخی از ویژگی های مفید دیگر توسط Argo Workflows:
- UI کامل برای بصری سازی گردش کار
- پشتیبانی بومی از HTTP، Git، و سرویس های ابری محبوب
- آرشیو گردش کار برای بررسی
- قالب ها (Templates)
- REST API
Argo CD
Argo CD به عنوان یک کنترل کننده Kubernetes راه اندازی شده است که به طور مداوم وضعیت یک خوشه Kubernetes را مشاهده می کند و آن را با حالت دلخواه تعریف شده در پیکربندی Git repo مقایسه می کند. اگر Argo CD تشخیص دهد که برنامه با پیکربندی مورد نظر هماهنگ نیست، آن را می توان به گونه ای تنظیم کرد که به طور خودکار تغییرات مورد نیاز را برای اصلاح خوشه Kubernetes ایجاد کند یا هشدارهایی ایجاد کند تا برنامه نویس را برای اصلاح دستی مطلع کند.
ویژگی های دیگر Argo CD:
- پشتیبانی از استقرارهای مبتنی بر فشار (Push) و کشش (Pull)
- پشتیبانی از چندین قالب مختلف Kubernetes – نمودارهای فرمان، jsonnet، YAML، سفارشی کردن برنامه ها
- UI و CLI برای مدیریت
- توانایی مدیریت چندین خوشه Kubernetes و کنترل دسترسی براساس نقش افراد در پروژه
- منابعی که می توانند اسکریپت های سفارشی را راه اندازی کنند یا با سرویس های خارجی در مراحل مختلف عملیات همگام سازی Argo CD تعامل داشته باشند – مراحل PreSync، Sync، PostSync، زمانی که همگام سازی ناموفق است.
Argo rollouts
Argo Rollouts یک کنترل کننده Kubernetes و مجموعه ای از CRD هاست که قابلیت استقرار پیشرفته ای مانند Blue-Green ، canary، آنالیز canary، آزمایش و ویژگی های تحویل پیوسته (CD) را به Kubernetes ارائه می کند.
Argo Rollouts (به طور اختیاری) با کنترل کننده های ورودی و شبکه های سرویس ادغام می شود و از توانایی های شکل دهی ترافیک آن ها برای انتقال تدریجی ترافیک به نسخه جدید در طول به روزرسانی استفاده می کند. به علاوه، Rollouts می تواند معیارهای ارائه دهنده های مختلف را برای تأیید KPIهای کلیدی جستجو و تفسیر کند و طی یک به روزرسانی، ارتقا یا بازگشت خودکار را انجام دهد.
Argo Rollouts برای مدیریت جریان ترافیک از طریق خوشه Kubernetes با ابزارهای شبکه ورودی و سرویس ادغام می شود. Rollouts همچنین با ابزارهای نظارتی مانند Prometheus، Datadog، New Relic و InfluxDB ادغام می شود. می توانید معیاری را تعریف کنید و Argo Rollouts اگر ببیند با معیار تعریف شده برای چیزی مانند زمان پاسخ یا نرخ خطا مطابقت نداشته باشد، فرآیند راه اندازی را به مراحل قبلی برمی گرداند.
در اینجا یک مثال پیکربندی برای نحوه نظارت بر درصد خطاهای گزارش شده توسط Istio و ذخیره شده با InfluxDB آورده شده است. اگر میزان خطا از مقدار تعریف شده در قسمت successCondition بیشتر شود، استقرار با شکست مواجه خواهد شد:
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: error-rate
spec:
args:
- name: application-name
metrics:
- name: error-rate
successCondition: result[0] <= 0.01
provider:
influxdb:
profile: my-influxdb-secret # optional, defaults to 'influxdb'
query: |
from(bucket: "app_istio")
|> range(start: -15m)
|> filter(fn: (r) => r["destination_workload"] == "{{ args.application-name }}")
|> filter(fn: (r) => r["_measurement"] == "istio:istio_requests_errors_percentage:rate1m:5xx")
Argo events
Argo events فریم وورکی برای مدیریت رویدادها و انجام اقدامات خودکار با Kubernetes است. Argo events با دریافت events از منابع رویداد کار می کند و شامل پشتیبانی از بیش از 20 منبع رویداد است که برخی از محبوب ترین آن ها عبارتند از:
- GitHub
- Kafka
- NATS
- MQTT
- Webhooks
برخی از محرک های رایج عبارتند از:
- Serverless functions (AWS Lambda)
- Argo Rollouts
- Argo Workflows
- Kafka messages
- Slack notifications
- Custom HTTP requests
Argo Events از نظر طراحی بسیار منعطف است و هدف آن ارائه پلتفرمی است که خودکارسازی فرآیندها را با ابزارهای دلخواه شما آسان می کند.
سخن آخر
امیدواریم این مقاله به شما کرده باشد تا درک کاملی از تمام اجزای مختلف Argo project داشته باشید. در حالی که به دلیل استفاده از CI/CD و GitOps به خوبی شناخته شده است، ابزارهایی مانند Workflows و Events نیز می توانند برای انجام انواع وظایف دیگر در Argo استفاده شوند. یکی از بزرگترین مزایا آن این است که شروع کار با Argo نسبتاً آسان است زیرا اکثر توسعه دهندگان از قبل با ابزارهای مورد استفاده برای پیکربندی و سفارشی کردن Argo آشنا هستند.
دیدگاه خود را ثبت کنید
تمایل دارید در گفتگوها شرکت کنید؟در گفتگو ها شرکت کنید.