Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Django in Google Kubernetes Engine ausführen

Django-Apps, die auf Google Kubernetes Engine (GKE) ausgeführt werden, skalieren gut, da sie in derselben Infrastruktur ausgeführt werden, die allen Google-Produkten zugrunde liegt.

In dieser Anleitung wird davon ausgegangen, dass Sie mit der Django-Webentwicklung vertraut sind. Wenn Sie mit der Django-Entwicklung noch nicht vertraut sind, sollten Sie zuerst Ihre erste Django-App schreiben. In dieser Anleitung stellen die Modelle der Anwendung Umfragen dar, die Fragen enthalten. Sie können mit den Modellen über die Django-Admin-Konsole interagieren.

Für diese Anleitung ist Python 2.7, 3.4 oder höher erforderlich. Außerdem muss Docker installiert sein.

Hinweis

  1. Melden Sie sich bei Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, melden Sie sich hier für ein neues Konto an.

  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Cloud SQL, and Compute Engine APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren und initialisieren Sie das Cloud SDK.

App herunterladen und ausführen

Nachdem Sie die Voraussetzungen erfüllt haben, laden Sie die Django-Beispiel-App herunter und stellen Sie sie bereit. In den folgenden Abschnitten erfahren Sie, wie Sie die Anwendung konfigurieren, ausführen und bereitstellen.

Django-App klonen

Der Code für die Django-Beispiel-App befindet sich im Repository GoogleCloudPlatform/python-docs-samples auf GitHub.

  1. Sie können entweder das Beispiel als ZIP-Datei herunterladen und entpacken oder das Repository auf Ihren lokalen Computer klonen:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

  2. Gehen Sie zum Verzeichnis mit dem Beispielcode:

cd python-docs-samples/kubernetes_engine/django_tutorial

Lokale Umgebung einrichten

Nach der Bereitstellung verwendet die Anwendung den in die App Engine-Umgebung integrierten Cloud SQL Proxy, um mit der Cloud SQL-Instanz zu kommunizieren. Sie müssen jedoch eine lokale Kopie des Cloud SQL Proxys in Ihrer Entwicklungsumgebung installieren und verwenden, um die Anwendung lokal zu testen.

Weitere Informationen zum Cloud SQL Proxy

Für einfache Verwaltungsaufgaben auf der Cloud SQL-Instanz können Sie den PostgreSQL-Client nutzen.

Cloud SQL-Proxy installieren

Laden Sie den Cloud SQL-Proxy herunter und installieren Sie ihn. Der Cloud SQL Proxy stellt eine Verbindung zu Ihrer Cloud SQL-Instanz her, wenn Programme lokal ausgeführt werden.

Linux 64-Bit

  1. Laden Sie den Proxy herunter:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. Machen Sie den Proxy ausführbar:
    chmod +x cloud_sql_proxy
    

Linux 32-Bit

  1. Laden Sie den Proxy herunter:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. Machen Sie den Proxy ausführbar:
    chmod +x cloud_sql_proxy
    

macOS 64-Bit

  1. Laden Sie den Proxy herunter:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. Machen Sie den Proxy ausführbar:
    chmod +x cloud_sql_proxy
    

macOS 32-Bit

  1. Laden Sie den Proxy herunter:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. Machen Sie den Proxy ausführbar:
    chmod +x cloud_sql_proxy
    

Windows 64-Bit

Klicken Sie mit der rechten Maustaste auf https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe, wählen Sie Link speichern unter aus und laden Sie den Proxy herunter. Benennen Sie die Datei in cloud_sql_proxy.exe um.

Windows 32-Bit

Klicken Sie mit der rechten Maustaste auf https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe, wählen Sie Link speichern unter aus und laden Sie den Proxy herunter. Benennen Sie die Datei in cloud_sql_proxy.exe um.

Docker-Proxy-Image

Das Cloud SQL-Team verwaltet zur Vereinfachung mehrere Container-Images, die den Cloud SQL-Proxy für eine Verwendung durch unsere Kunden enthalten. Weitere Informationen zu diesen Images finden Sie im Cloud SQL-Proxy-Repository auf GitHub. Mit folgendem Befehl können Sie das neueste Image mithilfe von Docker auf Ihren lokalen Computer übertragen:
docker pull gcr.io/cloudsql-docker/gce-proxy:1.19.1

