بدء استخدام 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-tut2.
medium.com/@markgituma/kubernetes-local-to-product-with-django-2-docker-and-minikube-ba843d858817apapacy@gmail.com
10 فبراير 2019