Oktatóanyag: Django-alkalmazás üzembe helyezése az AKS-ben az Azure Database for PostgreSQL-lel – rugalmas kiszolgáló
A következőkre vonatkozik: Azure Database for PostgreSQL – Rugalmas kiszolgáló
Ebben a rövid útmutatóban egy Django-alkalmazást helyez üzembe az Azure Kubernetes Service (AKS) fürtön rugalmas Azure Database for PostgreSQL-kiszolgálóval az Azure CLI használatával.
Az AKS egy felügyelt Kubernetes-szolgáltatás, amely lehetővé teszi a fürtök gyors üzembe helyezését és kezelését. A rugalmas Azure Database for PostgreSQL-kiszolgáló egy teljes mértékben felügyelt adatbázis-szolgáltatás, amely részletesebb vezérlést és rugalmasságot biztosít az adatbázis-kezelési funkciók és a konfigurációs beállítások felett.
Feljegyzés
Ez a rövid útmutató feltételezi a Kubernetes-fogalmak, a Django és a PostgreSQL alapszintű megértését.
Előfeltételek
Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.
- Indítsa el az Azure Cloud Shellt az új böngészőablakban. Az Azure CLI-t a helyi gépen is telepítheti. Ha helyi telepítést használ, jelentkezzen be az Azure CLI-vel az az login paranccsal. A hitelesítési folyamat befejezéséhez kövesse a terminálon megjelenő lépéseket.
- Futtassa az az version parancsot a telepített verzió és a függő kódtárak megkereséséhez. A legújabb verzióra az az upgrade paranccsal frissíthet. Ez a cikk az Azure CLI legújabb verzióját igényli. Ha Az Azure Cloud Shellt használja, a legújabb verzió már telepítve van.
Erőforráscsoport létrehozása
Az Azure-erőforráscsoport olyan logikai csoport, amelyben az Azure-erőforrások üzembe helyezése és kezelése zajlik. Hozzunk létre egy erőforráscsoportot, egy django-projectet az az-group-create paranccsal az eastus helyen.
az group create --name django-project --location eastus
Feljegyzés
Az erőforráscsoport helye az erőforráscsoport metaadatainak tárolása. Az erőforrások akkor is az Azure-ban futnak, ha nem ad meg egy másik régiót az erőforrás létrehozása során.
Az alábbi példakimenet a sikeresen létrehozott erőforráscsoportot mutatja be:
{
"id": "/subscriptions/<guid>/resourceGroups/django-project",
"location": "eastus",
"managedBy": null,
"name": "django-project",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
AKS-fürt létrehozása
Használja az az aks create parancsot egy AKS-fürt létrehozásához. Az alábbi példa egy djangoappcluster nevű fürtöt hoz létre egy csomóponttal. Ez több percet is igénybe vehet.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Néhány perc elteltével a parancs befejeződik, és JSON formátumú információkat ad vissza a fürtről.
Feljegyzés
AKS-fürt létrehozásakor a rendszer automatikusan létrehoz egy második erőforráscsoportot az AKS-erőforrások tárolásához. Lásd: Miért jön létre két erőforráscsoport az AKS-sel?
Csatlakozás a fürthöz
Kubernetes-fürt kezeléséhez a Kubectl, a Kubernetes parancssori ügyfelet kell használnia. Ha az Azure Cloud Shellt használja, kubectl
már telepítve van.
Feljegyzés
Ha helyileg futtatja az Azure CLI-t, futtassa az az aks install-cli parancsot a telepítéshez kubectl
.
Az az aks get-credentials paranccsal konfigurálható kubectl
a Kubernetes-fürthöz való csatlakozásra. Ez a parancs letölti a hitelesítő adatokat, és konfigurálja a Kubernetes parancssori felületét a használatukhoz.
az aks get-credentials --resource-group django-project --name djangoappcluster
A fürthöz való csatlakozás ellenőrzéséhez használja a kubectl get parancsot a fürtcsomópontok listájának lekéréséhez.
kubectl get nodes
A következő példakimenet az előző lépésekben létrehozott csomópontot mutatja be. Győződjön meg arról, hogy a csomópont állapota készen áll:
NAME STATUS ROLES AGE VERSION
aks-nodepool1-31718369-0 Ready agent 6m44s v1.12.8
Rugalmas Azure Database for PostgreSQL-kiszolgálópéldány létrehozása
Hozzon létre egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányt az az postgreSQL flexible-server create paranccsal. A következő parancs létrehoz egy kiszolgálót az Azure CLI helyi környezetéből származó alapértelmezett szolgáltatásokkal és értékekkel:
az postgres flexible-server create --public-access all
A létrehozott kiszolgáló az alábbi attribútumokkal rendelkezik:
- A kiszolgáló első kiépítésekor létrejön egy új üres adatbázis
postgres
. Ebben a rövid útmutatóban ezt az adatbázist használjuk. - Automatikusan létrehozott kiszolgálónév, rendszergazdai felhasználónév, rendszergazdai jelszó, erőforráscsoport neve (ha még nincs megadva a helyi környezetben), és ugyanazon a helyen, ahol az erőforráscsoport található.
- A nyilvános hozzáférési argumentum használatával létrehozhat egy olyan kiszolgálót, amely nyilvános hozzáféréssel rendelkezik minden olyan ügyfélhez, amely megfelelő felhasználónévvel és jelszóval rendelkezik.
- Mivel a parancs helyi környezetet használ, létrehozza a kiszolgálót az erőforráscsoportban
django-project
és a régióbaneastus
.
Django Docker-rendszerkép létrehozása
Hozzon létre egy új Django-alkalmazást , vagy használja a meglévő Django-projektet. Győződjön meg arról, hogy a kód ebben a mappastruktúrában található.
└───my-djangoapp
└───views.py
└───models.py
└───forms.py
├───templates
. . . . . . .
├───static
. . . . . . .
└───my-django-project
└───settings.py
└───urls.py
└───wsgi.py
. . . . . . .
└─── Dockerfile
└─── requirements.txt
└─── manage.py
Frissítsen ALLOWED_HOSTS
, settings.py
hogy a Django-alkalmazás a Kubernetes-alkalmazáshoz hozzárendelt külső IP-címet használja-e.
ALLOWED_HOSTS = ['*']
A fájl frissítési DATABASES={ }
szakasza settings.py
. Az alábbi kódrészlet beolvassa az adatbázis-gazdagépet, a felhasználónevet és a jelszót a Kubernetes-jegyzékfájlból.
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-fájl létrehozása
Hozzon létre egy requirements.txt
fájlt a Django-alkalmazás függőségeinek listázásához. Íme egy példafájl requirements.txt
. A pip freeze > requirements.txt használatával létrehozhat egy requirements.txt fájlt a meglévő alkalmazáshoz.
Django==2.2.17
postgres==3.0.0
psycopg2-binary==2.8.6
psycopg2-pool==1.1
pytz==2020.4
Dockerfile létrehozása
Hozzon létre egy új, elnevezett Dockerfile
fájlt, és másolja az alábbi kódrészletet. Ez a Dockerfile a Python 3.8 beállításában és a requirements.txt fájlban felsorolt összes követelmény telepítésében.
# 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
A rendszerkép létrehozása
A parancs használatával cd
győződjön meg arról, hogy a terminál könyvtárában my-django-app
van. Futtassa a következő parancsot a faliújság lemezképének létrehozásához:
docker build --tag myblog:latest .
Helyezze üzembe a rendszerképet a Docker Hubon vagy az Azure Container Registryben.
Fontos
Ha Az Azure Container Registryt (ACR) használja, futtassa a parancsot az az aks update
ACR-fiók AKS-fürthöz való csatolásához.
az aks update --name djangoappcluster --resource-group django-project --attach-acr <your-acr-name>
Kubernetes-jegyzékfájl létrehozása
A Kubernetes-jegyzékfájl meghatározza a fürt kívánt állapotát, például hogy milyen tárolólemezképeket kell futtatni. Hozzunk létre egy jegyzékfájlt, amelyet elnevezünk djangoapp.yaml
és másolunk a következő YAML-definícióban.
Fontos
Frissítse env
az alábbi szakaszt a YOUR-DATABASE-USERNAME
SERVERNAME
YOUR-DATABASE-PASSWORD
rugalmas Azure Database for PostgreSQL-kiszolgálópéldányával.
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
Django üzembe helyezése az AKS-fürtben
Telepítse az alkalmazást a kubectl apply paranccsal, és adja meg a YAML-jegyzék nevét:
kubectl apply -f djangoapp.yaml
Az alábbi példakimenet a sikeres üzembe helyezéseket és szolgáltatásokat mutatja be:
deployment "django-app" created
service "python-svc" created
Az üzembe helyezés django-app
lehetővé teszi az üzembe helyezés részleteinek leírását, például az alkalmazáshoz használni kívánt rendszerképeket, a podok számát és a podkonfigurációt. Létrejön egy szolgáltatás python-svc
, amely egy külső IP-címen keresztül teszi elérhetővé az alkalmazást.
Az alkalmazás tesztelése
Az alkalmazás futtatásakor egy Kubernetes-szolgáltatás elérhetővé teszi az alkalmazás előtérét az interneten. A folyamat eltarthat pár percig.
A folyamat állapotának monitorozásához használja kubectl get service parancsot a --watch
argumentummal.
kubectl get service python-svc --watch
A django-app szolgáltatás külső IP-címe kezdetben függőben van.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
django-app LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Ha a külső IP-cím függőben lévőről tényleges nyilvános IP-címre változik, állítsa CTRL-C
le a kubectl
figyelés folyamatát. Az alábbi példakimenet a szolgáltatáshoz rendelt érvényes nyilvános IP-címet jeleníti meg:
django-app LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Most nyisson meg egy webböngészőt a szolgáltatás külső IP-címére (http://<service-external-ip-address>
), és tekintse meg a Django alkalmazást.
Feljegyzés
- A Django-webhely jelenleg nem https-t használ. További információ a HTTPS-ről és az AKS alkalmazás-útválasztásának konfigurálásáról: Felügyelt NGINX-bejövő forgalom az alkalmazás útválasztási bővítményével.
Adatbázis-migrálások futtatása
Bármely django-alkalmazás esetében adatbázis-migrálást kell futtatnia, vagy statikus fájlokat kell gyűjtenie. Ezeket a django shell-parancsokat a következővel $ kubectl exec <pod-name> -- [COMMAND]
futtathatja: . A parancs futtatása előtt meg kell keresnie a pod nevét a következő használatával kubectl get pods
: .
$ kubectl get pods
A következőhöz hasonló kimenet jelenik meg:
NAME READY STATUS RESTARTS AGE
django-app-5d9cd6cd8-l6x4b 1/1 Running 0 2m
Miután megtalálta a pod nevét, futtathatja a django-adatbázis áttelepítését a paranccsal $ kubectl exec <pod-name> -- [COMMAND]
. Megjegyzés /code/
: a projekt fent definiált munkakönyvtára Dockerfile
.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
A kimenet a következőképpen nézne ki:
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
. . . . . .
Ha problémákba ütközik, futtassa kubectl logs <pod-name>
az alkalmazás által okozott kivételeket. Ha az alkalmazás sikeresen működik, a futtatáskor kubectl logs
ehhez hasonló kimenet jelenik meg.
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.
Az erőforrások eltávolítása
Az Azure-díjak elkerülése érdekében távolítsa el a szükségtelen erőforrásokat. Ha a fürtre már nincs szükség, az az group delete paranccsal törölheti az erőforráscsoportot, a tárolószolgáltatást és az összes kapcsolódó erőforrást.
az group delete --name django-project --yes --no-wait
Feljegyzés
A fürt törlésekor az AKS-fürt által használt Microsoft Entra szolgáltatásnév nem lesz eltávolítva. A szolgáltatásnév eltávolításának lépéseiért lásd az AKS-szolgáltatásnevekre vonatkozó szempontokat és a szolgáltatásnevek törlését ismertető cikket. Ha felügyelt identitást használt, az identitást a platform kezeli, és nem igényel eltávolítást.
Következő lépések
- Megtudhatja, hogyan érheti el az AKS-fürt Kubernetes webes irányítópultját
- Ismerje meg, hogyan engedélyezheti a folyamatos üzembe helyezést
- Megtudhatja, hogyan méretezheti a fürtöt
- Ismerje meg, hogyan kezelheti rugalmas Azure Database for PostgreSQL-kiszolgálópéldányát
- Megtudhatja, hogyan konfigurálhatja az adatbázis-kiszolgáló kiszolgálóparamétereit .