Ejecuta Django en Google Kubernetes Engine

Las apps de Django que se ejecutan en GKE escalan de forma dinámica según el tráfico.

En este instructivo, se supone que estás familiarizado con el desarrollo web de Django. Si es la primera vez que usas el desarrollo de Django, es recomendable que escribas tu primera app de Django 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.

En este instructivo, se usa Django 3.que requiere al menos Python 3.7.

También necesitas tener Docker instalado.

Objetivos

En este instructivo, podrás:

  • Crear y conectar una base de datos de Cloud SQL
  • Crea y usa valores secretos de Kubernetes.
  • Implementa una app de Django en Google Kubernetes Engine.

Costos

En este instructivo, se usan 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. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. Habilita las API de Cloud SQL, GKE and Compute Engine.

    Habilita las API

  5. Instala e inicializa el SDK de Cloud.
  6. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  7. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  8. Habilita las API de Cloud SQL, GKE and Compute Engine.

    Habilita las API

  9. Instala e inicializa el SDK de Cloud.

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.

  1. 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
    
  2. 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
    

Confirma la configuración de tu Python

Este instructivo se basa en Python para ejecutar la aplicación de muestra en tu máquina. El código de muestra también requiere la instalación de dependencias

Para obtener más detalles, consulta la guía del entorno de desarrollo de Python.

  1. Confirma que tu versión de Python sea al menos la 3.7.

     python -V
    

    Deberías ver Python 3.7.3 o versiones posteriores.

  2. Crea un entorno virtual de Python y, luego, instala 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 autenticación de Cloud SQL para conectarte a Cloud SQL desde tu máquina local

Cuando se implementa, la app usa el proxy de autenticación de Cloud SQL 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 autenticación de Cloud SQL.

El proxy de autenticación de Cloud SQL usa la API de Cloud SQL para interactuar con tu instancia de SQL. Para ello, se requiere la autenticación de la aplicación a través de gcloud.

  1. Autentica y adquiere credenciales para la API:

    gcloud auth application-default login
    
  2. Descarga y, luego, instala el proxy de Cloud SQL Auth en tu máquina local.

    Linux de 64 bits

    1. Descarga el proxy de autenticación de Cloud SQL:
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
      
    2. Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
      chmod +x cloud_sql_proxy
      

    Linux de 32 bits

    1. Descarga el proxy de autenticación de Cloud SQL:
      wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
      
    2. Si no se encuentra el comando wget, ejecuta sudo apt-get install wget y repite el comando de descarga.
    3. Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
      chmod +x cloud_sql_proxy
      

    macOS de 64 bits

    1. Descarga el proxy de autenticación de Cloud SQL:
      curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
      
    2. Haz que el proxy de autenticación de Cloud SQL sea ejecutable:
      chmod +x cloud_sql_proxy
      

    macOS de 32 bits

    1. Descarga el proxy de autenticación de Cloud SQL:
      curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
      
    2. 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 por cloud_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 por cloud_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.19.1
    

    Otro SO

    Para otros sistemas operativos que no se incluyen aquí, puedes compilar el proxy de Cloud SQL Auth desde la fuente.

    Puedes mover la descarga a un lugar común, como una ubicación de tu PATH o tu directorio de inicio. Si decides realizar esta acción, cuando inicies el proxy de autenticación de Cloud SQL más adelante en el instructivo, recuerda hacer referencia a la ubicación elegida cuando uses los comandos cloud_sql_proxy.

Crea 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 Django implementado. Estos servicios se implementan en una región específica. Para lograr una mayor eficiencia entre los servicios, todos los servicios deben implementarse en la misma región. Para obtener más información sobre la región más cercana a tu ubicación, consulta Productos disponibles por región.

Configura una instancia de Cloud SQL para PostgreSQL

Django admite de forma oficial varias bases de datos relacionales, pero ofrece la mayor compatibilidad con PostgreSQL. PostgreSQL es compatible con Cloud SQL, por lo que, en este instructivo, se elige usar ese tipo de base de datos.

En la siguiente sección, se describe la creación de una instancia de PostgreSQL, una base de datos y un usuario de base de datos para la app.

  1. Crea la instancia de PostgreSQL:

    Console

    1. En Cloud Console, ve a la página Instancias de Cloud SQL:

      Ir a la página de instancias de Cloud SQL

    2. Haga clic en Crear instancia.

    3. Haz clic en PostgreSQL.

    4. En el campo ID de instancia, ingresa INSTANCE_NAME.

    5. Ingresa una contraseña para el usuario de postgres.

    6. Mantén los valores predeterminados en los otros campos.

    7. Haga clic en Crear.

    La instancia toma unos minutos en crearse y estar lista para su uso.

    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 Cloud
    • REGION: La región de Google Cloud

    La instancia toma unos minutos en crearse y estar lista para su uso.

  2. Dentro de la instancia creada, crea una base de datos:

    Console

    1. En la página de tu instancia, ve a la pestaña Bases de datos.
    2. Haga clic en Create database.
    3. En el cuadro de diálogo Nombre de la base de datos, ingresa DATABASE_NAME.
    4. Haga clic en Crear.

    gcloud

    • Crea la base de datos dentro de 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.

  3. Crea un usuario de base de datos:

    Console

    1. En la página de tu instancia, ve a la pestaña Usuarios.
    2. Haz clic en Agregar cuenta de usuario.
    3. En el cuadro de diálogo Agregar una cuenta de usuario a la instancia, en "Autenticación integrada", haga lo siguiente:
    4. Ingresa el nombre de usuario DATABASE_USERNAME.
    5. Ingresa la contraseña DATABASE_PASSWORD
    6. Haga clic en Agregar.

    gcloud

    • Crea el usuario dentro de 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.

  1. Ve a la página Cuentas de servicio de Google Cloud Console.

    Ve a la página Cuentas de servicio

  2. Selecciona el proyecto que contiene la instancia de Cloud SQL.
  3. Haga clic en Crear cuenta de servicio.
  4. En el cuadro de diálogo Crear cuenta de servicio, ingresa un nombre descriptivo para la cuenta de servicio.
  5. Cambia el ID de cuenta de servicio por un valor único y reconocible y, luego, haz clic en Crear.
  6. En Función, selecciona una de las siguientes funciones, haz clic en Continuar y, luego, haz clic en Listo:
    • Cloud SQL > Cliente de Cloud SQL
    • Cloud SQL > Editor de Cloud SQL
    • Cloud SQL > Administrador de Cloud SQL
  7. Haz clic en el menú de acciones de tu nueva cuenta de servicio y, luego, selecciona Administrar claves.
  8. Haz clic en el menú desplegable Agregar clave y, luego, en Crear clave nueva.
  9. 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

