Escalar ou reduzir verticalmente um servidor do Banco de Dados do Azure para PostgreSQL usando a CLI (az ou kubectl)

Em algumas ocasiões, pode ser necessário alterar as características ou a definição de um servidor. Por exemplo:

  • Escalar ou reduzir verticalmente o número de vCores que o servidor usa
  • Escalar ou reduzir verticalmente a memória que o servidor usa

Este guia explica como dimensionar vCore e/ou memória.

Escalar ou reduzir verticalmente as configurações de memória e vCore do seu servidor significa que você tem a possibilidade de definir um mínimo e/ou um máximo para cada uma das configurações de vCore e de memória. Se você quiser configurar o seu servidor para usar um número específico de vCores ou uma quantidade específica de memória, defina as configurações mínimas iguais às configurações máximas. Antes de aumentar o valor definido para vCores e Memória, você deve verificar se

  • você tem recursos suficientes disponíveis na infraestrutura física que hospeda a implantação e
  • as cargas de trabalho colocadas no mesmo sistema não estão disputando o mesmo vCores ou a mesma Memória.

Observação

Como uma versão prévia do recurso, a tecnologia apresentada neste artigo está sujeita aos Termos de uso complementares para versões prévias do Microsoft Azure.

As atualizações mais recentes estão disponíveis nas notas sobre a versão.

Mostrar a definição atual do servidor

Para mostrar a definição atual do seu servidor e ver quais são as configurações de vCore e memória atuais, execute um dos seguintes comandos:

Com a CLI do Azure (az)

az postgres server-arc show -n <server name> --k8s-namespace <namespace> --use-k8s

CLI com kubectl

kubectl describe postgresql/<server name> -n <namespace name>

Ele retorna a configuração do seu grupo de servidores. Se você tiver criado o servidor com as configurações padrão, deverá ver a definição da seguinte maneira:

Spec:
  Dev:  false
  Scheduling:
    Default:
      Resources:
        Requests:
          Memory:  256Mi
...

Interpretar a definição do servidor

Na definição de um servidor, a seção que transporta as configurações de vCore mínimo ou máximo por nó e memória mínima ou máxima por nó é a seção "agendamento". Nessa seção, as configurações máximas serão persistidas em uma subseção chamada "limites" e as configurações mínimas serão mantidas na subseção chamada "solicitações".

Se você definir configurações mínimas que sejam diferentes das máximas, a configuração garantirá que o seu servidor receba a alocação dos recursos solicitados, se necessário. Ele não excederá os limites definidos.

Os recursos (vCores e memória) que serão realmente usados pelo seu servidor são até as configurações máximas e dependem das cargas de trabalho e dos recursos disponíveis no cluster. Se você não limitar as configurações com um máximo, o servidor poderá usar todos os recursos que o cluster Kubernetes aloca para os nós do Kubernetes em que o servidor está agendado.

Em uma configuração padrão, somente a memória mínima é definida como 256 Mi, pois é a quantidade mínima de memória recomendada para executar o servidor do PostgreSQL.

Observação

Definir um mínimo não significa que o grupo de servidores usará, necessariamente, esse mínimo. Isso significa que, se o servidor precisar, será garantida a alocação de pelo menos esse mínimo. Por exemplo, vamos considerar que definimos --minCpu 2. Isso não significa que o servidor usará pelo menos 2 vCores o tempo todo. Em vez disso, isso significa que o servidor pode começar usando menos de 2 vCores se ele não precisar de tudo isso, e pelo menos 2 vCores são garantidos se forem necessários posteriormente. Isso significa que o cluster do Kubernetes aloca recursos para outras cargas de trabalho de modo que possa reservar 2 vCores para o servidor, se ele precisar. Além disso, dimensionar e reduzir verticalmente não é uma operação online, pois requer a reinicialização dos pods do Kubernetes.

Observação

Antes de modificar a configuração do seu sistema, certifique-se de se familiarizar com o modelo de recursos Kubernetes aqui

Escalar e reduzir verticalmente o servidor

Escalar verticalmente refere-se ao aumento dos valores das configurações de vCores e/ou memória do seu servidor. Reduzir verticalmente refere-se à diminuição dos valores das configurações de vCores e/ou memória do seu servidor.

