En esta página, se explica cómo escalar una aplicación implementada en Google Kubernetes Engine (GKE).
Descripción general
Cuando implementas una aplicación en GKE, debes definir 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
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Asegúrate de que habilitaste la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Asegúrate de que instalaste Google Cloud CLI.
- Establece la configuración predeterminada de Google Cloud CLI para tu proyecto mediante uno de los siguientes métodos:
- Usa
gcloud init
si deseas ver una explicación sobre cómo configurar los valores predeterminados del proyecto. - Usa
gcloud config
para configurar el ID, la zona y la región del proyecto de manera individual. -
Ejecuta
gcloud init
y sigue las instrucciones:gcloud init
Si usas SSH en un servidor remoto, usa la marca
--console-only
para evitar que el comando abra un navegador:gcloud init --console-only
- Sigue las instrucciones para autorizar a la CLI de gcloud a usar tu cuenta de Google Cloud.
- Crea una configuración nueva o selecciona una existente.
- Elige un proyecto de Google Cloud.
- Elige una zona de Compute Engine predeterminada.
- Elige una región de Compute Engine predeterminada.
- Establece tu ID del proyecto predeterminado:
gcloud config set project PROJECT_ID
- Configura la región de Compute Engine predeterminada (por ejemplo,
us-central1
):gcloud config set compute/region COMPUTE_REGION
- Configura la zona de Compute Engine predeterminada (por ejemplo,
us-central1-c
):gcloud config set compute/zone COMPUTE_ZONE
- Actualiza
gcloud
a la versión más reciente:gcloud components update
gcloud init
gcloud config
Cuando configuras las ubicaciones predeterminadas, puedes evitar errores en la CLI de gcloud como el siguiente: One of [--zone, --region] must be supplied: Please specify location
.
Inspecciona una aplicación
Antes de escalar tu aplicación, debes inspeccionarla y asegurarte de que esté en buen estado.
Para ver todas las aplicaciones que se implementaron en tu clúster, ejecuta el siguiente comando:
kubectl get CONTROLLER
Sustituye CONTROLLER
por deployments
, statefulsets
o algún otro tipo de objeto de controlador.
Por ejemplo, si ejecutas kubectl get deployments
y creas 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 un tanto distinto. 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 encuentran en ejecución en este momento.UP-TO-DATE
muestra la cantidad de réplicas que se actualizaron para alcanzar el estado deseado.AVAILABLE
muestra cuántas réplicas de la aplicación están disponibles para tus usuarios.AGE
muestra durante cuánto tiempo se ejecutó la aplicación en el clúster.
En este ejemplo, solo hay una implementación, my-app
, que tiene una sola réplica, ya que 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.
Inspecciona StatefulSets
Antes de escalar un StatefulSet, debes ejecutar el siguiente comando para inspeccionarlo:
kubectl describe statefulset my-app
En el resultado de este comando, verifica el campo Estado del pod. Si el valor Failed
es superior a 0
, el escalamiento puede fallar.
Si parece que un StatefulSet está en mal estado, haz lo siguiente:
Obtén una lista de pods y observa cuáles están en mal estado:
kubectl get pods
Quita el pod en mal estado:
kubectl delete POD_NAME
Si se intenta escalar un StatefulSet cuando no está en buen estado, es posible que pierda su disponibilidad.
Escala una aplicación
En las secciones siguientes, 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 locales.
kubectl scale
El comando kubectl scale
te permite cambiar de forma instantánea la cantidad de réplicas que deseas a fin de ejecutar tu aplicación.
Para usar kubectl scale
, especifica la cantidad nueva de réplicas mediante la configuración de la marca --replicas
. Por ejemplo, para escalar my-app
a cuatro réplicas, ejecuta el siguiente comando y sustituye CONTROLLER
por deployment
, statefulset
o algún otro tipo de objeto de controlador:
kubectl scale CONTROLLER my-app --replicas 4
Si se ejecuta de forma correcta, el resultado de este comando debe ser similar a deployment
"my-app" scaled
.
Luego, ejecuta el siguiente comando:
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 archivo de configuración nuevo a un objeto de controlador existente. kubectl
apply
es útil si se busca implementar varios cambios en 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 para el objeto de ejemplo my-app
. En el ejemplo, se muestra una implementación, así que si usas otro tipo de controlador, como StatefulSet, debes 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: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
En este archivo, el valor del campo replicas
es 3
. El objeto my-app
escala a tres réplicas cuando se aplica este archivo de configuración.
Para aplicar un archivo de configuración actualizado, ejecuta este comando:
kubectl apply -f config.yaml
Luego, ejecuta el siguiente comando:
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 Console, sigue estos pasos:
Ve a la página Cargas de trabajo en Cloud Console.
En la lista de cargas de trabajo, haz clic en el nombre de la carga de trabajo que deseas escalar.
Haz clic en fullscreen Escalar o en list Acciones > Escalar.
Ingresa la nueva cantidad de Réplicas para la carga de trabajo.
Haz clic en Escalar.
Realiza el ajuste de escala automático de las implementaciones
Puedes realizar el ajuste de escala automático de las implementaciones según el uso de CPU de los pods mediante kubectl
autoscale
o desde el menú de cargas de trabajo de GKE en Cloud 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
, debes especificar 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 comando siguiente:
kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50
En este comando, se requiere la marca --max
. La marca --cpu-percent
representa el uso de CPU objetivo en todos los pod. Este comando no escala de inmediato la implementación a seis réplicas, a menos que ya exista 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.
Si deseas obtener una lista de los objetos HorizontalPodAutoscaler
en tu clúster, ejecuta el siguiente comando:
kubectl get hpa
Para ver un objeto HorizontalPodAutoscaler
específico de tu clúster, ejecuta este comando:
kubectl get hpa HPA_NAME
Reemplaza HPA_NAME
por el nombre del objeto HorizontalPodAutoscaler
.
Para ver la configuración HorizontalPodAutoscaler
, ejecuta lo siguiente:
kubectl get hpa HPA_NAME -o yaml
El resultado de este comando es similar al 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 de porcentaje 50
que se transfirió desde el ejemplo kubectl autoscale
.
Si quieres ver una descripción detallada de un objeto HorizontalPodAutoscaler
específico en el clúster, ejecuta el comando siguiente:
kubectl describe hpa HPA_NAME
Puedes modificar HorizontalPodAutoscaler
si aplicas un archivo nuevo de configuración con kubectl apply
, mediante kubectl edit
o kubectl patch
.
Para borrar un objeto HorizontalPodAutoscaler
, sigue estos pasos:
kubectl delete hpa HPA_NAME
Console
Para ajustar automáticamente la escala de una implementación, realiza los siguientes pasos:
Ve a la página Cargas de trabajo en Cloud Console.
En la lista de cargas de trabajo, haz clic en el nombre del Deployment que deseas escalar automáticamente.
Haz clic en list Acciones > Ajuste de escala automático.
Ingresa la Cantidad máxima de réplicas y, de forma opcional, la Cantidad mínima de réplicas para el Deployment.
En Métricas de ajuste de escala automático, selecciona y configura las métricas según lo desees.
Haz clic en Ajuste de escala automático.
Ajuste de escala automático con métricas personalizadas
Puedes escalar tus Deployments según las métricas personalizadas que se exportaron de Cloud Monitoring.
Si quieres obtener información sobre cómo usar métricas personalizadas para realizar ajustes de escala automáticos en implementaciones, consulta el instructivo Realiza ajustes de escala automáticos en implementaciones con métricas personalizadas.