Cómo escalar una aplicación

En esta página se explica cómo escalar una aplicación implementada en Google Kubernetes Engine.

Descripción general

Cuando implementas una aplicación en GKE, defines cuántas réplicas de la aplicación quieres ejecutar. Cuando escalas una aplicación, aumentas o disminuyes la cantidad de réplicas.

Cada réplica de tu aplicación representa un pod de Kubernetes que encapsula los contenedores de tu aplicación.

Antes de comenzar

Como preparación para esta tarea, realiza los siguientes pasos:

  • Asegúrate de habilitar la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de instalar el SDK de Cloud.
  • Configura el ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres por zona, configura tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres por región, configura tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Cómo inspeccionar una aplicación

Antes de escalar tu aplicación, debes inspeccionarla y asegurarte de que esté en buen estado.

Para ver todas las aplicaciones implementadas en tu clúster, ejecuta kubectl get [CONTROLLER]. Sustituye [CONTROLLER] por deployments, statefulsets, o bien otro tipo de objeto de controlador.

Por ejemplo, si ejecutas kubectl get deployments y creaste una sola implementación, el resultado del comando debería ser similar al siguiente:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                1         1         1            1           10m

El resultado de este comando es similar para todos los objetos, pero puede parecer levemente diferente. En el caso de las implementaciones, el resultado tiene seis columnas:

  • NAME enumera los nombres de las implementaciones en el clúster.
  • DESIRED muestra la cantidad deseada de réplicas, o el estado deseado, de la aplicación, que defines cuando creas la implementación.
  • CURRENT muestra cuántas réplicas se están ejecutando en este momento.
  • UP-TO-DATE muestra la cantidad de réplicas que se han actualizado para alcanzar el estado deseado.
  • AVAILABLE muestra cuántas réplicas de la aplicación están disponibles para tus usuarios.
  • AGE muestra la cantidad de tiempo en que la aplicación ha estado ejecutándose en el clúster.

En este ejemplo, solo hay una implementación, my-app, que tiene una sola réplica porque su estado deseado es una réplica. Debes definir el estado deseado en el momento de la creación, y puedes cambiarlo en cualquier momento si escalas la aplicación.

Cómo inspeccionar StatefulSets

Antes de escalar un StatefulSet, debes ejecutar kubectl describe statefulset my-app para inspeccionarlo.

En el resultado de este comando, verifica el campo Estado del pod. Si el valor Failed es superior a 0, el escalamiento podría fallar.

Si un StatefulSet parece no estar en buen estado, ejecuta kubectl get pods para descubrir qué réplicas no están en buenas condiciones. Luego, ejecuta kubectl delete [POD], en el que [POD] es el nombre del pod que no se encuentra en buen estado.

Intentar escalar un StatefulSet cuando no está en buen estado puede hacer que pierda su disponibilidad.

Cómo escalar una aplicación

En las siguientes secciones se describe cada método que puedes usar para escalar una aplicación. El método kubectl scale es el modo más rápido de escalar. Sin embargo, es posible que prefieras otro método en algunas situaciones, como cuando actualizas archivos de configuración o realizas modificaciones in situ.

kubectl scale

kubectl scale te permite modificar de forma instantánea la cantidad de réplicas que deseas para ejecutar tu aplicación.

Para usar kubectl scale, debes especificar la cantidad nueva de réplicas mediante la configuración del marcador --replicas. Por ejemplo, para escalar my-app a cuatro réplicas, ejecuta el siguiente comando, sustituyendo [CONTROLLER] por deployment, statefulset, o bien otro tipo de objeto de controlador:

kubectl scale [CONTROLLER] my-app --replicas 4

Si se ejecuta correctamente, el resultado de este comando debería ser similar a deployment "my-app" scaled.

Luego, ejecuta kubectl get [CONTROLLER] my-app. El resultado debería ser similar al siguiente:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                4         4         4            4           15m

kubectl apply

Puedes usar kubectl apply para aplicar un nuevo archivo de configuración a un objeto de controlador existente. kubectl apply es útil si se busca realizar varios cambios a un recurso, y puede resultar beneficioso para los usuarios que prefieren administrar sus recursos en archivos de configuración.

Para escalar mediante kubectl apply, el archivo de configuración que proporciones debe incluir una cantidad nueva de réplicas en el campo replicas de la especificación del objeto.

La siguiente es una versión actualizada del archivo de configuración del objeto my-app de ejemplo. El ejemplo muestra una implementación, así que si usas otro tipo de controlador, como un StatefulSet, cambia el kind según corresponda. Este ejemplo funciona mejor en un clúster con al menos tres nodos.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-container
        image: gcr.io/google-samples/hello-app:2.0

