[PYTHON] Stellen Sie Django + React von Grund auf auf GKE bereit. (4) Erstellen Sie Cluster- und Container-PUSH

Stellen Sie Django + React von Grund auf auf GKE bereit. (4) Erstellen Sie Cluster- und Container-PUSH

Dies ist eine Fortsetzung von (3) Erstellen eines GCP-Projekts.

Was du machen willst

Ich möchte eine Anwendung mit Djagno + React-Konfiguration entwickeln und für Google Kubernetes Engine bereitstellen Ich habe es geschrieben, weil es unwahrscheinlich war, dass es ein zusammenhängendes Tutorial geben würde.

** Ich denke, es gibt einige Punkte, die noch nicht perfekt sind **, aber ich denke, wenn Sie ein wenig Erfahrung haben, können Sie sie sofort verwenden.

Hinweis

Dies ist eine Aufzeichnung eines unerfahrenen Hobbyingenieurs, der mit der Bereitstellung zur Erstellung eines Portfolios zu kämpfen hat. Wenn es Mängel gibt, weisen Sie bitte darauf hin. ..

Zielfigur

Umgebung

$ node --version
v12.14.1

$ npm --version
6.13.7

$ python --version
Python 3.7.4

$ docker --version
Docker version 19.03.8

OS windows10 pro

Bereitstellen

Erstellen eines Kubernetes-Clusters

Erstellen Sie einen Cluster und stellen Sie den Container bereit. Sie können von außen darauf zugreifen, indem Sie Service und Ingress einstellen.

Erstellen Sie einen Cluster über die Konsole.

Clustername: [K8S_CLUSTER]
Standorttyp:Zone:[K8S_CLUSTER_ZONE]
Master-Version: 1.14.10-gke.27(Standard)

Holen Sie sich Kontexte

Rufen Sie die Kontexte ab, um den erstellten Cluster aus dem lokalen kubectl zu verwenden.

$\gke-django-tutorial\gcloud container clusters get-credentials [K8S_CLUSTER] --zone="[K8S_CLUSTER_ZONE]"
Fetching cluster endpoint and auth data.
kubeconfig entry generated for [K8S_CLUSTER].

#Überprüfen Sie, ob der Kontext angewendet wird
$\gke-django-tutorial\manifests\kubectl config current-context

Secrets

Geheime Umgebungsvariablen wie Datenbankbenutzername und Kennwort wurden von ".env" verwaltet, aber Kubernetes registriert sie in der Secrets-Ressource und verwendet sie.

Cloud SQL

Mithilfe von Secrets können Sie den CloudSQL-Benutzernamen und das Kennwort sicher als Umgebungsvariablen verwenden. Um eine Instanz von Cloud SQL von GKE zu verwenden, müssen Sie Geheimnisse für den Zugriff auf Instanzebene und den Datenbankzugriff erstellen.

Erstellen Sie Geheimnisse für den Zugriff auf Instanzebene.

$\gke-django-tutorial\manifests\kubectl create secret generic cloudsql-oauth-credentials --from-file=credentials.json=".\secrets\cloudsql\ZZZZZZZZZZZZZZZ.json"

secret/cloudsql-oauth-credentials created

Erstellen Sie Geheimnisse für den Zugriff auf die Datenbank.

$\gke-django-tutorial\manifests\kubectl create secret generic cloudsql --from-literal=username="[DATABASE_USER]" --from-literal=password="[DATABASE_PASSWORD]"

SECRET_KEY

Fügen wir Secrets das verbleibende "SECRET_KEY" hinzu, das in der ".env" -Datei beschrieben ist. Belassen Sie DEBUG in backend / config / settings.py als False.

$\gke-django-tutorial\manifests\kubectl create secret generic secret-key --from-literal=SECRET_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

Die relevanten Teile von backend / config / settings.py sind wie folgt.

# backend/config/settings.py

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.basename(BASE_DIR)

# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('SECRET_KEY')  #Veränderung

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

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': 'web-db',
        'USER': os.environ.get('DATABASE_USER'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD'),
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Container-Image erstellen

Erstellen Sie das Bild lokal und laden Sie es in die Google Cloud-Registrierung hoch. Der Bildname muss das Format "gcr.io / $ {PROJECT} / $ {IMAGENAME}: $ {TAGNAME}" haben.

#Bestätigung des Projektnamens
$\gke-django-tutorial\gcloud config get-value project
Your active configuration is: [YOUR_PROJECT]
gke-django-tutorial

#Image erstellen
# web-back(Django)
$\gke-django-tutorial\docker image build --no-cache -t gcr.io/[YOUR_PROJECT]/web-back:latest ./backend/web-back/.

# nginx-back
$\gke-django-tutorial\docker image build --no-cache -t gcr.io/[YOUR_PROJECT]/nginx-back:latest ./backed/nginx/.

# web-front(React)
$\gke-django-tutorial\docker image build --no-cache -t gcr.io/[YOUR_PROJECT]/web-front:latest ./frontend/web-front/.

# nginx-back
$\gke-django-tutorial\docker image build --no-cache -t gcr.io/[YOUR_PROJECT]/nginx-front:latest ./frontend/nginx/.

Container-Image hochladen

Laden Sie die vier von Ihnen erstellten Docker-Images in die Goocle Container Registry (GCR) hoch.

# backend
$\gke-django-tutorial\gcloud docker -- push gcr.io/[YOUR_PROJECT]/web-back:latest
$\gke-django-tutorial\gcloud docker -- push gcr.io/[YOUR_PROJECT]/nginx-back:latest

# frontend
$\gke-django-tutorial\gcloud docker -- push gcr.io/[YOUR_PROJECT]/web-front:latest
$\gke-django-tutorial\gcloud docker -- push gcr.io/[YOUR_PROJECT]/nginx-front:latest

Ich konnte Backend- und Frontend-Container-Images erstellen und an GCR senden.

(5)Deployment

Recommended Posts

Stellen Sie Django + React von Grund auf auf GKE bereit. (4) Erstellen Sie Cluster- und Container-PUSH
Stellen Sie Django + React von Grund auf auf GKE bereit. (3) Erstellen Sie ein GCP-Projekt
Bereitstellen von Django + Reagieren Sie von Grund auf auf GKE (1) Backend-Entwicklung - Nginx + Django
Bereitstellen von Django + Reagieren Sie von Grund auf auf GKE: Inhaltsverzeichnis
Django Memo # 1 von Grund auf neu
Lernen Sie die Grundlagen und Tipps der kanonischen Python-Ausdrücke von Grund auf neu
Django von vorne anfangen (Teil: 2)
Django von vorne anfangen (Teil: 1)
Shell zum Erstellen eines Django-Projekts
Reagieren und Kolben zu GCP
Erstellen und listen Sie Django-Modelle auf
Stellen Sie das Django-Projekt für Heroku bereit
Erstellen Sie benutzerdefinierte Django-Befehle und führen Sie sie über die Befehlszeile aus