Ajustar el tamaño de las cargas de trabajo de GKE a gran escala

En este tutorial se muestra cómo ajustar el tamaño de tus cargas de trabajo de Google Kubernetes Engine (GKE) con recomendaciones de VPA y métricas de uso.

Entender por qué es importante dimensionar correctamente los recursos

Si no asignas suficientes recursos, tus contenedores no tendrán los recursos necesarios para ejecutar tus aplicaciones, lo que hará que sean lentos y poco fiables. El aprovisionamiento excesivo no afecta al rendimiento de tus aplicaciones, pero puede aumentar tu factura mensual.

En la siguiente tabla se describen las implicaciones de asignar menos recursos de CPU y memoria de los necesarios, así como de asignar más recursos de los necesarios:

Recurso Estado de aprovisionamiento Riesgo Explicación
CPU Más de Coste Aumenta el coste de tus cargas de trabajo al reservar recursos innecesarios.
Debajo Rendimiento Puede provocar que las cargas de trabajo se ralenticen o dejen de responder.
Sin establecer Fiabilidad La CPU se puede limitar a 0, lo que provoca que tus cargas de trabajo no respondan.
Memoria Más de Coste Aumenta el coste de tus cargas de trabajo al reservar recursos innecesarios.
Debajo Fiabilidad Puede provocar que las aplicaciones finalicen con un error de falta de memoria.
Sin establecer Fiabilidad kubelet puede detener tus Pods en cualquier momento y marcarlos como fallidos.

Objetivos

En este tutorial aprenderás a:

  • Despliega una aplicación de ejemplo.
  • Exportar métricas de recomendaciones de GKE de Monitoring a BigQuery.
  • Usa BigQuery y Looker Studio para ver recomendaciones de contenedores de GKE en varios proyectos.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos pueden disfrutar de una prueba gratuita. Google Cloud

Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que hayas creado. Para obtener más información, consulta la sección Limpiar.

Antes de empezar

Configurar el proyecto

