کوبرنتیز (Kubernetes یا K8s) سامانه متن‌بازی برای ارکستریشن کانتینرهاست. اگر داکر ساخت Image و اجرای کانتینر را ساده می‌کند، کوبرنتیز می‌تواند تعداد زیادی کانتینر را روی چند Node مستقر، مقیاس‌دهی و در صورت خرابی جایگزین کند. این دو ابزار دقیقا رقیب هم نیستند. در عمل ساخت Image معمولا با Docker یا ابزار سازگار با استاندارد OCI انجام می‌شود و اجرای آن در کلاستر بر عهده Runtime کانتینر است.

مفاهیم اصلی کوبرنتیز

جزءکاربرد واقعی در فروشگاه
Cluster و Nodeمجموعه سرورهای Worker و اجزای Control Plane
Podکوچک‌ترین واحد قابل استقرار، شامل یک یا چند کانتینر مرتبط
Deploymentتعداد Replicaهای Stateless را حفظ و Rolling Update را کنترل می‌کند
ReplicaSetتعداد Podهای موردنظر Deployment را برقرار نگه می‌دارد
Serviceنشانی پایدار برای دسترسی شبکه‌ای به مجموعه Podها
Ingress / Gateway APIهدایت ترافیک HTTP یا HTTPS از بیرون کلاستر
ConfigMapتنظیمات غیرمحرمانه جدا از Image
Secretنگهداری داده حساس با سیاست دسترسی مناسب، نه تضمین رمزنگاری خودکار
StatefulSetمدیریت بارهای Stateful با هویت و ذخیره‌سازی پایدارتر
DaemonSetاجرای یک Pod در Nodeهای منتخب، مانند عامل جمع‌آوری لاگ
Job و CronJobکار یک‌باره یا زمان‌بندی‌شده مانند تولید گزارش
HPAمقیاس‌دهی Replica بر اساس Metricهای تعریف‌شده
PV و PVCدرخواست و مدیریت ذخیره‌سازی پایدار

کوبرنتیز، داکر و داکر سوارم چه تفاوتی دارند؟

ویژگیDockerDocker Swarmکوبرنتیز
هدف اصلیساخت و اجرای کانتینرارکستریشن ساده‌تر کلاستر Dockerارکستریشن گسترده با APIهای متنوع
واحد مدیریتContainerService و TaskPod و Deployment
مقیاس‌دهیمعمولا دستی یا با ابزار بیرونیReplica سرویسReplica، HPA و کنترلرهای دیگر
شبکه و انتشارPort و NetworkOverlay و Routing MeshService، Ingress و Gateway
هزینه عملیاتیکمتر برای تک‌سرورمیانهبیشتر ولی انعطاف‌پذیرتر

در کوبرنتیز، دپلویمنت تعداد Replicaهای موردنظر را تعریف می‌کند. کنترلر دپلویمنت تلاش می‌کند در زمان خرابی یا تغییر Image، وضعیت واقعی را با وضعیت مطلوب هماهنگ نگه دارد. Service نقطه دسترسی ثابتی است که به Podهای سالم هدایت می‌شود.

مثال Deployment و Service برای API فروشگاه

apiVersion: apps/v1
kind: Deployment
metadata:
  name: shop-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: shop-api
  template:
    metadata:
      labels:
        app: shop-api
    spec:
      containers:
        - name: api
          image: registry.example.org/shop-api:1.4.2
          ports:
            - containerPort: 8080
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: shop-api
spec:
  selector:
    app: shop-api
  ports:
    - port: 80
      targetPort: 8080
kubectl apply -f shop-api.yaml
kubectl get pods
kubectl rollout status deployment/shop-api
kubectl scale deployment/shop-api --replicas=5
kubectl rollout undo deployment/shop-api

ملاحظات Production

این Manifest آموزشی است و پیش از استفاده عملی باید Resource Requests/Limits، SecurityContext، Secret، دسترس‌پذیری، NetworkPolicy، TLS و سیاست استقرار تنظیم شوند.

برای پروژه کوچک، داکر یا Compose می‌تواند ساده‌تر باشد. کوبرنتیز وقتی ارزش دارد که نیاز واقعی به مدیریت چند Node، ظرفیت تغییرپذیر و قابلیت‌های کلاستر داشته باشید.