0Pricing
Kubernetes Basics · درس

StatefulSets للتطبيقات ذات الحالة

انشر التطبيقات ذات الحالة، مثل قواعد البيانات، وأدِرها باستخدام StatefulSets، مع ضمان معرّفات شبكية مستقرة وتخزين دائم

StatefulSets للتطبيقات ذات الحالة درس مجاني في Kubernetes Basics على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Kubernetes Basics، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Kubernetes Basics 4 دروس في المجموع.

StatefulSets للتطبيقات ذات الحالة

مرحبًا بكم! في هذا الدرس، سنتعمق في StatefulSets، وهو كائن في Kubernetes مصمم لإدارة التطبيقات ذات الحالة.

على عكس التطبيقات عديمة الحالة (التي يسهل توسيعها واستبدالها)، تتطلب التطبيقات ذات الحالة هويات فريدة وتخزينًا مستمرًا لكل نسخة. ومن أمثلتها قواعد البيانات وقوائم انتظار الرسائل أو التطبيقات المخصصة التي تخزن البيانات محليًا.

لماذا نحتاج إلى الحالة؟ التحدي

تُعد Deployments التقليدية مناسبة جدًا للتطبيقات عديمة الحالة. فإذا تعطل Pod، يحل آخر محله، ولا يهم أيّ منها يعالج الطلب.

لكن في التطبيقات ذات الحالة، غالبًا ما تحتاج كل نسخة إلى هوية ثابتة وفريدة وإلى مساحة تخزين مخصصة لها. فإذا أعيد تشغيل Pod لقاعدة بيانات، فيجب أن يعيد الاتصال بوحدة تخزين البيانات الخاصة به.

هوية الشبكة وPod الثابتة

تتمثل إحدى الميزات الأساسية لـ StatefulSets في توفير معرّفات شبكة ثابتة وفريدة لكل Pod.

  • تُسمّى Pods بطريقة مرتبة ويمكن التنبؤ بها (مثل web-0 وweb-1).
  • تحافظ على أسماء المضيفين الخاصة بها عند إعادة التشغيل.
  • يتيح ذلك للخدمات الأخرى الاتصال بنسخة معينة بشكل موثوق.

تخزين ثابت ومستمر

تضمن StatefulSets حصول كل Pod على تخزين ثابت ومستمر خاص به. ويتم ذلك باستخدام Persistent Volume Claims (PVCs).

عند إنشاء Pod تابع لـ StatefulSet، يُنشئ تلقائيًا PVC استنادًا إلى تعريف volumeClaimTemplates. وإذا تعطل Pod وأُعيد إنشاؤه، فسيعيد إرفاقه بـ PVC نفسه، وبالتالي ببياناته الأصلية.

بنية StatefulSet بصيغة YAML

يشبه تعريف StatefulSet بصيغة YAML تعريف Deployment، لكنه يتضمن بعض الإضافات المهمة. ويشمل:

  • apiVersion وkind وmetadata
  • spec.replicas وspec.selector وspec.template (كما في Deployments)
  • spec.serviceName: يربطه بخدمة بلا عنوان IP للعنقود.
  • spec.volumeClaimTemplates: يحدد كيفية إنشاء PVCs لكل Pod.

خدمة بلا رأس للمعرّفات الثابتة

لكي توفر StatefulSets هويات شبكة ثابتة، فهي تتطلب خدمة بلا رأس. لا تحتوي الخدمة بلا رأس على عنوان IP للعنقود، بل تعيد عناوين IP الخاصة بالـ Pods التي تحددها مباشرةً.

يستخدم StatefulSet هذه الخدمة لتسجيل إدخالات DNS لكل Pod من Pods الخاصة به (مثل pod-0.my-service.my-namespace.svc.cluster.local).

apiVersion: v1
kind: Service
metadata:
  name: my-app-headless
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None # This makes it a headless service
  selector:
    app: my-app

VolumeClaimTemplates

يُعد القسم volumeClaimTemplates خاصًا بـ StatefulSets. وهو قالب لـ Persistent Volume Claims (PVCs) التي سيتم إنشاؤها لكل نسخة.

