Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Schnellstartanleitung stellen Sie eine Django-Anwendung im Azure Kubernetes Service (AKS)-Cluster mit Azure Database for PostgreSQL flexiblen Server mithilfe der Azure CLI bereit.
AKS ist ein verwalteter Kubernetes-Dienst, mit dem Sie Cluster schnell bereitstellen und verwalten können. Azure Database for PostgreSQL – Flexible Server ist ein vollständig verwalteter Datenbankdienst, der eine differenziertere Steuerung und mehr Flexibilität in Bezug auf Verwaltungsfunktionen und Konfigurationseinstellungen für Datenbanken bietet.
Hinweis
Für diese Schnellstartanleitung werden Grundkenntnisse von Kubernetes-Konzepten, Django und PostgreSQL vorausgesetzt.
Voraussetzungen
Wenn Sie nicht über ein Azure-Konto verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
- Starten Sie Azure Cloud Shell in einem neuen Browserfenster. Sie können die Azure CLI auch auf Ihrem lokalen Computer installieren. Wenn Sie eine lokale Installation verwenden, melden Sie sich mit dem Az-Anmeldebefehl an. Um den Authentifizierungsprozess abzuschließen, führen Sie die schritte aus, die in Ihrem Terminal angezeigt werden.
- Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren. Für diesen Artikel ist die aktuelle Azure CLI-Version erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.
Erstellen einer Ressourcengruppe
Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Sie Azure-Ressourcen bereitstellen und verwalten. Erstellen Sie eine Ressourcengruppe namens django-project mithilfe des Befehls az-group-create im Standort eastus.
az group create --name django-project --location eastus
Hinweis
Der Speicherort für die Ressourcengruppe speichert die Ressourcengruppenmetadaten. Darüber hinaus werden dort Ihre Ressourcen in Azure ausgeführt, sofern Sie im Rahmen der Ressourcenerstellung keine andere Region angeben.
Die folgende Beispielausgabe zeigt, dass die Ressourcengruppe erfolgreich erstellt wurde:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Erstellen eines ACS-Clusters
Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster. Im folgenden Beispiel wird ein Cluster mit dem Namen djangoappcluster mit einem Knoten erstellt. Die Erstellung des Clusters dauert einige Minuten.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Nach wenigen Minuten ist die Ausführung des Befehls abgeschlossen, und es werden Informationen zum Cluster im JSON-Format zurückgegeben.
Hinweis
Beim Erstellen eines AKS-Clusters erstellt der Befehl automatisch eine zweite Ressourcengruppe zum Speichern der AKS-Ressourcen. Weitere Informationen finden Sie unter Warum werden zwei Ressourcengruppen mit AKS erstellt?.
Herstellen einer Verbindung mit dem Cluster
Verwenden Sie zum Verwalten eines Kubernetes-Clusters den Kubernetes-Befehlszeilenclient kubectl. Bei Verwendung von Azure Cloud Shell ist kubectl bereits installiert.
Hinweis
Wenn Sie Azure CLI lokal ausführen, führen Sie den Az aks install-cli-Befehl aus, um es zu installieren kubectl.
Mit dem Befehl az aks get-credentials können Sie kubectl für die Verbindungsherstellung mit Ihrem Kubernetes-Cluster konfigurieren. Mit diesem Befehl werden die Anmeldeinformationen heruntergeladen, und die Kubernetes-Befehlszeilenschnittstelle wird für deren Verwendung konfiguriert.
az aks get-credentials --resource-group django-project --name djangoappcluster
Überprüfen Sie die Verbindung mit Ihrem Cluster mithilfe des Befehls kubectl get, um eine Liste der Clusterknoten zurückzugeben.
kubectl get nodes
In der folgenden Beispielausgabe wird der Knoten gezeigt, der in den vorherigen Schritten erstellt wurde. Vergewissern Sie sich, dass der Knoten den Status Bereit hat:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Erstellen einer flexiblen Serverinstanz
Erstellen Sie mithilfe des Befehls az postgreSQL flexible-server create eine Instanz von Azure Database for PostgreSQL – Flexible Server. Mit dem folgenden Befehl wird ein Server mit Dienststandards und -werten aus dem lokalen Kontext Ihrer Azure CLI erstellt:
az postgres flexible-server create --public-access all
Der Server verfügt über die folgenden Attribute:
- Eine neue leere Datenbank mit dem Namen
postgreswird erstellt, wenn der Server zum ersten Mal bereitgestellt wird. In dieser Schnellstartanleitung wird diepostgresDatenbank verwendet. - Automatisch generierter Servername, Administratorbenutzername, Administratorkennwort, Ressourcengruppenname (wenn Sie ihn nicht bereits im lokalen Kontext angegeben haben) und denselben Speicherort wie Ihre Ressourcengruppe.
- Mithilfe des Arguments für den öffentlichen Zugriff erstellen Sie einen Server mit öffentlichem Zugriff für jeden Client mit dem richtigen Benutzernamen und Kennwort.
- Da der Befehl den lokalen Kontext verwendet, wird der Server in der Ressourcengruppe
django-projectund in der Regioneastuserstellt.
Erstellen Ihres Django-Docker-Images
Erstellen Sie eine neue Django-Anwendung, oder verwenden Sie Ihr vorhandenes Django-Projekt. Stellen Sie sicher, dass sich der Code in dieser Ordnerstruktur befindet.
└───my-djangoapp
└───views.py
└───models.py
└───forms.py
├───templates
. . . . . . .
├───static
. . . . . . .
└───my-django-project
└───settings.py
└───urls.py
└───wsgi.py
. . . . . . .
└─── Dockerfile
└─── requirements.txt
└─── manage.py
Aktualisieren Sie ALLOWED_HOSTS in settings.py, um sicherzustellen, dass die Django-Anwendung die externe IP verwendet, die der Kubernetes-Anwendung zugewiesen wird.
ALLOWED_HOSTS = ['*']
Aktualisieren Sie in der Datei DATABASES={ } den Abschnitt settings.py. Der Codeausschnitt liest den Datenbankhost, den Benutzernamen und das Kennwort aus der Kubernetes-Manifestdatei.
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'}
}
}
Generieren der Datei „requirements.txt“
Erstellen Sie eine requirements.txt Datei zum Auflisten der Abhängigkeiten für die Django-Anwendung. Im Anschluss ist ein Beispiel für eine Datei vom Typ requirements.txt angegeben. Sie können pip freeze > requirements.txt verwenden, um die Datei „requirements.txt“ für Ihre vorhandene Anwendung zu generieren.
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
Dockerfile erstellen
Erstellen Sie eine neue Datei mit dem Namen Dockerfile , und kopieren Sie den folgenden Codeausschnitt. Diese Dockerfile richtet Python 3.8 ein und installiert alle in der requirements.txt Datei aufgeführten Anforderungen.
# 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
Erstellen Ihres Images
Stellen Sie sicher, dass Sie sich im my-django-app Verzeichnis in einem Terminal befinden, indem Sie den cd Befehl verwenden. Führen Sie den folgenden Befehl aus, um Ihr Bulletin Board-Image zu erstellen:
docker build --tag myblog:latest .
Stellen Sie Ihr Image in Docker Hub oder in Azure Container Registry bereit.
Von Bedeutung
Wenn Sie die Azure-Containerregistrierung (ACR) verwenden, führen Sie den az aks update Befehl aus, um das ACR-Konto an den AKS-Cluster anzufügen.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Erstellen einer Kubernetes-Manifestdatei
Eine Kubernetes-Manifestdatei definiert einen gewünschten Zustand (Desired State) für den Cluster – also beispielsweise, welche Containerimages ausgeführt werden sollen. Erstellen Sie eine Manifestdatei namens djangoapp.yaml und kopieren Sie sie in der folgenden YAML-Definition.
Von Bedeutung
Aktualisieren Sie den env Abschnitt mit Ihren SERVERNAME, YOUR-DATABASE-USERNAMEund YOUR-DATABASE-PASSWORD Werten für Ihre Azure-Datenbank für flexible Serverinstanz von 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
Bereitstellen von Django in einem AKS-Cluster
Stellen Sie die Anwendung mithilfe des Befehls "kubectl apply" bereit. Geben Sie den Namen Ihres YAML-Manifests an:
kubectl apply -f djangoapp.yaml
In der folgenden Beispielausgabe sind die erfolgreich erstellten Bereitstellungen und Dienste aufgeführt:
deployment "django-app" created
service "python-svc" created
Eine Bereitstellung mit dem Namen django-app beschreibt Details Ihrer Bereitstellung, zum Beispiel welche Images für die App verwendet werden, die Anzahl der Pods und die Pod-Konfiguration. Sie erstellen einen Dienst mit dem Namen python-svc , um die Anwendung über eine externe IP verfügbar zu machen.
Testen der App
Wenn die Anwendung ausgeführt wird, macht ein Kubernetes-Dienst das Anwendungs-Front-End im Internet verfügbar. Dieser Vorgang kann einige Minuten dauern.
Verwenden Sie zum Überwachen des Fortschritts den Befehl kubectl get service mit dem Argument --watch.
kubectl get service python-svc --watch
Zu Beginn wird die EXTERNAL-IP für den django-app-Service als ausstehend angezeigt.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Sobald die externe IP-Adresse (EXTERNAL-IP) von pending (ausstehend) in eine tatsächliche öffentliche IP-Adresse geändert wurde, verwenden Sie CTRL-C, um die kubectl-Überwachung zu beenden. Die folgende Beispielausgabe zeigt eine gültige öffentliche IP-Adresse, die dem Dienst zugewiesen ist:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Öffnen Sie die externe IP-Adresse Ihres Diensts (http://<service-external-ip-address>) in einem Webbrowser, um die Django-Anwendung anzuzeigen.
Hinweis
- Aktuell verwendet die Django-Website kein HTTPS. Weitere Informationen zu HTTPS und zum Konfigurieren von Anwendungsrouting für AKS finden Sie unter Verwalteter NGINX-Eingang mit dem Anwendungsrouting-Add-On.
Ausführen von Datenbankmigrationen
Für jede Django-Anwendung müssen Sie eine Datenbankmigration ausführen oder statische Dateien sammeln. Sie können diese Django-Shellbefehle mithilfe von $ kubectl exec <pod-name> -- [COMMAND] ausführen. Bevor Sie den Befehl ausführen, müssen Sie den Podnamen mithilfe von kubectl get pods ermitteln.
$ kubectl get pods
Eine Ausgabe wie die folgende sollte angezeigt werden:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Nachdem Sie den Podnamen gefunden haben, führen Sie Django-Datenbankmigrationen mit dem Befehl $ kubectl exec <pod-name> -- [COMMAND]aus.
/code/ ist das Arbeitsverzeichnis für das im Dockerfile abschnitt oben definierte Projekt.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
Die Ausgabe sieht wie folgt aus:
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
. . . . . .
Wenn Probleme auftreten, führen Sie kubectl logs <pod-name> aus, um zu sehen, welche Ausnahme Ihre Anwendung auslöst. Wenn die Anwendung erfolgreich funktioniert, wird beim Ausführen eine Ausgabe wie diese angezeigt 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.
Bereinigen der Ressourcen
Um Azure-Gebühren zu vermeiden, bereinigen Sie nicht benötigte Ressourcen. Wenn Sie den Cluster nicht mehr benötigen, verwenden Sie den Befehl " az group delete ", um die Ressourcengruppe, den Containerdienst und alle zugehörigen Ressourcen zu entfernen.
az group delete --name django-project --yes --no-wait
Hinweis
Wenn Sie den Cluster löschen, wird der Microsoft Entra-Dienstprinzipal, den der AKS-Cluster verwendet, nicht entfernt. Schritte zum Entfernen des Dienstprinzipals finden Sie unter den Überlegungen zum AKS-Dienstprinzipal und dessen Löschung. Wenn Sie eine verwaltete Identität verwenden, verwaltet die Plattform die Identität und erfordert keine Entfernung.
Verwandte Inhalte
- Zugreifen auf Kubernetes-Ressourcen mithilfe des Azure-Portals
- Automatisierte Bereitstellungen für Azure Kubernetes Service
- Skalieren von Anwendungen in Azure Kubernetes Service
- Verwalten der Azure-Datenbank für PostgreSQL mithilfe des Azure-Portals
- Konfigurieren von Serverparametern in Azure-Datenbank für PostgreSQL