spinny:~/writing $ less introduction-to-kubernetes.md
12إذا كنت تعمل في عالم تطوير البرمجيات، فمن المؤكد أنك سمعت عن كوبيرنيتس. ولكن ما هو بالضبط، ولماذا أصبح المعيار الفعلي لإدارة التطبيقات المعبأة في حاويات؟ سيأخذك هذا الدليل من الأساسيات إلى المفاهيم الأساسية، مع أمثلة عملية ورسوم بيانية لمساعدتك على الفهم.34## قبل كوبيرنيتس: القليل من التاريخ56لفهم لماذا يعتبر كوبيرنيتس ثوريًا جدًا، دعنا نرجع خطوة إلى الوراء.781. **النشر التقليدي**: في البداية، كانت التطبيقات تُشغل على خوادم مادية. كان هذا النهج مكلفًا، وصعب التوسع، وعرضة لتضارب الموارد.92. **النشر الافتراضي**: ثم جاءت الأجهزة الافتراضية (VMs). سمحت الأجهزة الافتراضية بتشغيل تطبيقات متعددة معزولة على نفس الجهاز، مما أدى إلى تحسين استخدام الموارد والأمان. ومع ذلك، فإن كل جهاز افتراضي يشغل نظام تشغيل كامل، مما يستهلك الكثير من الموارد.103. **النشر المعبأ في حاويات**: الحاويات (مثل دوكر) هي التطور التالي. تشترك في نفس نظام تشغيل المضيف ولكنها تشغل عمليات معزولة. إنها خفيفة الوزن وسريعة البدء ومحمولة.1112حلت الحاويات مشكلة قابلية النقل ولكنها خلقت مشكلة أخرى: كيف يمكن إدارة مئات (أو آلاف) الحاويات في بيئة الإنتاج؟ كيف نضمن أنها تعمل دائمًا، ويمكنها التواصل مع بعضها البعض، وتتوسع بناءً على الحمل؟1314هنا يأتي دور **كوبيرنيتس**.1516## ما هو كوبيرنيتس؟1718كوبيرنيتس (غالبًا ما يُختصر إلى **K8s**) هو منصة مفتوحة المصدر لتنسيق الحاويات. بعبارات بسيطة، يقوم بأتمتة نشر التطبيقات المعبأة في حاويات وتوسيعها وإدارتها. تم إنشاؤه بواسطة جوجل ويتم صيانته الآن من قبل مؤسسة الحوسبة السحابية الأصلية (CNCF)، وأصبح كوبيرنيتس الأداة المفضلة لأي شخص يعمل مع الخدمات المصغرة على نطاق واسع.1920## بنية مجموعة كوبيرنيتس2122تسمى بيئة كوبيرنيتس **مجموعة**. تتكون المجموعة من مجموعة من الأجهزة، تسمى **العقد**، التي تشغل تطبيقاتنا. تنقسم البنية إلى جزأين رئيسيين: مستوى التحكم وعقد العمال.2324```mermaid25graph TD26 subgraph "مستوى التحكم (الرئيسي)"27 A["خادم API"]28 B["etcd"]29 C["المجدول"]30 D["مدير المتحكم"]31 end3233 subgraph "عقدة عامل 1"34 E["Kubelet"] --- F["وقت تشغيل الحاوية"]35 G["Kube-proxy"]36 F --- H["بود"]37 F --- I["بود"]38 end3940 subgraph "عقدة عامل 2"41 J["Kubelet"] --- K["وقت تشغيل الحاوية"]42 L["Kube-proxy"]43 K --- M["بود"]44 end4546 A -- "يتصل بـ" --> E47 A -- "يتصل بـ" --> J48 User -- "kubectl" --> A49 C -- "يعين البودات للعقد" --> E50 D -- "يحافظ على الحالة" --> A51 A -- "يحفظ/يقرأ الحالة" --> B52```5354### مستوى التحكم5556مستوى التحكم هو "دماغ" المجموعة. يتخذ قرارات عالمية (مثل الجدولة) ويكتشف أحداث المجموعة ويستجيب لها. مكوناته الرئيسية هي:5758- **خادم API (`kube-apiserver`)**: هو بوابة المجموعة. يعرض واجهة برمجة تطبيقات كوبيرنيتس، التي يستخدمها المستخدمون (عبر `kubectl`) ومكونات المجموعة والأدوات الخارجية للتواصل.59- **etcd**: قاعدة بيانات قيمة-مفتاح متسقة ومتاحة للغاية. يخزن جميع بيانات المجموعة، ويمثل الحالة المرغوبة والحالية للنظام.60- **المجدول (`kube-scheduler`)**: يعين البودات التي تم إنشاؤها حديثًا إلى عقدة عامل متاحة، مع مراعاة متطلبات الموارد والسياسات والقيود الأخرى.61- **مدير المتحكم (`kube-controller-manager`)**: يشغل المتحكمات، وهي حلقات تحكم تراقب حالة المجموعة وتعمل على إعادتها إلى الحالة المرغوبة. على سبيل المثال، يدير `متحكم العقدة` العقد، بينما يضمن `متحكم النسخ المتماثل` تشغيل العدد الصحيح من البودات.6263### عقدة العامل6465عقد العمال هي الأجهزة (المادية أو الافتراضية) حيث يتم تشغيل التطبيقات بالفعل. تتم إدارة كل عقدة بواسطة مستوى التحكم وتحتوي على المكونات التالية:6667- **Kubelet**: وكيل يعمل على كل عقدة. يضمن تشغيل الحاويات الموصوفة في البودات وبصحة جيدة.68- **Kube-proxy**: وكيل شبكة يدير قواعد الشبكة على العقد. يسمح بالاتصال الشبكي إلى البودات من جلسات الشبكة داخل المجموعة أو خارجها.69- **وقت تشغيل الحاوية**: البرنامج المسؤول عن تشغيل الحاويات. دوكر هو الأكثر شهرة، لكن كوبيرنيتس يدعم أيضًا أوقات تشغيل أخرى مثل `containerd` و `CRI-O`.7071## كائنات كوبيرنيتس الأساسية7273في كوبيرنيتس، يتم تمثيل كل شيء بواسطة **كائنات**. هذه الكائنات هي "سجلات نية": بمجرد إنشاء كائن، يعمل كوبيرنيتس باستمرار لضمان وجوده ومطابقته للحالة المرغوبة.7475إليك أهمها:7677### بود7879**البود** هو أصغر وحدة تنفيذ في كوبيرنيتس. يمثل حاوية واحدة أو أكثر يتم تشغيلها معًا على نفس العقدة، وتتشارك في الموارد مثل الشبكة والتخزين.8081بشكل عام، تقوم بتشغيل حاوية واحدة فقط لكل بود، ولكن في السيناريوهات المتقدمة (مثل "حاويات الشريط الجانبي" للتسجيل أو المراقبة)، يمكن أن يكون لديك المزيد.8283لا تقوم أبدًا بإنشاء بودات مباشرة تقريبًا. تستخدم تجريدات عالية المستوى مثل النشرات.8485### نشر8687**النشر** هو الكائن الذي ستستخدمه في أغلب الأحيان. يصف الحالة المرغوبة لمجموعة من البودات المتطابقة. يكون متحكم النشر مسؤولاً عن:8889- إنشاء وإدارة **ReplicaSet** (كائن آخر يضمن تشغيل عدد محدد من نسخ البود دائمًا).90- **توسيع** عدد البودات لأعلى أو لأسفل.91- إدارة **تحديثات** التطبيق بطريقة مضبوطة (على سبيل المثال، *تحديث متجدد*)، دون توقف.9293إليك ملف YAML مثال لنشر يشغل 3 نسخ من خادم NGINX:9495```yaml96# nginx-deployment.yaml97apiVersion: apps/v198kind: Deployment99metadata:100 name: nginx-deployment101spec:102 replicas: 3103 selector:104 matchLabels:105 app: nginx106 template:107 metadata:108 labels:109 app: nginx110 spec:111 containers:112 - name: nginx113 image: nginx:1.14.2114 ports:115 - containerPort: 80116```117118### خدمة119120البودات في كوبيرنيتس سريعة الزوال: يمكن إنشاؤها وتدميرها في أي وقت. لكل بود عنوان IP خاص به، لكن هذا العنوان ليس ثابتًا. لذا، كيف نعرض تطبيقنا بشكل موثوق؟121122باستخدام **خدمة**. الخدمة هي تجريد يحدد مجموعة منطقية من البودات وسياسة للوصول إليها. يوفر **نقطة وصول مستقرة** (عنوان IP افتراضي واسم DNS) لمجموعة من البودات.123124```mermaid125graph TD126 subgraph "خدمة (nginx-service)"127 A["ClusterIP: 10.96.0.10"]128 end129130 subgraph "البودات"131 B("بود 1 - IP: 192.168.1.2")132 C("بود 2 - IP: 192.168.1.3")133 D("بود 3 - IP: 192.168.1.4")134 end135136 A -- "المحدد: app=nginx" --> B137 A -- "المحدد: app=nginx" --> C138 A -- "المحدد: app=nginx" --> D139140 Client -- "طلب إلى nginx-service" --> A141```142143تستخدم الخدمة `محددًا` يعتمد على `التسميات` للعثور على البودات التي يجب أن توجه حركة المرور إليها.144145إليك كيفية إنشاء خدمة لنشر NGINX الخاص بنا:146147```yaml148# nginx-service.yaml149apiVersion: v1150kind: Service151metadata:152 name: nginx-service153spec:154 selector:155 app: nginx156 ports:157 - protocol: TCP158 port: 80159 targetPort: 80160 type: ClusterIP # افتراضي - يعرض الخدمة داخل المجموعة فقط161```162163هناك أنواع مختلفة من الخدمات:164- `ClusterIP`: يعرض الخدمة على عنوان IP داخلي للمجموعة (افتراضي).165- `NodePort`: يعرض الخدمة على منفذ ثابت على كل عقدة عامل.166- `LoadBalancer`: ينشئ موازن تحميل خارجيًا في موفر السحابة (على سبيل المثال، AWS ،GCP) ويعين عنوان IP عامًا للخدمة.167168### دخول169170خدمة `LoadBalancer` رائعة، لكن إنشاء واحدة لكل خدمة يمكن أن يكون مكلفًا. لعرض خدمات HTTP/HTTPS متعددة للعالم الخارجي، يمكنك استخدام **دخول**.171172يعمل الدخول كـ "موجه ذكي" لحركة المرور الخارجية. يسمح لك بتحديد قواعد التوجيه بناءً على المضيف (على سبيل المثال، `api.mysite.com`) أو المسار (على سبيل المثال، `mysite.com/api`).173174```mermaid175graph LR176 User -- "mysite.com/api" --> Ingress177 User -- "mysite.com/ui" --> Ingress178179 subgraph "Cluster"180 Ingress -- "/api" --> ServiceA("api-service")181 Ingress -- "/ui" --> ServiceB("ui-service")182183 ServiceA --> PodA1("بود API 1")184 ServiceA --> PodA2("بود API 2")185186 ServiceB --> PodB1("بود واجهة المستخدم 1")187 ServiceB --> PodB2("بود واجهة المستخدم 2")188 end189```190191إليك مثال على دخول:192```yaml193# example-ingress.yaml194apiVersion: networking.k8s.io/v1195kind: Ingress196metadata:197 name: example-ingress198spec:199 rules:200 - host: mysite.com201 http:202 paths:203 - path: /api204 pathType: Prefix205 backend:206 service:207 name: api-service208 port:209 number: 8080210 - path: /ui211 pathType: Prefix212 backend:213 service:214 name: ui-service215 port:216 number: 3000217```218219### كائنات أخرى مفيدة220221- **Namespace**: يسمح لك بإنشاء "مجموعات افتراضية" داخل مجموعة مادية. مفيد لعزل البيئات (على سبيل المثال، `development`، `staging`، `production`) أو الفرق.222- **ConfigMap و Secret**: لإدارة بيانات التكوين والأسرار (مثل كلمات المرور أو مفاتيح API) بشكل منفصل عن صورة الحاوية.223- **StatefulSet**: مشابه للنشر، ولكنه مخصص للتطبيقات ذات الحالة (مثل قواعد البيانات) التي تتطلب هويات شبكة مستقرة وتخزينًا دائمًا.224- **PersistentVolume (PV) و PersistentVolumeClaim (PVC)**: لإدارة التخزين الدائم في المجموعة.225226## خاتمة227228كوبيرنيتس أداة قوية بشكل لا يصدق، ولكن منحنى تعلمها يمكن أن يكون حادًا. لقد خدش هذا الدليل السطح فقط، لكننا نأمل أن يكون قد أعطاك فهمًا قويًا للمفاهيم الأساسية.229230**ماذا تفعل الآن؟**231- **جرب محليًا**: قم بتثبيت [Minikube](https://minikube.sigs.k8s.io/docs/start/) أو [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) لإنشاء مجموعة كوبيرنيتس على جهاز الكمبيوتر الخاص بك.232- **استخدم `kubectl`**: تعرف على أمر `kubectl`، أداتك الرئيسية للتفاعل مع المجموعة. حاول إنشاء نشر NGINX والخدمة من هذه المقالة.233- **استكشف البرامج التعليمية الرسمية**: [وثائق كوبيرنيتس](https://kubernetes.io/docs/tutorials/) هي مورد رائع مليء بالأمثلة.234235تنسيق الحاويات هو مهارة أساسية في العالم السحابي الأصلي، وإتقان كوبيرنيتس سيفتح لك عالمًا من الاحتمالات. استمتع!
:مقدمة إلى كوبيرنيتس: منسق الحاوياتlines 1-235 (END) — press q to close