برای تحویل سریعتر برنامه ها، باید از یک ابزار DevOps جهت اتوماسیون زیرساخت استفاده شود. متأسفانه، هیچ ابزار تکی وجود ندارد که تمام نیازهای شما از جمله آماده سازی سرور، مدیریت پیکربندی، سیستم ساخت خودکار (automated builds)، استقرار کد و مانیتورینگ را هندل کند. عوامل متعددی استفاده از ابزارهای اتوماسیون در یک زیرساخت را تعیین می کنند. در این مقاله به بررسی مهمترین ابزارهای اتوماسیون زیرساخت که در یک محیط عادی با رویکرد DevOps قابل استفاده هستند، پرداخته می شود.
بهترین ابزار DevOps برای اتوماسیون زیرساخت
برای اتوماسیون زیرساخت، ابزارهای زیادی وجود دارند. انتخاب ابزار مناسب برای اتوماسیون زیرساخت به عواملی مانند معماری پلتفرم، مهارتها، بودجه، انطباق با استانداردهای امنیتی و نیازهای زیرساخت شما بستگی دارد.
تصویر(1)
در ادامه فهرستی از بهترین ابزارها در دستههای مختلف مانند مدیریت پیکربندی، ارکستراسیون (orchestration)، یکپارچه سازی مداوم (continuous integration) و مانیتورینگ ارائه شده است.
ابزار DevOps به ترتیب در دستهبندیهای زیر معرفی می شوند:
- آماده سازی زیرساخت (Infrastructure Provisioning)
- مدیریت پیکربندی
- یکپارچهسازی مداوم و استقرار
- مدیریت تنظیمات/رمزنگاری
- لاگ برداری و مانیتورینگ
آماده سازی زیرساخت (Infrastructure Provisioning)
Infrastructure provisioning فرایند آماده سازی و ایجاد منابع زیرساختی است و بخشی از زیرساخت مبتنی بر کد (IaC) می باشد.
۱. Terraform
تصویر(2)
Terraform یک ابزار پرکاربرد و متن باز است که جهت راه اندازی زیرساخت ابری استفاده می شود. Terraform توسط شرکت Hashicorp توسعه یافته و با زبان برنامهنویسی Go نوشته شده است. این ابزار DevOps تمامی زیرساختهای ابری عمومی و خصوصی (شبکهها، سرورها، خدمات مدیریت شده، فایروال و...) را پشتیبانی میکند.
بر خلاف سایر ابزارهای مدیریت پیکربندی، Terraform به خوبی وضعیت زیرساخت شما را با استفاده از مفهومی به نام فایلهای وضعیت (state files) حفظ میکند. شما میتوانید طی چند روز با Terraform آشنا شوید زیرا بسیار آسان است. Terraform زبان خاص دامنه (DSL) خود را دارد که با نام HCL (مخفف Hashicorp configuration language) شناخته میشود.
همچنین، شما میتوانید با استفاده از زبان Golang، افزونه شخصی خود را برای terraform بنویسید. terraform توسط جامعه کاربری حمایت زیادی می شود و اکثر ماژولهای مورد نیاز برای راه اندازی زیرساخت در تمام پلتفرمهای ابری را میتوان در رجیستری terraform پیدا کرد.
۲. Pulumi
Pulumi یک ابزار DevOps از نوع IAC است که از چندین زبان برنامهنویسی مانند پایتون، Go، جاوا اسکریپت، سیشارپ و... پشتیبانی میکند. بر خلاف سایر ابزارهای قالببندی IaaC، هدف Pulumi ارائه انعطافپذیری بیشتر در زمینه کد زیرساخت با استفاده از زبان برنامهنویسی مورد علاقه شما است. اینکار باعث میشود تست کد زیرساخت با فریمورک های آزمایشی موجود در زبان برنامهنویسی تسهیل گردد.
Pulumi از تمامی پلتفرمهای ابری مهم مانند AWS، Google Cloud و Azure پشتیبانی میکند. بهترین بخش این است که از مفاهیم مشابه با Terraform جهت مدیریت وضعیت استفاده مینماید. اگر از جمله افرادی هستید که میخواهید برای زیرساخت خود کد بنویسید، Pulumi ارزش امتحان کردن را دارد.
مدیریت پیکربندی (Configuration Management)
دسته بعدی، ابزار DevOps جهت مدیریت پیکربندی است. Configuration Management به فرایند پیکربندی منابع زیرساخت گفته می شود.
۳. انسیبل (Ansible)
تصویر(3)
انسیبل یک ابزار DevOps جهت مدیریت پیکربندی به صورت agent-less (عدم نیاز به نصب کامپوننت یا نرم افزار agent اضافی روی سیستم) است و همچنین یک ابزار ارکستراسیون محسوب می شود. در انسیبل، ماژولهای پیکربندی با نام "Playbooks" معروف هستند.
Playbook ها به صورت یک فایل متنی با فرمت YAML نوشته میشوند و نسبت به سایر ابزارهای مدیریت پیکربندی، نوشتن آنها نسبتاً آسان است. همچنین، مانند سایر ابزارها، انسیبل نیز قادر به ارائه زیرساخت ابری می باشد. Ansible از dynamic inventory (فهرستی پویا از سیستم ها و دستگاه هایی که باید به وسیله Ansible مدیریت شوند) پشتیبانی میکند و به وسیله آن می تواند اطلاعات سرور را به صورت پویا و خودکار با فراخوانی API دریافت نماید.
۴. Chef
Chef یک ابزار DevOps مدیریت پیکربندی مبتنی بر ruby است. Chef از مفهوم cookbooks استفاده میکند که می توانید در آنها زیرساخت خود را با DSL (زبان خاص دامنه) بنویسید. Chef ماشینهای مجازی را بر اساس قوانینی که در cookbook ها ذکر شده است، پیکربندی میکند. یک chef agent روی تمام سرورهایی که باید پیکربندی شوند اجرا میشود. agent اقدام به دریافت cookbook ها از سرور مستر chef نموده و آن پیکربندیها را در سرور اجرا میکند تا به وضعیت مطلوب خود برسد.
۵. پاپت (Puppet)
Puppet نیز مانند Chef یک ابزار DevOps مدیریت پیکربندی مبتنی بر ruby است. کد پیکربندی با استفاده از زبان دامنه خاص Puppet نوشته میشود و در ماژولها قرار می گیرد. در حالی که cookbook ها در Chef بیشتر برای توسعهدهندگان می باشد، Puppet جهت پاسخگویی به نیازهای مدیران سیستم طراحی شده است.
Puppet یک puppet agent روی تمام سرورهایی که باید پیکربندی شوند اجرا میکند و ماژول کامپایل شده را از سرور puppet دریافت کرده و پکیج های نرمافزاری مشخص شده در ماژول را نصب میکند.
۶. SaltStack
Saltstack یک ابزار مدیریت پیکربندی متنباز و مبتنی بر پایتون است. برخلاف Chef و puppet، ابزار Saltstack از قابلیت اجرای دستورات به صورت remote (از راه دور) پشتیبانی میکند.
به طور معمول در Chef و Puppet، کد پیکربندی باید از سرور دریافت شود اما در Saltstack، کد میتواند همزمان به node های زیادی ارسال گردد. کامپایل کد و پیکربندی در Saltstack بسیار سریع انجام می شود.
توجه: انتخاب ابزار DevOps باید کاملاً بر اساس نیازهای پروژه و توانایی تیم در یادگیری و استفاده از ابزارها انجام شود. به عنوان مثال، میتوانید از انسیبل برای ایجاد مولفه های زیرساخت و پیکربندی ماشین های مجازی استفاده کنید. بنابراین، اگر تیم و محیط کوچکی دارید، terraform برای مدیریت زیرساخت به صورت جداگانه لازم نیست.
۷. Helm
Helm یک پکیج منیجر برای Kubernetes است. با استفاده از Helm Charts میتوانید هر برنامه پیچیدهای را روی یک کلاستر Kubernetes پیاده سازی نمایید. این ابزار DevOps ویژگیهای قالببندی بسیار خوبی دارد که از template های تمام آبجکت های Kubernetes مانند Deployment، pod، service، config maps، secrets، RBAC، PSP و... پشتیبانی میکند. شما میتوانید از یک template برای پیادهسازی چندین برنامه استفاده کنید.
ابزارهای CI/CD (یکپارچه سازی پیوسته/تحویل پیوسته)
در این بخش به بهترین ابزار های CI/CD پرداخته می شود که می توانند بخشی از اتوماسیون زیرساخت باشند.
۸. Jenkins
تصویر(4)
Jenkins یک ابزار DevOps یکپارچه سازی پیوسته مبتنی بر جاوا جهت تحویل سریعتر برنامه است. جنکینز باید به یک سیستم کنترل نسخه مانند GitHub یا SVN متصل شود. هر زمان که کد جدیدی به مخزن کد (code repository) ارسال میشود، سرور جنکینز کد جدید را build و آزمایش نموده، سپس تغییرات و نتیجه را به تیم اعلام میکند.
جنکینز دیگر فقط یک ابزار CI نیست. Jenkins به عنوان یک ابزار ارکستراسیون برای ساخت pipeline (مجموع مراحلی که کد باید طی کند) که شامل استقرار و آماده سازی برنامه است، استفاده میشود. قابلیت جدید "pipeline as code" نیز به شما امکان میدهد pipeline های CI/CD را به عنوان یک کد کامل نگهداری کنید.
۹. GitHub Actions
اگر از گیتهاب استفاده میکنید، Github actions راهی عالی برای راه اندازی پایپ لاین CI می باشد. Github actions امکانات و روال های کاری متعددی را برای تنظیم پایپ لاین CI فراهم میکند. علاوه بر این، میتوان از آن در حسابهای Github عمومی و سازمانی (enterprise) استفاده نمود. مفهوم Github runners به شما کمک می کند تا یک محیط self-hosted (محیطی که مدیریت کامل آن را بر عهده دارید) جهت اجرای امور CI راه اندازی نمایید.
۱۰. Kubernetes Operators
Kubernetes یکی از بهترین ابزارهای ارکستراسیون کانتینر است. اگر از کوبرنتیز استفاده میکنید، توصیه می شود حتما عملکرد Operator ها را نیز مورد بررسی قرار دهید. این ابزار DevOps جهت خودکارسازی و مدیریت برنامه Kubernetes با منطق تعریف شده توسط کاربر، بسیار مفید است. شما میتوانید از روشهای GitOps استفاده کنید تا استقرارهای Kubernetes را به صورت کاملاً خودکار بر اساس تغییرات و تأییدهای Git انجام دهید.
از جمله ابزار های CD مبتنی بر operator می تواند به موارد زیر اشاره کرد:
1- ArgoCD
2- FluxCD
در این مقاله که بخش اول از ابزار های مهم و پرکاربرد DevOps است، به بررسی و معرفی 10 ابزار پرداخته شد. در بخش دوم این مقاله، 10 عنوان مهم دیگر مورد بررسی قرار گرفته است.