إذا كنت تعمل في عالم تطوير البرمجيات، فمن المؤكد أنك سمعت عن كوبيرنيتس. ولكن ما هو بالضبط، ولماذا أصبح المعيار الفعلي لإدارة التطبيقات المعبأة في حاويات؟ سيأخذك هذا الدليل من الأساسيات إلى المفاهيم الأساسية، مع أمثلة عملية ورسوم بيانية لمساعدتك على الفهم.
قبل كوبيرنيتس: القليل من التاريخ
لفهم لماذا يعتبر كوبيرنيتس ثوريًا جدًا، دعنا نرجع خطوة إلى الوراء.
- النشر التقليدي: في البداية، كانت التطبيقات تُشغل على خوادم مادية. كان هذا النهج مكلفًا، وصعب التوسع، وعرضة لتضارب الموارد.
- النشر الافتراضي: ثم جاءت الأجهزة الافتراضية (VMs). سمحت الأجهزة الافتراضية بتشغيل تطبيقات متعددة معزولة على نفس الجهاز، مما أدى إلى تحسين استخدام الموارد والأمان. ومع ذلك، فإن كل جهاز افتراضي يشغل نظام تشغيل كامل، مما يستهلك الكثير من الموارد.
- النشر المعبأ في حاويات: الحاويات (مثل دوكر) هي التطور التالي. تشترك في نفس نظام تشغيل المضيف ولكنها تشغل عمليات معزولة. إنها خفيفة الوزن وسريعة البدء ومحمولة.
حلت الحاويات مشكلة قابلية النقل ولكنها خلقت مشكلة أخرى: كيف يمكن إدارة مئات (أو آلاف) الحاويات في بيئة الإنتاج؟ كيف نضمن أنها تعمل دائمًا، ويمكنها التواصل مع بعضها البعض، وتتوسع بناءً على الحمل؟
هنا يأتي دور كوبيرنيتس.
ما هو كوبيرنيتس؟
كوبيرنيتس (غالبًا ما يُختصر إلى K8s) هو منصة مفتوحة المصدر لتنسيق الحاويات. بعبارات بسيطة، يقوم بأتمتة نشر التطبيقات المعبأة في حاويات وتوسيعها وإدارتها. تم إنشاؤه بواسطة جوجل ويتم صيانته الآن من قبل مؤسسة الحوسبة السحابية الأصلية (CNCF)، وأصبح كوبيرنيتس الأداة المفضلة لأي شخص يعمل مع الخدمات المصغرة على نطاق واسع.
بنية مجموعة كوبيرنيتس
تسمى بيئة كوبيرنيتس مجموعة. تتكون المجموعة من مجموعة من الأجهزة، تسمى العقد، التي تشغل تطبيقاتنا. تنقسم البنية إلى جزأين رئيسيين: مستوى التحكم وعقد العمال.
مستوى التحكم
مستوى التحكم هو "دماغ" المجموعة. يتخذ قرارات عالمية (مثل الجدولة) ويكتشف أحداث المجموعة ويستجيب لها. مكوناته الرئيسية هي:
- خادم API (
kube-apiserver
): هو بوابة المجموعة. يعرض واجهة برمجة تطبيقات كوبيرنيتس، التي يستخدمها المستخدمون (عبرkubectl
) ومكونات المجموعة والأدوات الخارجية للتواصل. - etcd: قاعدة بيانات قيمة-مفتاح متسقة ومتاحة للغاية. يخزن جميع بيانات المجموعة، ويمثل الحالة المرغوبة والحالية للنظام.
- المجدول (
kube-scheduler
): يعين البودات التي تم إنشاؤها حديثًا إلى عقدة عامل متاحة، مع مراعاة متطلبات الموارد والسياسات والقيود الأخرى. - مدير المتحكم (
kube-controller-manager
): يشغل المتحكمات، وهي حلقات تحكم تراقب حالة المجموعة وتعمل على إعادتها إلى الحالة المرغوبة. على سبيل المثال، يديرمتحكم العقدة
العقد، بينما يضمنمتحكم النسخ المتماثل
تشغيل العدد الصحيح من البودات.
عقدة العامل
عقد العمال هي الأجهزة (المادية أو الافتراضية) حيث يتم تشغيل التطبيقات بالفعل. تتم إدارة كل عقدة بواسطة مستوى التحكم وتحتوي على المكونات التالية:
- Kubelet: وكيل يعمل على كل عقدة. يضمن تشغيل الحاويات الموصوفة في البودات وبصحة جيدة.
- Kube-proxy: وكيل شبكة يدير قواعد الشبكة على العقد. يسمح بالاتصال الشبكي إلى البودات من جلسات الشبكة داخل المجموعة أو خارجها.
- وقت تشغيل الحاوية: البرنامج المسؤول عن تشغيل الحاويات. دوكر هو الأكثر شهرة، لكن كوبيرنيتس يدعم أيضًا أوقات تشغيل أخرى مثل
containerd
وCRI-O
.
كائنات كوبيرنيتس الأساسية
في كوبيرنيتس، يتم تمثيل كل شيء بواسطة كائنات. هذه الكائنات هي "سجلات نية": بمجرد إنشاء كائن، يعمل كوبيرنيتس باستمرار لضمان وجوده ومطابقته للحالة المرغوبة.
إليك أهمها:
بود
البود هو أصغر وحدة تنفيذ في كوبيرنيتس. يمثل حاوية واحدة أو أكثر يتم تشغيلها معًا على نفس العقدة، وتتشارك في الموارد مثل الشبكة والتخزين.
بشكل عام، تقوم بتشغيل حاوية واحدة فقط لكل بود، ولكن في السيناريوهات المتقدمة (مثل "حاويات الشريط الجانبي" للتسجيل أو المراقبة)، يمكن أن يكون لديك المزيد.
لا تقوم أبدًا بإنشاء بودات مباشرة تقريبًا. تستخدم تجريدات عالية المستوى مثل النشرات.
نشر
النشر هو الكائن الذي ستستخدمه في أغلب الأحيان. يصف الحالة المرغوبة لمجموعة من البودات المتطابقة. يكون متحكم النشر مسؤولاً عن:
- إنشاء وإدارة ReplicaSet (كائن آخر يضمن تشغيل عدد محدد من نسخ البود دائمًا).
- توسيع عدد البودات لأعلى أو لأسفل.
- إدارة تحديثات التطبيق بطريقة مضبوطة (على سبيل المثال، تحديث متجدد)، دون توقف.
إليك ملف YAML مثال لنشر يشغل 3 نسخ من خادم NGINX:
# 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
خدمة
البودات في كوبيرنيتس سريعة الزوال: يمكن إنشاؤها وتدميرها في أي وقت. لكل بود عنوان IP خاص به، لكن هذا العنوان ليس ثابتًا. لذا، كيف نعرض تطبيقنا بشكل موثوق؟
باستخدام خدمة. الخدمة هي تجريد يحدد مجموعة منطقية من البودات وسياسة للوصول إليها. يوفر نقطة وصول مستقرة (عنوان IP افتراضي واسم DNS) لمجموعة من البودات.
تستخدم الخدمة محددًا
يعتمد على التسميات
للعثور على البودات التي يجب أن توجه حركة المرور إليها.
إليك كيفية إنشاء خدمة لنشر NGINX الخاص بنا:
# nginx-service.yaml apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP # افتراضي - يعرض الخدمة داخل المجموعة فقط
هناك أنواع مختلفة من الخدمات:
ClusterIP
: يعرض الخدمة على عنوان IP داخلي للمجموعة (افتراضي).NodePort
: يعرض الخدمة على منفذ ثابت على كل عقدة عامل.LoadBalancer
: ينشئ موازن تحميل خارجيًا في موفر السحابة (على سبيل المثال، AWS ،GCP) ويعين عنوان IP عامًا للخدمة.
دخول
خدمة LoadBalancer
رائعة، لكن إنشاء واحدة لكل خدمة يمكن أن يكون مكلفًا. لعرض خدمات HTTP/HTTPS متعددة للعالم الخارجي، يمكنك استخدام دخول.
يعمل الدخول كـ "موجه ذكي" لحركة المرور الخارجية. يسمح لك بتحديد قواعد التوجيه بناءً على المضيف (على سبيل المثال، api.mysite.com
) أو المسار (على سبيل المثال، mysite.com/api
).
إليك مثال على دخول:
# 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: يسمح لك بإنشاء "مجموعات افتراضية" داخل مجموعة مادية. مفيد لعزل البيئات (على سبيل المثال،
development
،staging
،production
) أو الفرق. - ConfigMap و Secret: لإدارة بيانات التكوين والأسرار (مثل كلمات المرور أو مفاتيح API) بشكل منفصل عن صورة الحاوية.
- StatefulSet: مشابه للنشر، ولكنه مخصص للتطبيقات ذات الحالة (مثل قواعد البيانات) التي تتطلب هويات شبكة مستقرة وتخزينًا دائمًا.
- PersistentVolume (PV) و PersistentVolumeClaim (PVC): لإدارة التخزين الدائم في المجموعة.
خاتمة
كوبيرنيتس أداة قوية بشكل لا يصدق، ولكن منحنى تعلمها يمكن أن يكون حادًا. لقد خدش هذا الدليل السطح فقط، لكننا نأمل أن يكون قد أعطاك فهمًا قويًا للمفاهيم الأساسية.
ماذا تفعل الآن؟
- جرب محليًا: قم بتثبيت Minikube أو Kind لإنشاء مجموعة كوبيرنيتس على جهاز الكمبيوتر الخاص بك.
- استخدم
kubectl
: تعرف على أمرkubectl
، أداتك الرئيسية للتفاعل مع المجموعة. حاول إنشاء نشر NGINX والخدمة من هذه المقالة. - استكشف البرامج التعليمية الرسمية: وثائق كوبيرنيتس هي مورد رائع مليء بالأمثلة.
تنسيق الحاويات هو مهارة أساسية في العالم السحابي الأصلي، وإتقان كوبيرنيتس سيفتح لك عالمًا من الاحتمالات. استمتع!