اگر در دنیای توسعه نرمافزار کار میکنید، مطمئناً درباره Kubernetes شنیدهاید. اما دقیقاً چیست و چرا به استاندارد واقعی برای مدیریت برنامههای کانتینری تبدیل شده است؟ این راهنما شما را از مبانی تا مفاهیم اساسی با مثالهای عملی و نمودارها همراهی میکند.
قبل از Kubernetes: کمی تاریخچه
برای درک اینکه چرا Kubernetes انقلابی است، یک قدم به عقب برگردیم.
- استقرار سنتی: در ابتدا، برنامهها روی سرورهای فیزیکی اجرا میشدند. این رویکرد گران، مقیاسبندی دشوار و مستعد تداخل منابع بود.
- استقرار مجازیسازی شده: سپس ماشینهای مجازی (VM) آمدند. VMها اجازه دادند چندین برنامه ایزوله روی همان سختافزار اجرا شوند.
- استقرار کانتینری: کانتینرها (مانند Docker) تحول بعدی هستند. آنها سیستمعامل میزبان را به اشتراک میگذارند اما فرآیندهای ایزوله اجرا میکنند.
کانتینرها مشکل قابلیت حمل را حل کردند اما مشکل جدیدی ایجاد کردند: چگونه صدها (یا هزاران) کانتینر را در محیط تولید مدیریت کنیم؟
اینجاست که Kubernetes وارد میشود.
Kubernetes چیست؟
Kubernetes (اغلب به اختصار K8s) یک پلتفرم متنباز برای ارکستراسیون کانتینر است. به زبان ساده، استقرار، مقیاسبندی و مدیریت برنامههای کانتینری را خودکار میکند.
معماری یک خوشه Kubernetes
یک محیط Kubernetes یک خوشه نامیده میشود. معماری به دو بخش اصلی تقسیم میشود: Control Plane و Worker Nodes.
Control Plane
Control Plane «مغز» خوشه است. تصمیمات کلی (مانند زمانبندی) را میگیرد. اجزای اصلی آن:
- API Server (
kube-apiserver): دروازه ورود به خوشه. - etcd: پایگاه داده کلید-مقدار سازگار و با دسترسی بالا.
- Scheduler (
kube-scheduler): Podهای تازه ایجاد شده را به یک Worker Node موجود اختصاص میدهد. - Controller Manager (
kube-controller-manager): کنترلرها را اجرا میکند که حلقههای کنترلی هستند.
Worker Node
Worker Nodeها ماشینهایی هستند که برنامهها واقعاً روی آنها اجرا میشوند:
- Kubelet: عاملی که روی هر نود اجرا میشود.
- Kube-proxy: پروکسی شبکهای که قوانین شبکه را مدیریت میکند.
- Container Runtime: نرمافزار مسئول اجرای کانتینرها.
اشیاء اساسی Kubernetes
Pod
Pod کوچکترین واحد اجرا در Kubernetes است.
Deployment
یک Deployment شیئی است که بیشتر استفاده خواهید کرد. وضعیت مطلوب یک گروه از Podهای یکسان را توصیف میکند.
# nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Service
یک Service انتزاعی است که یک مجموعه منطقی از Podها و سیاست دسترسی به آنها را تعریف میکند.
# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP
انواع مختلف Services:
ClusterIP: سرویس را روی یک IP داخلی خوشه فاش میکند (پیشفرض).NodePort: سرویس را روی یک پورت ثابت روی هر Worker Node فاش میکند.LoadBalancer: یک load balancer خارجی در ارائهدهنده ابری ایجاد میکند.
Ingress
# example-ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example-ingress spec: rules: - host: mysite.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 8080 - path: /ui pathType: Prefix backend: service: name: ui-service port: number: 3000
سایر اشیاء مفید
- Namespace: اجازه ایجاد «خوشههای مجازی» درون یک خوشه فیزیکی.
- ConfigMap و Secret: مدیریت دادههای پیکربندی و اسرار.
- StatefulSet: مشابه Deployment، اما مخصوص برنامههای با حالت.
- PersistentVolume (PV) و PersistentVolumeClaim (PVC): مدیریت ذخیرهسازی پایدار.
نتیجهگیری
Kubernetes ابزاری فوقالعاده قدرتمند است، اما منحنی یادگیری آن میتواند تند باشد.
حالا چه کنیم؟
- به صورت محلی آزمایش کنید: Minikube یا Kind را نصب کنید.
- از
kubectlاستفاده کنید: با دستورkubectlآشنا شوید. - آموزشهای رسمی را کاوش کنید: مستندات Kubernetes منبعی عالی است.
ارکستراسیون کانتینر مهارتی اساسی در دنیای cloud-native است و تسلط بر Kubernetes دنیایی از امکانات را باز میکند. لذت ببرید!