Migra entre las versiones de la API de VerticalPodAutoscaler

En esta página, se explica cómo migrar objetos VerticalPodAutoscaler de las versión de la API v1beta1 a v1beta2.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de haber habilitado la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • 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 el 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 que [CLUSTER_NAME] es el nombre que eliges para tu clúster.

Si quieres habilitar el ajuste de escala automático vertical de pods para un clúster existente, ingresa el siguiente comando:

cloud beta container clusters update [CLUSTER-NAME] --enable-vertical-pod-autoscaling

En el ejemplo anterior, [CLUSTER_NAME] es el nombre del clúster.

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 implementación:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    label: vpa-label
spec:
  replicas: 2
  template:
    metadata:
      labels:
        label: vpa-label
    spec:
      containers:
      - {...}

En la versión v1beta1, este se escala mediante la especificación de un selector para que coincida con todos los pods de la implementación:

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 la implementación:

apiVersion: autoscaling.k8s.io/v1beta2 # different API version
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  targetRef:
    apiVersion: "extensions/v1beta1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: {...}

Guarda el manifiesto de v1beta2 en un archivo llamado vpa-v1beta2.yaml.

Si tu updateMode está establecido en “Apagado”, puedes ejecutar kubectl apply -f vpa-v1beta2.yaml. El VerticalPodAutoscaler mantendrá las recomendaciones durante el cambio.

Si está activado (updateMode "Initial", "Auto" o "Recreate"), a fin de que la migración se realice en varios pasos:

  1. Crea un manifiesto de VerticalPodAutoscaler v1beta2 con un nombre nuevo y con updateMode: "Off":
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name-new # Different name
spec:
  targetRef:
    apiVersion: "extensions/v1beta1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: "Off" # Recommendation only mode.
  1. Guarda este manifiesto como vpa-v1beta1-off.yaml.
  2. Crea el objeto VerticalPodAutoscaler nuevo:

    kubectl apply -f vpa-v1beta1-off.yaml

  3. Espera a que se propague la recomendación y compárala con la del objeto VerticalPodAutoscaler original.

  4. Cuando estés satisfecho con la coincidencia de las recomendaciones, borra el objeto VerticalPodAutoscaler v1beta1:

    kubectl delete vpa-name

  5. 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: "extensions/v1beta1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Auto" # Mode switched to auto
    
  6. Guarda este manifiesto como vpa-v1beta1-final.yaml

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

TypeMeta

Grupo de API, versión y tipo.

metadata

ObjectMeta

Metadatos de objeto estándar.

spec

VerticalPodAutoscalerSpec

El comportamiento deseado del VerticalPodAutoscaler.

status

VerticalPodAutosclerStatus

El estado más reciente del VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io

Campos
selector

LabelSelector

Una consulta de etiqueta que determina el conjunto de pods que controla el VerticalPodAutoscaler.

updatePolicy

PodUpdatePolicy

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

PodResourcePolicy

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

TypeMeta

Grupo de API, versión y tipo.

metadata

ObjectMeta

Metadatos de objeto estándar.

items

VerticalPodAutoscaler array

Una lista de objetos de VerticalPodAutoscaler.

PodUpdatePolicy v1beta1 autoscaling.k8s.io

Campos
updateMode

string

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

ContainerResourcePolicy array

Un arreglo de políticas de recursos para contenedores individuales.

ContainerResourcePolicy v1beta1 autoscaling.k8s.io

Campos
containerName

string

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

ContainerScalingMode

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

ResourceList

Especifica los requisitos de CPU y memoria mínimos que se permiten para el contenedor.

maxAllowed

ResourceList

Especifica los requisitos de CPU y memoria máximos que se permiten para el contenedor.

VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io

Campos
recommendation

RecommendedPodResources

Los requisitos de CPU y memoria recomendados más recientes.

conditions

VerticalPodAutoscalerCondition array

Describe el estado actual del VerticalPodAutoscaler.

RecommendedPodResources v1beta1 autoscaling.k8s.io

Campos
containerRecommendation

RecommendedContainerResources array

Un arreglo de recomendaciones de recursos para contenedores individuales.

RecommendedContainerResources v1beta1 autoscaling.k8s.io

Campos
containerName

string

El nombre del contenedor al cual se aplica la recomendación.

target

ResourceList

Los requisitos de CPU y memoria recomendados para el contenedor.

lowerBound

ResourceList

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

ResourceList

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

ResourceList

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

VerticalPodAutoscalerConditionType

El tipo de condición que se describe. Los valores posibles son “RecommendationProvided”, “LowConfidence”, “NoPodsMatched” y “FetchingHistory”.

status

ConditionStatus

El estado de la condición. Los posibles valores son Verdadero, Falso y Desconocido.

lastTransitionTime

Time

La última vez que la condición hizo una transición de un estado a otro.

reason

string

La razón por la cual se realizó la última transición de un estado a otro.

message

string

Una string legible que proporciona detalles sobre la última transición de un estado a otro.

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

Enviar comentarios sobre...

Documentación de Kubernetes Engine