Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
BERLAKU UNTUK: Azure Database for PostgreSQL - Server Fleksibel
Dalam mulai cepat ini, Anda menyebarkan aplikasi Django pada kluster Azure Kubernetes Service (AKS) dengan server fleksibel Azure Database for PostgreSQL menggunakan Azure CLI.
AKS adalah layanan Kubernetes terkelola yang memungkinkan Anda menyebarkan dan mengelola kluster dengan cepat. Server fleksibel Azure Database for PostgreSQL adalah layanan database terkelola penuh yang dirancang untuk memberikan kontrol dan fleksibilitas yang lebih terperinci atas fungsi manajemen database dan pengaturan konfigurasi.
Catatan
Mulai cepat ini mengasumsikan pemahaman dasar tentang konsep Kubernetes, Django, dan PostgreSQL.
Prasyarat
Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
- Meluncurkan Azure Cloud Shell di jendela browser baru. Anda juga dapat menginstal Azure CLI di komputer lokal Anda. Jika Anda menggunakan instalasi lokal, masuk ke Azure CLI dengan menggunakan perintah az login. Untuk menyelesaikan proses autentikasi, ikuti langkah-langkah yang ditampilkan di terminal Anda.
- Jalankan versi az untuk menemukan versi dan pustaka dependen yang diinstal. Untuk meningkatkan ke versi terbaru, jalankan peningkatan az. Artikel ini memerlukan Azure CLI versi terbaru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terpasang.
Buat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola. Mari membuat grup sumber daya django-project menggunakan perintah az-group-create di lokasi eastus.
az group create --name django-project --location eastus
Catatan
Lokasi untuk grup sumber daya adalah tempat metadata grup sumber daya disimpan. Ini juga tempat sumber daya Anda berjalan di Azure jika Anda tidak menentukan wilayah lain selama pembuatan sumber daya.
Output contoh berikut menampilkan grup sumber daya yang berhasil dibuat:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Membuat kluster AKS
Gunakan perintah az aks create untuk membuat kluster AKS. Contoh berikut membuat kluster bernama djangoappcluster dengan satu simpul. Pembuatan kluster membutuhkan waktu beberapa menit untuk diselesaikan.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Catatan
Saat membuat kluster AKS, grup sumber daya kedua secara otomatis dibuat untuk menyimpan sumber daya AKS. Lihat Mengapa dua grup sumber daya dibuat dengan AKS?
Menyambungkan ke kluster
Untuk mengelola kluster Kubernetes, Anda menggunakan kubectl, klien baris perintah Kubernetes. Jika Anda menggunakan Azure Cloud Shell, kubectl
sudah terpasang.
Catatan
Jika menjalankan Azure CLI secara lokal, jalankan perintah az aks install-cli untuk menginstal kubectl
.
Untuk mengonfigurasi kubectl
agar tersambung ke kluster Kubernetes, gunakan perintah az aks get-credentials. Perintah ini mengunduh informasi masuk dan mengonfigurasi CLI Kube untuk menggunakannya.
az aks get-credentials --resource-group django-project --name djangoappcluster
Untuk memverifikasi sambungan ke kluster Anda, gunakan perintah kubectl get untuk mengembalikan daftar node kluster.
kubectl get nodes
Contoh output berikut menunjukkan satu simpul yang dibuat pada langkah sebelumnya. Pastikan bahwa status simpul Siap:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Membuat instans server fleksibel Azure Database for PostgreSQL
Buat instans server fleksibel Azure Database for PostgreSQL dengan perintah az postgreSQL flexible-server create . Perintah berikut ini membuat server menggunakan default dan nilai layanan dari konteks lokal Azure CLI Anda:
az postgres flexible-server create --public-access all
Server yang dibuat memiliki atribut di bawah ini:
- Database kosong baru,
postgres
dibuat ketika server pertama kali disediakan. Kami menggunakan database ini dalam mulai cepat ini. - Nama server yang dibuat secara otomatis, nama pengguna admin, kata sandi admin, nama grup sumber daya (jika belum ditentukan dalam konteks lokal), dan di lokasi yang sama dengan grup sumber daya Anda.
- Menggunakan argumen akses publik memungkinkan Anda membuat server dengan akses publik ke klien mana pun dengan nama pengguna dan kata sandi yang benar.
- Karena perintah menggunakan konteks lokal, perintah membuat server di grup
django-project
sumber daya dan di wilayaheastus
.
Membangun gambar docker Django Anda
Membuat aplikasi Django baru atau gunakan proyek Django Anda yang sudah ada. Memastikan kode Anda berada dalam struktur folder ini.
└───my-djangoapp
└───views.py
└───models.py
└───forms.py
├───templates
. . . . . . .
├───static
. . . . . . .
└───my-django-project
└───settings.py
└───urls.py
└───wsgi.py
. . . . . . .
└─── Dockerfile
└─── requirements.txt
└─── manage.py
Memperbarui ALLOWED_HOSTS
di settings.py
untuk memastikan bahwa aplikasi Django menggunakan IP eksternal yang ditetapkan ke aplikasi kubernetes.
ALLOWED_HOSTS = ['*']
Memperbarui bagian DATABASES={ }
dalam file settings.py
. Cuplikan kode di bawah ini membaca host database, nama pengguna, dan kata sandi dari file manifes 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'}
}
}
Menghasilkan file persyaratan.txt
Membuat file requirements.txt
untuk membuat daftar dependensi untuk Aplikasi Django. Berikut adalah contoh requirements.txt
file. Anda dapat menggunakan pip freeze > requirements.txt untuk menghasilkan file requirements.txt untuk aplikasi yang ada.
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
Membuat Dockerfile
Membuat file baru bernama Dockerfile
dan menyalin cuplikan kode di bawah ini. Dockerfile ini dalam menyiapkan Python 3.8 dan memasang semua persyaratan yang tercantum dalam file persyaratan.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
Membuat citra
Pastikan Anda berada di direktori my-django-app
di terminal menggunakan perintah cd
. Jalankan perintah berikut untuk membangun gambar papan buletin Anda:
docker build --tag myblog:latest .
Sebarkan gambar Anda ke hub Docker atau registri Azure Container.
Penting
Jika Anda menggunakan Azure container registry (ACR), jalankan az aks update
perintah untuk melampirkan akun ACR dengan kluster AKS.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Membuat file manifes Kubernetes
File manifes Kubernetes menentukan status yang diinginkan untuk kluster, seperti gambar kontainer apa yang akan dijalankan. Mari membuat file manifest bernama djangoapp.yaml
dan menyalin dalam definisi YAML berikut.
Penting
Perbarui env
bagian di bawah ini dengan YOUR-DATABASE-USERNAME
SERVERNAME
YOUR-DATABASE-PASSWORD
instans server fleksibel Azure Database for PostgreSQL Anda.
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
Sebarkan Django ke kluster AKS
Sebarkan aplikasi menggunakan perintah kubectl applydan tentukan nama manifes YAML Anda:
kubectl apply -f djangoapp.yaml
Output contoh berikut menampilkan Penyebaran dan Layanan yang berhasil dibuat:
deployment "django-app" created
service "python-svc" created
Penyebaran django-app
memungkinkan Anda untuk menjelaskan detail penyebaran Anda seperti gambar mana yang akan digunakan untuk aplikasi, jumlah pod, dan konfigurasi pod. Layanan python-svc
dibuat untuk mengekspos aplikasi melalui IP eksternal.
Uji aplikasi
Ketika aplikasi berjalan, layanan Kubernetes mengekspos front end aplikasi ke internet. Diperlukan beberapa menit untuk menyelesaikan proses ini.
Untuk memantau kemajuan, gunakan perintah lkubectl get service dengan argumen --watch
.
kubectl get service python-svc --watch
Awalnya IP-EKSTERNAL untuk layanan aplikasi-django ditampilkan sebagai tertunda.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Ketika alamat EKSTERNAL-IP berubah dari tertunda ke alamat IP publik aktual, gunakan CTRL-C
untuk menghentikankubectl
proses melihat. Output contoh berikut menunjukkan alamat IP publik yang valid yang ditetapkan ke layanan:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Sekarang buka browser web ke alamat IP eksternal layanan Anda (http://<service-external-ip-address>
) dan lihat aplikasi Django.
Catatan
- Saat ini situs Django tidak menggunakan HTTPS. Untuk informasi selengkapnya tentang HTTPS dan cara mengonfigurasi perutean aplikasi untuk AKS, lihat ingress NGINX terkelola dengan add-on perutean aplikasi.
Menjalankan migrasi database
Untuk aplikasi django apa pun, Anda harus menjalankan migrasi database atau mengumpulkan file statik. Anda dapat menjalankan perintah shell django ini menggunakan $ kubectl exec <pod-name> -- [COMMAND]
. Sebelum menjalankan perintah, Anda perlu menemukan nama pod menggunakan kubectl get pods
.
$ kubectl get pods
Anda melihat output seperti ini:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Setelah nama pod ditemukan, Anda dapat menjalankan migrasi database django dengan perintah $ kubectl exec <pod-name> -- [COMMAND]
. Catatan /code/
adalah direktori kerja untuk proyek yang didefinisikan Dockerfile
di atas.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
Output akan terlihat seperti ini
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
. . . . . .
Jika Anda mengalami masalah, jalankan kubectl logs <pod-name>
untuk melihat pengecualian apa yang dilemparkan oleh aplikasi Anda. Jika aplikasi berhasil bekerja, Anda akan melihat output seperti ini saat menjalankan 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.
Membersihkan sumber daya
Untuk menghindari biaya Azure, Anda harus membersihkan sumber daya yang tidak diperlukan. Ketika kluster tidak lagi diperlukan, gunakan perintah hapus grup az untuk menghapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait.
az group delete --name django-project --yes --no-wait
Catatan
Saat Anda menghapus kluster, perwakilan layanan Microsoft Entra yang digunakan oleh kluster AKS tidak dihapus. Untuk langkah tentang cara menghapus perwakilan layanan, lihat Pertimbangan dan penghapusan perwakilan layanan AKS. Jika Anda menggunakan identitas terkelola, identitas dikelola oleh platform dan tidak memerlukan penghapusan.
Konten terkait
- Akses sumber daya Kubernetes menggunakan portal Azure untuk kluster AKS Anda.
- Penyebaran otomatis untuk Azure Kubernetes Service.
- Menskalakan aplikasi di Azure Kubernetes Service.
- Mengelola Azure Database for PostgreSQL - Server Fleksibel.
- Mengonfigurasi parameter server di Azure Database for PostgreSQL - Server Fleksibel.