Como migrar as versões da API do VerticalPodAutoscaler

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

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

  • 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 código padrão do projeto:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize o gcloud para a versão mais recente:
    gcloud components update

Como ativar o escalonamento automático de pods verticais para 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 incluído na versão 1.11 do GKE. A API v1beta1 usa um seletor de rótulos para especificar quais pods pertencem a um determinado VerticalPodAutoscaler. 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 é um VerticalPodAutoscaler segmentar 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 a API da v1beta1 para a v1beta2

Neste guia, você vê 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 da v1beta2 em um arquivo denominado vpa-v1beta2.yaml.

Se updateMode estiver definido como "Off", será possível executar 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"), siga estas etapas para fazer a migração:

  1. Crie um manifesto do VerticalPodAutoscaler v1beta2 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 o 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. Aplique 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 (em inglês).

spec

VerticalPodAutoscalerSpec

O comportamento desejado 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 para contêineres individuais.

VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io

Campos

TypeMeta

Grupo, versão e tipo de API.

metadata

ObjectMeta

Metadados de objeto padrão (em inglês).

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