Las apps de npm que se ejecutan en GKE escalan de forma dinámica según el tráfico.
En este instructivo, se presupone que estás familiarizado con el desarrollo web de ⌘. Si es la primera vez que usas el desarrollo de ⌘, te recomendamos trabajar con la escritura de tu primera app de ⌘ antes de continuar.
Si bien en este instructivo se muestra Django de forma específica, puedes usar este proceso de implementación con otros marcos de trabajo basados en Django, como Wagtail y el Django CMS.
También necesitas tener Docker instalado.
Objetivos
En este instructivo, podrás:
- Crear y conectar una base de datos de Cloud SQL
- Crear y usar valores secretos de Kubernetes
- Implementa una app de ⌘ en Google Kubernetes Engine.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Antes de comenzar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL, GKE and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud SQL, GKE and Compute Engine APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
Prepara el entorno
Clona una app de ejemplo
El código de la app de muestra de Django está en el repositorio GoogleCloudPlatform/python-docs-samples en GitHub.
Puedes descargar la muestra como un archivo ZIP y extraerla o clonar el repositorio en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Ve al directorio que contiene el código de muestra:
Linux/macOS
cd python-docs-samples/kubernetes_engine/django_tutorial
Windows
cd python-docs-samples\kubernetes_engine\django_tutorial
Confirme su configuración de Python
Este instructivo se basa en Python para ejecutar la aplicación de ejemplo en tu máquina. El código de muestra también requiere instalar dependencias
Para obtener más detalles, consulta la guía del entorno de desarrollo de Python.
Asegúrate de que tu versión de Python sea la 3.7.
python -V
Debería ver
Python 3.7.3
o una versión posterior.Cree un entorno virtual de Python y, luego, instale las dependencias:
Linux/macOS
python -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt
Windows
python -m venv env venv\scripts\activate pip install --upgrade pip pip install -r requirements.txt
Descarga el proxy de Cloud SQL Auth para conectarte a Cloud SQL desde tu máquina local
Cuando se implementa, la aplicación usa el proxy de Cloud SQL Auth integrado en el entorno de Google Kubernetes Engine para comunicarse con la instancia de Cloud SQL. Sin embargo, para probar tu aplicación de manera local, debes instalar y usar una copia local del proxy en tu entorno de desarrollo. Para obtener más detalles, consulta la guía del proxy de Cloud SQL Auth.
El proxy de Cloud SQL Auth utiliza la API de Cloud SQL para interactuar con su instancia de SQL. Para hacerlo, se necesita la autenticación de aplicación a través de gcloud.
Autentica y adquiere credenciales para la API:
gcloud auth application-default login
Descarga e instala el proxy de Cloud SQL Auth en tu máquina local.
Linux de 64 bits
- Descarga el proxy de autenticación de Cloud SQL:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
Linux de 32 bits
- Descarga el proxy de autenticación de Cloud SQL:
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
- Si no se encuentra el comando
wget
, ejecutasudo apt-get install wget
y repite el comando de descarga. - Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
macOS de 64 bits
- Descarga el proxy de autenticación de Cloud SQL:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
macOS de 32 bits
- Descarga el proxy de autenticación de Cloud SQL:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
Mac M1
- Descarga el proxy de autenticación de Cloud SQL:
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.arm64
- Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
chmod +x cloud_sql_proxy
Windows de 64 bits
Para descargar el proxy de autenticación de Cloud SQL, haz clic con el botón derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo porcloud_sql_proxy.exe
.Windows de 32 bits
Para descargar el proxy de autenticación de Cloud SQL, haz clic derecho en https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe y selecciona Guardar vínculo como. Cambia el nombre del archivo porcloud_sql_proxy.exe
.Imagen de Docker del proxy de Cloud SQL Auth
Para mayor comodidad, varias imágenes de contenedor que contienen el proxy de autenticación de Cloud SQL están disponibles en GitHub en el repositorio del proxy de autenticación de Cloud SQL. Puedes extraer la última imagen a tu máquina local usando Docker mediante el siguiente comando:docker pull gcr.io/cloudsql-docker/gce-proxy:1.30.1
Otro SO
Para otros sistemas operativos que no se incluyen aquí, puedes compilar el proxy de Cloud SQL Auth desde la fuente.Puedes optar por mover la descarga a un lugar común, como una ubicación en tu
PATH
o el directorio de inicio. Si eliges hacerlo, cuando inicies el proxy de Cloud SQL Auth más adelante en el instructivo, recuerda hacer referencia a la ubicación que elijas cuando uses los comandos decloud_sql_proxy
.- Descarga el proxy de autenticación de Cloud SQL:
Crear servicios de copia de seguridad
En este instructivo, se usan varios servicios de Google Cloud para proporcionar la base de datos, el almacenamiento de contenido multimedia y el almacenamiento secreto que admiten el proyecto implementado de ⌘. Estos servicios se implementan en una región específica. Para obtener eficiencia entre los servicios, todos los servicios deben implementarse en la misma región. Si quieres obtener más información sobre la región más cercana, consulta Productos disponibles por región.
Configura una instancia de Cloud SQL para PostgreSQL
TeamYouTube admite oficialmente varias bases de datos relacionales, pero ofrece la mayor compatibilidad con PostgreSQL. PostgreSQL es compatible con Cloud SQL, por lo que este instructivo elige usar ese tipo de base de datos.
En la siguiente sección, se describe la creación de una instancia, una base de datos y un usuario de base de datos para PostgreSQL para la app.
Crea la instancia de PostgreSQL:
Console
En Cloud Console, ve a la página Instancias de Cloud SQL.
Haga clic en Crear instancia.
Haz clic en PostgreSQL.
En el campo ID de instancia, ingresa
INSTANCE_NAME
.Ingresa una contraseña para el usuario de postgres.
Mantén los valores predeterminados en los otros campos.
Haga clic en Crear.
La instancia tarda unos minutos en crearse y estar lista para usarse.
gcloud
Crea la instancia de PostgreSQL:
gcloud sql instances create INSTANCE_NAME \ --project PROJECT_ID \ --database-version POSTGRES_13 \ --tier db-f1-micro \ --region REGION
Reemplaza lo siguiente:
INSTANCE_NAME
: Es el nombre de la instancia de Cloud SQL.PROJECT_ID
: El ID del proyecto de Google CloudREGION
: la región de Google Cloud
La instancia tarda unos minutos en crearse y estar lista para usarse.
En la instancia creada, cree una base de datos:
Console
- En la página de la instancia, ve a la pestaña Bases de datos.
- Haga clic en Create database.
- En el diálogo Nombre de la base de datos, ingresa
DATABASE_NAME
. - Haga clic en Crear.
gcloud
Cree la base de datos en la instancia creada recientemente:
gcloud sql databases create DATABASE_NAME \ --instance INSTANCE_NAME
Reemplaza
DATABASE_NAME
por un nombre para la base de datos dentro de la instancia.
Cree un usuario de base de datos:
Console
- En la página de tu instancia, ve a la pestaña Usuarios.
- Haz clic en Agregar cuenta de usuario.
- En el cuadro de diálogo Agregar una cuenta de usuario a la instancia en la autenticación integrada, haz lo siguiente:
- Ingresa el nombre de usuario
DATABASE_USERNAME
. - Ingresa la contraseña
DATABASE_PASSWORD
- Haga clic en Agregar.
gcloud
Cree el usuario en la instancia creada recientemente:
gcloud sql users create DATABASE_USERNAME \ --instance INSTANCE_NAME \ --password DATABASE_PASSWORD
Reemplaza
PASSWORD
por una contraseña segura.
Cree una cuenta de servicio
El proxy requiere una cuenta de servicio con privilegios de Editor para tu instancia de Cloud SQL. Para obtener más información sobre las cuentas de servicio, consulta la descripción general de la autenticación de Google Cloud.
- En la consola de Cloud, ve a la página Cuentas de servicio.
- Selecciona el proyecto que contiene la instancia de Cloud SQL.
- Haga clic en Crear cuenta de servicio.
- En el campo Nombre de la cuenta de servicio, ingresa un nombre descriptivo para la cuenta de servicio.
- Cambia el ID de la cuenta de servicio a un valor único y reconocible y, luego, haz clic en Crear y continuar.
-
Haz clic en el campo Seleccionar un rol y selecciona uno de los siguientes roles:
- Cloud SQL > Cliente de Cloud SQL
- Cloud SQL > Editor de Cloud SQL
- Cloud SQL > Administrador de Cloud SQL
- Haz clic en Listo para terminar de crear la cuenta de servicio.
- Haz clic en el menú de acciones de tu nueva cuenta de servicio y, luego, selecciona Administrar claves.
- Haz clic en el menú desplegable Agregar clave y, luego, en Crear clave nueva.
-
Confirma que el tipo de clave sea JSON y, luego, haz clic en Crear.
El archivo de claves privadas se descargará en tu equipo. Puedes moverlo a otra ubicación. Protege el archivo de clave.
Configura la base de datos
Usa los siguientes comandos a fin de configurar variables de entorno para acceder a la base de datos. Estas variables de entorno se usan para las pruebas locales.
Linux/macOS
export DATABASE_NAME=DATABASE_NAME
export DATABASE_USER=DATABASE_USERNAME
export DATABASE_PASSWORD=DATABASE_PASSWORD
Windows
set DATABASE_USER=DATABASE_USERNAME
set DATABASE_PASSWORD=DATABASE_PASSWORD
Establezca la configuración de GKE
Esta aplicación se representa en una sola configuración de Kubernetes llamada
polls
. Enpolls.yaml
, reemplaza<your-project-id>
por el ID de tu proyecto de Google Cloud (PROJECT_ID).Ejecuta el siguiente comando y anota el valor de
connectionName
:gcloud sql instances describe INSTANCE_NAME --format "value(connectionName)"
En el archivo
polls.yaml
, reemplaza<your-cloudsql-connection-string>
por el valorconnectionName
.
Cómo ejecutar la app en una computadora local
Con los servicios de copia de seguridad configurados, ahora puedes ejecutar la app en tu computadora. Esta configuración permite el desarrollo local, la creación de un superusuario y la aplicación de migraciones de bases de datos.
En una terminal separada, inicie el proxy de Cloud SQL Auth:
Linux/macOS
./cloud_sql_proxy -instances="PROJECT_ID:REGION:INSTANCE_NAME"=tcp:5432
Windows
cloud_sql_proxy.exe -instances="PROJECT_ID:REGION:INSTANCE_NAME"=tcp:5432
En este paso, se establece una conexión entre tu computadora local y tu instancia de Cloud SQL a fin de realizar pruebas locales. Mantén el proxy de Cloud SQL Auth en ejecución durante todo el tiempo que pruebes la app de manera local. Ejecutar este proceso en una terminal separada te permite seguir trabajando mientras se ejecuta.
En una terminal nueva, configura el ID del proyecto de forma local:
Linux/macOS
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Windows
set GOOGLE_CLOUD_PROJECT=PROJECT_ID
Ejecuta las migraciones de ⌘ para configurar tus modelos y elementos:
python manage.py makemigrations python manage.py makemigrations polls python manage.py migrate python manage.py collectstatic
Inicia el servidor web de ⌘:
python manage.py runserver
En tu navegador, ve a http://localhost:8000.
En la página, se muestra el siguiente texto: “Hello, world. You're at the polls index”. El servidor web de Django que se ejecuta en tu computadora proporciona las páginas de la app de muestra.
Presiona
Ctrl
/Cmd
+C
para detener el servidor web local.
Usar la Consola del administrador de Django
Para acceder a la Consola del administrador de ⌘, debes crear un superusuario. Dado que tiene una conexión de acceso local a la base de datos, puede ejecutar los siguientes comandos de administración:
Crea un superusuario. Se le pedirá que ingrese un nombre de usuario, un correo electrónico y una contraseña.
python manage.py createsuperuser
Inicia un servidor web local:
python manage.py runserver
En tu navegador, ve a http://localhost:8000/admin.
Accede al sitio del administrador con el nombre de usuario y la contraseña que usaste cuando ejecutaste
createsuperuser
.
Implementar la app en GKE.
Cuando la app se implementa en Google Cloud, usa el servidor Gunicorn. Como Gunicorn no procesa contenido estático, la app usa a Cloud Storage para ello.
Recopila y sube recursos estáticos
Crea un bucket de Cloud Storage y haz que se pueda leer públicamente.
gsutil mb gs://PROJECT_ID_MEDIA_BUCKET gsutil defacl set public-read gs://PROJECT_ID_MEDIA_BUCKET
Recopila todo el contenido estático en una carpeta de manera local:
python manage.py collectstatic
Sube el contenido estático a Cloud Storage:
gsutil -m rsync -r ./static gs://PROJECT_ID_MEDIA_BUCKET/static
En
mysite/settings.py
, configura el valor deSTATIC_URL
como la siguiente URL y reemplaza[YOUR_GCS_BUCKET]
por el nombre de tu depósito:http://storage.googleapis.com/PROJECT_ID_MEDIA_BUCKET/static/
Configura GKE
Para inicializar GKE, ve a la página Clústeres.
Cuando utilizas GKE por primera vez en un proyecto, debes esperar a que desaparezca el mensaje "Kubernetes Engine is getting ready. This may take a minute or more".
-
gcloud container clusters create polls \ --scopes "https://www.googleapis.com/auth/userinfo.email","cloud-platform" \ --num-nodes 4 --zone "us-central1-a"
¿Recibiste el error "Project [PROJECT_ID] is not fully initialized with the default service accounts."?
Inicializa GKE
Si recibiste un error, ve a Google Cloud Console para inicializar GKE en tu proyecto.
Espera que el mensaje "Kubernetes Engine is getting ready. This can take a minute or more" desaparezca.
Después de crear el clúster, usa la herramienta de línea de comandos de
kubectl
, que está integrada en gcloud, para interactuar con el clúster de GKE. Dado quegcloud
ykubectl
son herramientas independientes, asegúrate de quekubectl
esté configurado para interactuar con el clúster correcto.gcloud container clusters get-credentials polls --zone "us-central1-a"
Configura Cloud SQL
Necesitas varios secretos para habilitar la conexión de tu aplicación de GKE con tu instancia de Cloud SQL. Se requiere uno para el acceso a nivel de instancia (conexión), mientras que los otros dos se requieren para acceder a la base de datos. Para obtener más información sobre los dos niveles de control de acceso, consulta Control de acceso de instancias.
Si deseas crear el secreto para el acceso a nivel de instancia, proporciona la ubicación (
[PATH_TO_CREDENTIAL_FILE]
) de la clave de la cuenta de servicio JSON que descargaste cuando creaste tu cuenta de servicio (consulta Crea un cuenta de servicio):kubectl create secret generic cloudsql-oauth-credentials \ --from-file=credentials.json=[PATH_TO_CREDENTIAL_FILE]
A fin de crear secretos para el acceso a la base de datos, usa la base de datos SQL, el nombre de usuario y la contraseña definidos en el paso 2 de Inicializa tu instancia de Cloud SQL:
kubectl create secret generic cloudsql \ --from-literal=database=DATABASE_NAME \ --from-literal=username=DATABASE_USERNAME \ --from-literal=password=DATABASE_PASSWORD
Recupera la imagen pública de Docker para el proxy de Cloud SQL.
docker pull b.gcr.io/cloudsql-docker/gce-proxy
Compila una imagen de Docker y reemplaza
<your-project-id>
con tu ID del proyecto.docker build -t gcr.io/PROJECT_ID/polls .
Configura Docker para que use
gcloud
como auxiliar de credenciales y envía la imagen a Container Registry:gcloud auth configure-docker
Envía la imagen de Docker. Reemplaza
<your-project-id>
con el ID del proyecto.docker push gcr.io/PROJECT_ID/polls
Crea el recurso de GKE:
kubectl create -f polls.yaml
Implementar la app en GKE.
Después de crear los recursos, hay tres Pod de polls
en el clúster.
Verifica el estado de los pods:
kubectl get pods
Espera unos minutos para que los estados del pod se muestren como Running
. Si los pods no están listos o si ves reinicios, puedes revisar los registros de cada pod para averiguar el problema. [YOUR-POD-ID]
es una parte del resultado que muestra el comando kubectl get pods
anterior.
kubectl logs [YOUR_POD_ID]
Mira cómo se ejecuta la app en Google Cloud
Una vez que los pods estén listos, puedes obtener la dirección IP pública del balanceador de cargas:
kubectl get services polls
Toma nota de la dirección EXTERNAL-IP
y ve a http://[EXTERNAL-IP]
en tu navegador para ver la página de destino de las encuestas
de ⌘ y acceder a la Consola del administrador.
Examine el código
Aplicación de muestra
La app de muestra de Django se creó con las herramientas estándar de Django. Con los siguientes comandos, se crea el proyecto y la app de encuestas:
django-admin startproject mysite
python manage.py startapp polls
Las vistas base, los modelos y las configuraciones de ruta se copiaron de Cómo escribir tu primera app de npm (Parte 1 y Parte 2).
Configuración de la base de datos
settings.py
contiene la configuración de tu base de datos de SQL:
Configuraciones de Pods de Kubernetes
El archivo polls.yaml
especifica dos recursos de Kubernetes. El primero es el Service, que define un nombre coherente y una dirección IP privada para la aplicación web de Django. El segundo es un balanceador de cargas HTTP con una dirección IP externa pública.
El servicio proporciona un nombre de red y una dirección IP. Los pods de GKE ejecutan el código de la aplicación detrás el servicio.
El archivo polls.yaml
especifica una implementación que proporciona actualizaciones declarativas a los pods de GKE. El servicio dirige el tráfico a la implementación. Para ello, hace coincidir el selector del servicio con la etiqueta de implementación. En este caso, el selector polls
coincide con la etiqueta polls
.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Borra los recursos individuales
Si no quieres borrar el proyecto, borra los recursos individuales.
Borra el clúster de Google Kubernetes Engine:
gcloud container clusters delete polls
Borre la imagen de Docker que envió a Container Registry:
gcloud container images delete gcr.io/PROJECT_ID/polls
Borra la instancia de Cloud SQL:
gcloud sql instances delete INSTANCE_NAME
¿Qué sigue?
- Aprende a configurar PostgreSQL para producción
- Obtén más información sobre Django en Google Cloud