رانشر: Kubernetes في 5 دقائق على المعدن

عند المعبر ، لم يتم تغيير الأوركسترا.

بعد أن سئمت تمامًا من Docker Swarm نظرًا لبساطتها الزائفة والتشطيب المستمر ، وليس العمل المريح للغاية مع أنظمة الملفات الموزعة ، وواجهة الويب الرطبة قليلاً والوظائف الضيقة ، بالإضافة إلى عدم وجود دعم "خارج الصندوق" لتكامل GitLab ، فقد تقرر نشر مجموعة Kubernetes الخاصة بك على أجهزتك الخاصة ، أي عن طريق نشر Rancher Management Server 2.0.

تجربة التثبيت ، نظام التسامح مع الخطأ ، العمل مع haProxy ولوحتي تحكم تحت القط:

بيانات الإدخال:

الخادم المضيف HP Proliant DL320e Gen8 - قطعتان.
خادم VM Ubuntu 16.04 ، 2 غيغابايت من ذاكرة الوصول العشوائي ، 2vCPU ، 20Gb HDD - 1 جهاز كمبيوتر. على كل مضيف (VM-haProxy).
خادم VM Ubuntu 16.04 ، وذاكرة وصول عشوائي 4 غيغابايت ، و 4 vCPU ، و HDD 40Gb ، و 20 Gb SSD - 3 أجهزة كمبيوتر. على كل مضيف (VM - * - الكتلة).
خادم VM Ubuntu 16.04 ، 4 غيغابايت من ذاكرة الوصول العشوائي ، 4vCPU ، 100Gb HDD - 1 جهاز كمبيوتر. على أي شخص المضيف (VM-NFS).

مخطط الشبكة:

الشكل 1


الشروع في العمل:

يحتوي VM-haProxy على قواعد haProxy و fail2ban و iptables. يعمل كبوابة لجميع الأجهزة التي تقف وراءه. لدينا بوابتان وستتحول جميع الأجهزة في حالة فقدان اتصال البوابة على مضيفها إلى أخرى.

المهمة الرئيسية لهذه العقد (VM-haProxy) هي توزيع الوصول إلى الواجهة الخلفية ، والتوازن ، والمنافذ الأمامية ، وجمع الإحصائيات.

وقع اختياري على haProxy ، كأداة أكثر تركيزًا فيما يتعلق بالتوازن والتحقق من الصحة. لكل هذا ، أحب بناء جملة توجيهات التكوين والعمل مع قوائم IP البيضاء والسوداء ، وكذلك العمل مع اتصال SSL متعدد المجالات.

تكوين HaProxy:

haproxy.conf مع التعليقات
########################################################## #Global # ########################################################## global log 127.0.0.1 local0 notice maxconn 2000 user haproxy group haproxy tune.ssl.default-dh-param 2048 defaults log global mode http option httplog option dontlognull retries 3 option redispatch timeout connect 5000 timeout client 10000 timeout server 10000 option forwardfor option http-server-close ########################################################## #TCP # ########################################################## #    API  Kubernetes listen kube-api-tls bind *:6443 mode tcp option tcplog server VM-Master-Cluster Master:6443 ########################################################## #HTTP/HTTPS - Frontend and backend # ########################################################## #      "  ", frontend  backend. frontend http-in bind *:80 acl network_allowed src -f /path/allowed-ip #     IP.     . http-request deny if !network_allowed #       IP  . reqadd X-Forwarded-Proto:\ http mode http option httpclose acl is_haproxy hdr_end(host) -i haproxy.domain.ru acl is_rancher hdr_end(host) -i rancher.domain.ru acl is_kubernetes hdr_end(host) -i kubernetes.domain.ru use_backend kubernetes if is_kubernetes use_backend rancher if is_rancher use_backend haproxy if is_haproxy frontend https-in bind *:443 ssl crt-list /path/crt-list #    .        . acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed reqadd X-Forwarded-Proto:\ https acl is_rancher hdr_end(host) -i rancher.etraction.ru acl is_kubernetes hdr_end(host) -i kubernetes.etraction.ru use_backend kubernetes if is_kubernetes { ssl_fc_sni kubernetes.domain.ru } use_backend rancher if is_rancher { ssl_fc_sni rancher.domain.ru } # Backend  haProxy.    . backend haproxy stats enable stats uri /haproxy?stats stats realm Strictly\ Private stats auth login:passwd cookie SERVERID insert nocache indirect #  , , backend   dashboard rancher  kubernetes. backend rancher acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http redirect scheme https if !{ ssl_fc } server master master:443 check ssl verify none backend kubernetes acl network_allowed src -f /path/allowed-ip http-request deny if !network_allowed mode http balance leastconn redirect scheme https if !{ ssl_fc } server master master:9090 check ssl verify none 


