Como migrar entre as versões de API do VerticalPodAutoscaler

Nesta página, você aprende a migrar objetos VerticalPodAutoscaler da versão de API v1beta1 para v1beta2.

Antes de começar

Execute as etapas a seguir para se preparar para a tarefa:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o ID do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona padrão do Compute:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região padrão do Compute:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize gcloud para a versão mais recente:
    gcloud components update

Como ativar o escalonamento automático vertical de pods em um cluster

Para criar um novo cluster com escalonamento automático de pod vertical ativado, insira este comando:

gcloud beta container clusters create [CLUSTER_NAME] --enable-vertical-pod-autoscaling

em que [CLUSTER_NAME] é o nome que você escolhe para o cluster.

Para ativar o escalonamento automático de pods verticais para um cluster atual, digite este comando:

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

em que [CLUSTER_NAME] é o nome do cluster.

Apresentamos a API v1beta2

O escalonamento automático de pods verticais é um recurso Beta introduzido na versão 1.11 do GKE. A API v1beta1 usa um seletor de rótulos para especificar quais pods pertencem a um VerticalPodAutoscaler específico. Reunimos o feedback dos usuários e decidimos modificar a API por motivos de usabilidade:

  • O uso de seletores é propenso a erros de configuração. Por exemplo, um objeto VerticalPodAutoscaler que segmenta todos os pods em um cluster, ou pods que pertencem a mais de um desse objeto.
  • O caso de uso mais comum, de longe, é que um VerticalPodAutoscaler segmente uma implantação inteira.
  • Essa alteração alinha o VPA à API HorizontalPodAutoscaler.

Com a API v1beta2, um objeto VerticalPodAutoscaler aponta diretamente para um controlador, por exemplo, uma implantação ou um DaemonSet.

Como migrar da API v1beta1 para a v1beta2

Neste guia, mostramos como migrar com segurança uma implantação dimensionada por um VerticalPodAutoscaler da v1beta1 para a v1beta2.

Veja o manifesto de uma implantação:

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

Na v1beta1, você faz o dimensionamento especificando um seletor para corresponder a todos os pods na implantação:

apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  selector:
    matchLabels:
      label: vpa-label
  updatePolicy:
    updateMode: {...}

Na v1beta2, o VerticalPodAutoscaler segmenta a implantação diretamente:

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: {...}

Salve o manifesto v1beta2 em um arquivo chamado vpa-v1beta2.yaml.

Se updateMode estiver definido como "Desativado", execute kubectl apply -f vpa-v1beta2.yaml. O VerticalPodAutoscaler manterá as recomendações durante a troca.

Se a atuação estiver ativada (updateMode "Initial", "Auto" ou "Recreate"), para a migração em várias etapas:

  1. Crie um manifesto v1beta2 VerticalPodAutoscaler com um novo nome e com 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. Salve este manifesto como vpa-v1beta1-off.yaml.
  2. Crie o novo objeto VerticalPodAutoscaler:

    kubectl apply -f vpa-v1beta1-off.yaml

  3. Aguarde a recomendação ser preenchida e a compare com a do objeto VerticalPodAutoscaler original.

  4. Quando estiver satisfeito com a correspondência das recomendações, exclua o objeto VerticalPodAutoscaler v1beta1:

    kubectl delete vpa-name

  5. Atualize o novo VerticalPodAutoscaler para a estratégia de atualização original. Por exemplo, 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. Salve o manifesto como vpa-v1beta1-final.yaml.

  7. Aplicar a nova configuração kubectl apply -f vpa-v1beta1-final.yaml

Referência

Esta é a referência da API v1beta1. Consulte também a referência da v1beta2.

VerticalPodAutoscaler v1beta1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão.

spec

VerticalPodAutoscalerSpec

O comportamento esperado do VerticalPodAutoscaler.

status

VerticalPodAutosclerStatus

O status mais recentemente observado do VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io

Campos
selector

LabelSelector

Uma consulta de rótulo que determina o conjunto de pods controlados pelo VerticalPodAutoscaler.

updatePolicy

PodUpdatePolicy

Especifica se as atualizações recomendadas são aplicadas quando um pod é iniciado e durante a vida útil dele.

resourcePolicy

PodResourcePolicy

Especifica as políticas de como as solicitações de CPU e memória são ajustadas em contêineres individuais.

VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão.

items

VerticalPodAutoscaler array

Uma lista de objetos VerticalPodAutoscaler.

PodUpdatePolicy v1beta1 autoscaling.k8s.io

Campos
updateMode

string

Especifica se as atualizações recomendadas são aplicadas quando um pod é iniciado e durante a vida útil dele. Os valores possíveis são "Off", "Initial", "Recreate" e "Auto".

PodResourcePolicy v1beta1 autoscaling.k8s.io

Campos
containerPolicies

ContainerResourcePolicy array

Uma matriz de políticas de recursos para contêineres individuais.

ContainerResourcePolicy v1beta1 autoscaling.k8s.io

Campos
containerName

string

O nome do contêiner ao qual a política se aplica. Se não especificado, a política serve como política padrão.

mode

ContainerScalingMode

Especifica se as atualizações recomendadas são aplicadas quando um contêiner é iniciado e durante a vida útil dele. Os valores possíveis são "Off" e "Auto".

minAllowed

ResourceList

Especifica o pedido mínimo de CPU e a solicitação de memória permitida para o contêiner.

maxAllowed

ResourceList

Especifica a solicitação máxima de CPU e a solicitação de memória permitida para o contêiner.

VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io

Campos
recommendation

RecommendedPodResources

As solicitações de CPU e memória recomendadas mais recentemente.

conditions

VerticalPodAutoscalerCondition array

Descreve o estado atual do VerticalPodAutoscaler.

RecommendedPodResources v1beta1 autoscaling.k8s.io

Campos
containerRecommendation

RecommendedContainerResources array

Uma matriz de recomendações de recursos para contêineres individuais.

RecommendedContainerResources v1beta1 autoscaling.k8s.io

Campos
containerName

string

O nome do contêiner ao qual a recomendação se aplica.

target

ResourceList

A solicitação de CPU e a solicitação de memória recomendadas para o contêiner.

lowerBound

ResourceList

A solicitação mínima de CPU e solicitação de memória para o contêiner. Não é garantido que esse valor seja suficiente para que o aplicativo seja estável. A execução com solicitações de CPU e memória menores provavelmente terá um impacto significativo no desempenho ou na disponibilidade.

upperBound

ResourceList

A solicitação de CPU e a solicitação de memória máximas recomendadas para o contêiner. Solicitações de CPU e memória mais altas do que esses valores provavelmente serão desperdiçadas.

uncappedTarget

ResourceList

A recomendação de recurso mais recente calculada pelo autoescalador, com base apenas no uso real de recursos, não considerando o ContainerResourcePolicy. Poderá diferir da recomendação limitada se o uso real do recurso fizer com que o destino viole o ContainerResourcePolicy. Esse campo é usado apenas como indicação de status. Isso não afetará a atribuição real de recursos.

VerticalPodAutoscalerCondition v1beta1 autoscaling.k8s.io

Campos
type

VerticalPodAutoscalerConditionType

O tipo de condição que está sendo descrita. Os valores possíveis são "RecommendationProvided", "LowConfidence", "NoPodsMatched" e "FetchingHistory".

status

ConditionStatus

O status da condição. Os valores possíveis são "True", "False" e "Unknown".

lastTransitionTime

Time

A última vez que a condição fez uma transição de um status para outro.

reason

string

O motivo da última transição de um status para outro.

message

string

Uma string legível com detalhes sobre a última transição de um status para outro.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine