Dies ist eine Fortsetzung von (3) Erstellen eines GCP-Projekts.
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.
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. ..
$ 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
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)
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',
}
}
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/.
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.
Recommended Posts