El autoescalado de pods multidimensional te permite elegir la forma de escalar tus clústeres. Con el autoescalado de pods multidimensional, puedes usar el escalado horizontal basado en la CPU y el escalado vertical basado en la memoria al mismo tiempo.
Un objeto MultidimPodAutoscaler
modifica las solicitudes de memoria y añade réplicas para que el uso medio de CPU de cada réplica coincida con el uso objetivo.
Requisitos previos
- Versión 1.19.4-gke.1700 o posterior del clúster de GKE.
- En los clústeres estándar, habilita el autoescalado vertical de pods en tu clúster. El autoescalado vertical de pods ya está habilitado en los clústeres de Autopilot.
Usar el autoescalado de pods multidimensional
En este ejemplo se muestra cómo crear un objeto Deployment y un objeto MultidimPodAutoscaler
para escalar automáticamente tu Deployment.
Creando un despliegue
Para poder crear un MultidimPodAutoscaler
, debes crear la carga de trabajo que monitoriza. El archivo php-apache.yaml
especifica un valor para las solicitudes de CPU:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
ports:
- containerPort: 80
resources:
# Since MPA does not specify CPU requests, you must specify a request in
# the Deployment
limits:
cpu: 500m
requests:
cpu: 200m
Para crear el Deployment, aplica el manifiesto php-apache.yaml
:
kubectl apply -f php-apache.yaml
Crear un objeto MultidimPodAutoscaler
Una vez que hayas creado el Deployment, puedes crear un objeto MultidimPodAutoscaler
. El siguiente manifiesto MultidimPodAutoscaler
ajusta automáticamente el número de réplicas y las solicitudes de memoria en función de los valores que especifiques.
Para obtener más información sobre los campos de este ejemplo, consulta la sección Referencia de la API.
apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
name: php-apache-autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
goals:
metrics:
- type: Resource
resource:
# Define the target CPU utilization request here
name: cpu
target:
type: Utilization
averageUtilization: 60
constraints:
global:
minReplicas: 1
maxReplicas: 5
containerControlledResources: [ memory ]
container:
- name: '*'
# Define boundaries for the memory request here
requests:
minAllowed:
memory: 1Gi
maxAllowed:
memory: 2Gi
policy:
updateMode: Auto
Para crear el MultidimPodAutoscaler
, aplica el php-apache-autoscaler.yaml
manifiesto:
kubectl apply -f php-apache-autoscaler.yaml
Ver un objeto MultidimPodAutoscaler
Para ver todos los objetos MultidimPodAutoscaler
, usa el comando kubectl get
:
kubectl get mpa
Eliminar un objeto MultidimPodAutoscaler
Elimina un objeto MultidimPodAutoscaler
con el comando kubectl delete
:
kubectl delete -f php-apache-autoscaler.yaml
Referencia de la API
En las siguientes secciones se proporciona información sobre los campos que puede añadir al objeto MultidimPodAutoscaler
.
Todos los campos son para apiVersion
v1beta1 autoscaling.gke.io
.
MultidimPodAutoscaler
MultidimPodAutoscaler
es la configuración de un autoescalador de pods multidimensional, que gestiona automáticamente los recursos de los pods y su número en función del uso de recursos histórico y en tiempo real.
Campo | Tipo | Descripción |
---|---|---|
metadata |
ObjectMeta |
Metadatos de objeto estándar. |
spec |
MultidimPodAutoscalerSpec |
El comportamiento deseado del autoescalador de pods multidimensional. |
status |
MultidimPodAutoscalerStatus |
El estado más reciente del autoescalador de pods multidimensional. |
MultidimPodAutoscalerSpec
MultidimPodAutoscalerSpec
es la especificación que define el comportamiento de la herramienta de adaptación dinámica.
Campo | Tipo | Descripción |
---|---|---|
ScaleTargetRef |
autoscaling.CrossVersionObjectReference |
Referencia que apunta a un recurso de destino para escalarlo (con el subrecurso Scale). |
Goals |
*MultidimGoals |
Objetivos que el autoescalador de pods multidimensional intenta alcanzar y mantener. |
Constraints |
*MultidimConstraints |
Describe las restricciones del autoescalado. Las restricciones tienen más peso que los objetivos. Si las restricciones impiden que se cumpla un objetivo, no se alcanzará. Por ejemplo, si se alcanza el número máximo de réplicas, no se podrá aumentar la escala, aunque las réplicas necesiten hacerlo. |
Policy |
*MultidimPolicy |
La política te permite especificar cómo se aplican las recomendaciones. |
MultidimGoals
MultidimGoals
son los objetivos que intenta alcanzar el autoescalador de pods multidimensional.
Campo | Tipo | Descripción |
---|---|---|
Metrics |
[]MetricSpec |
Contiene la lista de métricas junto con el valor deseado. La herramienta de adaptación dinámica de pods multidimensional intenta mantenerse cerca de los valores deseados. |
MultidimConstraints
MultidimConstraints
describe las restricciones del autoescalado. Las restricciones tienen prioridad sobre los objetivos.
Campo | Tipo | Descripción |
---|---|---|
Global |
*GlobalConstraints |
Restricciones que se aplican a la aplicación con autoescalado en su conjunto. |
Pod |
*PodConstraints |
Restricciones que se aplican a un solo Pods de la aplicación de destino. |
ContainerControlledResources |
[]ResourceName |
Recursos de contenedor que debe controlar el escalador automático. memory es el único valor admitido. |
Container |
[]ContainerConstraints |
Restricciones que se aplican a los contenedores de los pods. |
ResourceConstraints
ResourceConstraints
define la cantidad mínima y máxima de recursos que puedes asignar a un contenedor, un pod o una aplicación.
Campo | Tipo | Descripción |
---|---|---|
MinAllowed |
ResourceList |
Cantidad mínima de recursos que puedes asignar. Si no se proporciona, se usa el valor 0. |
MaxAllowed |
ResourceList |
Cantidad máxima de recursos que puedes asignar. Si no se proporciona, no hay límites en la cantidad máxima de recursos. |
GlobalConstraints
GlobalConstraints
define las restricciones que se aplican a la aplicación en su conjunto. Estas restricciones incluyen el número de réplicas o la cantidad total de recursos.
Campo | Tipo | Descripción |
---|---|---|
MinReplicas |
*Int32 |
Número mínimo de réplicas que puede tener la aplicación. Si no se proporciona, se usa el valor 1. |
MaxReplicas |
*Int32 |
Número máximo de réplicas que puede tener la aplicación. Si no se proporciona, no hay límites en la cantidad máxima de réplicas. |
Requests |
*ResourceConstraints |
Cantidad mínima y máxima de recursos que puede solicitar una aplicación, sumada en todos los pods. |
PodConstraints
PodConstraints
define la cantidad mínima y máxima de recursos que puede solicitar un solo pod, sumada en todos los contenedores que pertenecen al pod.
Campo | Tipo | Descripción |
---|---|---|
Requests |
*ResourceConstraints |
Cantidad mínima y máxima de recursos que puede solicitar un solo pod, sumada en todos los contenedores que pertenecen al pod. |
ContainerConstraints
ContainerConstraints
son restricciones que se aplican a los contenedores de los pods.
Campos | Tipo | Descripción |
---|---|---|
Name |
String |
Nombre del contenedor para el que se especifican las restricciones. También puedes usar * para especificar restricciones para todos los contenedores de un pod. |
Requests |
*ResourceConstraints |
Cantidad mínima y máxima de recursos que puede solicitar el contenedor especificado. |
UpdateMode
Usa UpdateMode
para controlar cómo se aplican las recomendaciones calculadas.
Campos | Tipo | Descripción |
---|---|---|
AutoUpdates |
UpdateMode = "Auto" |
Actualizaciones automáticas significa que todas las recomendaciones de escalado automático se pueden aplicar en cualquier momento. |
AutoUpdates |
UpdateMode = "Off" |
Actualizaciones automáticas significa que las recomendaciones de escalado automático no se aplican. |
MultidimPolicy
Campos | Tipo | Descripción |
---|---|---|
Update |
UpdateMode |
Define cómo se deben aplicar las recomendaciones. Si el valor está vacío, se produce un error de validación. |
MultidimPodAutoscalerStatus
MultidimPodAutoscalerStatus
describe el estado del tiempo de ejecución del escalador automático.
Campos | Tipo | Descripción |
---|---|---|
ObservedGeneration |
*Int64 |
La generación más reciente observada por este escalador automático. |
RecommendedPodResources |
*RecommendedPodResources |
La cantidad de recursos más reciente que ha calculado el autoescalador para los pods controlados. |
CurrentReplicas |
Int32 |
CurrentReplicas es el número actual de réplicas de pods gestionadas por este escalador automático, según lo ha visto el escalador automático por última vez. |
DesiredReplicas |
Int32 |
DesiredReplicas es el número de réplicas de pods que gestiona este escalador automático, según el último cálculo del escalador automático. |
CurrentMetrics |
[]autoscaling.MetricStatus |
El último estado de lectura de las métricas que usa este escalador automático. |
Conditions |
[]metav1.Condition |
Conditions es el conjunto de condiciones necesarias para que este escalador automático escale su destino e indica si se cumplen o no esas condiciones. |
Siguientes pasos
- Consulta más información sobre cómo configurar el autoescalado de pods horizontal.
- Consulte más información sobre cómo configurar el autoescalado de pods vertical.