As configurações que você está prestes a definir devem ser consideradas dentro da configuração que você definiu para o cluster Kubernetes. Verifique se você não está definindo valores que o cluster Kubernetes não será capaz de atender. Isso pode levar a erros ou a um comportamento imprevisível, como a indisponibilidade da instância do banco de dados. Por exemplo, se o status do seu servidor permanecer como em atualização por um longo tempo depois que você alterar a configuração, poderá ser uma indicação de que você definiu os parâmetros abaixo para valores que o cluster do Kubernetes não pode atender. Se esse for o caso, reverta a alteração ou leia a _troubleshooting_section.

Quais configurações você deve definir?

  • Para definir o vCore mínimo, defina --cores-request.
  • Para definir o vCore máximo, defina --cores-limit.
  • Para definir a memória mínima, defina --memory-request
  • Para definir a memória máxima, defina --memory-limit

Cuidado

Com o Kubernetes, definir uma configuração de limite sem definir a configuração de solicitação correspondente força o valor de solicitação a ser o mesmo valor do limite. Isso poderia levar à indisponibilidade do seu servidor, pois os pods dele podem não ser reagendados se não houver um nó do Kubernetes disponível com recursos suficientes. Dessa forma, para evitar essa situação, os exemplos abaixo mostram como definir a solicitação e as configurações de limite.

A sintaxe geral é:

az postgres server-arc edit -n <server name> --memory-limit/memory-request/cores-request/cores-limit <val> --k8s-namespace <namespace> --use-k8s

O valor que você indica para a configuração de memória é um número seguido por uma unidade de volume. Por exemplo, para indicar 1Gb, você deve indicar 1024Mi ou 1Gi. Para indicar um número de núcleos, basta passar um número sem a unidade.

Exemplos usando a CLI do Azure

Configure o servidor para não exceder dois núcleos:

 az postgres server-arc edit -n postgres01 --cores-request 1, --cores-limit 2  --k8s-namespace arc --use-k8s

Observação

Para obter detalhes sobre esses parâmetros, execute az postgres server-arc update --help.

Exemplo usando ferramentas nativas do Kubernetes como kubectl

Execute o comando:

kubectl edit postgresql/<server name> -n <namespace name>

Isso o levará ao editor vi, no qual você pode navegar e alterar a configuração. Use o seguinte para mapear a configuração desejada para o nome do campo na especificação:

Cuidado

Veja abaixo um exemplo fornecido para ilustrar como você pode editar a configuração. Antes de atualizar a configuração, certifique-se de definir os parâmetros para valores que o cluster Kubernetes pode honrar.

Por exemplo, se você quiser definir as seguintes configurações para as funções de coordenação e de trabalho para os seguintes valores:

  • VCore mínimo = 2
  • VCore máximo = 4
  • Memória mínima = 512Mb
  • Memória Máxima = 1Gb

Você definiria a definição do seu grupo de servidores para que ele corresponda à configuração abaixo:

...
  spec:
  dev: false
  scheduling:
    default:
      resources:
        requests:
          cpu: "2"
          memory: 256Mi
        limits:
          cpu: "4"
          memory: 1Gi
...

Se você não estiver familiarizado com o editor vi, consulte uma descrição dos comandos que podem ser necessários aqui:

  • Modo de edição: i
  • Mova-se com as setas
  • Parar edição: esc
  • Sair sem salvar: :qa!
  • Sair depois de salvar: :qw!

Redefinir para os valores padrão

Para redefinir os parâmetros de limites/solicitações de núcleo/memória para seus valores padrão, edite-os e passe uma cadeia de caracteres vazia em vez de um valor real. Por exemplo, se você quiser redefinir o parâmetro de limite de núcleo, execute os seguintes comandos:

az postgres server-arc edit -n postgres01 --cores-request '' --k8s-namespace arc --use-k8s
az postgres server-arc edit -n postgres01 --cores-limit '' --k8s-namespace arc --use-k8s

or

az postgres server-arc edit -n postgres01 --cores-request '' --cores-limit '' --k8s-namespace arc --use-k8s