Megosztás a következőn keresztül:


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óban eastus.

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-USERNAMESERVERNAMEYOUR-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ő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.

Feljegyzés

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 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 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