
في اليوم الآخر ، قدم المهندس الأمريكي أندرو رينهارد مشروعًا مثيرًا للاهتمام: توزيع Linux مدمج مصمم خصيصًا لإدارة مجموعات Kubernetes. حصلت على الاسم من الأساطير اليونانية القديمة -
تالوس .
بدا المشروع
مستوحىًا من تغريدة Kelsey Hightower في عام 2015 ، حيث قال إنه كان علينا فقط انتظار ظهور KubeOS الشرطي (وبعد ذلك ستكون حياة البيئات الغائمة رائعة أخيرًا):
بالمناسبة ، مع ظهور تالوس ، استمرت هذه القصة: أجاب شخص ما على تغريدة تاريخية أن مثل هذا النظام قد ظهر بالفعل ، وقال مؤلف تالوس إنه سيكون سعيدًا إذا نظر كيلسي في المشروع. رد فعل هذا الأخير ، ومع ذلك ، لم يتبع (حتى الآن).على ما يبدو ، تم تطوير تالوس بواسطة شخص واحد
(يمثل نفسه داخل الشركة بأكملها - الحكم الذاتي ) - استغرق الأمر أكثر من عام. والآن ، عندما يتم الوصول إلى حالة الحد الأدنى من التوفر ، يتوقع المؤلف أن ينضم إليه ممثلون آخرون من مجتمع Kubernetes / cloud الأصلي. إذن ما هو جوهر المشروع؟
مبادئ وخصائص تالوس
يتم وضع Talos كتوزيع Linux حديث تم إنشاؤه خصيصًا (وحصريًا!) لـ Kubernetes. لتحقيق الهدف في تنفيذه ، التمسك بالطرق التالية:
بساطتها
بساطتها في كل مكان هي واحدة من حجر الزاوية في الهندسة المعمارية تالوس. أحد الأمثلة البارزة هنا هي
خدمة التهيئة المستخدمة ، والتي (خلافًا للاتجاهات الحديثة في هذا المجال) تتبع فلسفة UNIX وهي أن "كل برنامج يقوم بشيء واحد ، لكنه جيد":
أردنا أن نجعل init يركز على مهمة واحدة - إطلاق Kubernetes. ببساطة ليس لديها آليات لأية إجراءات أخرى.
ذهب المطورون إلى أبعد من ذلك وحرموا نظام التشغيل الخاص بهم من وصول المستخدم إلى المضيف المألوف لمسؤولي النظام:
ليس لدى Talos أي قذائف أوامر ، ولا برنامج SSH ، ولا حتى القدرة على بدء عملياته الخاصة على المضيف. وحقا: لماذا كل هذا إذا كنت بحاجة إلى تشغيل Kubernetes وأكثر؟ تقريبا جميع العمليات في تالوس تعمل داخل حاويات.
ومع ذلك ، نظرًا لأن العالم ليس مثاليًا (حتى يعمل نظام التشغيل بالكامل "بمفرده") ، لا تزال هناك أدوات لتشغيل نظام التشغيل:
- osd daemon ، يتم تطبيقه على مبدأ توفير الحد الأدنى من الامتيازات اللازمة (مبدأ الامتيازات الأقل) وتقديم واجهة برمجة التطبيقات (القائمة على gRPC) لإدارة العقد ؛
- تتيح لك الأداة المساعدة osctl CLI التواصل مع خدمة osd ، التي تعمل على كل عقدة.
لذلك ، تم تنفيذ مجموعة من إمكانيات التشغيل الأساسية: خدمات إعادة التشغيل والعقد العنقودية ، وتلقي سجلات kernel (dmesg) ومن الحاويات ، وإدخال البيانات في ملفات تكوين العقدة ، إلخ.
تتم كتابة جميع هذه المكونات (init ، osd ، osctl ...) ، وكذلك
بعض المكونات
الأخرى في مجموعة التوزيع ،
في Go . بالمناسبة ، يتم توزيع كل شفرة المصدر وفقًا لشروط الترخيص المفتوح Mozilla Public License 2.0.
السلامة
النهج الحد الأدنى الموضح أعلاه (كل ما هو ضروري
فقط لتشغيل Kubernetes) + مبدأ إصدار الحد الأدنى من الامتيازات بحد ذاته يقلل من سطح الهجوم المحتمل. أيضا في تالوس:
- تم تكوين kernel المتضمنة وفقًا لتوصيات مشروع Kernel Self Protection Project ( KSSP ) ، الذي يركز على قدرة kernel على الحماية بشكل مستقل من الأخطاء والثغرات المحتملة (بدلاً من استخدام الأدوات المساعدة userpace للأغراض نفسها) ؛
- نظام الملفات الجذرية مُركب للقراءة فقط ، مما يجعله غير قابل للتغيير ؛ إلى جانب عدم وجود قذائف / SSH.
- يستخدم TLS ثنائي الاتجاه (mTLS) للتفاعل مع API ؛
- يتم تطبيق إعدادات وتكوينات Kubernet وفقًا لإرشادات CIS (مركز أمان الإنترنت).
ميزة إضافية ناشئة عن بساطتها والتركيز على غير قابل للتغيير هو
القدرة على
التنبؤ للنظام في السلوك (منذ انخفاض عدد العوامل التي تؤثر على البيئة).
الصلة
يعد المؤلفون بتأسيس Talos على الإصدار النهائي قبل النهائي من Kubernetes (ومع ذلك ، يتم
دعم K8s 1.13.3 في الوقت الحالي) وأحدث إصدار متاح لـ LTS Linux kernel (يستخدم الآن 4.19.10).
مكونات النظام
المكونات الرئيسية للتوزيع (بالإضافة إلى kernel و "الملكية" المساعدة) هي:
- musl-libc - كمكتبة قياسية C ؛
- golang - ل
init
وأدواته الأخرى ؛ - gRPC - لواجهة برمجة التطبيقات ؛
- containerd - لبدء خدمات النظام في الحاويات (المستخدمة مع البرنامج المساعد CRI لـ Kubernetes) ؛
- kubeadm - لنشر الكتل.
العمل مع تالوس
يتم توفير أمثلة نشر Talos لنشر AWS و KVM و Xen في
وثائق المشروع . لتوضيح كيف يبدو هذا بسرعة ، إليك خوارزمية التثبيت للأجهزة الظاهرية لنظام Linux KVM:
1. تثبيت العقدة الرئيسية على المضيف:
docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdb -f -p bare-metal \ -u http://${IP}:8080/master.yaml
2. إنشاء VM:
virt-install -n master --description "Kubernetes master node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdb \ --network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1 \ --graphics none --boot hd --rng /dev/random
3. إجراءات مماثلة لإنشاء عقدة عمل:
docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdc -f -p bare-metal \ -u http://${IP}:8080/worker.yaml virt-install -n master --description "Kubernetes worker node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdc \ --network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2 \ --graphics none --boot hd --rng /dev/random
إن تكوين التفاعل بين osd و osctl يأتي أساسًا لإنشاء المفاتيح للمصادقة عليها (mTLS المذكورة سابقًا) وهو موصوف
هنا .
مزيد من العمل معهم يأتي لأوامر مثل
osctl reboot
osctl stats
،
osctl stats
osctl logs
. عرض
k8s.io
لإخراج الحاويات في مساحة اسم
k8s.io
:
$ osctl ps -k NAMESPACE ID IMAGE PID STATUS k8s.io 0ca1… sha256:da86… 2341 RUNNING k8s.io 356f… sha256:da86… 2342 RUNNING … k8s.io e42e… sha256:4ff8… 2508 RUNNING k8s.io kubelet k8s.gcr.io/… 2068 RUNNING
تتوفر عملية تكوين مجموعة Kubernetes مع Talos
هنا (العقد الأم)
وهنا (العمال).
الوضع والتوقعات
المشروع في مرحلة إصدار ألفا (الإصدار الأخير هو
v0.1.0-alpha.18 ) ، وبالطبع ، يبدو في هذه المرحلة بمثابة تجربة مثيرة للاهتمام أكثر من أي شيء قريب حقًا من الإنتاج.
ومع ذلك ، فإن زيادة الاهتمام بتالوس بعد إعلانها الأخير (بالفعل أكثر من 600 نجم على جيثب) ودعوة المؤلف الوحيد للإبداع المشترك يمكن أن تكون بمثابة حافز ممتاز لتطويرها.
نشاط مشروع تالوس في الأيام الأخيرةعلى الأقل ، يحتوي التوزيع على الأفكار السحابية الأصلية ذات الصلة بالعالم ، والتي يعد تنفيذها الجيد مسألة وقت.
PS
اقرأ أيضًا في مدونتنا: