آشنایی با Deployment در کوبرنتیز؛ ابزار مدیریت پادها و ReplicaSetها

آشنایی با دیپلویمنت در کوبرنتیز - ابزار مدیریت پادها و رپلیکاست‌ها

دیپلویمنت در کوبرنتیز ابزاری است که مدیریت کانتینرها و پادها را ساده و خودکار می‌کند. با استفاده از آن، اجرای پایدار و مقیاس‌پذیر اپلیکیشن‌های کانتینرسازی‌شده امکان‌پذیر می‌شود، تغییرات بدون توقف سرویس اعمال شده و منابع کلاستر به شکل بهینه مورد استفاده قرار می‌گیرند. در این مقاله با کاربردها، مزایا و مراحل عملیاتی Kubernetes Deployment آشنا می‌شوید تا مدیریت اپلیکیشن‌ها در کلاستر کوبرنتیز به شکلی مطمئن و کارآمد انجام شود.

Kubernetes Deployment چیست؟

Kubernetes Deployment یکی از ابزارهای مدیریتی در کوبرنتیز است که فرآیند ایجاد و مدیریت ReplicaSetها را بر عهده دارد. ReplicaSetها نیز مسئول ایجاد و نگهداری پادها هستند. به این ترتیب Deployment به صورت غیرمستقیم وضعیت پادها را کنترل کرده و تضمین می‌کند اپلیکیشن‌ها همیشه در وضعیت مطلوب اجرا شوند. با کمک Deployment می‌توان تغییرات را به آرامی و بدون اختلال در سرویس اعمال کرد، پادهای خراب یا قدیمی را جایگزین کرد و در صورت نیاز به سرعت به آخرین نسخه پایدار بازگشت. این قابلیت باعث افزایش پایداری، دسترس‌پذیری و مقیاس‌پذیری سیستم می‌شود و نیاز به اجرای فرایندهای دستی را کاهش می‌دهد.

چرا به دیپلویمنت در کوبرنتیز نیاز داریم؟

یکی از اهداف اصلی استفاده از Deployment، مدیریت Rolloutها است؛ فرایندی که در آن تغییرات کلاستر بدون توقف سرویس اعمال می‌شوند و پادهای قدیمی به‌صورت مرحله‌ای جایگزین می‌شوند. این روش باعث افزایش مقیاس‌پذیری و دسترس‌پذیری اپلیکیشن‌ها می‌شود.

Deployment در چند سناریوی کلیدی کاربرد دارد:

  • ایجاد خودکار پادها و ReplicaSetها: با استفاده از فایل‌های YAML که پیکربندی وضعیت مطلوب را مشخص می‌کنند، کوبرنتیز می‌تواند پادها و ReplicaSetهای جدید ایجاد کند.
  • تعیین وضعیت مطلوب پادها: فایل YAML به شما اجازه می‌دهد تعریف کاملی از وضعیت ایده‌آل برای پادها و ReplicaSetها داشته باشید تا کوبرنتیز بر اساس آن عمل کند.
  • بازگشت سریع به نسخه پایدار (Rollback): اگر وضعیت کلاستر ناپایدار شود، Deployment تاریخچه‌ای از نسخه‌های قبلی را نگه می‌دارد تا بتوان به راحتی به آخرین وضعیت پایدار بازگشت.
  • مقیاس‌گذاری پادها (Scaling): زمانی که اپلیکیشن به منابع بیشتری نیاز داشته باشد، می‌توان تعداد پادهای تعریف‌شده در Deployment را افزایش داد. Deployment با به‌روزرسانی مقدار replicas، از طریق ReplicaSet، پادهای جدید ایجاد می‌کند تا تعداد پادهای در حال اجرا، با وضعیت مطلوب تعریف‌شده هماهنگ باقی بماند. این فرایند می‌تواند به صورت دستی انجام شود یا با استفاده از ابزارهایی مانند Horizontal Pod Autoscaler (به اختصار HPA) به شکل خودکار مدیریت شود.

اجزا و کامپوننت‌های دیپلویمنت در کوبرنتیز

قبل از ایجاد یک Deployment، شناخت اجزا و کامپوننت‌های آن ضروری است. هر جزء نقش مشخصی در مدیریت پادها، ReplicaSetها و وضعیت کلاستر دارد و همکاری این اجزا تضمین می‌کند که اپلیکیشن‌ها همیشه در وضعیت مطلوب اجرا شوند.

دیپلویمنت در کوبرنتیز

