انتقل إلى المحتوى الرئيسي

الفصل 2.3 - etcd

أهداف التعلم​

في نهاية هذا الفصل، ستكون قادرًا على:

  • فهم دور etcd في Kubernetes
  • شرح كيفية تخزين etcd لحالة العنقود
  • فهم النسخ والتوافر العالي
  • تحديد أفضل ممارسات النسخ الاحتياطي

ما هو etcd؟​

etcd هو قاعدة بيانات موزعة من نوع المفتاح-القيمة، متسقة وعالية التوافر تُستخدم كمصدر الحقيقة الوحيد لـ Kubernetes. يتم تخزين جميع تكوينات وحالة العنقود في etcd.


الدور في Kubernetes​

مصدر الحقيقة الوحيد​

etcd يخزن:

  • جميع الموارد (Pods، Services، Deployments، إلخ.)
  • تكوين العنقود
  • الحالة الحالية لجميع الموارد
  • البيانات الوصفية وannotations

لا يوجد وصول مباشر​

مهم: لا يصل المستخدمون والمكونات أبدًا مباشرة إلى etcd. جميع التفاعلات تمر عبر API Server.


هيكل البيانات​

صيغة المفتاح-القيمة​

يتم تنظيم البيانات بشكل هرمي:

/registry/pods/default/my-pod
/registry/services/default/my-service
/registry/deployments/default/my-deployment

مثال على البيانات المخزنة​

{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "my-pod",
"namespace": "default",
"uid": "123-456-789"
},
"spec": {
"containers": [...]
},
"status": {
"phase": "Running"
}
}

التوافر العالي​

النسخ​

للإنتاج، يجب أن يتم نسخ etcd (عادةً 3 أو 5 عقد):

المزايا:

  • تحمل الأعطال (يمكن أن تسقط عقدة واحدة)
  • أداء محسّن (قراءات موزعة)
  • ضمان الاتساق

الإجماع: Raft​

etcd يستخدم خوارزمية الإجماع Raft:

الخصائص:

  • قائد منتخب
  • نسخ إلى المتابعين
  • إجماع بالأغلبية
  • ضمان الاتساق القوي

النسخ الاحتياطي والاستعادة​

أهمية حاسمة​

⚠️ etcd يحتوي على كل حالة العنقود. فقدانه = فقدان العنقود!

النسخ الاحتياطي المنتظم​

# نسخ احتياطي لـ etcd
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key

# استعادة من نسخة احتياطية
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db

أفضل الممارسات​

  • نسخ احتياطية تلقائية يومية
  • تخزين خارج الموقع
  • اختبارات استعادة منتظمة
  • توثيق العملية

الأداء​

العوامل المؤثرة على الأداء​

  1. حجم العنقود: المزيد من الموارد = المزيد من البيانات
  2. تكرار التغييرات: تحديثات متكررة
  3. حجم الكائنات: ConfigMaps/Secrets كبيرة
  4. الضغط (compaction): تنظيف الإصدارات القديمة

التحسينات​

  • الضغط المنتظم للبيانات
  • إلغاء تجزئة القرص
  • SSD لأداء أفضل
  • مراقبة المقاييس

الأمان​

التشفير​

  • أثناء النقل: TLS بين API Server و etcd
  • في وضع السكون: تشفير اختياري للبيانات

الوصول المقيد​

  • فقط API Server يصل إلى etcd
  • شهادات العميل مطلوبة
  • لا يوجد وصول شبكة عام

المراقبة​

المقاييس الهامة​

  • حجم قاعدة البيانات
  • زمن استجابة العمليات
  • معدل الأخطاء
  • حالة القائد
  • المساحة المتاحة على القرص

الأوامر المفيدة​

# التحقق من حالة etcd
kubectl get componentstatuses

# عرض المقاييس (إذا تم تكوين المراقبة)
# عبر Prometheus أو أدوات مشابهة

الملخص​

في هذا الفصل، تعلمت:

etcd: قاعدة بيانات موزعة، مصدر الحقيقة الوحيد
التخزين: جميع الموارد وتكوين العنقود
التوافر العالي: النسخ مع إجماع Raft
النسخ الاحتياطي: حاسم لاستمرارية العنقود
الأمان: وصول مقيد، تشفير أثناء النقل


الخطوات التالية​

الآن بعد أن فهمت etcd:

الفصل 2.4: Controller Manager — الحفاظ على الحالة المرغوبة
الفصل 2.5: Scheduler — جدولة الـ Pods


تم إنشاء الفصل في: ديسمبر 2024