Redimensiona tus cargas de trabajo de GKE a gran escala


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

Comprende por qué es importante el redimensionamiento de los recursos

El aprovisionamiento insuficiente puede privar tus contenedores de los recursos necesarios para ejecutar tus aplicaciones, lo que hace que sean lentos y poco confiables. El aprovisionamiento excesivo no afecta el rendimiento de tus aplicaciones, pero puede aumentar la factura mensual.

En la siguiente tabla, se describen las implicaciones del aprovisionamiento insuficiente y excesivo de CPU y memoria:

Recurso Estado de aprovisionamiento Riesgo Explicación
CPU Excesivo Costo Aumenta el costo de las cargas de trabajo, ya que reserva recursos innecesarios.
Insuficiente Rendimiento Puede hacer que las cargas de trabajo sean más lentas o dejen de responder.
Sin establecer Confiabilidad La CPU puede limitarse a 0, lo que hará que las cargas de trabajo no respondan.
Memoria Excesivo Costo Aumenta el costo de las cargas de trabajo, ya que reserva recursos innecesarios.
Insuficiente Confiabilidad Puede hacer que las aplicaciones finalicen con un error de memoria insuficiente (OOM).
Sin establecer Confiabilidad kubelet puede detener tus Pods en cualquier momento y marcarlos como con errores.

Objetivos

En este instructivo aprenderás realizar las siguientes tareas:

  • Implementar una aplicación de muestra
  • Exporta las métricas de recomendaciones de GKE de Monitoring a BigQuery.
  • Usa BigQuery y Looker Studio para ver las recomendaciones para contenedores de GKE en todos los proyectos

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

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

Configura tu proyecto

Cloud Shell está preinstalado con el software que necesitas para este instructivo, incluido lo siguiente: Docker, kubectl, gcloud CLI y Terraform. Si no usas Cloud Shell, debes instalar gcloud CLI.

  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. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  6. Habilita las APIs de Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build:

    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
  7. Instala Google Cloud CLI.
  8. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  9. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  10. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  11. Habilita las APIs de Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build:

    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
  12. Otorga roles a tu Cuenta de Google. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: 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:EMAIL_ADDRESS" --role=ROLE
    • Reemplaza PROJECT_ID con el ID del proyecto.
    • Reemplaza EMAIL_ADDRESS por tu dirección de correo electrónico.
    • Reemplaza ROLE por cada rol individual.

Configura tu entorno

Para configurar tu entorno, sigue estos pasos

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

    Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.

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

Configura la aplicación de ejemplo (opcional)

Esta es una sección opcional para implementar una aplicación de ejemplo. Para usar un clúster existente, asegúrate de que Cloud Monitoring esté configurado en tu clúster.

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

En los siguientes pasos, se instala la aplicación de muestra y se modifica la configuración predeterminada. Por ejemplo, en las instrucciones se configura Horizontal Pod Autoscaler (HPA) para algunas cargas de trabajo y se cambian los requisitos y 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.
    • Implementa la aplicación de muestra Online Boutique.
    • Actualiza las solicitudes de recursos de CPU y memoria del Pod.
    • Configura un recurso HorizontalPodAutoscaler para las cargas de trabajo adservice para simular un entorno realista.

    La secuencia de comandos de configuración puede tardar hasta 10 minutos en completarse.

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

    kubectl get deployment
    

    El resultado es similar a este:

    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 nuevo:

    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 implementar la imagen, ejecuta el siguiente comando:

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

Implemente la aplicación

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

  • Crear una cuenta de servicio y asignar los permisos necesarios para administrar y, además, interactuar con los recursos de Google Cloud
  • Otorgar el visualizador de supervisión, el editor de datos de BigQuery, el propietario de los datos de BigQuery, el usuario del trabajo de BigQuery y los roles de invocador de Cloud Run a la cuenta de servicio.
  • Implementar un trabajo de Cloud Run que extraiga una imagen de Docker de Artifact Registry y la ejecute con la configuración especificada.
  • Crear un trabajo de Cloud Scheduler que active el servicio de Cloud Run a diario
  • Crear un conjunto de datos, una tabla y una vista de BigQuery para almacenar datos y recomendaciones de métricas.

Configura Terraform

  1. Establece 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: contienen los datos de la métrica de GKE.
    • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: el período de las recomendaciones de VPA. La configuración predeterminada es 1,209,600 segundos o 14 días.
    • TF_VAR_RECOMMENDATION_DISTANCE es el intervalo en el que se muestran los datos de recomendación del VPA. La configuración predeterminada es de 86,400 segundos o cada 1 día. 
    • TF_VAR_LATEST_WINDOW_SECONDS: el período para obtener los valores de recursos solicitados y límites más recientes. La configuración predeterminada es de 600 segundos o 10 minutos.
    • METRIC_WINDOW: Establece el plazo para las métricas de uso y uso de GKE. La configuración predeterminada es 25,9200 segundos o 3 días.
    • METRIC_DISTANCE: El intervalo en el que se muestran los datos. La configuración predeterminada es de 600 segundos o cada 10 minutos.

    Ajusta estos valores según las necesidades de tus cargas de trabajo. Por ejemplo, para las cargas de trabajo por lotes que se ejecutan una vez al mes, actualiza TF_VAR_RECOMMENDATION_WINDOW_SECONDS y METRIC_WINDOW a 2592000 segundos (30 días).

