[PYTHON] Déployez Django + React à partir de zéro vers GKE (4) Créez un cluster et un conteneur PUSH

Déployez Django + React à partir de zéro vers GKE (4) Créez un cluster et un conteneur PUSH

Ceci est la suite de (3) Créer un projet GCP.

Chose que tu veux faire

Je souhaite développer une application avec la configuration Djagno + React et la déployer sur Google Kubernetes Engine Je l'ai écrit parce qu'il était peu probable qu'il y ait un tutoriel cohérent.

Cependant, ** je pense qu'il y a des points qui ne sont pas encore parfaits **, mais je pense que si vous avez un peu d'expérience, vous pouvez l'utiliser immédiatement.

Mise en garde

Il s'agit d'un enregistrement d'un ingénieur amateur inexpérimenté qui lutte avec le déploiement pour créer un portefeuille. S'il y a des lacunes, veuillez les signaler. ..

Viser la figure

environnement

$ 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

Déployer

Créer un cluster Kubernetes

Créez un cluster et déployez le conteneur. Il est accessible de l'extérieur en définissant Service et Ingress.

Créez un cluster à partir de la console.

Nom du cluster: [K8S_CLUSTER]
Type de lieu:zone:[K8S_CLUSTER_ZONE]
Version principale: 1.14.10-gke.27(Défaut)

Obtenir des contextes

Obtenez les contextes pour utiliser le cluster créé à partir du kubectl local.

$\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].

#Vérifiez si le contexte est appliqué
$\gke-django-tutorial\manifests\kubectl config current-context

Secrets

Les variables d'environnement secrètes telles que le nom d'utilisateur et le mot de passe de la base de données ont été gérées par .env, mais Kubernetes les enregistre dans la ressource Secrets et les utilise.

Cloud SQL

En utilisant Secrets, vous pouvez utiliser en toute sécurité le nom d'utilisateur et le mot de passe CloudSQL comme variables d'environnement. Pour utiliser une instance de Cloud SQL depuis GKE, vous devez créer des secrets pour l'accès au niveau de l'instance et l'accès à la base de données.

Créez des secrets pour l'accès au niveau de l'instance.

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

secret/cloudsql-oauth-credentials created

Créez des secrets pour accéder à la base de données.

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

SECRET_KEY

Ajoutons le reste SECRET_KEY décrit dans le fichier .env à Secrets. Laissez DEBUG dans backend / config / settings.py sur False.

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

Les parties pertinentes de backend / config / settings.py sont les suivantes.

# 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')  #Changement

# 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',
    }
}

Créer une image de conteneur

Créez l'image localement et importez-la dans Google Cloud Registry. Le nom de l'image doit être au format «gcr.io / $ {PROJECT} / $ {IMAGENAME}: $ {TAGNAME}».

#Confirmation du nom du projet
$\gke-django-tutorial\gcloud config get-value project
Your active configuration is: [YOUR_PROJECT]
gke-django-tutorial

#Construire l'image
# 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/.

Télécharger l'image du conteneur

Téléchargez les quatre images Docker que vous avez créées dans le Goocle Container Registry (GCR).

# 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

J'ai pu créer des images de conteneurs backend et frontend et les pousser vers GCR.

(5)Deployment

Recommended Posts

Déployez Django + React à partir de zéro vers GKE (4) Créez un cluster et un conteneur PUSH
Déployer Django + React à partir de zéro vers GKE (3) Créer un projet GCP
Déployez Django + React à partir de zéro vers GKE (1) Développement backend - Nginx + Django
Déployer Django + React de zéro sur GKE: Table des matières
Django memo n ° 1 à partir de zéro
Apprenez les bases et les astuces des expressions canoniques Python à partir de zéro
Django à partir de zéro (partie: 2)
Django à partir de zéro (partie: 1)
Shell pour créer un projet django
React and Flask to GCP
Créer et lister des modèles Django
Déployer le projet django sur heroku
Créez des commandes Django personnalisées et exécutez-les à partir de la ligne de commande