هام: يجب أن تعرف جميع الأجهزة بعضها البعض حسب اسم المضيف.

add-host-entry.pp بيان العرائس لإضافة أسماء المضيفين في / etc / hosts
 class host_entries { host { 'proxy01': ip => '10.10.10.11', } host { 'proxy02': ip => '10.10.10.12', } host { 'master': ip => '10.10.10.100', } host { 'node01': ip => '10.10.10.101', } host { 'node02': ip => '10.10.10.102', } host { 'node03': ip => '10.10.10.103', } host { 'node04': ip => '10.10.10.104', } host { 'node05': ip => '10.10.10.105', } host { 'nfs': ip => '10.10.10.200', } } 


VM-Master-Cluster هي آلة التحكم الرئيسية. وهو يختلف عن العقد الأخرى على متن الطائرة من قبل Puppet Master و GlusterFS Server و Rancher Server (الحاوية) وما إلى ذلك (الحاوية) ومدير التحكم (الحاوية). في حالة انقطاع هذا المضيف ، تستمر خدمات الإنتاج في العمل.
VM-Node-Cluster - العقد ، العمال. آلات العمل التي سيتم دمج مواردها في بيئة واحدة تتحمل الأخطاء. لا شيء مثير للاهتمام.

VM-NFS - خادم NFS (nfs-kernel-server). المهمة الرئيسية هي توفير مساحة عازلة. يخزن ملفات التكوين وجميع. لا تخزن أي شيء مهم. يمكن تصحيح سقوطه ببطء ، أثناء شرب القهوة.

هام: يجب أن تحتوي جميع آلات البيئة على: docker.io، nfs-common، gluster-server.

must-have -pack.pp الدمى الظاهرة لتثبيت البرنامج الصحيح
 class musthave { package { 'docker.io': ensure => 'installed', } package { 'nfs-common': ensure => 'installed', } package { 'gluster-server': ensure => 'installed', } } 


لن أصف تثبيت حجم nfs وتكوين GlusterFS ، حيث يتم وصفه بسخاء بأعداد كبيرة.

إذا لاحظت وجود أقراص SSD في وصف المواصفات ، فهي على استعداد لتشغيل نظام الملفات الموزعة Gluster. إنشاء أقسام وتخزينها على أقراص عالية السرعة.

ملاحظة في الواقع ، لا يتطلب تشغيل مزرعة ماشية بيئة شبيهة بالمرآة. كل ما سبق هو رؤيتي للكتلة ووصف للممارسات التي أتبعها.

لتشغيل Rancher ، يكفي جهاز واحد ، مع 4CPU ، RAM 4GB ، HDD 10Gb.

5 دقائق لرانشر.

في VM-Master-Cluster ، نقوم بما يلي:

 sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher 

التحقق من التوفر:

 curl -k https://localhost 

إذا رأيت واجهة برمجة التطبيقات - أهنئك تمامًا في منتصف الطريق.

بعد النظر في مخطط الشبكة مرة أخرى ، نتذكر أننا سنعمل من الخارج ، من خلال haProxy ، في التكوين الذي قمنا بنشر الرابط rancher.domain.ru ، تفضل ، قم بتعيين كلمة المرور الخاصة بك.

الصفحة التالية هي صفحة إنشاء مجموعة Kubernetes.

الشكل 2


من قائمة "خيارات الكتلة" ، حدد Flannel. لم أعمل مع موفري الشبكة الآخرين. لا يمكنني تقديم النصح.

يجدر الانتباه إلى حقيقة أننا قمنا بتثبيت مربعات الاختيار وما إلى ذلك وطائرة التحكم ، ولم يتم تثبيت مربع اختيار العامل ، في حالة عدم التخطيط لاستخدام المدير في وضع العامل.
نحن نعمل داخل الشبكة المحلية ، بنفس العنوان على NIC ، لذلك في حقلي العنوان العام والداخلي أشار إلى نفس عنوان IP.