Implementa 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 solicita tu aprobación antes de realizar cualquier cambio. Revisa el plan y, si todo es lo esperado, escribe yes para continuar.

    Una vez que el comando apply se complete de forma correcta, Terraform crea y administra tus recursos.

  2. Ejecuta el trabajo de Cloud Scheduler de forma manual:

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

Verifica la implementación

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

  2. Verifica que los registros de métricas se procesen en la consola de Cloud Run:

    Ir a Cloud Run

    Los registros muestran las métricas que se escriben en BigQuery. El resultado debería ser similar al siguiente ejemplo:

    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, luego, ejecuta el comando gcloud scheduler jobs run recommendation-schedule --location $REGION.

Visualiza la recomendación para contenedores en BigQuery

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

    Ir a BigQuery

  2. Verifica que los datos estén visibles en la tabla gke_metrics y en la vista container_recommendations. Según la cantidad de cargas de trabajo, la escritura de todas las métricas en BigQuery puede tardar unos minutos.

  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 Cloud Monitoring:

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

    • Uso y uso de CPU y memoria: La cantidad de CPU y memoria que usa la carga de trabajo, así como el porcentaje de CPU y memoria que se usa

    • Solicitados 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 permitida para la carga de trabajo.

    • Recomendaciones de CPU y memoria: Recomendaciones sobre cuánta CPU y memoria se deben asignar a la carga de trabajo para garantizar que se ejecute sin problemas, según las recomendaciones de VPA para las implementaciones y en el uso real. usos objetivo para objetos que no sean Deployment.

Visualiza recomendaciones en Looker Studio

Looker Studio es una plataforma de inteligencia empresarial gratuita y de autoservicio que te permite compilar y consumir informes, paneles y visualizaciones de datos. Con Looker Studio, puedes conectarte a tus datos, crear visualizaciones y compartir tus estadísticas con otras personas.

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

  1. Abre la plantilla del panel de redimensionamiento de la carga de trabajo.
  2. Haz clic en Usar mis propios datos.
  3. Selecciona tu proyecto.
  4. En Conjunto de datos, selecciona gke_metric_dataset.
  5. En Tabla, selecciona container_recommendations.
  6. Haga clic en Agregar.
  7. Haz clic en Agregar 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:

  • Descripción general del redimensionamiento de la carga de trabajo de GKE: proporciona una descripción general de los clústeres, incluido lo siguiente:
    • La cantidad de cargas de trabajo de mejor esfuerzo y de alto rendimiento que están en riesgo de problemas de confiabilidad y rendimiento.
    • Posibles ahorros de recursos de CPU y memoria Los valores positivos indican un aprovisionamiento excesivo, mientras que los valores negativos indican un aprovisionamiento insuficiente.
  • Recomendaciones de carga de trabajo: Proporciona recomendaciones para los límites y solicitudes de CPU y memoria de la carga de trabajo.
  • Cargas de trabajo de GKE en riesgo: Muestra las cargas de trabajo que tienen el mayor riesgo de experimentar problemas de confiabilidad y rendimiento.
  • Historial: Redimensionamiento de cargas de trabajo: ¿cómo lo hacemos? Proporciona una vista histórica de lo bien que se implementó el redimensionamiento de la carga de trabajo y la reducción de la cantidad de cargas de trabajo de mejor esfuerzo.

Recomendación del contenedor sobre CPU solicitada y límite

Si los valores del límite y la CPU solicitada de las cargas de trabajo son iguales, el QoS se considera Garantizado y la recomendación de CPU se establece como el máximo dentro del período de período de 14 días. De lo contrario, se usa el percentil 95 de la recomendación de CPU en un plazo de 14 días.

Cuando la solicitud de CPU y los valores de límite son iguales, la recomendación para el límite de CPU se establece en la recomendación de VPA máxima de solicitud de CPU solo para los objetos Deployment y el uso de CPU con un uso 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 existente.

Recomendación del contenedor sobre memoria solicitada y límite

Las recomendaciones de memoria usan la recomendación de VPA máxima solo para los objetos Deployment, y el uso máximo de memoria con un uso objetivo del 80% para garantizar la confiabilidad de las cargas de trabajo. Puedes actualizar los valores de uso 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, se debe quitar el Pod. Para evitar que se quiten los Pods y, en consecuencia, se desestabilice tu entorno, debes configurar la memoria solicitada como el límite de memoria.

Prioriza las recomendaciones

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

La prioridad se calcula con la siguiente fórmula:

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

Para Autopilot, el total de recursos que solicita tu configuración de implementación debe estar dentro de los valores mínimos y máximos admitidos.

Visualiza las recomendaciones del VPA para varios proyectos

Para ver recomendaciones sobre contenedores del VPA en varios proyectos, usa un proyecto nuevo como proyecto de permisos.

Cuando implementes este proyecto en el entorno de producción, agrega todos los proyectos que desees analizar al permiso de las métricas del proyecto nuevo.

Realiza una limpieza

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

La manera más fácil de evitar la facturación es borrar el proyecto que creaste para el instructivo.

Borra un proyecto de Google Cloud:

gcloud projects delete PROJECT_ID

¿Qué sigue?