En esta página, se explica cómo migrar objetos VerticalPodAutoscaler de las versión de la API v1beta1 a v1beta2.
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 el SDK de Cloud.
Establece la configuración de gcloud
predeterminada mediante uno de los siguientes métodos:
- Usa
gcloud init
si deseas ver una explicación sobre cómo configurar parámetros predeterminados. - Usa
gcloud config
para establecer el ID, la zona y la región del proyecto de manera individual.
Usa gcloud init
Si recibes el error One of [--zone, --region] must be supplied: Please specify
location
, completa esta sección.
-
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 a fin de autorizar a
gcloud
para que use tu cuenta de Google Cloud. - Crea una configuración nueva o selecciona una existente.
- Elige un proyecto de Google Cloud.
- Elige una zona predeterminada de Compute Engine.
Usa gcloud config
- Establece tu ID del proyecto predeterminado:
gcloud config set project project-id
- Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
gcloud config set compute/zone compute-zone
- Si trabajas con clústeres regionales, establece 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
Habilita el ajuste de escala automático vertical de pods para un clúster
Para crear un clúster nuevo con ajuste de escala automático vertical de Pods habilitado, ingresa el siguiente comando:
gcloud beta container clusters create cluster-name --enable-vertical-pod-autoscaling
En el ejemplo anterior, cluster-name es un nombre que eliges para el clúster nuevo.
Si quieres habilitar el ajuste de escala automático vertical de Pods para un clúster existente, ingresa el siguiente comando:
gcloud beta container clusters update cluster-name --enable-vertical-pod-autoscaling
En el ejemplo anterior, cluster-name es el nombre del clúster existente.
Presentamos la API de v1beta2
El ajuste de escala automático vertical de pods es una función Beta que se incluyó en la versión 1.11 de GKE. En la API de v1beta1, se usa un selector de etiquetas para especificar qué pods pertenecen a un VerticalPodAutoscaler determinado. Recopilamos los comentarios de los usuarios y decidimos modificar la API por razones de usabilidad:
- El uso de selectores es propenso a generar configuraciones incorrectas. Por ejemplo, un objeto VerticalPodAutoscaler se orienta a todos los pods de un clúster o a los pods que pertenecen a más de un objeto VerticalPodAutoscaler.
- Sin duda, el caso práctico más común es que un VerticalPodAutoscaler se oriente a una implementación completa.
- Este cambio alinea el VPA con la API de HorizontalPodAutoscaler.
Con la API de v1beta2, un objeto VerticalPodAutoscaler apunta directamente a un controlador, por ejemplo, una implementación o un DaemonSet.
Migra de la API de v1beta1 a la de v1beta2
En esta guía, se muestra cómo migrar con seguridad una implementación escalada mediante VerticalPodAutoscaler de v1beta1 a v1beta2.
A continuación, se muestra un manifiesto de ejemplo para un Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-name
labels:
label: vpa-label
spec:
replicas: 2
selector:
matchLabels:
label: vpa-label
template:
metadata:
labels:
label: vpa-label
spec:
containers:
- {...}
En v1beta1, para escalar el VerticalPodAutoscaler debes especificar un selector
a fin de que coincida con todos los pods en el Deployment:
apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
name: vpa-name
spec:
selector:
matchLabels:
label: vpa-label
updatePolicy:
updateMode: {...}
En la versión v1beta2, el VerticalPodAutoscaler apunta directamente a Deployment:
apiVersion: autoscaling.k8s.io/v1beta2 # different API version
kind: VerticalPodAutoscaler
metadata:
name: vpa-name
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: deployment-name
updatePolicy:
updateMode: {...}
Guarda el manifiesto de v1beta2 en un archivo llamado vpa-v1beta2.yaml
.
Si el updateMode
está configurado como "Off"
, puedes ejecutar el siguiente comando:
kubectl apply -f vpa-v1beta2.yaml
El VerticalPodAutoscaler mantendrá las recomendaciones durante el cambio.
Si el updateMode
está activado ("Initial"
, "Auto"
o "Recreate"
), debes realizar la migración en varios pasos:
Crea un manifiesto de VerticalPodAutoscaler v1beta2 con un nombre nuevo (vpa-name-new) y el campo
updateMode
configurado como"Off"
:apiVersion: autoscaling.k8s.io/v1beta2 kind: VerticalPodAutoscaler metadata: name: vpa-name-new # Different name spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: deployment-name updatePolicy: updateMode: "Off" # Recommendation only mode.
Guarda este manifiesto como
vpa-v1beta1-off.yaml
.Crea el objeto VerticalPodAutoscaler nuevo:
kubectl apply -f vpa-v1beta1-off.yaml
Espera a que se propague la recomendación y compárala con la del objeto VerticalPodAutoscaler original.
Cuando estés satisfecho con la coincidencia de las recomendaciones, borra el objeto VerticalPodAutoscaler v1beta1:
kubectl delete vpa-name
Actualiza el VerticalPodAutoscaler nuevo a tu estrategia de actualización original. Por ejemplo, para
updateMode: "Auto"
:apiVersion: autoscaling.k8s.io/v1beta2 kind: VerticalPodAutoscaler metadata: name: vpa-name-new spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: deployment-name updatePolicy: updateMode: "Auto" # Mode switched to auto
Guarda este manifiesto como
vpa-v1beta1-final.yaml
.Aplica la configuración nueva:
kubectl apply -f vpa-v1beta1-final.yaml
Referencia
Esta es la referencia de la API de v1beta1. También puedes consultar la referencia de v1beta2
VerticalPodAutoscaler v1beta1 autoscaling.k8s.io
Campos | |
---|---|
|
Grupo de API, versión y tipo |
metadata |
Metadatos de objeto estándar. |
spec |
El comportamiento deseado del VerticalPodAutoscaler. |
status |
El estado más reciente del VerticalPodAutoscaler. |
VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io
Campos | |
---|---|
selector |
Una consulta de etiqueta que determina el conjunto de pods que controla el VerticalPodAutoscaler. |
updatePolicy |
Especifica si se aplican las actualizaciones recomendadas cuando se inicia un pod, y si las actualizaciones recomendadas se aplican durante la vida útil del pod. |
resourcePolicy |
Especifica las políticas sobre cómo se ajustan los requisitos de CPU y memoria para los contenedores individuales. |
VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io
Campos | |
---|---|
|
Grupo de API, versión y tipo |
metadata |
Metadatos de objeto estándar. |
items |
Una lista de objetos de VerticalPodAutoscaler. |
PodUpdatePolicy v1beta1 autoscaling.k8s.io
Campos | |
---|---|
updateMode |
Especifica si se aplican las actualizaciones recomendadas cuando se inicia un pod, y si las actualizaciones recomendadas se aplican durante la vida útil del pod. Los valores posibles son “Apagado”, “Inicial”, “Volver a crear” y “Auto”. |
PodResourcePolicy v1beta1 autoscaling.k8s.io
Campos | |
---|---|
containerPolicies |
Un arreglo de políticas de recursos para contenedores individuales. |
ContainerResourcePolicy v1beta1 autoscaling.k8s.io
Campos | |
---|---|
containerName |
El nombre del contenedor al cual se aplica la política. Si no se especifica, la política se usa como política predeterminada. |
mode |
Especifica si se aplican las actualizaciones recomendadas cuando se inicia un contenedor, y si las actualizaciones recomendadas se aplican durante la vida útil del contenedor. Los valores posibles son “Apagado” o “Auto”. |
minAllowed |
Especifica los requisitos de CPU y memoria mínimos que se permiten para el contenedor. |
maxAllowed |
Especifica los requisitos de CPU y memoria máximos que se permiten para el contenedor. |
VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io
Campos | |
---|---|
recommendation |
Los requisitos de CPU y memoria recomendados más recientes. |
conditions |
Describe el estado actual del VerticalPodAutoscaler. |
RecommendedPodResources v1beta1 autoscaling.k8s.io
Campos | |
---|---|
containerRecommendation |
Un arreglo de recomendaciones de recursos para contenedores individuales. |
RecommendedContainerResources v1beta1 autoscaling.k8s.io
Campos | |
---|---|
containerName |
El nombre del contenedor al cual se aplica la recomendación. |
target |
Los requisitos de CPU y memoria recomendados para el contenedor. |
lowerBound |
Los requisitos de CPU y memoria mínimos recomendados para el contenedor. No se garantiza que esta cantidad sea suficiente para que la aplicación permanezca estable. Es probable que la ejecución con menos requisitos de CPU y memoria tenga un impacto considerable en el rendimiento o la disponibilidad. |
upperBound |
Los requisitos de CPU y memoria máximos recomendados para el contenedor. Es probable que los requisitos de CPU y memoria que superen estos valores se desperdicien. |
uncappedTarget |
La recomendación de recursos más reciente que procesó el escalador automático, solo en función del uso real de recursos y sin tener en cuenta la ContainerResourcePolicy. Puede variar de la recomendación delimitada si el uso real de recursos hace que el objetivo viole la ContainerResourcePolicy. Este campo solo se usa como indicador de estado; no afecta la asignación real de recursos. |
VerticalPodAutoscalerCondition v1beta1 autoscaling.k8s.io
Campos | |
---|---|
type |
El tipo de condición que se describe. Los valores posibles son “RecommendationProvided”, “LowConfidence”, “NoPodsMatched” y “FetchingHistory”. |
status |
El estado de la condición. Los posibles valores son Verdadero, Falso y Desconocido. |
lastTransitionTime |
La última vez que la condición hizo una transición de un estado a otro. |
reason |
La razón por la cual se realizó la última transición de un estado a otro. |
message |
Una string legible que proporciona detalles sobre la última transición de un estado a otro. |