وبلاگ
DevOps چیست؟ و مهندس DevOps به چه کسی گفته میشود؟
- 16 اسفند 1399
- دسته بندی: DevOps مقالات آموزشی
- 3,946
DevOps یک رویکرد توسعه نرمافزار است که شامل توسعه مداوم، تست مداوم، ادغام و یکپارچه سازی مداوم، استقرار و نظارت میباشد.
رویکرد DevOps تنها تمرکز بر بهینهسازی فرایندها ندارد بلکه علاوه بر فرایند تاکید مینماید که فرهنگ سازمانی و تیمهای توسعه نرم افزار و همچنین ابزارهای این حوزه نیز میبایست بهینه گردد.
این رویکرد شامل تیمهای عملیاتی و تیمهای توسعه نرمافزاری میباشد که DevOps سعی بر ارتباط و همکاری هرچه بیشتر این تیمها و رفع موانع بین آنها را دارد. بنابراین، یک مهندس DevOps اساساً با تیمهای DEVelopment و OPerations همکاری میکند.
مفاهیم و ابزارها
DevOps شامل مفاهیمی مانند Build Automation ، CI / CD ، Infrastructure as Code و غیره است که ابزارهای متعددی برای پیاده سازی این مفاهیم وجود دارد.
ممکن است به دلیل گستردگی زیاد این ابزارها، برای مختصصین گیج کننده و طاقت فرسا شود که از کدام ابزار استفاده کنند.
اما مهمترین چیز درک مفاهیم و یادگیری یک ابزار خاص برای هر گروه است. به عنوان مثال، وقتی شما از قبل بدانید CI / CD دقیقاً چیست و بدانید که چگونه باید از ابزار Jenkins استفاده کنید، یادگیری یک ابزار جایگزین نیز برایتان خیلی آسان خواهد بود.
دوره مجازی و آنلاین DevOps دیجی وایزآکادمی
نقشه راه برای شروع به کار به عنوان یک مهندس DevOps
بیایید مستقیماً به نقشه راهی بپردازیم که میتوانید مهارتهای خود را برای این حوزه بیاموزید.
1) مفاهیم توسعه نرمافزار
شما به عنوان یک مهندس DevOps برنامهنویسی نخواهید کرد، اما چون با تیم توسعه برای بهبود و خودکار کردن وظایف آنها همکاری میکنید، باید درکی از حوزههای زیر داشته باشید:
- نحوه کار توسعه دهندگان به چه شکل میباشد ؟
- توسعه دهندگان از چه ابزارهایی استفاده میکنند؟ (برای مثال: git)
- نحوه پیکربندی برنامهها به چه شکلی میباشد؟
- چگونه تست و آزمایش نرم افزار ها را به صورت خودکار انجام دهیم؟
2) سیستم عامل و مبانی لینوکس
شما به عنوان یک مهندس DevOps مسئول تهیه زیرساخت (سرورهایی) هستید که برنامهها بر روی آنها مستقر شدهاند. و از آنجا که بیشتر سرورها سرورهای لینوکسی هستند، شما باید سیستم عامل لینوکس را بشناسید و با استفاده از دستورات Command در این محیط احساس راحتی کنید.
پس بهتر است مفاهیم زیر را بدانید:
- Basic Shell Commands
- Linux File System
- اصول نحوه مدیریت سرور
- SSH Key Management
- نصب ابزارهای مختلف بر روی سرورها
3) شبکه و امنیت
همچنین برای پیکربندی زیرساختها باید به اصول شبکه و امنیت آگاهی داشته باشید، به عنوان مثال:
- فایروال را برای ایمن کردن برنامه پیکربندی کنید
- درک کنید که آدرس های IP ، پورت ها و DNS چگونه کار میکنند
- بالانس بار وارد شده به شبکه را بررسی کنید
- سرور پروکسی
- HTTP / HTTPS
با این حال، برای تعیین مرز بین DevOps و عملیات فناوری و اطلاعات نیازی به دانش پیشرفته ندارید تنها درک و دانستن اصول کافی است، زیرا مشاغل خاصی مانند SysAdmins ، Networking یا Security Engineers وجود دارند و نیازی به عمیق شدن در این مباحث نیست.
4) کانتینر سازی – DOCKER
ابتدا بیاید نگاهی به DOCKER بیندازیم:
داکر با شعار Build once, run anywhere گسترش یافته است. شما میتوانید به راحتی و با سرعت Application های Portable را بر روی داکر امتحان کنید. این بدان معناست که هر کسی میتواند اپلیکیشن خودش را در لپ تاپ شخصی در قالب یک Package آماده نماید و سپس آن را در هر نوع سرویس Cloud ای که از Docker پشتیبانی میکند ، اجرا یا به عبارت بهتر Deploy نماید.
داکر به شما اجازه میدهد عملکردهای متفاوت Application تان را بین Container های مختلف تقسیم نمایید. برای مثال دیتابیس POSTGRE شما بر روی یک کانتینر، Redis Server در کانتینر دیگر و اپلیکیشن Node.js بر روی یک کانتینر مجزا اجرا شده باشد. با وجود اجرای قسمتهای مختلف در Container های جدا از هم، داکر امکان لینک کردن آنها را برای شما فراهم خواهد آورد.
از آنجا که کانتینرها در حال تبدیل شدن به استاندارد جدید هستند، احتمالاً برنامه خودتان را به عنوان یک کانتینر اجرا خواهید کرد. این بدان معنی است که شما باید به طور کلی درکی از مفاهیم زیر داشته باشید:
- مفاهیم مجازی سازی
- مفاهیم containers
DOCKER – محبوب ترین فناوری کانتینر امروزی
5) ادغام و توسعه مداوم (CI / CD) – Continuous Integration and Deployment
در DevOps، تمامی تغییراتی که در کدهای نرم افزارها اتفاق میافتد، مثل افزودن ویژگیهای جدید و یا رفع باگ توسط توسعهدهندگان، باید در برنامه موجود ادغام شده و به طور مداوم و به صورت خودکار برای کاربران مستقر شود. از این رو اصطلاح: ادغام و توسعه مداوم مطرح شده است.
راه اندازی مسیر کامل فرایند CI / CD وظیفه و مسئولیت اصلی مهندس DevOps است. بنابراین وقتی افزودن ویژگی جدید یا رفع باگ تمام شد، یک فرایند باید به طور خودکار اجرا شود، که شامل:
- اجرا کردن تست های نرم فزاری
- پکیج کردن برنامه یا نرم افزار
- ساخت Docker Image
- و در نهایت مستقر سازی نسخه جدید در سرور می باشد
البته میتوان مراحل بیشتری را یکپارچه سازی کرد، اما این جریان هسته اصلی فرایند CI / CD را نشان میدهد و قلب وظایف و مسئولیتهای DevOps است.
حال برای این فرایندها کدام ابزار را یاد بگیریم؟
Jenkins یکی از محبوب ترین ابزار ها میباشد. همچنین از دیگر ابزارها می توان به Bamboo، Gitlab، TeamCity ،CircleCI ،TravisCI اشاره کرد.
6) ارائه دهندگان سرویسهای ابری
امروزه بسیاری از شرکتها به جای مدیریت زیرساختهای خود، از زیرساختهای مجازی در فضای ابری استفاده میکنند. فضای ابری طیف وسیعی از خدمات مانند پشتیبانگیری، برقراری امنیت و … را ارائه میدهد، همچنین تعادل بار وارد شده به سرور را کنترل میکند.
این خدمات مخصوص پلتفرم های ابری میباشند. بنابراین لازم است خدمات آن سیستم عامل خاص را یاد بگیرید.
7) Kubernetes
همانطور که قبلاً اشاره کردیم، کانتینرها بسیار مورد استفاده قرار میگیرند و در شرکتهای بزرگ صدها یا هزاران کانتینر در چندین سرور در حال اجرا هستند. این بدان معنی است که این کانتینرها باید به نحوی مدیریت شوند.
برای این منظور ابزارهایی وجود دارند که محبوب ترین آن Kubernetes است. بنابراین شما باید به یاد داشته باشید که:
- چگونه Kubernetes کار میکند
- خوشههای Kubernetes را چگونه مدیریت کنید
- همچنین بتوانید برنامههای کاربردی را در kubernetes مستقر کنید
8) نظارت و مدیریت بر روی لاگهای سیستم
پس از تولید نرم افزار، بسیار مهم است که برای ردیابی عملکرد کاربران، کشف مشکلات موجود در زیرساخت و برنامهها بتوانیم نظارتی دقیق داشته باشیم. بنابراین یکی از مسئولیتهای شما به عنوان مهندس DevOps این است که به مواردی همچون setup software monitoring و setup infrastructure monitoring تسلط داشته باشید.
9) زیرساخت
ایجاد و نگهداری دستی زیرساختها وقتگیر و مستعد خطا است. به خصوص هنگامی که شما نیاز به تکرار زیرساختها دارید. در DevOps، ما میخواهیم تا حد ممکن به صورت خودکار، فعالیتهای خود را انجام دهیم، در این مرحله Infrastructure as Code وارد کار میشود.
با استفاده از ابزار IaC، ما از کد برای ایجاد و پیکربندی زیرساختها استفاده میکنیم و دو نوع ابزار IaC وجود دارد که ما باید با آنها آشنا باشیم:
- تأمین زیرساخت
- مدیریت پیکربندی
با استفاده از این ابزارها، تکرار و بازیابی زیرساختها آسان است. بنابراین شما باید از هر دسته یک ابزار برای کارآمدتر ساختن کار خود و همچنین بهبود همکاری با همکاران خود بدانید.
10) زبان برنامه نویسی
از آنجا که با توسعهدهندگان و سرپرستان سیستم در حال کار کردن هستید تا وظایف مربوط به توسعه و عملیات را نیز به صورت خودکار انجام دهید، برای خودکار کردن کارها باید اسکریپتها و برنامههای کوچک بنویسید.
برای اینکه بتوانید این کار را انجام دهید باید یک زبان برنامهنویسی بدانید که میتواند مخصوص سیستم عامل مانند Bash یا Powershell باشد.
اما آنچه بیشتر مورد درخواست است یک زبان مستقل از سیستم عامل مانند Python ،Ruby یا Go است. این زبانها از قدرت و انعطاف بیشتری برخوردار هستند. اگر یکی از این موارد را بدانید، ارزش شما را در بازار کار بسیار بیشتر میکند.
کدام زبان را یاد بگیریم؟
پایتون: در حال حاضر بیشترین تقاضا را دارا میباشد. پایتون برای یادگیری آسان و کتابخانههای زیادی در دسترس دارد همچنین اگر بخواهیم به دیگر زبانها اشاره کنیم میتوان از: Ruby ، GO و NodeJS نام برد.
11) کنترل نسخه نرم افزار – گیت
دقیقا مانند کد برنامه توسعه دهندگان، شما کدها و پروندههایی را که نوشتهاید را با یک ابزار کنترل نسخه مانند Git مدیریت میکنید.
Git محبوب ترین و پرکاربردترین ابزار برای کنترل نسخه نرم افزار ها میباشد.
Good luck on your DevOps journey!
منبع: DEV
عالی بود.