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.