الفصل 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
أفضل الممارسات
- نسخ احتياطية تلقائية يومية
- تخزين خارج الموقع
- اختبارات استعادة منتظمة
- توثيق العملية
الأداء
العوامل المؤثرة على الأداء
- حجم العنقود: المزيد من الموارد = المزيد من البيانات
- تكرار التغييرات: تحديثات متكررة
- حجم الكائنات: ConfigMaps/Secrets كبيرة
- الضغط (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