نشر Kubernetes على سطح المكتب في دقائق مع MicroK8s

بدء استخدام Kubernetes ليس بالأمر السهل دائمًا. ليس كل شخص لديه البنية التحتية اللازمة لنشر مجموعة Kubernetes كاملة. تقدم Kubernetes أداة Minikube للتشغيل المحلي. Minikube هي أداة بسيطة ومريحة إلى حد ما ، وهناك العديد من الدورات التدريبية حول العمل مع Minikube. ولكن ، مع ذلك ، لا يمكن للمرء أن يقول عن Minikube أنه باستخدام هذه الأداة يمكنك نشر بيئة Kubernetes في بضع دقائق.

أريد أن أتحدث اليوم عن حزمة MicroK8s ، والتي ، من دون مبالغة ، تسمح لك بنشر Kubernetes محليًا في غضون بضع دقائق ، وبدء التطوير. لا حتى مثبتة مسبقا دوكر و Kubernetes مطلوبة ، كما شاملة للجميع. في هذا الدرس ، سوف تفكر في نشر تطبيق Django في بيئة Kubernetes المحلية.

كمصدر ، تابعت سلسلة من مقالات مارك جيتوما التي وصفت أعمالًا مماثلة ، ولكن فقط مع Minikube ، وليس MicroK8s.

ومع ذلك ، هناك شرط واحد يجب الوفاء به قبل بدء العمل. يجب أن يكون لديك Snap مثبت ، وهذا بدوره يعني أنه يجب أن يكون لديك Linux مثبتًا.

يوصف تثبيت MicroK8s في الدليل على الموقع . ومع ذلك ، هذا سطر واحد فقط:

sudo snap install microk8s --classic 

علاوة على ذلك ، قد يكون من الضروري بدء البيئة:

 sudo microk8s.start 

بعد ذلك ، تحتاج إلى تفعيل التمديد. يمكن الحصول على قائمة كاملة microk8s.enable --help باستخدام الأمر microk8s.enable --help : dashboard، dns، gpu، ingress، istio، metrics-server، record، storage. يمكنك تفعيل كل شيء على الفور ما عدا gpu و istio ، لأنه يتطلب الأول منها برنامج تشغيل مثبت مسبقًا ، ويقوم الثاني بترقية البيئة بشكل أساسي و (شخصيًا ، على سطح المكتب الضعيف) يقوم بتحميل النظام بشكل كبير.

 microk8s.enable dashboard dns ingress metrics-server registry storage 

كما يمكنك الآن الاستنتاج من قائمة الإضافات ، سيكون لديك الوصول إلى العديد من الخدمات ، بما في ذلك لوحة القيادة والمقاييس.

قم بإنشاء Dockerfile لإنشاء الصورة:

 FROM python:3-slim LABEL maintainer="mark.gituma@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"] 

والملف مع التبعيات اللازمة.t.tt:

 celery==4.1.0 Django==2.0 kombu==4.1.0 

دعنا نجمع الصورة لهذا ، لا تحتاج إلى عامل تثبيت مثبت مسبقًا ، لأن لأنه يأتي مع MicroK8s:

 microk8s.docker build django -t apapacy/tut-django:1.0.0 

إذا قمت بجمع الصورة مع عامل التثبيت المثبت سابقًا ، فقد لا يكفي أن تقوم ببساطة بجمع الصورة وإرسالها إلى السجل المحلي ، الذي يأتي أيضًا مع MicroK8s ، ويعمل على المنفذ 32000:

 microk8s.docker tag apapacy/tut-django:1.0.0 localhost:32000/apapacy/tut-django:1.0.0 microk8s.docker push localhost:32000/apapacy/tut-django:1.0.0 

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

