افرادی كه در بخش IT فعاليت دارند، اخیراً بيش از پيش درباره Ansible می شنوند، CIO آن را به عنوان سوگلی DevOps برای خودكارسازی نرمافزار میداند و اضافه می كند كه: Ansible به طور ناگهانی ظاهر شده و اكنون در بسياری از سازمانها اولين گزينه برای خودكارسازی نرمافزار است. StackShare فهرستی از بیش از 1000 شرکت ارائه داده است که از Ansible استفاده میکنند. از جمله اين شركتها ميتوان به اینتل، Evernote و Hootsuite اشاره كرد، به گفته Ansib1 ،le blog اپل و ناسا نیز Ansible را به كار گرفتهاند. Ansible اصلاً چیست و چرا به اين سرعت محبوب شده است؟ اين مطلب به پاسخ اين سؤال می پردازد و بيان می كند كه چرا Ansible و Docker با هم كاركرد بسيار مناسبی دارند و همچنين نحوه استفاده از Ansible در Docker را شرح می دهد، همچنين اجمالاً بررسی خواهد شد كه چرا تركيب Ansible-Docker تركيب بسيار قدرتمندی است.
Ansible چیست؟
Ansible ابزار يا پلتفرم خودكارسازی Open Source است که برای تسكهای IT مانند مدیریت پیکربندی، پيادهسازی برنامه كاربردی، تنظيم درون سرویس و آمادهسازی استفاده می شود. خودكارسازی این روزها بسیار مهم است، چرا كه محیطهای IT بسیار پیچیده هستند و اگر قرار باشد مديران سيستم و توسعهدهندگان كارها را بهصورت دستی انجام دهند، برای آن كه بتوانند تسكها را برسانند، مقياسپذيری اين محيطها بايد بسيار بالا باشد. خودكارسازی، تسكهای پیچیده ساده میکند؛ نه تنها كمك می كند امور توسعهدهندگان قابل مديريتتر شود، بلكه به آنها امكان میدهد تا توجه خود را بر تسكهای دیگری متمرکز کنند که بر ارزش سازمان میافزاید. به عبارت دیگر، كمك می كند طی زمان كمتر، كارايی بيشتری حاصل شود و Ansible، همان طور که در بالا ذکر شد، بهسرعت دارد به برترين ابزار در دنيای ابزارهای خودكارسازی ارتقا می يابد. در ادامه برخی از دلایل محبوبیت Ansible بررسی می شود. اكنون كه دانستيم Ansible چيست، بياييد با مزايای متعدد آن آشنا شويم.
مزایای استفاده از Ansible چیست
- رایگان بودن: Ansible ابزاری Open Source است.
- راهاندازی و استفادۀ بسيار آسان: برای استفاده از Playbookهای Ansible به مهارت کدنویسی خاصی نياز نمی باشد.
- توان بالا: Ansible به كاربر امکان می دهد حتی گردشهای کار بسیار پیچیده IT را مدلسازی کند.
- انعطافپذير: میتوان کل محیط برنامه را فارغ از محيطی كه در آن پيادهسازی شده است، تنظيم نمود. كاربر همچنين می تواند آن را براساس نياز خود سفارشی كند.
- بدون Agent: نیازی نیست كاربر روی سيستمهای كلاينتی كه می خواهد خودكارشان كند، نرم افزار یا پورت فایروال دیگری نصب كند، همچنین لازم نیست ساختار مدیریتی جداگانهای ایجاد نمايد.
- کارآمد: از آنجایی که نیازی به نصب نرمافزار اضافه نيست، فضای بیشتری برای منابع برنامۀ كاربردی در سرور كاربر وجود خواهد داشت.
در ادامه و در مسير درك بيشتر Ansible، به بررسی ويژگی ها و قابليتهای آن می پردازيم.
ویژگیهای Ansible چیست
1. مدیریت پیکربندی
Ansible به گونهای بسيار ساده، قابلاعتماد و هماهنگ برای مديريت پيكربندی طراحی شده است. اگر كاربری هماكنون در حوزۀ IT فعاليت داشته باشد، می تواند سريعاً دست به كار شود و از اين ابزار بهره ببرد. پیکربندیهای Ansible دادههای زيرساخت را به شيوهای ساده توصيف می كنند و هم كاربران می توانند آنها را بخوانند و هم ماشينها قابل به تجزيۀ آنها هستند. كاربران برای شروع مديريت سيستمها تنها به یک رمز عبور یا یک کلید SSH یا Secure Socket Shell، پروتکل شبکه نياز دارند. با اين مثال روشن می شود كه Ansible تا چه حد پيكربندی را آسان می كند: اگر كاربر بخواهد نسخهای بهروزشده از یک نوع نرمافزار خاص را بر تمام ماشینهای موجود در سازمان نصب کند، کافی است تمام آدرسهای IP نودها يا هاستهای Remote را بنويسد و Playbook یا شيوهنامهای برای Ansible تعريف كند تا آن را بر همۀ نودها اجرا كند و سپس اين شيوهنامه را از طريق ماشين كنترل خود اجرا نمايد.
2. پيادهسازی برنامۀ كاربردی
Ansible به كاربر امکان میدهد بهسرعت و بهراحتی برنامههای Multi Tier را اجرا كند. برای خودکارسازی سیستمها نيازی به نوشتن کد سفارشی نخواهد بود؛ كاربر کارهایی را که باید با نوشتن شيوهنامه انجام شوند، فهرست میكند و به اين ترتيب Ansible متوجه میشود که چگونه سیستمهای كاربر را به وضعیت موردنظر او برساند. به عبارت دیگر، نيازی نيست كاربر برنامههای كاربردی را در هر ماشين بهصورت دستی پيكربندی كند. هنگامی که كاربر شيوهنامهای از دستگاه کنترل خود اجرا میكند، Ansible از SSH برای برقراری ارتباط با Remote Hostها و اجرای تمام دستورات تسكها استفاده میکند.
3. تنظيم
تنظيم، همان طور که از نامش پیداست، عناصر مختلف را طوری گرد هم می آورد كه عملكردی كلی، واحد و زيبا ارائه دهند، درست مشابه زمانی كه رهبر موسيقی نتهايی را كه سازهای مختلف توليد كردهاند، بهصورت اثر هنری منسجمی درمی آورد. بهعنوان مثال، كاربر با پيادهسازی برنامه كاربردی، نه تنها سرويسهای Front-end و Backend، بلكه ديتابيسها، شبكهها، Storage و… را بايد مديريت كند. همچنین باید اطمينان يابد که تمام تسكها با ترتيب مناسبی انجام می شوند. Ansible با خودكارسازی گردشهای كار، آمادهسازی و… تسكهای تنظيمسازی را آسانتر می كند. كاربر پس از آن كه زيرساخت خود را با كمك شيوهنامههای Ansible بنا كرد، به علت Portable بودن اين شيوهنامهها می تواند از همان تنظيمات هركجا كه لازم باشد استفاده كند.
4. امنیت و تطبيقپذيری
Policyهای امنیتی مانند قوانین فایروال یا ايزولهسازی کاربران در سرتاسر Site را می توان همچون برنامه كاربردی همراه با سایر فرآیندهای خودکارشده پیادهسازی نمود. اگر جزئیات امنیتی روی ماشین کنترل پیکربندی و شيوهنامه مربوطه اجرا شود، همه هاستهای Remote بهطور خودکار با آن جزئیات به روز میشوند. این بدان معناست که نيازی نيست كاربر برای تطبيقپذيری امنيتی هر دستگاه بهطور دستی آن را مانيتور كند. همچنين برای امنيت بيشتر شناسه کاربری و رمز عبور مدیر به صورت PlainText در Ansible قابلبازيابی نيست.
5. آمادهسازی Cloud
اولین قدم در خودکارسازی چرخه عمر برنامههای کاربردی، خودکار کردن زیرساختهاست، كاربران با Ansible می توانندبه آمادهسازی پلتفرمهای Cloud، هاستهای مجازی، دستگاههای شبكه و سرورهای Bare-metal بپردازند.
معماری Ansible
در ادامه به قطعات تشکیلدهنده محیط Ansible خواهيم پرداخت.
1. ماژول
ماژولها همچون برنامههای كاربردی كوچكی هستند که Ansible آنها را از ماشین کنترل به همه Nodeها يا هاستهای Remote منتقل می كند. ماژولها با استفاده از شيوهنامهها اجرا میشوند و مواردی مانند سرويسها، Packageها و فایلها را کنترل میکنند. Ansible همه ماژولها را برای نصب بهروزرسانی یا كارهاd لازم ديگر اجرا میکند و پس از اتمام كار، آن را حذف میکند. اين ابزار براي امور روزمره بيش از 450 ماژول ارائه می دهد.
2. Plugin يا افزونهها
Pluginها یا افزونه های Ansible چیست – كه در بسياری از ابزارها و پلتفرمهاي ديگر نيز وجود دارند تكهكدهای اضافی هستند كه عملكرد را تقويت می كنند. Ansible همراه با تعدادی از Pluginهای مخصوص به خود ارائه می شود، اما كاربران می توانند Pluginهای خود را نيز بنويسند. سه نمونه از اين Pluginها، Cache ،Action و Callback هستند.
3. Inventory يا موجودی ها
تمام ماشینهایی که با Ansible از آنها استفاده میشود یعنی ماشین کنترل به اضافه نودها در فایلی ساده به همراه Ansible چیست، پایگاههای داده، سرورها و… فهرست شدهاند. پس از ثبت موجودی، میتوان با استفاده از یک فایل متنی ساده، متغیرهایی را به هر یک از Hostها اختصاص داد. موجودی را همچنين می توان از منابعی مانند EC2 يا Amazon Elastic Compute Cloud برداشت.
4. شيوهنامه Ansible چیست
شيوهنامههای Ansible همچون كتابچه راهنمای تسكها هستند؛ فایلهای سادهای هستند که به زبان YAML كه مخفف Yet Ain’t Markup Language است نوشته شدهاند كه يك زبان سريالسازی دادههاست كه انسان قادر به خواندن آن است. شيوهنامهها اصلی ترين المان در محبوبيت Ansible هستند، زیرا تسكهایی را توصيف می كنند كه لازم است سريعاً و بدون آن كه كاربر دستور خاصی را به ياد آورد، انجام شوند. اين دستورالعملها نه تنها میتوانند پیکربندی را مشخص کنند، بلکه قادر هستند مراحل كارهايی را كه بهصورت دستی مرتب شدهاند، تنظيم كنند و همچنين می توانند تسكها را بهطور همزمان يا در زمانهای مختلف اجرا نمايند. هر شيوهنامه از یک یا چند دستورالعمل تشکیل شده است و هدف هر دستورالعمل اين است كه نقشهايی را كه تسكها بهصراحت مشخص كردهاند، برای گروهی از Hostها Map كند.
5. API
انواع مختلفی از Application Programming Interf ،API يا رابطهاِی برنامهنويسی برنامههای كاربردی در دسترس هستند، بنابراین میتوان انواع اتصالات، Callbackها و… بيشتری در Ansible استفاده كرد به عنوان مثال در خصوص انواع اتصالات، می توان صرفاً از SSH برای انتقال استفاده نكرد، تا اينجا به معرفی و شرح مفهوم Ansible پرداختيم؛ در ادامه مفهوم Ansible Tower بررسی می شود.
بیشتر بخوانید: احراز هویت API چیست و دو نوع اصلی از پروتکلهای احراز هویت
Ansible Tower چيست؟
Ansible Tower راهكار تجاری مبتنی بر وب Red Hat برای مدیریت Ansible است، شناختهشدهترین قابليت آن داشتن یا UI رابط کاربری آسان برای مدیریت پيكربندی و پيادهسازی است که نسبت به رابط کاربری اصلی پیشرفت قابلتوجهی دارد. Ansible Tower شامل قابليتهای ضروری Ansible و بهويژه آن دسته از قابليتهايی است كه در فرمت گرافيكی راحتتر ديده می شوند تا در فرمت متنی. حداكثر 10 Node در Ansible Tower رايگان در دسترس قرار ميگيرد.
مزایای استفاده از Ansible با Docker
Ansible در خودکارسازی Docker و عملیاتی کردن فرآیند ايجاد و پيادهسازی کانتینرها بسيار موفق بوده است. مثلاً اگر كاربری يك سيستم IT قديمی را مديريت می كند، بهسختی می تواند قابليت تجهيز و بازاربندی كانتينر را به سيستم خود اضافه كند. اما با Ansible ديگر نيازی نيست كه فرآيندها بهصورت دستی انجام شوند. استفاده از Ansible با Docker چهار مزيت اصلیی دارد:
1.انعطافپذیری
این که شيوهنامههای Ansible پورتابل هستند، به این معنی که میتوان از آنها در هر مکانی و به دفعات استفاده كرد، باعث می شود در مصرف زمان و انرژی كاربر صرفهجويی شود. مثلاً اگر كاربر برای ايجاد Container از یک Dockerfile خالص استفاده كند، ميتواند تنها در يك Docker Container برنامه كاربردی را بازتوليد كند، اما اگر از شيوهنامه Ansible برای ايجاد Container استفاده شود، امكان بازتوليد برنامه كاربردی در Docker، در Cloud و محيطهای ديگر ميسر خواهد بود.
2. Auditability یا قابليت Audit كردن
حتی با ايجاد Container همچنان نياز خواهد بود كد مانيتور و نقاط آسيبپذير رديابی شوند. با استفاده از Ansible با Docker، بهراحتی می توان ردیابی کرد که چهکسانی کدام کانتینرها را رديابی کردهاند و در كل Containerها چه چيزهايی وجود دارد. همچنين كاربر خواهد دانست كه می تواند هر Container را در صورت لزوم بازسازی كند.
3. مدیریت کل محیطها
كاربران اين را ميدانند كه با استفاده از Ansible میتوانند کانتینرهای Docker خود را مدیریت کنند. اما همچنين میتوانند محیطی را که همه Containerها در آن قرار دارند حتی در محیطهای بسیار پیچیده حفظ كنند. Ansible میتواند همزمان Containerها و Non-containerها را مانيتور كند، كه اين امر ضروری است، زيرا برنامههای كاربردی Containerشده اغلب نياز به «برقراری ارتباط» با برنامههای كاربردی Containerنشده دارند.
4. دستور مشابه
همان طور که گفته شد، Ansible از فایلهای YAML برای شيوهنامههای خود استفاده می كرد. Docker از Scriptهايی استفاده می كند كه YAML نيستند، اما آنها بسيار مشابه هم هستند و می توانند كارهای نسبتاً مشابهی انجام دهند.
چگونگی استفاده از Ansible با Docker
ابتدا به ماهيت Docker می پردازيم، Docker پلتفرمی Open Source و مبتنی بر Linux است که به پيادهسازی خودكار برنامههای كاربردی در Containerهای نرمافزار كمك می كند. Container بخشی از نرمافزار است که در آن کد و همه متعلقات آن در يك گروه قرار می گيرند؛ راهاندازی نرمافزار به این روش به اجرای مطمئن و پیوسته برنامه در محیطهای متعدد محاسباتی کمک میکند.
همانطور که گفته شد، می توانید از Ansible برای خودکارسازی Docker و ايجاد و پيادهسازی کانتینرهای Docker استفاده کنید. كاربر ابتدا باید Docker SDK برای پایتون نصب كند، پس از نصب ابزارها، لازم است آخرین Rolebdd Ansible را بررسی کرده و سپس با استفاده از ترفند محيطهای سبز و آبی یا Blue-green، پيادهسازی را انجام دهد. سنجش نيز نبايد فراموش شود، كاربر بايد هردو تست يكپارچهسازی و استرس را انجام دهد، در غیر این صورت، ممكن است برنامه كاربردی او بهدرستی اجرا نشود. سپس كاربر بايد مطمئن شود كه جديدترين نسخه Container در اختيار اوست، برنامه كاربردی قدیمی را همزمان با برنامه كاربردی جدید اجرا کنند، بعد از پيادهسازی تستها را انجام داده و آخرين نسخه را اعلان کند، مجدداً پيكربندی را برای نسخه جديد انجام دهد و در نهايت، نسخه قبلی یا همان نسخه قديمی را متوقف نماید.
پس از آن كه برنامه كاربردی همه آزمایشها را گذراند و پیکربندی روی برنامه جدید تنظیم شد، همكاری Ansible و Docker به شيوهای كه در ادامه ذكر می شود، آغاز می گردد. ابتدا بايد اطمينان حاصل كرد که Git ،Vagrant و VirtualBox نصب شدهاند، سپس لازم است یک فایل Vagrant دارای ماشين مجازی Ubuntu ايجاد شود و در نهایت كاربر بايد شيوهنامه Ansible خود را اجرا نماید، با اين كار نصب و پیکربندی همه چيز انجام می شود. تا اين قسمت ماهيت Ansible را بهخوبی درك كردهايم، اكنون زمان آن رسيده است كه به مديريت Containerهای Docker با استفاده از ماژولهای Ansible بپردازيم.
مدیریت Containerهای Docker با استفاده از ماژولهای Ansible
Ansible دارای چندین ماژول برای مدیریت Docker است كه از جمله آنها می توان بهdocker_image ، docker_container و docker_service اشاره كرد. Docker_image برای ايجاد، بارگذاری یا حذف و همچنین برای Tag و Archive كردن تصاوير استفاده می شود. Docker_container به كاربر امکان میدهد Containerهای Docker را ایجاد كند، از بين ببرد و همچنين آنها را شروع، متوقف يا بهروز نمايد. Docker_service به راهاندازی، خاموش کردن و مقیاسبندی سرويسها کمک میکند. از آنجایی که Ansible و Docker مرتباً بهروز می شوند، كاربر بايد جديدترين فهرست ماژولها و عملکردهای آنها و همچنين نيازمندی های سيستم و… را در راهنمای Ansible برای كار با Docker جستجو كند.
بهطور كلی استفاده از Ansible با Docker میتواند فرآیندهای كاربر را بهطور قابلتوجهی ساده کند و به كاربر امکان میدهد با Containerها کار کرده و همه كارها را خودكار نمایند.