Cloud Shell tiene preinstalado el software que necesitas para este tutorial, como Docker, kubectl, gcloud CLI y Terraform. Si no usas Cloud Shell, debes instalar la CLI de gcloud.

  1. 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.
  2. Install the Google Cloud CLI.

  3. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  8. Install the Google Cloud CLI.

  9. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

  10. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  14. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  15. Configurar un entorno

    Para configurar tu entorno, sigue estos pasos

    1. Define las variables de entorno:

      export PROJECT_ID=PROJECT_ID
      export REGION=us-central1
      export ZONE=us-central1-f
      export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
      

      Sustituye PROJECT_ID por el Google Cloud ID de tu proyecto.

    2. Define las variables de entorno predeterminadas:

      gcloud config set project $PROJECT_ID
      gcloud config set compute/region $REGION
      gcloud config set compute/zone $ZONE
      
    3. Clona el repositorio de código.

      git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
      
    4. Cambia al directorio de trabajo.

      cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
      

    (Opcional) Configurar la aplicación de ejemplo

    Esta sección es opcional y sirve para desplegar una aplicación de ejemplo. Para usar un clúster ya creado, asegúrate de que Cloud Monitoring esté configurado en él.

    Para simular un entorno realista, usarás una secuencia de comandos de configuración para desplegar Online Boutique.

    En los pasos siguientes se instala la aplicación de ejemplo y se modifica la configuración predeterminada. Por ejemplo, las instrucciones configuran el autoescalador de pods horizontal (HPA) para algunas cargas de trabajo y cambian las solicitudes y los límites de recursos.

    1. Ejecuta la secuencia de comandos de configuración:

      ./scripts/setup.sh
      

      La secuencia de comandos de configuración hace lo siguiente:

      • Crea un clúster de GKE.
      • Despliega la aplicación de ejemplo Online Boutique.
      • Actualiza las solicitudes de recursos de memoria y CPU del pod.
      • Configura un recurso HorizontalPodAutoscaler para las adservice cargas de trabajo con el fin de simular un entorno realista.

      El script de configuración puede tardar hasta 10 minutos en completarse.

    2. Verifica que la aplicación de ejemplo esté lista:

      kubectl get deployment
      

      El resultado debería ser similar al siguiente:

      NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
      adservice               2/2     2            2           4m54s
      cartservice             1/1     1            1           4m55s
      checkoutservice         1/1     1            1           4m56s
      currencyservice         1/1     1            1           4m55s
      emailservice            1/1     1            1           4m56s
      frontend                1/1     1            1           4m55s
      loadgenerator           1/1     1            1           4m55s
      paymentservice          1/1     1            1           4m55s
      productcatalogservice   1/1     1            1           4m55s
      recommendationservice   1/1     1            1           4m56s
      redis-cart              1/1     1            1           4m54s
      shippingservice         1/1     1            1           4m54s
      

    Crear un repositorio

    Crea el repositorio para almacenar la imagen del exportador de métricas.

    1. Crea un repositorio de Docker:

      gcloud artifacts repositories create main --repository-format=docker \
          --location=$REGION \
          --description="docker repository"
      
    2. Configura la autenticación en los repositorios de Docker:

      gcloud auth configure-docker $REGION-docker.pkg.dev
      
    3. Para desplegar la imagen, ejecuta el siguiente comando:

      gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
      

    Desplegar la aplicación

    En la siguiente sección, usarás Terraform para realizar las siguientes tareas:

    • Crea una cuenta de servicio y asigna los permisos necesarios para gestionar e interactuar con los Google Cloud recursos.
    • Concede los roles Lector de monitorización, Editor de datos de BigQuery, Propietario de datos de BigQuery, Usuario de tareas de BigQuery e Invocador de Cloud Run a la cuenta de servicio.
    • Despliega un trabajo de Cloud Run que extrae una imagen Docker de Artifact Registry y la ejecuta con la configuración especificada.
    • Crea una tarea de Cloud Scheduler que active el servicio de Cloud Run a diario.
    • Crea un conjunto de datos, una tabla y una vista de BigQuery para almacenar datos de métricas y recomendaciones.

    Configurar Terraform

    1. Define las variables de entorno de configuración:

      export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset
      export TF_VAR_BIGQUERY_TABLE=gke_metrics
      export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600
      export TF_VAR_RECOMMENDATION_DISTANCE=86400
      export TF_VAR_LATEST_WINDOW_SECONDS=600
      export TF_VAR_METRIC_WINDOW=259200
      export TF_VAR_METRIC_DISTANCE=600
      

      Este comando incluye lo siguiente:

      • TF_VAR_BIGQUERY_DATASET y TF_VAR_BIGQUERY_TABLE: retienen los datos de métricas de GKE.
      • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: el periodo de las recomendaciones de VPA. El valor predeterminado es de 1.209.600 segundos (14 días).
      • TF_VAR_RECOMMENDATION_DISTANCE: el intervalo en el que se devuelven los puntos de datos de recomendación de VPA. El valor predeterminado es de 86.400 segundos (1 día).
      • TF_VAR_LATEST_WINDOW_SECONDS: el periodo durante el que se obtienen los valores de recursos más recientes solicitados y límite. El valor predeterminado es de 600 segundos (10 minutos).
      • METRIC_WINDOW: establece el periodo de tiempo de las métricas de uso y utilización de GKE. El valor predeterminado es 259.200 segundos (3 días).
      • METRIC_DISTANCE: el intervalo en el que se devuelven los puntos de datos. El valor predeterminado es de 600 segundos (10 minutos).

      Ajusta estos valores en función de las necesidades de tus cargas de trabajo. Por ejemplo, en el caso de las cargas de trabajo por lotes que se ejecutan una vez al mes, actualice TF_VAR_RECOMMENDATION_WINDOW_SECONDS y METRIC_WINDOW a 2592000 segundos (30 días).

    Desplegar la configuración de Terraform

    1. Inicializa, valida y aplica tu configuración:

      terraform -chdir=terraform init
      terraform -chdir=terraform validate
      terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
      

      Este comando proporciona un plan de ejecución y pide tu aprobación antes de hacer ningún cambio. Revisa el plan y, si todo es correcto, escribe yes para continuar.

      Una vez que el comando apply se haya completado correctamente, Terraform creará y gestionará tus recursos.

    2. Ejecuta manualmente la tarea de Cloud Scheduler:

      gcloud scheduler jobs run recommendation-schedule --location ${REGION}
      

    Verificar la implementación

    1. Seleccione la pestaña Registros en la página de detalles de workload-recommendations.

    2. Comprueba que los registros de métricas se estén procesando en la consola de Cloud Run:

      Ir a Cloud Run

      Los registros muestran las métricas que se escriben en BigQuery. La salida debería ser similar a la siguiente:

      INFO - Building Row
      INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics.
      INFO - Run Completed
      

      Si el resultado no coincide, espera cinco minutos y ejecuta el comando gcloud scheduler jobs run recommendation-schedule --location $REGION.

    Ver la recomendación de contenedor en BigQuery

    1. Ve a la página de BigQuery en la Google Cloud consola:

      Ir a BigQuery

    2. Comprueba que los datos se muestran en la tabla gke_metrics y en la vista container_recommendations. En función del número de cargas de trabajo, puede tardar unos minutos en escribir todas las métricas en BigQuery.

    3. En el editor de consultas, selecciona todas las filas de la vista container_recommendations:

      SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
      

      Este programa extrae las siguientes métricas de la monitorización en la nube:

      • Detalles de la carga de trabajo: el ID del proyecto, el nombre del clúster, el controlador y el nombre del contenedor.

      • Uso y utilización de la CPU y la memoria: la cantidad de CPU y memoria que utiliza la carga de trabajo, así como el porcentaje de CPU y memoria que se está utilizando.

      • Solicitado y límites: la cantidad de CPU y memoria que se solicitó para la carga de trabajo, así como la cantidad máxima de CPU y memoria que se permite para la carga de trabajo.

      • Recomendaciones de carga de trabajo de CPU y memoria: recomendaciones sobre la cantidad de CPU y memoria que se debe asignar a la carga de trabajo para que se ejecute correctamente, basadas en las recomendaciones de VPA para los despliegues y en el uso real y los usos objetivo de los objetos que no son de tipo Deployment.

    Visualizar recomendaciones en Looker Studio

    Looker Studio es una plataforma de inteligencia empresarial autogestionada y gratuita que te permite crear y usar visualizaciones de datos, paneles e informes. Con Looker Studio, puedes conectarte a tus datos, crear visualizaciones y compartir tus estadísticas con otros usuarios.

    Usa Looker Studio para visualizar los datos de la vista container_recommendations de BigQuery:

    1. Abre la plantilla del panel de control Ajuste de tamaño de cargas de trabajo.
    2. Haz clic en Usar mis propios datos.
    3. Selecciona el proyecto.
    4. En Conjunto de datos, seleccione gke_metric_dataset.
    5. En Tabla, selecciona container_recommendations.
    6. Haz clic en Añadir.
    7. Haz clic en Añadir al informe.

    Detalles de la plantilla de Looker Studio

    La página de detalles de la plantilla de Looker Studio proporciona la siguiente información:

    • Información general sobre el ajuste de tamaño de las cargas de trabajo de GKE: ofrece una descripción general de tus clústeres, que incluye lo siguiente:
      • Número de cargas de trabajo de mejor esfuerzo y de ráfaga que corren el riesgo de tener problemas de fiabilidad y rendimiento.
      • Posible ahorro de recursos de CPU y memoria. Los valores positivos indican un aprovisionamiento excesivo, mientras que los valores negativos indican un aprovisionamiento insuficiente.
    • Recomendaciones de cargas de trabajo: proporciona recomendaciones sobre las solicitudes y los límites de CPU y memoria de las cargas de trabajo.
    • Cargas de trabajo de GKE en riesgo: muestra las cargas de trabajo que corren el mayor riesgo de experimentar problemas de fiabilidad y rendimiento.
    • Historial - Ajuste del tamaño de la carga de trabajo - ¿Qué tal lo estamos haciendo?: Ofrece un historial de la implementación del ajuste de tamaño de las cargas de trabajo y de la reducción del número de cargas de trabajo de mejor esfuerzo.

    Recomendación de contenedor de CPU solicitada y límite

    Si los valores de CPU solicitados y límite de las cargas de trabajo son iguales, la calidad del servicio se considera Garantizada y la recomendación de CPU se establece en el máximo en el periodo de 14 días. De lo contrario, se usa el percentil 95 de la recomendación de CPU solicitada en un plazo de 14 días.

    Cuando los valores de solicitud y límite de CPU son iguales, la recomendación de límite de CPU se define como la recomendación de VPA de solicitud de CPU máxima solo para objetos de Deployment y el uso de CPU con una utilización objetivo del 70%. Si la solicitud y el límite de la carga de trabajo no son idénticos, se usa la proporción de límite actual.

    Memoria solicitada y recomendación de contenedor de límite

    Las recomendaciones de memoria solo usan la recomendación máxima de VPA para objetos de Deployments y el uso máximo de memoria con un uso objetivo del 80% para asegurar la fiabilidad de las cargas de trabajo. Puede actualizar los valores de utilización objetivo en la consulta de la vista container_recommendation.

    Se recomienda usar la misma cantidad de memoria para las solicitudes y los límites, ya que la memoria es un recurso que no se puede comprimir. Cuando se agota la memoria, el pod debe desactivarse. Para evitar que se desactiven los pods y se desestabilice tu entorno, debes definir la memoria solicitada como límite de memoria.

    Priorizar recomendaciones

    Se asigna un valor de prioridad a cada fila para mostrar las cargas de trabajo que requieren atención inmediata en función de las recomendaciones. Las unidades de CPU y memoria son diferentes. Para normalizar las unidades, se usa la proporción entre la CPU y la memoria predefinidas del precio bajo demanda del tipo de máquina E2 como aproximación para convertir las unidades de memoria en unidades de CPU.

    La prioridad se calcula mediante la siguiente fórmula:

    priority = (CPU requested - CPU recommendation) + ((memory requested -
    memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))
    

    En Autopilot, los recursos totales solicitados por la configuración de tu implementación deben estar dentro de los valores mínimos y máximos admitidos.

    Ver recomendaciones de VPA de varios proyectos

    Para ver las recomendaciones de contenedores de VPA en varios proyectos, usa un nuevo proyecto como proyecto de ámbito.

    Cuando despliegues este proyecto en tu entorno de producción, añade todos los proyectos que quieras analizar al ámbito de métricas del nuevo proyecto.

    Limpieza

    Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

    Eliminar el proyecto

    La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    Siguientes pasos