آنچه در این مقاله میخوانید [پنهانسازی]
وقتی وارد دنیای Kubernetes می شوی، خیلی زود با مفهومی به نام Deployment روبه رو می شوی. اینجاست که سوال Kubernetes Deployment مطرح می شود. Kubernetes Deployment فقط یک آبجکت ساده نیست، بلکه یکی از مهم ترین ابزارها برای اجرای پایدار، به روزرسانی بدون قطعی و مدیریت نسخه های مختلف یک اپلیکیشن است. اگر بخواهی Kubernetes را درست و اصولی استفاده کنی، باید Deployment و نوشتن Manifest آن را واقعا بفهمی.
سرفصل های مقاله
- Kubernetes Deployment چیست
- Deployment چه مشکلی را حل می کند
- ارتباط Deployment با Pod و ReplicaSet
- Manifest در Kubernetes چیست
- ساختار کلی Manifest برای Deployment
- بخش metadata در Deployment
- بخش spec در Deployment چه چیزی را مشخص می کند
- Pod Template در Deployment
- نمونه Manifest ساده برای Kubernetes Deployment
- نحوه اعمال Manifest در Kubernetes
- به روزرسانی اپلیکیشن با Deployment
- Rollback در Deployment چگونه انجام می شود
- مقیاس پذیری با Deployment
- خطاهای رایج در نوشتن Manifest
- Deployment برای چه سناریوهایی مناسب است
- تفاوت Deployment با سایر آبجکت ها
- جمع بندی
Kubernetes Deployment چیست
Kubernetes Deployment یک آبجکت کنترلی است که مشخص می کند یک اپلیکیشن چگونه و با چه وضعیتی اجرا شود. Deployment تعیین می کند چند نسخه از اپلیکیشن فعال باشد، چه ایمیجی اجرا شود و اگر مشکلی پیش آمد، سیستم چگونه واکنش نشان دهد. به زبان ساده، Deployment تضمین می کند وضعیت واقعی سیستم همیشه با وضعیت مطلوبی که تعریف کرده ای یکی باشد.
Deployment چه مشکلی را حل می کند
قبل از Deployment، مدیریت Pod ها کار سختی بود. اگر یک Pod از کار می افتاد، باید دستی جایگزین می شد. اگر می خواستی نسخه جدید منتشر کنی، احتمال قطعی وجود داشت. Deployment این مشکلات را حل می کند. اگر Pod حذف شود، خودش دوباره ساخته می شود. اگر نسخه جدید بدهی، به صورت تدریجی جایگزین نسخه قبلی می شود. همه چیز خودکار و قابل پیش بینی است.
ارتباط Deployment با Pod و ReplicaSet
Deployment مستقیما Pod ایجاد نمی کند. در پشت صحنه، Deployment یک ReplicaSet می سازد و ReplicaSet مسئول اجرای Pod هاست. ReplicaSet تضمین می کند تعداد مشخصی Pod همیشه فعال باشند. اگر Deployment را به روز کنی، ReplicaSet جدید ساخته می شود و ReplicaSet قبلی به تدریج کنار می رود. این زنجیره باعث می شود به روزرسانی ها امن و بدون قطعی انجام شوند.
Manifest در Kubernetes چیست
Manifest در Kubernetes یک فایل متنی است، معمولا با فرمت YAML، که وضعیت مطلوب سیستم را توصیف می کند. وقتی Manifest را اعمال می کنی، Kubernetes تلاش می کند سیستم را به همان وضعیت برساند. Manifest در واقع قرارداد تو با Kubernetes است. هرچه دقیق تر نوشته شود، رفتار سیستم قابل اعتمادتر خواهد بود.
ساختار کلی Manifest برای Deployment
هر Manifest مربوط به Deployment چند بخش اصلی دارد. apiVersion که نسخه API را مشخص می کند. kind که نوع آبجکت را تعیین می کند و در اینجا Deployment است. metadata که شامل نام و برچسب هاست. spec که مهم ترین بخش است و رفتار Deployment را مشخص می کند. اگر این ساختار را درست بفهمی، نوشتن Manifest ساده می شود.
بخش metadata در Deployment
در metadata نام Deployment و برچسب ها تعریف می شوند. نام باید یکتا باشد و برچسب ها برای دسته بندی و اتصال به Service استفاده می شوند. انتخاب درست label ها اهمیت زیادی دارد، چون Kubernetes بر اساس همین label ها Pod ها را مدیریت می کند. یک اشتباه کوچک اینجا می تواند باعث شود Service به Pod ها وصل نشود.
بخش spec در Deployment چه چیزی را مشخص می کند
spec قلب Deployment است. در این بخش تعداد replica ها مشخص می شود. همچنین selector تعیین می کند Deployment کدام Pod ها را مدیریت کند. template هم الگوی Pod هایی است که باید ساخته شوند. Kubernetes با استفاده از این template Pod ها را ایجاد می کند.
Pod Template در Deployment
Pod Template همان جایی است که مشخص می کنی کانتینر چگونه اجرا شود. ایمیج، پورت ها، متغیرهای محیطی و منابع در این بخش تعریف می شوند. هر تغییری در Pod Template باعث می شود Kubernetes نسخه جدیدی از Pod ها بسازد. به همین دلیل این بخش مستقیما با به روزرسانی اپلیکیشن در ارتباط است.
نمونه Manifest ساده برای Kubernetes Deployment
در ادامه یک نمونه Manifest ساده را می بینی که ساختار پایه Deployment را نشان می دهد.
این Manifest مشخص می کند سه Pod از ایمیج nginx اجرا شوند و همگی برچسب یکسان داشته باشند.
نحوه اعمال Manifest در Kubernetes
بعد از نوشتن فایل YAML، با دستور kubectl می توانی آن را اعمال کنی. Kubernetes فایل را می خواند و منابع لازم را ایجاد می کند. اگر بعدا Manifest را تغییر دهی و دوباره اعمال کنی، Kubernetes تفاوت را تشخیص می دهد و سیستم را به وضعیت جدید می رساند. این همان قدرت Declarative بودن Kubernetes است.
به روزرسانی اپلیکیشن با Deployment
یکی از مهم ترین مزایای Kubernetes Deployment امکان Rolling Update است. وقتی ایمیج را تغییر می دهی، Kubernetes به تدریج Pod های قدیمی را حذف و Pod های جدید را جایگزین می کند. در این فرآیند، سرویس قطع نمی شود. این ویژگی برای محیط های عملیاتی حیاتی است.
Rollback در Deployment چگونه انجام می شود
اگر بعد از به روزرسانی مشکلی پیش بیاید، Deployment امکان بازگشت به نسخه قبلی را دارد. Kubernetes تاریخچه Deployment را نگه می دارد. با یک دستور ساده می توان نسخه قبلی را دوباره فعال کرد. این قابلیت ریسک انتشار نسخه جدید را به شدت کاهش می دهد.
مقیاس پذیری با Deployment
برای افزایش یا کاهش تعداد Pod ها، فقط کافی است مقدار replicas را تغییر دهی. Kubernetes به صورت خودکار Pod ها را اضافه یا کم می کند. این مقیاس پذیری می تواند دستی یا خودکار باشد. Deployment پایه اصلی این رفتار مقیاس پذیر است.
خطاهای رایج در نوشتن Manifest
یکی از خطاهای رایج، ناهماهنگی بین selector و label هاست. اگر این دو با هم همخوانی نداشته باشند، Deployment به درستی کار نمی کند. استفاده نکردن از نسخه ثابت ایمیج هم مشکل ساز است. همیشه بهتر است به جای latest از نسخه مشخص استفاده شود تا رفتار سیستم قابل پیش بینی باشد.
Deployment برای چه سناریوهایی مناسب است
Deployment برای اپلیکیشن هایی مناسب است که Stateless هستند. سرویس های وب، API ها و بک اندها معمولا با Deployment اجرا می شوند. برای Stateful App ها معمولا از ابزارهای دیگری استفاده می شود. شناخت این تفاوت باعث انتخاب درست آبجکت ها می شود.
تفاوت Deployment با سایر آبجکت ها
Deployment روی مدیریت نسخه و مقیاس پذیری تمرکز دارد. Job برای کارهای موقتی استفاده می شود و DaemonSet برای اجرای یک Pod روی هر Node. اگر این تفاوت ها را بدانی، معماری تمیزتری طراحی می کنی و از پیچیدگی اضافی دور می مانی.
جمع بندی
Kubernetes Deployment یکی از پایه های اصلی مدیریت اپلیکیشن در Kubernetes است. با Deployment می توانی استقرار پایدار، مقیاس پذیری و به روزرسانی بدون قطعی داشته باشی. اگر نوشتن Manifest ها را درست یاد بگیری، کنترل کامل رفتار اپلیکیشن دستت خواهد بود. درک عمیق Kubernetes Deployment یعنی یک قدم بزرگ به سمت تسلط واقعی روی Kubernetes.