En este archivo, el valor del campo replicas es 3. Cuando se aplica este archivo de configuración, el objeto my-app escala a tres réplicas.

Para aplicar un archivo de configuración actualizado, ejecuta el siguiente comando:

kubectl apply -f config.yaml

Luego, ejecuta kubectl get [CONTROLLER] my-app. El resultado debería ser similar al siguiente:

NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
my-app                3         3         3            3           15m

Console

Para escalar una carga de trabajo en Google Cloud Platform Console, realiza los siguientes pasos:

  1. Visita el menú de cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú de cargas de trabajo

  2. Selecciona la carga de trabajo deseada del menú.

  3. Haz clic en Acciones, y luego en Escalar.

  4. En el campo Réplicas, ingresa la cantidad de réplicas deseadas.

  5. Haz clic en Escalar.

Cómo realizar el ajuste de escala automático de las implementaciones

Puedes ajustar automáticamente la escala de las implementaciones según el uso de pods de la CPU mediante kubectl autoscale o desde el menú de cargas de trabajo de GKE en GCP Console.

kubectl autoscale

kubectl autoscale crea un objeto HorizontalPodAutoscaler (o HPA) que se orienta a un recurso especificado (denominado objetivo de escalamiento) y lo escala según sea necesario. El HPA ajusta periódicamente la cantidad de réplicas del objetivo de escalamiento para que se ajuste al uso de CPU promedio que especificas.

Cuando usas kubectl autoscale, especificas una cantidad máxima y mínima de réplicas para tu aplicación, así como un objetivo de uso de CPU. Por ejemplo, para establecer la cantidad máxima de réplicas en seis y la mínima en cuatro, con un objetivo de uso de CPU del 50%, ejecuta el siguiente comando:

kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50

En este comando se requiere el marcador --max. El marcador --cpu-percent representa el uso de CPU objetivo en todos los pod. Este comando no escala inmediatamente la implementación a seis réplicas, a menos que ya haya una demanda del sistema.

Luego de ejecutar kubectl autoscale, se crea el objeto HorizontalPodAutoscaler y se orienta a la aplicación. Cuando hay un cambio en la carga, el objeto aumenta o disminuye las réplicas de la aplicación.

Para ver un objeto HorizontalPodAutoscaler específico de tu clúster, ejecuta:

kubectl get hpa [HPA_NAME]

Para ver la configuración HorizontalPodAutoscaler:

kubectl get hpa [HPA_NAME] -o yaml

El resultado de este comando es similar a lo siguiente:

apiVersion: v1
items:
- apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    creationTimestamp: ...
    name: [HPA_NAME]
    namespace: default
    resourceVersion: "664"
    selfLink: ...
    uid: ...
  spec:
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: [HPA_NAME]
    targetCPUUtilizationPercentage: 50
  status:
    currentReplicas: 0
    desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""

En este resultado de ejemplo, el campo targetCPUUtilizationPercentage contiene el valor del 50 por ciento que se transfirió desde el ejemplo de kubectl autoscale.

Para ver una descripción detallada de un objeto HorizontalPodAutoscaler específico en el clúster:

kubectl describe hpa [HPA_NAME]

Puedes modificar el HorizontalPodAutoscaler si aplicas un nuevo archivo de configuración con kubectl apply, mediante kubectl edit o kubectl patch.

Para borrar un objeto HorizontalPodAutoscaler:

kubectl delete hpa [HPA_NAME]

Console

Para ajustar automáticamente la escala de una implementación, realiza los siguientes pasos:

  1. Visita el menú de cargas de trabajo de Google Kubernetes Engine en GCP Console.

    Visitar el menú de cargas de trabajo

  2. Selecciona la carga de trabajo deseada del menú.

  3. Haz clic en Acciones, y luego en Ajustar escala automáticamente.

  4. Completa el campo de Cantidad máxima de pods con la cantidad máxima de pods deseada.

  5. De manera opcional, completa los campos Cantidad mínima de pods y Porcentaje de uso de CPU objetivo con los valores deseados.

  6. Haz clic en Ajustar escala automáticamente.

Cómo realizar el ajuste de escala automático con métricas personalizadas

A partir de la versión 1.9 de GKE, puedes escalar tus implementaciones según métricas personalizadas exportadas desde Stackdriver Monitoring.

Si deseas obtener información sobre cómo usar métricas personalizadas para ajustar automáticamente la escala de las implementaciones, consulta el instructivo Cómo realizar el ajuste de escala automático de las implementaciones con métricas personalizadas.

Qué sigue

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...