Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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, amellyel gyorsan üzembe helyezhet és kezelhet fürtöket. 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.
Megjegyzé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-fiókkal, a kezdés előtt hozzon létre egy ingyenes 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 az login paranccsal. Az azonosítási folyamat befejezéséhez kövesse a terminálján megjelenő lépéseket.
- Futtasd a az version parancsot, hogy megtudd a telepített verziót és függő könyvtárakat. A legújabb verzióra való frissítéshez futtassa a az upgrade parancsot. 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áscsoportok olyan logikai csoportok, amelyekben Azure-erőforrásokat helyezhet üzembe és kezelhet. Hozzon létre egy django-project nevű erőforráscsoportot az az-group-create parancs segítségével a eastus helyen.
az group create --name django-project --location eastus
Megjegyzés:
Az erőforráscsoport helye tárolja az erőforráscsoport metaadatait. 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. A fürt létrehozása több percet vesz igénybe.
az aks create --resource-group django-project --name djangoappcluster --node-count 1 --generate-ssh-keys
Néhány perc múlva a parancs befejeződik, és JSON formátumú információkat ad vissza a klaszterről.
Megjegyzés:
AKS-fürt létrehozásakor a parancs automatikusan létrehoz egy második erőforráscsoportot az AKS erőforrásainak tárolására. További információ: Miért jön létre két erőforráscsoport az AKS-sel?
Csatlakozzon a klaszterhez
Kubernetes-fürtök kezeléséhez használja a kubectl parancssori eszközt, a Kubernetes kliensét. Ha az Azure Cloud Shellt használja, kubectl már telepítve van.
Megjegyzés:
Ha helyileg futtatja az Azure CLI-t, futtassa az az aks install-cli parancsot a telepítéshez kubectl.
A Kubernetes-fürthöz való csatlakozás konfigurálásához használja az kubectl parancsot. 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 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 kiszolgáló az alábbi attribútumokkal rendelkezik:
- A kiszolgáló első kiépítésekor létrejön egy új üres adatbázis neve
postgres. Ez a gyorsútmutató apostgresadatbázist használja. - Automatikusan létrehozott kiszolgálónév, rendszergazdai felhasználónév, rendszergazdai jelszó, erőforráscsoport neve (ha még nem adta meg a helyi környezetben), és ugyanaz a hely, mint az erőforráscsoport.
- A nyilvános hozzáférés argumentum használatával létrehoz egy olyan kiszolgálót, amely nyilvános hozzáféréssel rendelkezik minden ügyfél számára a megfelelő felhasználónévvel és jelszóval.
- 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ítse a ALLOWED_HOSTSsettings.py értékeit, hogy a Django-alkalmazás a Kubernetes-alkalmazáshoz rendelt külső IP-t használja.
ALLOWED_HOSTS = ['*']
A fájl frissítési DATABASES={ } szakasza settings.py . A 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 a következő kódrészletet. Ez a Dockerfile beállítja a Python 3.8-at, és telepíti a fájlban felsorolt összes követelményt 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
A rendszerkép létrehozása
Biztosítsa, hogy a my-django-app könyvtárban van a terminálban a cd parancs használatával. 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 Registry-t (ACR) használja, futtassa a az aks update parancsot az 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-manifest-fájl meghatározza a klaszter kívánt állapotát, például hogy milyen konténerképeket kell futtatni. Hozzon létre egy névvel ellátott djangoapp.yaml jegyzékfájlt, és másolja a következő YAML-definícióba.
Fontos
Frissítse a env szakaszt a SERVERNAME, YOUR-DATABASE-USERNAME és YOUR-DATABASE-PASSWORD értékekkel a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányhoz.
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. 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
A névvel ellátott django-app üzembe helyezés az üzembe helyezés részleteit ismerteti, például az alkalmazáshoz használandó rendszerképeket, a podok számát és a podkonfigurációt. Létrehoz egy szolgáltatást python-svc, amely az alkalmazást egy külső IP-címen keresztül teszi elérhetővé.
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őlté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.
Megjegyzé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-áttelepítést kell futtatnia, vagy statikus fájlokat kell gyűjtenie. A Django-rendszerhéj parancsokat a $ kubectl exec <pod-name> -- [COMMAND] paranccsal futtathatja. A parancs futtatása előtt meg kell keresnie a pod nevét a 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, futtassa a Django-adatbázis áttelepítését a paranccsal $ kubectl exec <pod-name> -- [COMMAND].
/code/ a projekt munkakönyvtára, amelyet a fenti Dockerfile szakaszban határoztak meg.
$ kubectl exec django-app-5d9cd6cd8-l6x4b -- python /code/manage.py migrate
A kimenet a következőképpen néz 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 a kubectl logs <pod-name> parancsot, hogy lássa, milyen kivételeket dob az alkalmazás. Ha az alkalmazás sikeresen működik, a futtatáskor kubectl logsehhez 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 rendbetétele
Az Azure-díjak elkerülése érdekében törölje a szükségtelen erőforrásokat. Ha már nincs szüksége a fürtre, az az group delete paranccsal távolítsa el 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
Megjegyzés:
A fürt törlésekor az AKS-fürt által használt Microsoft Entra szolgáltatási főszereplő 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. Felügyelt identitás használata esetén a platform kezeli az identitást, és nem igényel eltávolítást.
Kapcsolódó tartalom
- Kubernetes-erőforrások elérése az Azure Portal használatával
- Automatizált üzembe helyezés az Azure Kubernetes Service-hez
- Alkalmazások méretezése az Azure Kubernetes Service-ben
- Az Azure Database for PostgreSQL kezelése az Azure Portal használatával
- Kiszolgálóparaméterek konfigurálása az Azure Database for PostgreSQL-ben