
في هذه المقالة سأخبرك بكيفية تشغيل kubernetes الرئيسي داخل حاوية LXC.
تعمل هذه الطريقة بشكل جيد مع Proxmox ويمكن اعتبارها بديلاً للنشر الكلاسيكي لـ kubernetes مع العديد من المعالجات.
لماذا بروكسيموكس؟
لأن بروكسموكس خارج منطقة الجزاء يوفر العديد من الميزات المفيدة.
يتضمن Proxmox ميزات توفر عالية ، والترحيل ، والنسخ الاحتياطي التلقائي ، والتحكم في الوصول وكل هذا يمكن الوصول إليه من خلال واجهة رسومية بسيطة.
يمكنك أيضًا نشر أبسط تكوين kubernetes باستخدام معالج واحد ، وسيوفر بروكسيموكس توفرًا عاليًا.
هذه الطريقة رائعة لنشر الاختبار أو المجموعات الصغيرة.
بالنسبة لعمليات النشر الأكبر ، يوصى بوضع etcd في حاويات منفصلة تستخدم الأقراص المحلية السريعة وتدمجها في مجموعة.
ومع ذلك ، لا يزال بإمكان kubernetes-master نفسه أن يظل حاوية حاويات عادية ، ولا يحتاج إلى تخزين سريع.
بالإضافة إلى ذلك ، إذا كنت تقرأ هذه المقالة ، أفترض أنه في معظم الحالات لديك بالفعل نوع من البنية التحتية على Proxmox ، وربما تريد أن يكون لديك واجهة واحدة لإدارة خدماتك.
لماذا LXC؟
ستبدأ Kubernetes بدون مشاكل داخل جهاز افتراضي افتراضي. لكن حاويات LXC توفر المرونة التي لا تتوفر مع الأجهزة الافتراضية التقليدية.
في الواقع ، لا توفر حاويات LXC عزلًا كاملاً للحاويات من المضيف ؛ على العكس ، تبدأ جميع العمليات داخل الحاويات كعمليات مضيف عادية ، فقط في مساحة اسم منفصلة.
تمنحك هذه الطريقة أداءً جيدًا ولكنها تفرض بعض القيود في حالتنا.
سأناقش هذه القيود وكيفية التعامل معها في هذه المقالة.
التكوين
نظرًا لأنه ، بشكل افتراضي ، لا يُسمح للحاويات بتحميل وحدات kernel من تلقاء نفسها ، يجب عليك تكوينها للتحميل مباشرة على برامج مراقبة الأجهزة الافتراضية.
سنستخدم برنامج تشغيل overlay
لواصفة الميناء ، لذلك هذا كل ما نحتاجه:
echo overlay >> /etc/modules
نحتاج الآن إلى إضافة المزيد من الامتيازات للحاوية الخاصة بنا للسماح لها بتشغيل حاويات أخرى بالداخل ، أضف هذه السطور إلى تكوين الحاوية:
lxc.apparmor.profile: unconfined lxc.cap.drop: lxc.cgroup.devices.allow: a lxc.mount.auto: proc:rw sys:rw
بدءًا من الإصدار v11.0 ، يتطلب kubelet وضعًا مشتركًا لجميع الحوامل من المضيف.
سيسمح لك هذا الاختراق القذر بتحقيق ذلك ، داخل حاوية LXC ، قم بتشغيل:
echo '#!/bin/sh -e mount --make-rshared /' > /etc/rc.local
سيؤدي هذا الإجراء إلى إضافة الأمر mount --make-rshared /
إلى mount --make-rshared /
وتشغيله في كل مرة يتم فيها تحميل الحاوية.
أيضًا ، إذا كنت تخطط لاستخدام HA-manager في proxmox ، فكن على دراية بأنه يوجد في الوقت الحالي خطأ غير سار # 1842 ، والذي يقتل عمليات الحاويات بالقوة أثناء الترحيل ، والتي يمكن أن تفرز عمليات الزومبي أو حتى تمنع التخزين.
هذا ليس جيدًا ، لحسن الحظ هناك حل بسيط:
sed -i 's/forceStop => 1/forceStop => 0/' /usr/share/perl5/PVE/HA/Resources/PVECT.pm
بالإضافة إلى ذلك ، يمكنك إضافة الخيارات التالية إلى عامل الإرساء الخاص بك:
--storage-driver overlay2 --iptables=false --ip-masq=false
انسخ docker.service
من /lib
إلى /etc
docker.service
خياراته:
cp /{lib,etc}/systemd/system/docker.service
الآن أضف هذه الخيارات إلى قسم ExecStart
.
هذا كل شيء ، بعد هذه الخطوات يجب أن يعمل التثبيت kubeadm القياسي دون مشاكل.