Configure o tempo limite de violação de PDB

Este documento mostra como configurar um valor de tempo limite caso a drenagem de um nó do cluster viole um orçamento de interrupção de pods (PDB).

Quando um nó é esvaziado, todos os pods no nó têm de ser terminados. Por predefinição, se a terminação de um pod violar um PDB, a drenagem do nó é bloqueada.

Em algumas situações, pode querer configurar um tempo máximo durante o qual a drenagem de um nó pode ser bloqueada por uma violação de PDB. Por exemplo, pode querer configurar um valor de limite de tempo antes de iniciar uma atualização ou uma atualização de versão de um cluster. Em alternativa, pode ter de configurar um valor de limite de tempo para um nó que esteja atualmente bloqueado de esgotamento por uma violação de PDB.

Defina um valor de limite de tempo

Cada nó é representado por um objeto Machine.

Liste os objetos Machine no cluster:

kubectl --kubeconfig CLUSTER_KUBECONFIG get machines

Substitua CLUSTR_KUBECONIFG pelo caminho do ficheiro kubeconfig do cluster.

Exemplo de saída:

my-node-pool-7f864959cd-cw472
my-node-pool-7f864959cd-kh86m
my-node-pool-7f864959cd-wtpvx

Abra um objeto Machine para edição:

kubectl --kubeconfig CLUSTER_KUBECONFIG edit machine MACHINE_NAME

Substitua MACHINE_NAME pelo nome do objeto Machine.

No editor, adicione esta anotação:

onprem.cluster.gke.io/pdb-violation-timeout: TIMEOUT

Substitua TIMEOUT por uma string que especifica a duração do tempo limite. As unidades de tempo válidas são "s", "m" e "h". Exemplos de valores de tempo: "1h", "1h30m", "10m" e "100s".

Se definir o valor de tempo limite como "0s", as violações de PDB nunca atingem o tempo limite. Isto é igual ao comportamento predefinido.

Exemplo:

apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
  annotations:
    kubelet-version: 1.23.5-gke.1502
    onprem.cluster.gke.io/gke-on-prem-version: 1.12.0-gke.430
    vm-ip-address: 203.0.113.2
    onprem.cluster.gke.io/pdb-violation-timeout: "5m"

Feche a sessão de edição.

Atualizações graduais

Durante uma atualização contínua, é criada primeiro uma nova máquina de pico. Em seguida, o nó antigo é esvaziado e, depois de todos os pods no mesmo terem sido removidos, o objeto de máquina antigo e o objeto de nó são eliminados. A anotação de limite de tempo de violação da PDB não persiste no objeto de máquina recém-criado.