Andere Betriebssysteme

Bei anderen Betriebssystemen, die hier nicht aufgeführt sind, können Sie den Proxy aus der Quelle kompilieren.

Cloud SQL-Instanz erstellen

  1. <a{: class="internal" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,track-metadata-end-goal,class,target" l10n-encrypted-href="lsL4NbV5FI0DRuRANJcTZKJysOQGKX761P3ItELRG1PjHEtGnUIGGfDSUdzN6k/z" target="_blank" track-metadata-end-goal="createInstance" track-metadata-position="body" track-name="internalLink" track-type="python" }=""> Cloud SQL for PostgreSQL-Instanz erstellen.

    Benennen Sie die Instanz polls-instance oder ähnlich. Es kann einige Minuten dauern, bis die Instanz bereit ist. Wenn die Instanz bereit ist, wird sie in der Instanzliste angezeigt.

    </a>
  2. Führen Sie mit dem Cloud SDK den folgenden Befehl aus. Dabei stellt [YOUR_INSTANCE_NAME] den Namen der Cloud SQL-Instanz dar.
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    Notieren Sie den Wert für [CONNECTION_NAME], der in der Ausgabe angezeigt wird.

    Der Wert für [CONNECTION_NAME] hat das Format [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].

Cloud SQL-Instanz initialisieren

  1. Starten Sie den Cloud SQL-Proxy mit dem Wert für [CONNECTION_NAME] aus dem vorherigen Schritt:

    Linux/macOS

    ./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:5432

    Windows

    cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:5432

    Ersetzen Sie [YOUR_INSTANCE_CONNECTION_NAME] durch den Wert [CONNECTION_NAME], den Sie im vorherigen Schritt notiert haben.

    Dadurch wird eine Verbindung vom lokalen Computer zur Cloud SQL-Instanz hergestellt, damit lokale Tests durchgeführt werden können. Brechen Sie die Ausführung des Cloud SQL-Proxys nicht ab, solange Sie die Anwendung noch lokal testen.

  2. Erstellen Sie einen Cloud SQL-Nutzer und eine Cloud SQL-Datenbank:

    Cloud Console

    1. Erstellen Sie eine neue Datenbank mit der Cloud Console für die Cloud SQL-Instanz polls-instance. Sie können beispielsweise den Namen polls vergeben.
    2. Erstellen Sie mithilfe der Cloud Console einen neuen Nutzer für die Cloud SQL-Instanz polls-instance.

    Postgres-Client

    1. Installieren Sie den Postgres-Client in einem neuen Befehlszeilentab.
      sudo apt-get install postgresql
    2. Verwenden Sie den Postgres-Client oder ein vergleichbares Programm, um eine Verbindung zur Instanz herzustellen. Geben Sie bei entsprechender Aufforderung das von Ihnen festgelegte Administratorpasswort ein.
      psql --host 127.0.0.1 --user postgres --password
    3. Erstellen Sie die erforderlichen Datenbanken, Nutzer und Zugriffsberechtigungen in Ihrer Cloud SQL-Datenbank mit den folgenden Befehlen. Ersetzen Sie [POSTGRES_USER] und [POSTGRES_PASSWORD] durch den Nutzernamen und das Passwort, das Sie verwenden möchten.
      CREATE DATABASE polls;
      CREATE USER [POSTGRES_USER] WITH PASSWORD '[POSTGRES_PASSWORD]';
      GRANT ALL PRIVILEGES ON DATABASE polls TO [POSTGRES_USER];
      GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO [POSTGRES_USER];
      

Dienstkonto erstellen

Für den Proxy ist ein Dienstkonto mit Bearbeitungsberechtigungen für Ihre Cloud SQL-Instanz erforderlich. Weitere Informationen zu Dienstkonten finden Sie in der Authentifizierungsübersicht für Google Cloud.

  1. Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.

    Zur Seite "Dienstkonten"

  2. Wählen Sie das Projekt aus, in dem sich die Cloud SQL-Instanz befindet.
  3. Klicken Sie auf Dienstkonto erstellen.
  4. Geben Sie in das Dialogfeld Dienstkonto erstellen einen aussagekräftigen Namen für das Dienstkonto ein.
  5. Wählen Sie unter Rolle eine der folgenden Rollen aus:
    • Cloud SQL > Cloud SQL-Client
    • Cloud SQL > Cloud SQL-Bearbeiter
    • Cloud SQL > Cloud SQL-Administrator
  6. Ändern Sie die Dienstkonto-ID in einen eindeutigen, erkennbaren Wert.
  7. Klicken Sie auf Neuen privaten Schlüssel bereitstellen und bestätigen Sie den Schlüsseltyp JSON.
  8. Klicken Sie auf Erstellen.

    Die Datei mit dem privaten Schlüssel wird auf Ihren Computer heruntergeladen. Sie können die Datei an einen anderen Speicherort verschieben. Bewahren Sie die Schlüsseldatei sicher auf.

Datenbankeinstellungen konfigurieren

Verwenden Sie die folgenden Befehle, um Umgebungsvariablen für den Datenbankzugriff festzulegen. Diese Umgebungsvariablen werden für lokale Tests verwendet.

Linux/macOS

export DATABASE_USER=<your-database-user>
export DATABASE_PASSWORD=<your-database-password>

Windows

set DATABASE_USER=<your-database-user>
set DATABASE_PASSWORD=<your-database-password>

GKE-Konfiguration einrichten

  1. Diese Anwendung wird in einer einzelnen Kubernetes-Konfiguration namens polls dargestellt. Ersetzen Sie in polls.yaml <your-project-id> durch Ihre Google Cloud-Projekt-ID.

  2. Führen Sie den folgenden Befehl aus und notieren Sie den Wert von connectionName:

    gcloud beta sql instances describe [YOUR_INSTANCE_NAME]
    
  3. Ersetzen Sie in der Datei polls.yaml die Variable <your-cloudsql-connection-string> durch den Wert connectionName.

App auf lokalem Computer ausführen

  1. Zum Ausführen der Django-App auf Ihrem lokalen Computer richten Sie eine Python-Entwicklungsumgebung ein, einschließlich Python, pip und virtualenv.

  2. Erstellen Sie eine isolierte Python-Umgebung und installieren Sie Abhängigkeiten: Wenn Ihre Python 3-Installation einen anderen Namen hat, verwenden Sie diesen im ersten Befehl:

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    
  3. Führen Sie die Django-Migrationen aus, um die Modelle einzurichten:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. Starten Sie einen lokalen Webserver:

    python manage.py runserver
    
  5. Wechseln Sie in Ihrem Browser zu http://localhost:8000.

    Sie sehen eine Seite mit folgendem Text: "Hello, world. Sie befinden sich im Umfragenindex." Der auf Ihrem Computer ausgeführte Django-Webserver stellt die Beispiel-App-Seiten bereit.

  6. Drücken Sie Control+C, um den lokalen Webserver zu beenden.

Django-Verwaltungskonsole verwenden

  1. Erstellen Sie einen Superuser: Sie müssen einen Nutzernamen und ein Passwort festlegen.

    python manage.py createsuperuser
    
  2. Führen Sie das Hauptprogramm aus:

    python manage.py runserver
    
  3. Wechseln Sie in Ihrem Browser zu http://localhost:8000/admin.

  4. Melden Sie sich mit dem Nutzernamen und dem Passwort an, die Sie beim Ausführen von createsuperuser verwendet haben.

Anwendung in GKE bereitstellen

Wenn die Anwendung in Google Cloud bereitgestellt wird, verwendet sie den Gikenorn-Server. Gunicorn stellt keine statischen Inhalte bereit, sodass die App zur Bereitstellung statischer Inhalte Google Cloud Storage verwendet.

Statische Ressourcen sammeln und hochladen

  1. Erstellen Sie einen Cloud Storage-Bucket und machen Sie ihn öffentlich lesbar. Ersetzen Sie [YOUR_GCS_BUCKET] durch einen Bucket-Namen Ihrer Wahl. Sie können beispielsweise Ihre Projekt-ID als Bucket-Namen verwenden:

    gsutil mb gs://[YOUR_GCS_BUCKET]
    gsutil defacl set public-read gs://[YOUR_GCS_BUCKET]
    
  2. Sammeln Sie alle lokalen statischen Inhalte in einem Ordner:

    python manage.py collectstatic
    
  3. Laden Sie die statischen Inhalte zu Cloud Storage hoch:

    gsutil -m rsync -r ./static gs://[YOUR_GCS_BUCKET]/static
    
  4. Setzen Sie in mysite/settings.py den Wert von STATIC_URL auf die folgende URL und ersetzen Sie [YOUR_GCS_BUCKET] durch Ihren Bucket-Namen:

    http://storage.googleapis.com/[YOUR_GCS_BUCKET]/static/
    

GKE einrichten

  1. Zur Initialisierung von GKE rufen Sie die Seite Cluster auf.

    Zur Cluster-Seite

    Wenn Sie GKE zum ersten Mal in einem Projekt verwenden, müssen Sie warten, bis die Meldung "Kubernetes Engine wird vorbereitet. Dies kann einige Minuten dauern" nicht mehr angezeigt wird.

  2. GKE-Cluster erstellen:

    gcloud container clusters create polls \
      --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \
      --num-nodes 4 --zone "us-central1-a"
    

    Wurde Ihnen folgender Fehler angezeigt: "Projekt [PROJECT_ID] wurde nicht vollständig mit den standardmäßigen Dienstkonten initialisiert."?

    GKE initialisieren

    Wenn Sie eine Fehlermeldung erhalten haben, rufen Sie die Google Cloud Console auf, um GKE in Ihrem Projekt zu initialisieren.

    Zur Cluster-Seite

    Warten Sie, bis die Meldung "Kubernetes Engine wird aktiviert. Dies kann einige Minuten dauern" erlischt.

  3. Nachdem der Cluster erstellt wurde, verwenden Sie das kubectl-Befehlszeilentool, das zum gcloud-Tool gehört, um mit dem GKE-Cluster zu interagieren. Da gcloud und kubectl separate Tools sind, muss kubectl für die Interaktion mit dem richtigen Cluster konfiguriert sein.

    gcloud container clusters get-credentials polls --zone "us-central1-a"
    

Cloud SQL einrichten

  1. Es sind mehrere Secrets erforderlich, damit die GKE-App eine Verbindung zu Ihrer Cloud SQL-Instanz herstellen kann. Ein Secret ist für den Zugriff auf Instanzebene (die Verbindung) erforderlich, die anderen beiden für den Datenbankzugriff. Weitere Informationen zu den beiden Ebenen der Zugriffskontrolle finden Sie unter Instanzzugriffskontrolle.

    1. Geben Sie zum Erstellen des Secrets für den Zugriff auf Instanzebene den Speicherort ([PATH_TO_CREDENTIAL_FILE]) des JSON-Dienstkontoschlüssels an, den Sie beim Erstellen Ihres Dienstkontos heruntergeladen haben (siehe Dienstkonto erstellen):

      kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=[PATH_TO_CREDENTIAL_FILE]
      
    2. Verwenden Sie zum Erstellen der Secrets für den Datenbankzugriff die in Schritt 2 von Cloud SQL-Instanz initialisieren definierten SQL- [DATABASE_USERNAME] und [PASSWORD]:

      kubectl create secret generic cloudsql --from-literal=username=[DATABASE_USERNAME] --from-literal=password=[PASSWORD]
      
  2. Rufen Sie das öffentliche Docker-Image für den Cloud SQL-Proxy ab.

    docker pull b.gcr.io/cloudsql-docker/gce-proxy
    
  3. Erstellen Sie ein Docker-Image und ersetzen Sie dabei <your-project-id> durch Ihre Projekt-ID.

    docker build -t gcr.io/<your-project-id>/polls .
    
  4. Konfigurieren Sie Docker so, dass gcloud als Credential Helper verwendet wird. Dadurch können Sie das Image an Container Registry übertragen:

    gcloud auth configure-docker
    
  5. Übertragen Sie das Docker-Image per Push. Ersetzen Sie <your-project-id> durch Ihre Projekt-ID.

    docker push gcr.io/<your-project-id>/polls
    
  6. Erstellen Sie die GKE-Ressource:

    kubectl create -f polls.yaml
    

Anwendung in GKE bereitstellen

Nach der Erstellung der Ressourcen befinden sich im Cluster drei polls-Pods. Prüfen Sie den Status der Pods:

    kubectl get pods

Warten Sie einige Minuten, bis sich der Status der Pods in Running befindet. Wenn die Pods nicht bereit sind oder neu gestartet werden, können Sie die Logs für einen bestimmten Pod abrufen, um das Problem zu ermitteln. [YOUR-POD-ID] ist Teil der Ausgabe, die vom vorherigen kubectl get pods - Befehl zurückgegeben wurde.

    kubectl logs [YOUR_POD_ID]

Anwendung in Google Cloud ausführen

Wenn die Pods einsatzbereit sind, können Sie die öffentliche IP-Adresse des Load-Balancers abrufen:

kubectl get services polls

Rufen Sie in Ihrem Browser die Adresse EXTERNAL-IP auf, um die grundlegende Django-Landingpage zu sehen und auf die Admin-Konsole zuzugreifen.

Code verstehen

Die Django-Beispiel-App wurde mit den Django-Standardtools erstellt. Mit den folgenden Befehlen werden das Projekt und die Umfrage-App erstellt:

django-admin startproject mysite
python manage.py startapp polls

settings.py enthält die Konfiguration für Ihre SQL-Datenbank:

DATABASES = {
    'default': {
        # If you are using Cloud SQL for MySQL rather than PostgreSQL, set
        # 'ENGINE': 'django.db.backends.mysql' instead of the following.
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'polls',
        'USER': os.getenv('DATABASE_USER'),
        'PASSWORD': os.getenv('DATABASE_PASSWORD'),
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Die Datei polls.yaml gibt zwei Kubernetes-Ressourcen an. Der erste ist der Dienst, der einen konsistenten Namen und eine private IP-Adresse für die Django-Web-App definiert. Der zweite ist ein HTTP-Load-Balancer mit einer öffentlichen externen IP-Adresse.

# The polls service provides a load-balancing proxy over the polls app
# pods. By specifying the type as a 'LoadBalancer', Container Engine will
# create an external HTTP load balancer.
# For more information about Services see:
#   https://cloud.google.com/container-engine/docs/services/
# For more information about external HTTP load balancing see:
#   https://cloud.google.com/container-engine/docs/load-balancer
apiVersion: v1
kind: Service
metadata:
  name: polls
  labels:
    app: polls
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: polls

Der Dienst stellt einen Netzwerknamen und eine IP-Adresse bereit und GKE-Pods führen den Anwendungscode hinter dem Dienst aus. Die Datei polls.yaml gibt ein Deployment an, mit dem deklarative Updates für GKE-Pods zur Verfügung gestellt werden. Der Dienst leitet den Traffic zum Deployment um, indem er die Auswahl des Dienstes mit dem Label des Deployments abgleicht. In diesem Fall entspricht der Selektor polls dem Label polls.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: polls
  labels:
    app: polls
spec:
  replicas: 3
  selector:
    matchLabels:
      app: polls
  template:
    metadata:
      labels:
        app: polls
    spec:
      containers:
      - name: polls-app
        # Replace  with your project ID or use `make template`
        image: gcr.io/<your-project-id>/polls
        # This setting makes nodes pull the docker image every time before
        # starting the pod. This is useful when debugging, but should be turned
        # off in production.
        imagePullPolicy: Always
        env:
            - name: DATABASE_USER
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: username
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: password
        ports:
        - containerPort: 8080

      - image: gcr.io/cloudsql-docker/gce-proxy:1.16
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                  "-instances=<your-cloudsql-connection-string>=tcp:5432",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-oauth-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: ssl-certs
            mountPath: /etc/ssl/certs
          - name: cloudsql
            mountPath: /cloudsql
      volumes:
        - name: cloudsql-oauth-credentials
          secret:
            secretName: cloudsql-oauth-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir: {}

Bereinigen

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Einzelne Ressourcen löschen

Wenn Sie das Projekt nicht löschen möchten, löschen Sie die einzelnen Ressourcen.

  1. Löschen Sie den Google Kubernetes Engine-Cluster:

    gcloud container clusters delete polls
    
  2. Löschen Sie das Docker-Image, das Sie in Container Registry hochgeladen haben:

    gcloud container images delete gcr.io/${PROJECT_ID}/polls
    
  3. Löschen Sie die Cloud SQL-Instanz:

    gcloud sql instances delete $INSTANCE_NAME