Kurz: Nasazení aplikace Django v AKS pomocí flexibilního serveru Azure Database for PostgreSQL
PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL
V tomto rychlém startu nasadíte aplikaci Django do clusteru Azure Kubernetes Service (AKS) s flexibilním serverem Azure Database for PostgreSQL pomocí Azure CLI.
AKS je spravovaná služba Kubernetes, která umožňuje rychle nasazovat a spravovat clustery. Flexibilní server Azure Database for PostgreSQL je plně spravovaná databázová služba navržená tak, aby poskytovala podrobnější kontrolu a flexibilitu nad funkcemi správy databází a nastavením konfigurace.
Poznámka:
V tomto rychlém startu se předpokládá základní znalost konceptů Kubernetes, Django a PostgreSQL.
Požadavky
Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.
- Spusťte Azure Cloud Shell v novém okně prohlížeče. Azure CLI můžete nainstalovat i na místní počítač. Pokud používáte místní instalaci, přihlaste se pomocí Azure CLI pomocí příkazu az login . Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu.
- Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade. Tento článek vyžaduje nejnovější verzi Azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
Vytvoření skupiny zdrojů
Skupina prostředků Azure je logická skupina, ve které se nasazují a spravují prostředky Azure. Pojďme vytvořit skupinu prostředků django-project pomocí příkazu az-group-create v umístění eastus.
az group create --name django-project --location eastus
Poznámka:
Umístění skupiny prostředků je místo, kde jsou uložena metadata skupiny prostředků. Pokud během vytváření prostředků nezadáte jinou oblast, je to také místo, kde se vaše prostředky spouštějí v Azure.
Následující příklad výstupu ukazuje, že skupina prostředků byla úspěšně vytvořena:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Vytvoření clusteru AKS
Pomocí příkazu az aks create vytvořte cluster AKS. Následující příklad vytvoří cluster s názvem djangoappcluster s jedním uzlem. Vytvoření clusteru trvá několik minut.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Po několika minutách se příkaz dokončí a vrátí informace o clusteru ve formátu JSON.
Poznámka:
Při vytváření clusteru AKS se automaticky vytvoří druhá skupina prostředků pro ukládání prostředků AKS. Přečtěte si, proč se v AKS vytvářejí dvě skupiny prostředků?
Připojení ke clusteru
Ke správě clusteru Kubernetes použijete klienta příkazového řádku Kubernetes kubectl. Pokud používáte Azure Cloud Shell, kubectl
je už nainstalovaný.
Poznámka:
Pokud používáte Azure CLI místně, spusťte příkaz az aks install-cli a nainstalujte kubectl
ho.
Pomocí příkazu az aks get-credentials nakonfigurujte klienta kubectl
pro připojení k vašemu clusteru Kubernetes. Tento příkaz stáhne přihlašovací údaje a nakonfiguruje rozhraní příkazového řádku Kubernetes tak, aby je používalo.
az aks get-credentials --resource-group django-project --name djangoappcluster
Pokud chcete ověřit připojení ke clusteru, použijte příkaz kubectl get, který vrátí seznam uzlů clusteru.
kubectl get nodes
Následující příklad výstupu ukazuje jeden uzel vytvořený v předchozích krocích. Ujistěte se, že je stav uzlu připravený:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Vytvoření instance flexibilního serveru Azure Database for PostgreSQL
Vytvořte instanci flexibilního serveru Azure Database for PostgreSQL pomocí příkazu az postgreSQL flexible-server create . Následující příkaz vytvoří server s použitím výchozích hodnot služby a hodnot z místního kontextu Azure CLI:
az postgres flexible-server create --public-access all
Vytvořený server má následující atributy:
- Při prvním zřízení serveru se vytvoří nová prázdná databáze
postgres
. Tuto databázi používáme v tomto rychlém startu. - Automaticky vygenerovaný název serveru, uživatelské jméno správce, heslo správce, název skupiny prostředků (pokud ještě není zadaný v místním kontextu) a ve stejném umístění jako vaše skupina prostředků.
- Pomocí argumentu veřejného přístupu můžete vytvořit server s veřejným přístupem k libovolnému klientovi se správným uživatelským jménem a heslem.
- Vzhledem k tomu, že příkaz používá místní kontext, vytvoří server ve skupině
django-project
prostředků a v oblastieastus
.
Sestavení image Dockeru Django
Vytvořte novou aplikaci Django nebo použijte existující projekt Django. Ujistěte se, že je váš kód v této struktuře složek.
└───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
AktualizujteALLOWED_HOSTS
, aby aplikace Django používala externí IP adresu, která se přiřadí k aplikaci Kubernetes.
ALLOWED_HOSTS = ['*']
Aktualizujte DATABASES={ }
oddíl v settings.py
souboru. Následující fragment kódu čte hostitele databáze, uživatelské jméno a heslo ze souboru manifestu 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'}
}
}
Vygenerování souboru requirements.txt
Vytvořte soubor pro requirements.txt
výpis závislostí pro aplikaci Django. Tady je ukázkový requirements.txt
soubor. K vygenerování requirements.txt souboru requirements.txt pro vaši stávající aplikaci můžete použít pip freeze > requirements.txt .
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
Vytvoření souboru Dockerfile
Vytvořte nový soubor s názvem Dockerfile
a zkopírujte následující fragment kódu. Tento soubor Dockerfile při nastavování Pythonu 3.8 a instalaci všech požadavků uvedených v souboru 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
Sestavení image
Pomocí příkazu se ujistěte, že jste v adresáři my-django-app
v terminálu cd
. Spuštěním následujícího příkazu sestavte image vývěsky:
docker build --tag myblog:latest .
Nasaďte image do centra Dockeru nebo do služby Azure Container Registry.
Důležité
Pokud používáte Azure Container Registry (ACR), spusťte az aks update
příkaz pro připojení účtu ACR ke clusteru AKS.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Vytvoření souboru manifestu Kubernetes
Soubor manifestu Kubernetes definuje požadovaný stav clusteru, například jaké image kontejneru se mají spustit. Pojďme vytvořit soubor manifestu s názvem djangoapp.yaml
a zkopírovat v následující definici YAML.
Důležité
Níže aktualizujte env
část s vaší YOUR-DATABASE-USERNAME
SERVERNAME
YOUR-DATABASE-PASSWORD
instancí flexibilního serveru 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
Nasazení Django do clusteru AKS
Nasaďte aplikaci pomocí příkazu kubectl apply a zadejte název manifestu YAML:
kubectl apply -f djangoapp.yaml
Následující příklad výstupu ukazuje úspěšné vytvoření nasazení a služeb:
deployment "django-app" created
service "python-svc" created
Nasazení django-app
umožňuje popsat podrobnosti o nasazení, jako jsou image, které se mají použít pro aplikaci, počet podů a konfigurace podů. Vytvoří se služba python-svc
, která aplikaci zveřejní prostřednictvím externí IP adresy.
Testování aplikace
Když se aplikace spustí, služba Kubernetes zveřejní front-end aplikace na internetu. Dokončení tohoto procesu může trvat několik minut.
Pomocí příkazu kubectl get service s argumentem --watch
můžete sledovat průběh.
kubectl get service python-svc --watch
Zpočátku se externí IP adresa pro službu django-app service zobrazí jako čekající.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Když se externí IP adresa změní z čekání na skutečnou kubectl
veřejnou IP adresu, použijte CTRL-C
k zastavení procesu sledování. Následující příklad výstupu ukazuje platnou veřejnou IP adresu přiřazenou službě:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Teď otevřete webový prohlížeč na externí IP adresu vaší služby (http://<service-external-ip-address>
) a zobrazte aplikaci Django.
Poznámka:
- Web Django v současné době nepoužívá protokol HTTPS. Další informace o protokolu HTTPS a konfiguraci směrování aplikací pro AKS najdete v tématu Spravované příchozí přenosy dat NGINX pomocí doplňku směrování aplikací.
Spouštění migrací databází
Pro libovolnou aplikaci django byste museli spustit migraci databáze nebo shromáždit statické soubory. Tyto příkazy prostředí django můžete spustit pomocí $ kubectl exec <pod-name> -- [COMMAND]
. Před spuštěním příkazu potřebujete najít název podu pomocí kubectl get pods
příkazu .
$ kubectl get pods
Zobrazí se výstup podobný tomuto:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Jakmile se název podu najde, můžete spustit migrace databází django pomocí příkazu $ kubectl exec <pod-name> -- [COMMAND]
. Všimněte si /code/
, že pracovní adresář projektu je definován výše Dockerfile
.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
Výstup by vypadal takto:
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
. . . . . .
Pokud narazíte na problémy, spusťte spuštění kubectl logs <pod-name>
, abyste zjistili, jakou výjimku vyvolá vaše aplikace. Pokud aplikace funguje úspěšně, při spuštění kubectl logs
by se zobrazil výstup podobný tomuto.
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.
Vyčištění prostředků
Abyste se vyhnuli poplatkům za Azure, měli byste vyčistit nepotřebné prostředky. Pokud už cluster nepotřebujete, použijte k odebrání skupiny prostředků, služby kontejneru a všech souvisejících prostředků příkaz az group delete.
az group delete --name django-project --yes --no-wait
Poznámka:
Při odstranění clusteru se neodebere instanční objekt Microsoft Entra používaný clusterem AKS. Postup odebrání instančního objektu najdete v tématu věnovaném aspektům instančního objektu AKS a jeho odstranění. Pokud jste použili spravovanou identitu, identita se spravuje platformou a nevyžaduje odebrání.
Související obsah
- Přístup k prostředkům Kubernetes pomocí webu Azure Portal pro váš cluster AKS
- Automatizovaná nasazení pro službu Azure Kubernetes Service.
- Škálování aplikací ve službě Azure Kubernetes Service
- Správa flexibilního serveru Azure Database for PostgreSQL
- Konfigurace parametrů serveru na flexibilním serveru Azure Database for PostgreSQL