Öğretici: PostgreSQL için Azure Veritabanı - Esnek Sunucu ile AKS'de Django uygulaması dağıtma
ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Esnek Sunucu
Bu hızlı başlangıçta, Azure CLI kullanarak PostgreSQL için Azure Veritabanı esnek sunucu ile Azure Kubernetes Service (AKS) kümesinde bir Django uygulaması dağıtacaksınız.
AKS , kümeleri hızla dağıtmanıza ve yönetmenize olanak tanıyan yönetilen bir Kubernetes hizmetidir. PostgreSQL için Azure Veritabanı esnek sunucu, veritabanı yönetimi işlevleri ve yapılandırma ayarları üzerinde daha ayrıntılı denetim ve esneklik sağlamak için tasarlanmış, tam olarak yönetilen bir veritabanı hizmetidir.
Not
Bu hızlı başlangıçta Kubernetes kavramları, Django ve PostgreSQL hakkında temel bilgiler yer alır.
Önkoşullar
Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.
- Azure Cloud Shell'i yeni tarayıcı penceresinde başlatın. Azure CLI'yi yerel makinenize de yükleyebilirsiniz. Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın . Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin.
- Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın. Bu makale, Azure CLI'nin en son sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten yüklüdür.
Kaynak grubu oluşturma
Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir gruptur. Şimdi eastus konumundaki az-group-create komutunu kullanarak django-project adlı bir kaynak grubu oluşturalım.
az group create --name django-project --location eastus
Not
Kaynak grubunun konumu, kaynak grubu meta verilerinin depolandığı yerdir. Ayrıca kaynak oluşturma sırasında başka bir bölge belirtmezseniz kaynaklarınızın Azure'da çalıştığı yerdir.
Aşağıdaki örnek çıktı, başarıyla oluşturulan kaynak grubunu gösterir:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
AKS kümesi oluşturma
AKS kümesi oluşturmak için az aks create komutunu kullanın. Aşağıdaki örnek, tek düğümlü djangoappcluster adlı bir küme oluşturur. Kümenin oluşturulması birkaç dakika sürer.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Not
AKS kümesi oluştururken AKS kaynaklarını depolamak için otomatik olarak ikinci bir kaynak grubu oluşturulur. Bkz. AKS ile neden iki kaynak grubu oluşturulur?
Kümeye bağlanma
Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisi kubectl kullanırsınız. Azure Cloud Shell kullanıyorsanız zaten kubectl
yüklüdür.
Not
Azure CLI'yı yerel olarak çalıştırıyorsanız, yüklemek kubectl
için az aks install-cli komutunu çalıştırın.
kubectl
istemcisini Kubernetes kümenize bağlanacak şekilde yapılandırmak için az aks get-credentials komutunu kullanın. Bu komut kimlik bilgilerini indirir ve Kubernetes CLI'yi bunları kullanacak şekilde yapılandırmaktadır.
az aks get-credentials --resource-group django-project --name djangoappcluster
Kümenize bağlantıyı doğrulamak için kubectl get komutunu kullanarak küme düğümleri listesini alın.
kubectl get nodes
Aşağıdaki örnekte önceki adımlarda oluşturulan tek düğüm gösterilmiştir. Düğümün durumunun Hazır olduğundan emin olun:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
PostgreSQL için Azure Veritabanı esnek sunucu örneği oluşturma
az postgreSQL flexible-server create komutuyla PostgreSQL için Azure Veritabanı esnek sunucu örneği oluşturun. Aşağıdaki komut, Azure CLI'nızın yerel bağlamındaki hizmet varsayılanlarını ve değerlerini kullanarak bir sunucu oluşturur:
az postgres flexible-server create --public-access all
Oluşturulan sunucu aşağıdaki özniteliklere sahiptir:
- Sunucu ilk kez sağlandığında yeni bir boş veritabanı
postgres
oluşturulur. Bu hızlı başlangıçta bu veritabanını kullanacağız. - Otomatik oluşturulan sunucu adı, yönetici kullanıcı adı, yönetici parolası, kaynak grubu adı (yerel bağlamda belirtilmemişse) ve kaynak grubunuzla aynı konumda.
- Genel erişim bağımsız değişkenini kullanmak, doğru kullanıcı adı ve parola ile herhangi bir istemciye genel erişime sahip bir sunucu oluşturmanıza olanak tanır.
- Komut yerel bağlam kullandığından, sunucuyu kaynak grubunda
django-project
ve bölgesindeeastus
oluşturur.
Django docker görüntünüzü oluşturma
Yeni bir Django uygulaması oluşturun veya mevcut Django projenizi kullanın. Kodunuzun bu klasör yapısında olduğundan emin olun.
└───my-djangoapp
└───views.py
└───models.py
└───forms.py
├───templates
. . . . . . .
├───static
. . . . . . .
└───my-django-project
└───settings.py
└───urls.py
└───wsgi.py
. . . . . . .
└─── Dockerfile
└─── requirements.txt
└─── manage.py
settings.py
Django uygulamasının kubernetes uygulamasına atanan dış IP'yi kullandığından emin olmak için uygulamasını güncelleştirinALLOWED_HOSTS
.
ALLOWED_HOSTS = ['*']
Dosyadaki settings.py
Güncelleştirme DATABASES={ }
bölümü. Aşağıdaki kod parçacığı Kubernetes bildirim dosyasından veritabanı ana bilgisayarını, kullanıcı adını ve parolayı okuyor.
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 dosyası oluşturma
Django Uygulamasının bağımlılıklarını listelemek için bir requirements.txt
dosya oluşturun. İşte örnek requirements.txt
bir dosya. Pip freeze > requirements.txt kullanarak mevcut uygulamanız için bir requirements.txt dosyası oluşturabilirsiniz.
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
Dockerfile oluşturma
adlı Dockerfile
yeni bir dosya oluşturun ve aşağıdaki kod parçacığını kopyalayın. Python 3.8'i ayarlama ve requirements.txt dosyasında listelenen tüm gereksinimleri yükleme işlemindeki bu Dockerfile.
# 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
Görüntünüzü oluşturma
komutunu kullanarak terminaldeki dizinde my-django-app
olduğunuzdan cd
emin olun. Bülten panosu görüntünüzü oluşturmak için aşağıdaki komutu çalıştırın:
docker build --tag myblog:latest .
Görüntünüzü Docker hub'ına veya Azure Container registry'ye dağıtın.
Önemli
Azure container registry (ACR) kullanıyorsanız AKS kümesine ACR hesabı eklemek için komutunu çalıştırın az aks update
.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Kubernetes bildirim dosyası oluşturma
Kubernetes bildirim dosyası, küme için hangi kapsayıcı görüntülerinin çalıştırılması gibi istenen bir durumu tanımlar. Adlı djangoapp.yaml
bir bildirim dosyası oluşturalım ve aşağıdaki YAML tanımında kopyalayalım.
Önemli
Aşağıdaki bölümü, PostgreSQL için Azure Veritabanı esnek sunucu örneğinizin , YOUR-DATABASE-USERNAME
YOUR-DATABASE-PASSWORD
ile SERVERNAME
güncelleştirinenv
.
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
AKS kümesine Django dağıtma
kubectl apply komutunu kullanarak uygulamayı dağıtın ve YAML bildiriminizin adını belirtin:
kubectl apply -f djangoapp.yaml
Aşağıdaki örnek çıktıda başarıyla oluşturulan Dağıtımlar ve Hizmetler gösterilmektedir:
deployment "django-app" created
service "python-svc" created
Dağıtım django-app
, uygulama için hangi görüntülerin kullanılacağı, pod sayısı ve pod yapılandırması gibi dağıtımınızın ayrıntılarını açıklamanıza olanak tanır. Uygulamayı bir dış IP üzerinden kullanıma açmak için bir hizmet python-svc
oluşturulur.
Uygulamayı test etme
Uygulama çalıştırıldığında Kubernetes hizmeti, uygulamanın ön ucunu İnternet'te kullanıma sunar. Bu işlemin tamamlanması birkaç dakika sürebilir.
İlerleme durumunu izlemek için kubectl get service komutunu --watch
bağımsız değişkeniyle birlikte kullanın.
kubectl get service python-svc --watch
Başlangıçta django-app hizmeti için EXTERNAL-IP beklemede olarak gösterilir.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
EXTERNAL-IP adresi beklemeden gerçek bir genel IP adresine değiştiğinde kubectl
izleme işlemini durdurmak için kullanınCTRL-C
. Aşağıdaki örnek çıktıda hizmete atanmış geçerli bir genel IP adresi gösterilmektedir:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Şimdi hizmetinizin (http://<service-external-ip-address>
) dış IP adresine bir web tarayıcısı açın ve Django uygulamasını görüntüleyin.
Not
- Şu anda Django sitesi HTTPS kullanmıyor. HTTPS ve AKS için uygulama yönlendirmeyi yapılandırma hakkında daha fazla bilgi için bkz . Uygulama yönlendirme eklentisiyle Yönetilen NGINX girişi.
Veritabanı geçişlerini çalıştırma
Herhangi bir django uygulaması için veritabanı geçişi çalıştırmanız veya statik dosyaları toplamanız gerekir. kullanarak bu django kabuk komutlarını $ kubectl exec <pod-name> -- [COMMAND]
çalıştırabilirsiniz. komutunu çalıştırmadan önce kullanarak pod adını kubectl get pods
bulmanız gerekir.
$ kubectl get pods
Şuna benzer bir çıkış görürsünüz:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Pod adı bulunduktan sonra komutuyla $ kubectl exec <pod-name> -- [COMMAND]
django veritabanı geçişlerini çalıştırabilirsiniz. Not /code/
, yukarıda belirtilen Dockerfile
projenin çalışma dizinidir.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
Çıkış şöyle görünür:
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
. . . . . .
Sorunlarla karşılaşırsanız, uygulamanız tarafından hangi özel durumun oluştuğuna bakmak için komutunu çalıştırın kubectl logs <pod-name>
. Uygulama başarıyla çalışıyorsa, çalıştırırken kubectl logs
şuna benzer bir çıkış görürsünüz.
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.
Kaynakları temizleme
Azure ücretlerinden kaçınmak için gereksiz kaynakları temizlemeniz gerekir. Kümeye artık ihtiyacınız yoksa az group delete komutunu kullanarak kaynak grubunu, kapsayıcı hizmetini ve ilgili tüm kaynakları kaldırın.
az group delete --name django-project --yes --no-wait
Not
Kümeyi sildiğinizde AKS kümesi tarafından kullanılan Microsoft Entra hizmet sorumlusu kaldırılmaz. Hizmet sorumlusunu kaldırma adımları için bkz. AKS hizmet sorumlusuyla ilgili önemli noktalar ve silme. Yönetilen kimlik kullandıysanız, kimlik platform tarafından yönetilir ve kaldırılması gerekmez.
İlgili içerik
- AKS kümeniz için Azure portalını kullanarak Kubernetes kaynaklarına erişin.
- Azure Kubernetes Service için otomatik dağıtımlar.
- Azure Kubernetes Service'te uygulamaları ölçeklendirme.
- PostgreSQL için Azure Veritabanı - Esnek Sunucuyu yönetme.
- PostgreSQL için Azure Veritabanı - Esnek Sunucuda sunucu parametrelerini yapılandırın.