Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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, kterou používáte k rychlému nasazení a správě clusterů. 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 nemáte účet Azure, vytvořte si bezplatný účet 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í příkazu az login . Chcete-li dokončit proces ověřování, postupujte podle kroků zobrazených ve vašem terminálu.
- Spusťte az version, abyste zjistili verzi a závislé knihovny, které jsou nainstalovány. 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é nasazujete a spravujete prostředky Azure. Pomocí příkazu az-group-create v umístění eastus vytvořte skupinu prostředků s názvem django-project.
az group create --name django-project --location eastus
Poznámka:
Umístění skupiny prostředků ukládá 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 příkaz automaticky vytvoří druhou skupinu prostředků pro uložení prostředků AKS. Další informace najdete v tématu Proč se v AKS vytvářejí dvě skupiny prostředků?
Připojení ke clusteru
Ke správě clusteru Kubernetes použijte 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.
Pomocí příkazu kubectl nakonfigurujte klienta pro připojení k vašemu clusteru Kubernetes. Tento příkaz stahuje přihlašovací údaje a konfiguruje Kubernetes CLI pro jejich použití.
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í flexibilní instance serveru
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
Server má následující atributy:
- Při prvním zřízení serveru se vytvoří nová prázdná databáze s názvem
postgres. Tento rychlý start používápostgresdatabázi. - Automaticky vygenerovaný název serveru, uživatelské jméno správce, heslo správce, název skupiny prostředků (pokud jste ho ještě nezadali v místním kontextu) a stejné umístění jako vaše skupina prostředků.
- Pomocí argumentu veřejného přístupu vytvoříte server s veřejným přístupem pro každého klienta 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-projectprostř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
Aktualizujte ALLOWED_HOSTS v settings.py a ujistěte se, že aplikace Django používá externí IP adresu, která je přiřazena aplikaci Django nasazené na Kubernetes.
ALLOWED_HOSTS = ['*']
Aktualizujte DATABASES={ } oddíl v settings.py souboru. Fragment kódu přeč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 requirements.txt pro vypsání 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 nastaví Python 3.8 a nainstaluje všechny požadavky uvedené v requirements.txt souboru.
# 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
Vytvoření image
Ujistěte se, že jste v adresáři my-django-app v terminálu, pomocí příkazu 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. Vytvořte soubor manifestu s názvem djangoapp.yaml a zkopírujte ho v následující definici YAML.
Důležité
Aktualizujte oddíl pomocí hodnot env, SERVERNAME, a YOUR-DATABASE-USERNAME pro instanci 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 . 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í s názvem django-app popisuje podrobnosti o nasazení, jako jsou image, které se mají použít pro aplikaci, počet podů a konfigurace podů. Vytvoříte službu s názvem python-svc pro zveřejnění aplikace 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 EXTERNAL-IP pro službu django-app 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 CTRL-C veřejnou IP adresu, použijte kubectl 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 musíte spustit migraci databáze nebo shromáždit statické soubory. Tyto příkazy prostředí Django můžete spustit pomocí příkazu $ kubectl exec <pod-name> -- [COMMAND]. Před spuštěním příkazu je nutné pomocí příkazu kubectl get podsnajít název podu .
$ kubectl get pods
Zobrazí se výstup podobný tomuto:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Jakmile najdete název podu, spusťte migrace databáze Django pomocí příkazu $ kubectl exec <pod-name> -- [COMMAND].
/code/ je pracovní adresář projektu definovaného Dockerfile v části výše.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
Výstup vypadá 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 příkaz kubectl logs <pod-name> , abyste zjistili, jakou výjimku aplikace vyvolá. Pokud aplikace úspěšně funguje, zobrazí se při spuštění kubectl logsvý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čisti prostředky
Abyste se vyhnuli poplatkům za Azure, vyčistěte nepotřebné prostředky. Pokud už cluster nepotřebujete, pomocí příkazu az group delete odeberte skupinu prostředků, službu kontejneru a všechny související prostředky.
az group delete --name django-project --yes --no-wait
Poznámka:
Při odstranění clusteru se neodebere instanční objekt Microsoft Entra, který cluster AKS používá. Pokud chcete zjistit, jak odebrat službu AKS, podívejte se na aspekty služby AKS a její odstranění. Pokud používáte spravovanou identitu, platforma ji spravuje a nevyžaduje odebrání.
Související obsah
- Přístup k prostředkům Kubernetes pomocí webu Azure Portal
- Automatizovaná nasazení pro Azure Kubernetes Service
- Škálování aplikací ve službě Azure Kubernetes Service
- Správa služby Azure Database for PostgreSQL pomocí webu Azure Portal
- Konfigurace parametrů serveru ve službě Azure Database for PostgreSQL