Establece la configuración de GKE

  1. Esta aplicación se representa en una sola configuración de Kubernetes llamada polls. En polls.yaml, reemplaza <your-project-id> por el ID de tu proyecto de Google Cloud (PROJECT_ID).

  2. Ejecuta el siguiente comando y anota el valor de connectionName:

    gcloud sql instances describe INSTANCE_NAME --format "value(connectionName)"
    
  3. En el archivo polls.yaml, reemplaza <your-cloudsql-connection-string> por el valor connectionName.

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.

  1. En una terminal separada, inicia el proxy de autenticación de Cloud SQL:

    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 desde la computadora local hasta la instancia de Cloud SQL para realizar pruebas locales. Mantén el proxy de autenticación de Cloud SQL en ejecución durante todo el tiempo que pruebes tu app de forma local. Ejecutar este proceso en una terminal separada te permite seguir trabajando mientras se ejecuta.

  2. 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
    
  3. Ejecuta las migraciones de Django para configurar tus modelos y elementos:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    python manage.py collectstatic
    
  4. Inicia el servidor web Django:

    python manage.py runserver
    
  5. 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.

  6. 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 Django, debe crear un superusuario. Dado que tienes una conexión accesible a la base de datos, puedes ejecutar comandos de administración:

  1. Crea un superusuario. Se le solicitará que ingrese un nombre de usuario, un correo electrónico y una contraseña.

    python manage.py createsuperuser
    
  2. Inicia un servidor web local:

    python manage.py runserver
    
  3. En tu navegador, ve a http://localhost:8000/admin.

  4. 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

  1. 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
    
  2. Recopila todo el contenido estático en una carpeta de manera local:

    python manage.py collectstatic
    
  3. Sube el contenido estático a Cloud Storage:

    gsutil -m rsync -r ./static gs://PROJECT_ID_MEDIA_BUCKET/static
    
  4. En mysite/settings.py, configura el valor de STATIC_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

  1. Para inicializar GKE, ve a la página Clústeres.

    IR 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".

  2. Crear un clúster de GKE:

    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.

    IR A LA PÁGINA CLÚSTERES

    Espera que el mensaje "Kubernetes Engine is getting ready. This can take a minute or more" desaparezca.

  3. 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 que gcloud y kubectl son herramientas independientes, asegúrate de que kubectl esté configurado para interactuar con el clúster correcto.

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

Configura Cloud SQL

  1. 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.

    1. 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]
      
    2. Si deseas crear los secretos para el acceso a la base de datos, usa la base de datos de 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
      
  2. Recupera la imagen pública de Docker para el proxy de Cloud SQL.

    docker pull b.gcr.io/cloudsql-docker/gce-proxy
    
  3. Compila una imagen de Docker y reemplaza <your-project-id> con tu ID del proyecto.

    docker build -t gcr.io/PROJECT_ID/polls .
    
  4. Configura Docker para que use gcloud como auxiliar de credenciales y envía la imagen a Container Registry:

    gcloud auth configure-docker
    
  5. Envía la imagen de Docker. Reemplaza <your-project-id> con el ID del proyecto.

    docker push gcr.io/PROJECT_ID/polls
    
  6. 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 Django 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

Se copiaron las vistas base, los modelos y las configuraciones de ruta desdeEscribe tu primera app de Django (Parte 1 yParte 2 )

Configuración de la base de datos

settings.py contiene la configuración de tu base de datos de SQL:

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

Configuración del Pod 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.

# The polls service provides a load-balancing proxy over the polls app
# pods. By specifying the type as a 'LoadBalancer', Kubernetes Engine will
# create an external HTTP load balancer.
# For more information about Services see:
#   https://kubernetes.io/docs/concepts/services-networking/service/
# For more information about external HTTP load balancing see:
#   https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
apiVersion: v1
kind: Service
metadata:
  name: polls
  labels:
    app: polls
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: polls

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.

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_NAME
              valueFrom:
                secretKeyRef:
                  name: cloudsql
                  key: database
            - 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: {}

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

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

Si no deseas borrar el proyecto, borra los recursos individuales.

  1. Borra el clúster de Google Kubernetes Engine:

    gcloud container clusters delete polls
    
  2. Borra la imagen de Docker que enviaste a Container Registry:

    gcloud container images delete gcr.io/PROJECT_ID/polls
    
  3. Borra la instancia de Cloud SQL:

    gcloud sql instances delete INSTANCE_NAME
    

¿Qué sigue?