لبنة البناء الأساسية في Kubernetes هي Pod (Pod) ، حيث تعمل الحاوية (في معظم الأحيان واحدة ولكن قد تكون هناك عدة). يمكن إنشاء القرون بوسائل مختلفة. لكن اليوم نحن مهتمون بالنشر (النشر). يصف النشر القالب الذي يتم به إنشاء السنفات. يتم تعريف النشر باستخدام ملفات التكوين yml. في تكوين النشر ، يمكنك تحديد عدد النسخ المتماثلة لـ Pod والصورة التي سيتم من خلالها جمع هذا Pod والنسخ المتماثلة الخاصة به ، وكذلك المنفذ (المنفذ 8000 الذي يعمل Django من Dockerfile عليه - لا سحر):

 apiVersion: apps/v1beta2 kind: Deployment metadata: name: django labels: app: django spec: replicas: 2 selector: matchLabels: pod: django-container template: metadata: labels: pod: django-container spec: containers: - name: django-web image: localhost:32000/apapacy/tut-django:1.0.0 ports: - containerPort: 8000 

يتم إيداع الوديعة يوم الأربعاء بواسطة الفريق:

 microk8s.kubectl apply -f config/deployment.yml 

بالتوازي ، يمكنك تشغيل أمر يراقب الإجراءات التي تحدث أثناء النشر:

 watch microk8s.kubectl get all 

الآن لديك العديد من تطبيقات Pods مع Django التي لا يمكنك الوصول إليها. لكي يتواصل القرون مع بعضهم البعض ومع العالم الخارجي ، هناك تجريد آخر - هذه خدمة. يتم تعريف الخدمة ، مثل النشر ، بواسطة ملف التكوين:

 kind: Service apiVersion: v1 metadata: name: django-service spec: selector: pod: django-container ports: - protocol: TCP port: 8000 # targetPort: 8001 type: ClusterIP # type: NodePort 

يحدد pod: django-container selector أي خدمة سيتم نشرها بواسطة الخدمة (اسم محدد pod غير محدد مسبقًا - إنه مجرد تسمية يجب أن تتطابق). يتم تحميل الخدمة على نحو مماثل للنشر:

 microk8s.kubectl apply -f config/service.yml 


بعد التنزيل ، يمكن الوصول إلى الخدمة على عنوان الشبكة الداخلية. إذا قمت بتشغيل الأمر microk8s.kubectl get all ، يمكنك رؤية هذا العنوان:

 service/django-service ClusterIP 10.152.183.156 none 8000/TCP 3h33m 


من خلال تنفيذ الأمر curl (أو عن طريق فتح متصفح) ، نحصل على صفحة الترحيب في Django:

 curl 10.152.183.156:8000 

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

من أجل الحصول على عنوان دائم للخدمة ، والذي من خلاله يمكن الاتصال من الشبكة الخارجية ، تقدم MicroK8s خيارين: 1) إدخال و 2) istio. أسهل طريقة للقيام بذلك هي مع دخول. إذا لم يتم تنشيطه بعد ، فأنت بحاجة إلى تنشيط مكون الدخول:

 microk8s.enable ingress 

بعد ذلك ، يمكنك التحقق من تثبيت هذا المكون والعمل من خلال تشغيل الأمر microk8s.kubectl get all . يجب أن تظهر بعض الإدخالات في قائمة التطبيقات والخدمات مع الاسم default-http-backend . على وجه الخصوص ، يجب أن تظهر خدمة تعمل على المنفذ 80:

 service/default-http-backend ClusterIP 10.152.183.42 none 80/TCP 179m 

الاسم الافتراضي http-backend هو الاسم المحدد مسبقًا في MicroK8s. بهذا الاسم يجب عليك الرجوع إلى هذه الخدمة في تكوينات الدخول.

تشبه تكوينات الدخول تكوينات خادم الويب أو الخادم الوكيل ، وفي مكان ما داخل النظام. لذلك ، توجد المضيفات والمسارات والمنافذ فيها - جميع السمات المألوفة:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tut-django annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-backend servicePort: 80 rules: - host: localhost http: paths: - path: /django backend: serviceName: django-service servicePort: 8000 

يتم تحميل التكوين دخول مع الأمر:

 microk8s.kubectl apply -f config/ingress.yml 

بعد ذلك ، ستتوفر صفحة الترحيب في Django على localhost / django

هذا كل شيء لهذا اليوم.

روابط مفيدة:

1. github.com/apapacy/microk8s-tut
2. medium.com/@markgituma/kubernetes-local-to-product-with-django-2-docker-and-minikube-ba843d858817

apapacy@gmail.com
10 فبراير 2019

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


All Articles