انسخ الكود الناتج أعلاه ، وقم بتشغيله في وحدة التحكم.

بعد مرور بعض الوقت ، سترى في واجهة الويب رسالة حول إضافة عقدة. وبعد مرور بعض الوقت ، ستبدأ مجموعة Kubernetes.

الشكل 3


لإضافة عامل ، انتقل لتحرير الكتلة في واجهة الويب الخاصة بـ Rancher ، سترى نفس القائمة التي تنشئ أمر الاتصال.

قم بتعيين مربع الاختيار على موضع العامل فقط ، وحدد IP للعامل المستقبلي ، وانسخ الأمر ونفذه في وحدة التحكم للعقدة التي تحتاجها.

بعد فترة ، ستزداد قوة الكتلة ، تمامًا مثل عدد العقد.

تثبيت لوحة تحكم Kubernetes:

اذهب إلى قائمة المشاريع / مساحات الأسماء.

بعد التثبيت ، سترى أن مساحات الأسماء المتعلقة بـ Kubernetes سيتم احتواؤها خارج المشاريع. للعمل بشكل كامل مع مساحات الأسماء هذه ، يجب وضعها في المشروع.

أضف مشروعًا ، وقم بتسميته كما تريد. انقل مساحات الأسماء (نظام الماشية ، و ingress-nginx ، و kube-public ، و kube-system) إلى المشروع الذي أنشأته باستخدام قائمة سياق "نقل". يجب أن يكون مثل هذا:

الشكل 4


انقر مباشرة على اسم المشروع ، سيتم نقلك إلى لوحة تحكم عبء العمل. هنا سنناقش كيفية إنشاء خدمة بسيطة.

الشكل 5


انقر فوق "استيراد YAML" في الزاوية اليمنى العليا. انسخ محتويات هذا الملف والصقها في مربع النص في النافذة التي تفتح ، حدد مساحة الاسم "kube-system" ، وانقر على "استيراد".

بعد مرور بعض الوقت ، ستبدأ لوحة التحكم pod kubernetes-dashboard.

انتقل إلى تحرير الجراب ، وافتح قائمة نشر المنفذ ، وقم بتعيين القيم التالية:

الشكل 6


تحقق من الوصول على العقدة التي تعمل عليها الجراب.

 curl -k https://master:9090 

انظر الجواب؟ اكتمال النشر ، ويبقى للوصول إلى الجزء الإداري.

على الصفحة الرئيسية لإدارة العنقود في Rancher ، هناك أدوات مريحة للغاية ، مثل kubectl - وحدة تحكم إدارة الكتلة وملف Kubeconfig - ملف التكوين الذي يحتوي على عنوان API ، ca.crt ، إلخ.

نذهب إلى kubectl وننفذ:

 kubectl create serviceaccount cluster-admin-dashboard-sa kubectl create clusterrolebinding cluster-admin-dashboard-sa --clusterrole=cluster-admin --serviceaccount=default:cluster-admin-dashboard-sa 

لقد أنشأنا حساب خدمة بأعلى الامتيازات ، والآن نحتاج إلى رمز مميز للوصول إلى لوحة التحكم.

ابحث عن سر الحساب الذي تم إنشاؤه:

 kubectl get secret | grep cluster-admin-dashboard-sa 

سنرى اسم الحساب مع تجزئة معينة في النهاية ، انسخه وننفذه:

 kubectl describe secret cluster-admin-dashboard-sa-$( ) 

مرة أخرى ، نتذكر أن كل شيء تم نشره بنجاح من خلال haProxy.

نتبع الرابط kubernetes.domain.ru . أدخل الرمز المستلم.

نفرح:

الشكل 7


ملاحظة
النتيجة الإجمالية التي أود أن أشكر رانشر على إنشائها واجهة بديهية ، ومثيل يمكن نشره بسهولة ، ووثائق بسيطة ، والقدرة على التحرك السريع وقابلية التوسع على مستوى المجموعة. ربما تحدثت بشكل حاد للغاية في بداية المنشور الذي سئم فيه Swarm ، بدلاً من اتجاهات التنمية الواضحة ، نوعًا ما جعلني أحدق في الجانب ولا أنتهي من الروتين الممل. خلقت شركة Docker حقبة من التطور. والحكم على هذا المشروع ليس بالتأكيد بالنسبة لي.

Source: https://habr.com/ru/post/ar418691/


All Articles