اجزای اصلی Kubernetes Deployment شامل موارد زیر هستند:

  • فایل YAML: فایل YAML فرمت متداول برای تعریف منابع در کوبرنتیز است و در آن می‌توان پیکربندی Deployment، تعداد پادها، مشخصات کانتینرها و سایر تنظیمات اجرای اپلیکیشن را مشخص کرد.
  • پاد (Pod): کوچک‌ترین واحد اجرایی در کوبرنتیز است که شامل یک یا چند کانتینر، پیکربندی‌ها و محیط‌های اجرای اپلیکیشن می‌شود. پادها پایه‌ای‌ترین بخش اجرای Deployment هستند و مدیریت صحیح آن‌ها برای عملکرد مطلوب سیستم ضروری است. برای مطالعه بیشتر در مورد پاد می‌توانید مقاله «پاد در کوبرنتیز» را مطالعه کنید.
  • ReplicaSet: گروهی از پادهای همسان است که تضمین می‌کند تعداد پادهای در حال اجرا مطابق با تعریف فایل YAML باشد. اگر یک پاد با مشکل مواجه شود، ReplicaSet مسئول ایجاد پاد جایگزین است.
  • kube-scheduler: این کامپوننت بخشی از Control Plane است و تصمیم می‌گیرد که پادها و ReplicaSetها روی کدام نودهای کارگر (Worker Nodes) اجرا شوند.
  • kube-controller-manager: مجموعه‌ای از کنترلرهای مختلف را اجرا می‌کند که وظیفه آن‌ها تطبیق وضعیت فعلی کلاستر با وضعیت مطلوب تعریف شده در YAML است. این کنترلرها ایجاد، حذف یا به‌روزرسانی منابعی مانند ReplicaSetها و پادها را مدیریت می‌کنند.

مزایا استفاده از دیپلویمنت در کوبرنتیز

با استفاده از کوبرنتیز دیپلویمنت، می‌توانید پایداری (Stability) و نرخ در دسترس بودن (Availability) کانتینرها را افزایش دهید. برای مثال، اگر یک نود در کلاستر با مشکل مواجه شود، Deployment با کمک اجزای کنترلر و ReplicaSet به‌طور خودکار یک پاد جایگزین ایجاد می‌کند. این فرایند تماماً خودکار انجام می‌شود و نیاز به مداخله دستی را حذف می‌کند.

اگر پادها بدون استفاده از کنترلرهایی مانند Deployment ،ReplicaSet یا StatefulSet ایجاد شوند، به آن‌ها Naked Pod گفته می‌شود. در این حالت اگر پاد با مشکل مواجه شود، کوبرنتیز به صورت خودکار نمونه جایگزین ایجاد نمی‌کند.

اصلی‌ترین مزایای دیپلویمنت در کوبرنتیز عبارتند از:

  • خودکارسازی دیپلوی، بروزرسانی و مقیاس‌دهی: Deployment فرایند ایجاد و مدیریت پادها و ReplicaSetها را به صورت خودکار انجام می‌دهد.
  • افزایش پایداری و کاهش خطاها: مدیریت خودکار پادها باعث کاهش خطاهای انسانی و حفظ عملکرد مطلوب سیستم می‌شود.
  • کاهش نرخ Downtime: با جایگزینی مرحله‌ای پادها و Rollout هوشمند، اپلیکیشن‌ها همیشه در دسترس باقی می‌مانند.
  • استفاده بهینه از منابع: Kubernetes Deployment منابع کلاستر را به شکل هوشمند مدیریت می‌کند و از اضافه‌کاری یا کمبود منابع جلوگیری می‌کند.

استراتژی‌های مختلف دیپلویمنت در کوبرنتیز

کوبرنتیز دیپلویمنت چند استراتژی پیاده‌سازی دارد که هر کدام برای شرایط و اهداف خاصی طراحی شده‌اند. انتخاب مناسب‌ترین استراتژی بستگی به نیازمندی‌های کسب‌وکار، اهداف اپلیکیشن و محدودیت‌های منابع دارد. با آشنایی کامل با این استراتژی‌ها، می‌توانید تغییرات در کلاستر را به شکل بهینه، امن و بدون اختلال در سرویس اعمال کنید.

استراتژی‌های دیپلویمنت در کوبرنتیز - مقایسه Rolling Update  و Recreate

دو استراتژی اصلی برای دیپلویمنت در کوبرنتیز وجود دارد.

Rolling Update: در این استراتژی، پادهای جدید به‌صورت تدریجی ایجاد شده و به‌مرور جایگزین پادهای قدیمی می‌شوند. به این ترتیب نسخه جدید اپلیکیشن بدون توقف کامل سرویس منتشر می‌شود و همواره تعدادی از پادهای سالم در حال اجرا باقی می‌مانند. Rolling Update رایج‌ترین استراتژی برای محیط‌های Production است.

Recreate: در این روش، ابتدا تمام پادهای نسخه قبلی حذف می‌شوند و سپس پادهای مربوط به نسخه جدید ایجاد می‌شوند. این کار باعث ایجاد Downtime می‌شود، به همین دلیل معمولاً برای محیط‌های Production توصیه نمی‌شود و بیشتر در محیط‌های توسعه یا زمانی استفاده می‌شود که امکان اجرای همزمان دو نسخه از اپلیکیشن وجود نداشته باشد.

علاوه بر استراتژی‌های رسمی Deployment، روش‌های پیشرفته‌ای مانند Canary ،A/B Testing و Blue/Green وجود دارند که برای کنترل دقیق انتشار نسخه جدید در محیط‌های حساس یا با حجم بالای کاربران استفاده می‌شوند. این روش‌ها معمولاً با کمک Service، Ingress یا Service Mesh پیاده‌سازی می‌شوند و فراتر از قابلیت‌های داخلی Deployment هستند.

