spinny:~/writing $ less introduction-to-kubernetes.md
12اگر در دنیای توسعه نرمافزار کار میکنید، مطمئناً درباره Kubernetes شنیدهاید. اما دقیقاً چیست و چرا به استاندارد واقعی برای مدیریت برنامههای کانتینری تبدیل شده است؟ این راهنما شما را از مبانی تا مفاهیم اساسی با مثالهای عملی و نمودارها همراهی میکند.34## قبل از Kubernetes: کمی تاریخچه56برای درک اینکه چرا Kubernetes انقلابی است، یک قدم به عقب برگردیم.781. **استقرار سنتی**: در ابتدا، برنامهها روی سرورهای فیزیکی اجرا میشدند. این رویکرد گران، مقیاسبندی دشوار و مستعد تداخل منابع بود.92. **استقرار مجازیسازی شده**: سپس ماشینهای مجازی (VM) آمدند. VMها اجازه دادند چندین برنامه ایزوله روی همان سختافزار اجرا شوند.103. **استقرار کانتینری**: کانتینرها (مانند Docker) تحول بعدی هستند. آنها سیستمعامل میزبان را به اشتراک میگذارند اما فرآیندهای ایزوله اجرا میکنند.1112کانتینرها مشکل قابلیت حمل را حل کردند اما مشکل جدیدی ایجاد کردند: چگونه صدها (یا هزاران) کانتینر را در محیط تولید مدیریت کنیم؟1314اینجاست که **Kubernetes** وارد میشود.1516## Kubernetes چیست؟1718Kubernetes (اغلب به اختصار **K8s**) یک پلتفرم متنباز برای ارکستراسیون کانتینر است. به زبان ساده، استقرار، مقیاسبندی و مدیریت برنامههای کانتینری را خودکار میکند.1920## معماری یک خوشه Kubernetes2122یک محیط Kubernetes یک **خوشه** نامیده میشود. معماری به دو بخش اصلی تقسیم میشود: Control Plane و Worker Nodes.2324```mermaid25graph TD26 subgraph "Control Plane (Master)"27 A["API Server"]28 B["etcd"]29 C["Scheduler"]30 D["Controller Manager"]31 end3233 subgraph "Worker Node 1"34 E["Kubelet"] --- F["Container Runtime"]35 G["Kube-proxy"]36 F --- H["Pod"]37 F --- I["Pod"]38 end3940 subgraph "Worker Node 2"41 J["Kubelet"] --- K["Container Runtime"]42 L["Kube-proxy"]43 K --- M["Pod"]44 end4546 A -- "Communicates with" --> E47 A -- "Communicates with" --> J48 User -- "kubectl" --> A49 C -- "Assigns Pods to Nodes" --> E50 D -- "Maintains state" --> A51 A -- "Saves/Reads state" --> B52```5354### Control Plane5556Control Plane «مغز» خوشه است. تصمیمات کلی (مانند زمانبندی) را میگیرد. اجزای اصلی آن:5758- **API Server (`kube-apiserver`)**: دروازه ورود به خوشه.59- **etcd**: پایگاه داده کلید-مقدار سازگار و با دسترسی بالا.60- **Scheduler (`kube-scheduler`)**: Podهای تازه ایجاد شده را به یک Worker Node موجود اختصاص میدهد.61- **Controller Manager (`kube-controller-manager`)**: کنترلرها را اجرا میکند که حلقههای کنترلی هستند.6263### Worker Node6465Worker Nodeها ماشینهایی هستند که برنامهها واقعاً روی آنها اجرا میشوند:6667- **Kubelet**: عاملی که روی هر نود اجرا میشود.68- **Kube-proxy**: پروکسی شبکهای که قوانین شبکه را مدیریت میکند.69- **Container Runtime**: نرمافزار مسئول اجرای کانتینرها.7071## اشیاء اساسی Kubernetes7273### Pod7475**Pod** کوچکترین واحد اجرا در Kubernetes است.7677### Deployment7879یک **Deployment** شیئی است که بیشتر استفاده خواهید کرد. وضعیت مطلوب یک گروه از Podهای یکسان را توصیف میکند.8081```yaml82# nginx-deployment.yaml83apiVersion: apps/v184kind: Deployment85metadata:86 name: nginx-deployment87spec:88 replicas: 389 selector:90 matchLabels:91 app: nginx92 template:93 metadata:94 labels:95 app: nginx96 spec:97 containers:98 - name: nginx99 image: nginx:1.14.2100 ports:101 - containerPort: 80102```103104### Service105106یک **Service** انتزاعی است که یک مجموعه منطقی از Podها و سیاست دسترسی به آنها را تعریف میکند.107108```mermaid109graph TD110 subgraph "Service (nginx-service)"111 A["ClusterIP: 10.96.0.10"]112 end113114 subgraph "Pods"115 B("Pod 1 - IP: 192.168.1.2")116 C("Pod 2 - IP: 192.168.1.3")117 D("Pod 3 - IP: 192.168.1.4")118 end119120 A -- "Selector: app=nginx" --> B121 A -- "Selector: app=nginx" --> C122 A -- "Selector: app=nginx" --> D123124 Client -- "Request to nginx-service" --> A125```126127```yaml128# nginx-service.yaml129apiVersion: v1130kind: Service131metadata:132 name: nginx-service133spec:134 selector:135 app: nginx136 ports:137 - protocol: TCP138 port: 80139 targetPort: 80140 type: ClusterIP141```142143انواع مختلف Services:144- `ClusterIP`: سرویس را روی یک IP داخلی خوشه فاش میکند (پیشفرض).145- `NodePort`: سرویس را روی یک پورت ثابت روی هر Worker Node فاش میکند.146- `LoadBalancer`: یک load balancer خارجی در ارائهدهنده ابری ایجاد میکند.147148### Ingress149150```mermaid151graph LR152 User -- "mysite.com/api" --> Ingress153 User -- "mysite.com/ui" --> Ingress154155 subgraph "Cluster"156 Ingress -- "/api" --> ServiceA("api-service")157 Ingress -- "/ui" --> ServiceB("ui-service")158159 ServiceA --> PodA1("API Pod 1")160 ServiceA --> PodA2("API Pod 2")161162 ServiceB --> PodB1("UI Pod 1")163 ServiceB --> PodB2("UI Pod 2")164 end165```166167```yaml168# example-ingress.yaml169apiVersion: networking.k8s.io/v1170kind: Ingress171metadata:172 name: example-ingress173spec:174 rules:175 - host: mysite.com176 http:177 paths:178 - path: /api179 pathType: Prefix180 backend:181 service:182 name: api-service183 port:184 number: 8080185 - path: /ui186 pathType: Prefix187 backend:188 service:189 name: ui-service190 port:191 number: 3000192```193194### سایر اشیاء مفید195196- **Namespace**: اجازه ایجاد «خوشههای مجازی» درون یک خوشه فیزیکی.197- **ConfigMap و Secret**: مدیریت دادههای پیکربندی و اسرار.198- **StatefulSet**: مشابه Deployment، اما مخصوص برنامههای با حالت.199- **PersistentVolume (PV) و PersistentVolumeClaim (PVC)**: مدیریت ذخیرهسازی پایدار.200201## نتیجهگیری202203Kubernetes ابزاری فوقالعاده قدرتمند است، اما منحنی یادگیری آن میتواند تند باشد.204205**حالا چه کنیم؟**206- **به صورت محلی آزمایش کنید**: [Minikube](https://minikube.sigs.k8s.io/docs/start/) یا [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) را نصب کنید.207- **از `kubectl` استفاده کنید**: با دستور `kubectl` آشنا شوید.208- **آموزشهای رسمی را کاوش کنید**: [مستندات Kubernetes](https://kubernetes.io/docs/tutorials/) منبعی عالی است.209210ارکستراسیون کانتینر مهارتی اساسی در دنیای cloud-native است و تسلط بر Kubernetes دنیایی از امکانات را باز میکند. لذت ببرید!211
:مقدمهای بر Kubernetes: ابزار ارکستراسیون کانتینرlines 1-211 (END) — press q to close