سيحصل كل Pod في StatefulSet (مثل my-app-0 وmy-app-1) على PVC خاص به (مثل data-my-app-0 وdata-my-app-1) استنادًا إلى هذا القالب، مما يضمن توفير تخزين مخصص.

volumeClaimTemplates:
- metadata:
    name: data # This name is used in Pod's volumeMounts
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: standard
    resources:
      requests:
        storage: 1Gi

مثال كامل على StatefulSet

إليكم مثالًا كاملًا على StatefulSet بسيط لـ Nginx. لاحظوا serviceName الذي يربطه بالخدمة بلا رأس، وvolumeClaimTemplates.

لنشره، احفظوه باسم nginx-statefulset.yaml وشغّلوا kubectl apply -f nginx-statefulset.yaml.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx-headless" # Must match headless service name
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www # Mounts the volume from the PVC
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www # This name links to volumeMounts.name
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: standard
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

تسمية Pods وترتيبها

بعد النشر، سترون Pods بأسماء مثل web-0 وweb-1. وتكون هذه الفهارس ثابتة وفريدة.

تفرض StatefulSets ترتيبًا صارمًا لعمليات التوسعة. إذ تُنشأ Pods بالترتيب (0، 1، 2...) وتُنهي بالترتيب العكسي (...، 2، 1، 0).

يُعد هذا الأسلوب المرتب ضروريًا للعديد من الأنظمة الموزعة ذات الحالة للحفاظ على الاتساق.

التوسعة والتحديثات التدريجية

يمكنكم توسيع StatefulSet كما تفعلون مع Deployment، باستخدام kubectl scale statefulset web --replicas=3.

تعمل التحديثات التدريجية أيضًا، مع الحفاظ على ضمانات الترتيب نفسها: تُحدّث Pods واحدة تلو الأخرى، بالترتيب العكسي للفهرس، مما يضمن عدم تحديث Pod التالية قبل أن تصبح السابقة جاهزة.

يقلل هذا التنسيق الدقيق من الاضطرابات التي تتعرض لها التطبيقات ذات الحالة.

تحققوا من مدى استيعابكم

ما الخصائص أو المتطلبات الأساسية التالية لـ StatefulSets في Kubernetes؟

مراجعة: StatefulSets قيد التشغيل

أحسنتم! استكشفنا في هذا الدرس StatefulSets، وهو كائن قوي في Kubernetes لإدارة التطبيقات ذات الحالة.

  • توفر هويات شبكة ثابتة وعمليات مرتبة.
  • تستخدم volumeClaimTemplates لتوفير تخزين مخصص ومستمر لكل نسخة.
  • تُعد الخدمة بلا رأس ضرورية لتوفير معرّفات الشبكة الثابتة الخاصة بها.

تُعد StatefulSets أساسية لتشغيل قواعد البيانات وأحمال العمل الأخرى المهمة ذات الحالة بشكل موثوق على Kubernetes.

الأسئلة الشائعة

هل درس «StatefulSets للتطبيقات ذات الحالة» مجاني؟

نعم — نص درس «StatefulSets للتطبيقات ذات الحالة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Kubernetes Basics، انتقل إلى CoddyKit PRO. تتضمن دورة Kubernetes Basics 4 دروس في المجموع.

ماذا ستتعلم في «StatefulSets للتطبيقات ذات الحالة»؟

انشر التطبيقات ذات الحالة، مثل قواعد البيانات، وأدِرها باستخدام StatefulSets، مع ضمان معرّفات شبكية مستقرة وتخزين دائم تتمرن على Kubernetes Basics مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Kubernetes Basics؟

لا تُشترط خبرة سابقة. Kubernetes Basics على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «StatefulSets للتطبيقات ذات الحالة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Kubernetes Basics هذا؟

نعم. كل درس في Kubernetes Basics يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. StatefulSets للتطبيقات ذات الحالة
  2. DaemonSets للمهام الخاصة بالعقد
  3. فهم Kubernetes Operators
  4. تعريفات الموارد المخصّصة (CRDs)
← العودة إلى Kubernetes Basics