ایجاد و پیاده‌سازی دیپلویمنت در کوبرنتیز با YAML و kubectl

در این بخش قصد داریم با شیوه ایجاد Kubernetes Deployment آشنا شویم. برای انجام اینکار از دستور kubectl در محیط CLI استفاده می‌کنیم. البته برای انجام این‌ کار نیاز است که ابتدا از نصب بودن Kubectl و minikube روی سیستم‌عامل‌تان مطمئن باشید.

۱- ایجاد دایرکتوری و فایل YAML

یک دایرکتوری جدید بسازید و فایل YAML خود را ایجاد کنید. برای مثال: nginx-deployment.yaml. این فایل شامل پیکربندی‌های اولیه مانند تعداد پادها، کانتینرها، ایمیج‌‌هاو پورت‌ها است:

apiVersion: apps/v1
kind: Deployment

metadata:
  name: nginx-deployment
  labels:
    app: nginx

spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest # name of image deployed to DockerHub
        ports:
        - containerPort: 80

این فایل حاوی پیکربندی‌های اولیه دیپلویمنت در کوبرنتیز بوده و به عنوان اصلی‌ترین فایل دیپلویمنت شما به حساب می‌آید. برای آشنایی بیشتر در ادامه تمام موارد ذکر شده در این فایل را بررسی می‌کنیم:

  • apiVersion: نسخه API مربوط به این منبع در کوبرنتیز را مشخص می‌کند.
  • kind: برای مشخص کردن نوع فایل که در این مثال Deployment است.
  • metadata: اطلاعات مربوط به دیپلویمنت، از جمله نام آن.
  • «روش‌های پیشرفته‌ای مثل Canary و A/B نیز برای انتشار کنترل‌شده نسخه‌ها وجود دارد که معمولاً در محیط‌های Production بزرگ یا با ابزارهای Service Mesh استفاده می‌شوند.»: شامل مواردی که پیکربندی‌های دیپلویمنت و Replicaها را تعریف می‌کند.

۲- اعمال فایل YAML با kubectl

برای ایجاد دیپلویمنت مورد نظر، دستور زیر را اجرا کنید:

kubectl apply -f nginx-deployment.yaml

در صورت موفقیت، خروجی مشابه زیر را مشاهده خواهید کرد.

deployment.apps/nginx-deployment created

۳- بررسی وضعیت Deployment

برای مشاهده وضعیت Deployment، از دستور زیر استفاده کنید.

kubectl get deployments

بعد از اینکار انتظار می‌رود که خروجی زیر را دریافت کنید.

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   4/4     4            4           6s

۴- بررسی پادهای در حال اجرا

برای مشاهده پادهای فعال، دستور زیر را اجرا کنید:

kubectl get pods

این دستور لیستی از پادهای در حال اجرا را همراه با وضعیت و تعداد ریستارت‌ها نشان می‌دهد.

NAME                                     READY   STATUS    RESTARTS   AGE   LABELS
nginx-deployment-9456bbbf9-fr8mc         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897
nginx-deployment-9456bbbf9-lpn89         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897
nginx-deployment-9456bbbf9-wq76m         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897
nginx-deployment-9456bbbf9-xxczh         1/1     Running   0          20s   app=nginx,pod-template-hash=75675f5897

با انجام این مراحل، دیپلویمنت شما ایجاد و فعال شده و کوبرنتیز به‌صورت خودکار وضعیت مطلوب پادها و ReplicaSetها را حفظ می‌کند. این روش نه تنها مدیریت اپلیکیشن را ساده می‌کند، بلکه باعث افزایش پایداری، دسترس‌پذیری و مقیاس‌پذیری می‌شود.

در پایان

Kubernetes Deployment یکی از ابزارهای کلیدی برای مدیریت خودکار پادها و ReplicaSetها در کلاستر کوبرنتیز است. با استفاده از Deployment می‌توانید اپلیکیشن‌های کانتینرسازی شده خود را با پایداری، دسترس‌پذیری و مقیاس‌پذیری بالا اجرا کنید، تغییرات را بدون توقف سرویس اعمال کنید و در صورت بروز مشکل به سرعت به نسخه پایدار بازگردید. استفاده از دیپلویمنت در کوبرنتیز نه تنها نیاز به مدیریت دستی را کاهش می‌دهد، بلکه عملکرد و قابلیت اطمینان سیستم را نیز به شکل قابل توجهی افزایش می‌دهد. برای مطالعه بیشتر در ارتباط با این موضوع می‌توانید به مستندات رسمی کوبرنتیز مراجعه کنید.

کتاب‌ها

کتاب‌ها

منابع توسعه زیرساخت به زبان فارسی
موفقیت مشتریان

موفقیت مشتریان

نقش هم‌روش در تحقق ایده‌ها
وبینارها

وبینارها

معرفی جدیدترین محصولات و ارائه‌ها