البرنامج التعليمي: نشر Django التطبيق على AKS مع قاعدة بيانات Azure لـ PostgreSQL - Flexible Server
يطبق على: قاعدة بيانات Azure لـ PostgreSQL - الخادم المرن
في هذا التشغيل السريع، يمكنك نشر تطبيق Django على نظام مجموعة Azure Kubernetes Service (AKS) مع قاعدة بيانات Azure لخادم PostgreSQL المرن باستخدام Azure CLI.
خدمة Azur Kubernetes AKSهي خدمة مُدارة توفر لك سرعة نشر نظام المجموعات وإدارتها. قاعدة بيانات Azure لخادم PostgreSQL المرن هي خدمة قاعدة بيانات مدارة بالكامل مصممة لتوفير مزيد من التحكم الدقيق والمرونة على وظائف إدارة قاعدة البيانات وإعدادات التكوين.
إشعار
يمنحك هذا التشغيل السريع فهمًا أساسيًا لمفاهيم Kubernetes وDjango وPostgreSQL.
المتطلبات الأساسية
إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.
- قم بتشغيل Azure Cloud Shell في نافذة مستعرض جديدة. يمكنك أيضاً تثبيت Azure CLI على جهازك الشخصي. في حال كنت تستخدم تثبيتًا محليًا، فقم بتسجيل الدخول باستخدام Azure CLI باستخدام أمر تسجيل الدخول من az . لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك.
- يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az. تتطلب هذه المقالة أحدث إصدار من Azure CLI. إذا كنت تستخدم Azure Cloud Shell، فإن أحدث إصدار مثبت بالفعل.
إنشاء مجموعة موارد
مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها. لنقم بإنشاء مجموعة موارد، مشروع django-project باستخدام الأمر az-group-create في موقع eastus.
az group create --name django-project --location eastus
إشعار
موقع مجموعة الموارد هو المكان الذي يتم تخزين بيانات التعريف لمجموعة الموارد فيه. كما أنه المكان الذي تعمل فيه الموارد في Azure إذا لم تحدد منطقة أخرى أثناء إنشاء المورد.
يظهر إخراج المثال التالي مجموعة الموارد التي تم إنشاؤها بنجاح:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
إنشاء نظام مجموعة AKS
استخدم الأمر az aks create لإنشاء مجموعة AKS. في المثال التالي، سيتم إنشاء نظام مجموعة تسمى djangoappcluster مع عقدة واحدة. قد يستغرق إكمال التغييرات في وحدات مستودع البيانات عدة دقائق.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
إشعار
عند إنشاء كتلة AKS يتم إنشاء مجموعة موارد ثانية تلقائيًا لتخزين موارد AKS. لمزيد من المعلومات، يمكنك الاطلاع على إجابة سؤال لماذا يتم إنشاء مجموعتي موارد باستخدام AKS ؟
الاتصال بنظام المجموعة
لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميل Kubernetes، kubectl. kubectl
والذي سيكون مثبتًا بالفعل في حال كنت تستخدم Azure Cloud Shell.
إشعار
إذا كنت تقوم بتشغيل Azure CLI محليا، فقم بتشغيل الأمر az aks install-cli لتثبيت kubectl
.
لتكوين kubectl
للاتصال بنظام مجموعتك في Kubernetes، يمكن استخدام الأمر az aks get-credentials. هذا الأمر يقوم بتحميل بيانات الاعتماد وضبط Kubernetes CLI لاستخدامها.
az aks get-credentials --resource-group django-project --name djangoappcluster
للتحقق من الاتصال بالمجموعة الخاصة بك، استخدم الأمر kubectl get لإرجاع قائمة العُقد العنقودية.
kubectl get nodes
يوضح إخراج المثال التالي العقدة المفردة التي تم إنشاؤها في الخطوات السابقة. تأكد من أن حالة العقدة جاهزة:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
إنشاء مثيل خادم مرن لقاعدة بيانات Azure ل PostgreSQL
إنشاء مثيل خادم مرن ل Azure Database for PostgreSQL باستخدام الأمر az postgreSQL flexible-server create . الأمر التالي بإنشاء ملقم باستخدام افتراضيات الخدمة والقيم من السياق المحلي لـ Azure CLI الخاص بك:
az postgres flexible-server create --public-access all
يحتوي الملقم الذي تم إنشاؤه على السمات التالية:
- يتم إنشاء قاعدة بيانات فارغة جديدة
postgres
عند توفير الخادم لأول مرة. في هذا التشغيل السريع، نستخدم قاعدة البيانات هذه. - اسم الخادم الذي تم إنشاؤه تلقائيا واسم مستخدم المسؤول وكلمة مرور المسؤول واسم مجموعة الموارد (إذا لم يكن محددا بالفعل في السياق المحلي) وفي نفس موقع مجموعة الموارد الخاصة بك.
- يسمح لك استخدام وسيطة الوصول العام بإنشاء خادم مع وصول عام إلى أي عميل باسم مستخدم وكلمة مرور صحيحين.
- نظرا لأن الأمر يستخدم السياق المحلي فإنه ينشئ الخادم في مجموعة
django-project
الموارد وفي المنطقةeastus
.
أنشأ صورة Django docker الخاصة بك
أنشأ تطبيقDjango application جديد أو استخدم مشروع Django الحالي. تأكد من أن الكود الخاص بك موجود في هيكل المجلد.
└───my-djangoapp
└───views.py
└───models.py
└───forms.py
├───templates
. . . . . . .
├───static
. . . . . . .
└───my-django-project
└───settings.py
└───urls.py
└───wsgi.py
. . . . . . .
└─── Dockerfile
└─── requirements.txt
└─── manage.py
قم بالتحديث ALLOWED_HOSTS
للتأكدsettings.py
من أن تطبيق Django يستخدم عنوان IP الخارجي الذي تم تعيينه لتطبيق kubernetes.
ALLOWED_HOSTS = ['*']
حدّث قسم DATABASES={ }
في الملف settings.py
. يقرأ مقتطف الرمز أدناه مضيف قاعدة البيانات واسم المستخدم وكلمة المرور من ملف بيان Kubernetes.
DATABASES={
'default':{
'ENGINE':'django.db.backends.postgresql_psycopg2',
'NAME':os.getenv('DATABASE_NAME'),
'USER':os.getenv('DATABASE_USER'),
'PASSWORD':os.getenv('DATABASE_PASSWORD'),
'HOST':os.getenv('DATABASE_HOST'),
'PORT':'5432',
'OPTIONS': {'sslmode': 'require'}
}
}
إنشاء ملف requirements.txt
إنشاء ملفrequirements.txt
لسرد التبعيات لتطبيق Django. فيما يلي مثال على requirements.txt
الملف. يمكنك استخدام requirements.txt تجميد > pip لإنشاء ملف requirements.txt لتطبيقك الحالي.
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
إنشاء Dockerfile
أنشئ ملفًا جديدًا باسمDockerfile
وانسخ مقتطف الشفرة أدناه. هذا Dockerfile في إعداد Python 3.8 وتثبيت كافة المتطلبات المذكورة في ملف requirements.txt.
# Use the official Python image from the Docker Hub
FROM python:3.8.2
# Make a new directory to put our code in.
RUN mkdir /code
# Change the working directory.
WORKDIR /code
# Copy to code folder
COPY . /code/
# Install the requirements.
RUN pip install -r requirements.txt
# Run the application:
CMD python manage.py runserver 0.0.0.0:8000
إنشاء صورتك
تأكد من أنك في الدليلmy-django-app
في محطةcd
باستخدام الأمر. تشغيل الأمر التالي لإنشاء صورة لوحة الإعلانات الخاصة بك:
docker build --tag myblog:latest .
انشر صورتك فيDocker hub أوAzure Container registry.
هام
في حال كنت تستخدم سجل حاوية Azure (ACR)، قم بتشغيل الأمر az aks update
لإرفاق حساب ACR مع مجموعة AKS.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
إنشاء ملف بيان Kubernetes
ملف بيان Kubernetes يعرف الحالة المطلوبة للكتلة، مثل ما صور الحاوية لتشغيل. لنقم بإنشاء ملف بيان باسمdjangoapp.yaml
ونسخه في تعريف YAML التالي.
هام
تحديث env
القسم أدناه مع SERVERNAME
، YOUR-DATABASE-USERNAME
، YOUR-DATABASE-PASSWORD
من مثيل خادم Azure Database for PostgreSQL المرن.
apiVersion: apps/v1
kind: Deployment
metadata:
name: django-app
spec:
replicas: 1
selector:
matchLabels:
app: django-app
template:
metadata:
labels:
app: django-app
spec:
containers:
- name: django-app
image: [DOCKER-HUB-USER-OR-ACR-ACCOUNT]/[YOUR-IMAGE-NAME]:[TAG]
ports:
- containerPort: 8000
env:
- name: DATABASE_HOST
value: "SERVERNAME.postgres.database.azure.com"
- name: DATABASE_USER
value: "YOUR-DATABASE-USERNAME"
- name: DATABASE_PASSWORD
value: "YOUR-DATABASE-PASSWORD"
- name: DATABASE_NAME
value: "postgres"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- django-app
topologyKey: "kubernetes.io/hostname"
---
apiVersion: v1
kind: Service
metadata:
name: python-svc
spec:
type: LoadBalancer
ports:
- protocol: TCP
port: 80
targetPort: 8000
selector:
app: django-app
انشر Django في نظام مجموعة AKS
انشر التطبيق باستخدام الأمرkubectl apply وحدد اسم ملف بياناتك من YAML:
kubectl apply -f djangoapp.yaml
يظهر الإخراج المثال التالي عمليات النشر، والخدمات التي تم إنشاؤها بنجاح:
deployment "django-app" created
service "python-svc" created
يسمح لك التوزيع django-app
بوصف تفاصيل التوزيع الخاص بك مثل الصور التي يجب استخدامها للتطبيق، وعدد القرون وتكوين الجراب. يتم إنشاء خدمةpython-svc
لعرض التطبيق من خلال عنوان IP خارجي.
اختبر التطبيق
عند تشغيل التطبيق، تعرض خدمة Kubernetes واجهة التطبيق الأمامية للإنترنت. قد تستغرق هذه العملية بضع دقائق حتى تكتمل.
لمراقبة التقدم، استخدم أمر kubectl get service مع --watch
الوسيطة.
kubectl get service python-svc --watch
في البداية، يتم عرض EXTERNAL-IPلخدمة تطبيقdjango-app على أنه معلق.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
بمجرد تغيير عنوان EXTERNAL-IP من معلق إلى عنوان IP عام فعلي، استخدم CTRL-C
لإيقاف عملية kubectl
المراقبة. يوضح المثال التالي إخراج لعنوان IP عام صالحاً تم تعيينه للخدمة:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
الآن افتح مستعرض ويب إلى عنوان IP الخارجي للخدمة الخاصة بك (http://<service-external-ip-address>
) واعرض تطبيق Django.
إشعار
- حاليا لا يستخدم موقع Django HTTPS. لمزيد من المعلومات حول HTTPS وكيفية تكوين توجيه التطبيق ل AKS، راجع دخول NGINX المدار مع الوظيفة الإضافية لتوجيه التطبيق.
تشغيل عمليات ترحيل قاعدة البيانات
لأي تطبيق django، ستحتاج إلى تشغيل ترحيل قاعدة البيانات أو جمع الملفات الثابتة. يمكنك تشغيل أوامر django shell باستخدام$ kubectl exec <pod-name> -- [COMMAND]
. قبل تشغيل الأمر، تحتاج إلى العثور على اسم pod باستخدامkubectl get pods
.
$ kubectl get pods
ترى مخرجات مثل هذا:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
بمجرد العثور على اسم pod، يمكنك تشغيل عمليات ترحيل قاعدة بيانات django باستخدام الأمر$ kubectl exec <pod-name> -- [COMMAND]
. ملاحظة/code/
هي دليل العمل الخاص بالمشروع المحددDockerfile
أعلاه.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
سيبدو الناتج مثل
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
. . . . . .
إذا واجهت مشكلات، فقم بتشغيل kubectl logs <pod-name>
لمعرفة الاستثناء الذي يطرحه التطبيق الخاص بك. في حال كان التطبيق يعمل بنجاح، فسترى إخراجًا مثل هذا عند التشغيلkubectl logs
.
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 08, 2020 - 23:24:14
Django version 2.2.17, using settings 'django_postgres_app.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
تفريغ مجموعة الموارد
لتجنب رسوم Azure، يجب تنظيف الموارد غير الضرورية. استخدم الأمر az group deleteلإزالة مجموعة الموارد وخدمة الحاوية، وجميع الموارد ذات الصلة.
az group delete --name django-project --yes --no-wait
إشعار
عند حذف نظام المجموعة، لا تتم إزالة أساس خدمة Microsoft Entra المستخدم بواسطة نظام مجموعة AKS. للحصول على خطوات حول كيفية إزالة أساس الخدمة، راجع الاعتبارات الأساسية لخدمة AKS وحذفها. إذا استخدمت هوية مدارة، تتم إدارة الهوية بواسطة النظام الأساسي ولا تتطلب الإزالة.
الخطوات التالية
- الوصول إلى لوحة معلومات الويب Kubernetes الخاص بنظام المجموعة AKS
- التعرف على كيفية تمكين النشر المستمر
- التعرف على كيفية توسيع نطاق مجموعتك
- تعرف على كيفية إدارة قاعدة بيانات Azure لمثيل خادم PostgreSQL المرن
- تعرف على كيفية تكوين معلمات خادم لخادم قاعدة البيانات.