سلام و درود
یکی از اصول مهم دواپس خودکار سازی هست. چیزی که به نظرم قبل و بعدش تغییر جدی توی سیستمها و سرویسها و زندگی شخصی آدم داره. شاید جالب به نظر بیاد به زندگی شخصی آدم چی کار داره. ولی واقعا روی اونم تاثیر داره. فکرش رو بکن یه نرمافزار تو چرخهی زندگی خودش ممکنه روزی یک یا چند بار یا هفتهای چندین بار دیپلوی بشه. به هر حال کم یا زیاد این اتفاق تکراری همواره داره پیش میاد. یا مثلا آماده کردن سرور کاری هست که همواره داره تکرار میشه. این کارها شاید چند بار اولش جذاب باشه و نکاتی داشته باشه ولی بیشتر از اون دیگه تکرار یه کارهایی که ماشینها و ابزارها اونها رو بهتر و دقیقتر انجام میدن، سردرده. همین که فرد زمان که مهمترین سرمایهی هرکسی هست رو صرف کار بیهوده نمیکنه و به جاش میتونه روی رشد سرویسها و سیستمهایی که داره کار کنه، به شدت تو زندگی شخصی اون فرد موثر خواهد بود. بگذریم.
تو این مستند در مورد Ansible به عنوان یکی از بهترین اتومیشنها و Configuration Management ها (CM) صحبت میکنیم.
توصیه میکنم که حتما این پستها رو هم مطالعه کنید. بریم که ادامه بدیم.
اتومیشن خیلی مهمه. قبلا هم در موردش با هم صحبت کردیم. اینجا میخوام یکم بیشتر در مورد انسیبل و قابلیتهایی که داره صحبت کنیم و سعی میکنم تا از تجربههایی که دارم بیشتر بگم.
یکی از چالشهایی که ما همواره باهاش مواجه هستیم کارهای تکراری و اصطلاحا کارهای گِل هست. کارهایی که شاید کسی دوست نداره انجامشون بده و همه سعی میکنند تا ازش فرار کنند. من نظرم اینه که این کارها رو نباید آدمها انجام بدن بلکه میشه اونها رو به ماشینها سپرد و با خیال راحت تستشون کرد و پس از اطمینان از صحت عملکردشون، روی سرورهای عملیاتی ازشون استفاده کرد. ما همیشه سعی میکنیم که همهی کارها رو خودکار کنیم. شاید خیلی جملهی سنگینی باشه ولی میگیم اگر قراره دو بار انجامش بدم حتما خودکارش میکنم. حتی گاهی پیش میاد که یک کار اگر لازم باشه که یک بار هم انجامش بدیم اونم خودکار میکنیم. این که دیگه تکرار نمیشه چرا داری خودکارش میکنی؟! چون میتونیم تستش کنیم، یه جورایی داکیومنت میتونه باشه برامون، قابل انتقالش میکنه و کلی مزایای دیگه برامون به همراه داره. بریم این موارد رو یه بررسی کوچیکی بکنیم.
یکی از دغدغههای اصلی مدیران، انتقال دانش بین اعضای تیم هست. اینکه بتونیم گردش دانش خوبی در سطح تیم داشته باشیم و افراد مختلف بتوانند اکثر موارد پروژه رو درک کنند. همیشه پیش میاد که هستن افرادی که به تیم اضافه میشوند و یا از تیم دارن جدا میشن. اگر مواردی که همتیمی ما انجام داده و داره جدا میشه مشخص و مدون نباشه احتمالا قسمتی از دانش با او از تیم و پروژه جدا میشه. این موضوع اصلا عمدی نیست شاید اصلا نمیدونه که باید چه مواردی رو ارائه کنه. اما فرض کنید همه چیز کد باشه و هر ساختار و سرویسی که آماده شده و الان بالاست به صورت خودکار با یه ابزار پیادهسازی شده باشه. دیگه چیزی نیست که جایی وجود داشته باشه و کسی بهش اشاره نکرده باشه. هر کسی که روی اتومیشن که یه کد هست یه بررسی انجام بده میتونه ازش استفاده کنه. به صورت کلی سرویسها و سامانههای ما با خودکار سازی قابل انتقال به دیگران میشود و یه جورایی یه داکیومنت قابل قبولی برای آنها ایجاد میشه.
تو پروژهها پیش میاد که تیمهای مختلف نمیتونن با هم سر تحویل سرویسها و سیستمها به توافق برسند. اتومیشن یکی از بهترین نقاطی هست که همه اتفاق نظر روی آن برای تحویل دارند. مثلا من تو پروژهای بودم و برای تحویل گرفتن یه سرویس از یک تیم مشکل داشتیم. آخرین جایی که به توافق رسیدیم اینجا بود که اون تیم کد انسیبل راهاندازی پروژه رو به ما تحویل میده و در صورتی که انسیبل به درستی پروژه رو ایجاد کرد این پروژه تحویل شده است. نقطهای که همه بهش اطمینان داشتیم و خیالمون از صحت عملکردش راحت بود.
همواره تو پروژهها و شرکتها تسکهای تکراری است که به نظرم کار انسان نیست و باید ماشینها انجام دهند. ما با اتومیشن میتونیم کارهای خود رو قابل تکرار کنیم. یک بار براش هزینه میکنیم و زمان میگذاریم و میتونیم مدت زیادی ازش استفاده کنیم و مهم اینه که همواره هم با یه نتیجه مواجه خواهیم شد. خوبی اتومیشن اینه که حتی اگر یه اشتباهی تو کدها باشه و یا یه کانفیگی رو اشتباه بزنیم تو همه جا این اشتباه همانند هم وجود داره و این موضوع خیلی خوبه و به راحتی میشه اصلاحش کرد.
وقتی یه چیزی کد باشه قابلیت بهبود داره. این مسیر همیشه ادامه داره و ما میتونیم به خوبی اون رو بهبود بدیم و بهترش کنیم. شاید در ابتدا داشتن یه اتومیشن برامون عالی باشه اما بعدش با بهبود عملکرد آن تلاش میکنیم که قابلیتهاش رو مدام بیشتر کنیم و یا اینکه زمانی که داره مصرف میکنه رو کاهش بدیم. این قابلیت بهبود مداوم یکی از اصول اصلی دواپس است. اصلی که حتما تو زندگی شخصی خودتون هم بهش توجه کنید. این طوری که ابتدا یه کاری رو انجام بدید و بعدش مداوم سعی کنید اون رو بهترش کنید. بهبودهای کوچیک اما مستمر میتونن بعد از گذشت زمان نتایج خیلی بزرگی رو به همراه داشته باشن.
توی IaC ما کل زیرساختمون به همراه تمام مواردی که داخل آن است که میتونه شامل تنظیمات شبکه، ماشینهای مجازی، رکوردهای DNS، لود بالانسرها و … باشه رو برای یه ابزاری مثل ترافورم توصیف میکنیم و اون برامون روی یک پروایدری مثلا AWS آمادهاش میکنه. فایدهش اینه که بعدا میتونیم همین زیرساخت رو دوباره تکرار کنیم یا تغییرش بدیم و چیزی از قلم نیافته. اما توی CM ما دنبال این هستیم که اپلیکیشنمون رو مدیریت کنیم و مطمئن بشیم که سرور هامون توی همون حالتی هستند که مطلوب ما هست و میتونیم هر وقت که خواستیم این فرآیند رو تکرار کنیم و دوباره به همون حالت برسیم. نکتهای که تو IaC معمولا وجود داره اینه که این ابزارها State وضعیت فعلی ما رو همواره نگه میدارند ولی تو CM این طوری نیست و اصلا نمیدونه که الان سامانههای ما تو چه وضعیتی هستند. به صورت کلی Current State آنها رو نمیدونه ولی تو IaC این طوری نیست و از وضعیت فعلی اون زیرساخت و کل سامانههاش با نگهداری State قبلی مطلع است.
انسیبل یه ابزار متن باز و رایگان است که کمپانی Redhat اونو خریده و الان در مالکیت Redhat و به تبع آن که redhat رو IBM خریده در مالکیت IBM است. ردهت کنفرانس سالانه ای رو تحت عنوان Summit برگزار میکنه که توی اون افراد مختلف از سراسر جهان شرکت میکنند و انتقال تجربه صورت میگیره و زمان برگزاری این کنفرانس برای سال ۲۰۲۴ چند روز دیگه هست! و اگه مسیرتون به کلورادو آمریکا میخوره حتما یه سر به اونجا بزنید و سلام مارو هم برسونید 🙂 بخشی با نام AnsibleFest توی کنفرانس هست که افراد برجسته در قالب ارائه هایی توی اون آخرین تغییرات لبه این تکنولوژی رو با هم به اشتراک میذارن.
انسیبل جزو گروه Configuration Management قرار میگیرد که تو هم ردیفهای خودش از بهترینها هست. البته با انسیبل میشه همانند IaC هم باهاش برخورد کرد و زیرساخت و سامانههایی که داریم رو باهاش زد ولی اینجا مورد بحث ما نیست. ما با استفاده از انسیبل میتونیم تمام موارد آماده سازی سرورها و سرویسها رو خودکار کنیم. انسیبل به ما کمک میکنه که با دیوایسهای مختلف بتونیم ارتباط بگیرم و به خوبی کارهامون رو روی اونها خودکار کنیم. انسیبل همیشه روی یک نودی اجرا میشه و از طریق آن به نودهای دیگه متصل شده و اونها رو کانفیگ میکنه.
انسیبل مزایای زیادی داره که من سعی میکنم مهمترینهای اونها رو بهش اشاره کنم.
بدون agent: اصطلاحا انسیبل agentless هست و بدون agent ما میتونیم ازش استفاده کنیم یعنی نیاز نیست برنامه خاصی رو روی سرور مقصد نصب کنیم تا انسیبل بتونه کار کنه. تنها نیازمندی انسیبل دسترسی از طریق SSH و وجود Python روی سرور مقصد است. این دوتا معمولا وجود داره و ما برای استفاده انسیبل و کانفیگ نودهایی که داریم چیزی نیاز نداریم و به راحتی میتونیم ازش استفاده کنیم.
ماژولار: یکی دیگه از مزایای انسیبل ماژولار بودن اون هست. این امکان به ما کمک میکنه که به راحتی از موارد کوچیک تا دیزاینهای بزرگ و پیچیده رو باهاش پیادهسازی کنیم و استقرار بدیم.
سادگی: اگر شما پایتون بدونید اصلا تو کار کردن با انسیبل مشکل نخواهید داشت. ولی به جز اون هم انسیبل ساختار خیلی سادهای داره و کار کردن باهاش پیچیده نیست و به راحتی میتونید ازش استفاده کنید.
کارایی و امنیت: انسیبل به دلیل استفاده از SSH که روش متداول و مرسوم اتصال ما به سرورها میباشد، هم خیلی امنیت بالایی داره و هم خیلی کارایی بالایی رو ایجاد میکنه. کلی هم کانفیگ داره که میتونیم باهاش این ارتباط بین سرورها رو مدیریت کنیم و بهترش کنیم.
انسیبل رقبای بزرگ و دوستداشتنی هم داره. رقبایی که هر کدوم برای خودشون حرفی برای گفتن دارند. اما میتونیم Salt رو به عنوان رقیب جدی انسیبل بدونیم و بهش بپردازیم. از دیگر ابزارهای این گروه Puppet و Chef هستند که محبوبیت نسبی دارند. اما طبق تجربهی من و بررسیهایی که انجام دادم اکثر زیرساختهای ایران و خارج از ایران بیشتر سمت انسیبل و Salt هستند که انسیبل باز بیشتر محبوبه و استفاده میشه.
هر دو ابزار انسیبل و Salt با پایتون نوشته شده و موارد آنها با استفاده از Yaml فایلها اعمال میشود. همین یک مورد کفایت میکنه که نشون بده این دو تا ابزار چرا محبوبتر از بقیه هستند. طبق تجربهای که من دارم استفاده از Salt نیاز به ساختار بزرگی داره که شاید برای پروژههای بزرگ منطقی باشه ولی انسیبل از کانفیگ یک سرور یا سرویس تا کلاسترهای بزرگ کارایی داره و تقریبا همهی سرویسهای بزرگ مثل Ceph یا Openstack یا Kubernetes پروژههای رسمی انسیبل دارند که بتونیم آنها را باهاش کانفیگ و مدیریت کنیم. با توجه به این موارد و شرایط پیشنهاد من Ansible هست و توصیه میکنم که ازش استفاده کنید.
در تصویر زیر دیزاین انسیبل رو مشاهده میکنید. همانطور که در تصویر مشخصه شما روی یک سرور که بهش Controller node میگن انسیبل رو نصب و کانفیگ میکنید و تنها از طریق دسترسی SSH میتونید باهاش سرورهای دیگه که بهش Managed node میگویند رو مدیریت و پیکربندی کنید. انسیبل لیست سرورهایی که میخواهید مدیریت کنید رو داخل Inventory نگهداری میکند و کارهایی که قرار است روی آنها انجام شود رو داخل Playbook ها ذخیره میکند. به عبارتی سناریویی که قرار است انجام شود داخل Playbook نوشته شده و جایی که قراره اون سناریوها اجرا بشه داخل Inventory میباشد.
معمولا تو پستهایی که مینویسم یه سری منابع برای اون موضوع معرفی میکنم که بتونید با مرور آنها دانش بیشتری نسبت به اون موضوع پیدا کنید. معمولا سعی میکنم مسیر پیش روی شما برای عمق بیشتر تو اون موضوع رو مشخص کنم. تو انسیبل هم منبع زیاده ولی به نظرم خوبه که کتاب Ansible up and running رو بررسی کنید. آقا مرتضی باشسیز هم تو کانال یوتوبش آموزش Ansible داره که حتما پیشنهاد میکنم ببینید و ازش استفاده کنیم. خودم هم تو آروان آکادمی انسیبل گفتم که اونم بررسی کنید.
در ادامه تو یه پست دیگه به اجزای انسیبل میپردازم و اونجا سعی میکنم که اجزای مهم انسیبل رو بررسی کنیم و یکم بیشتر در موردشون بدونیم.
شاد باشید.