Este documento oferece uma breve vista geral das atualizações contínuas padrão e, em seguida, aborda detalhadamente as atualizações rápidas, que são um tipo especial de atualização contínua. Em comparação com as atualizações contínuas padrão, as atualizações rápidas permitem-lhe configurar a velocidade da atualização. As atualizações de picos também lhe permitem exercer algum controlo sobre o impacto das atualizações nas suas cargas de trabalho.
Para ver informações sobre como ativar e configurar atualizações rápidas para o GKE no AWS, consulte o artigo Configure atualizações rápidas de conjuntos de nós.
Como funcionam as atualizações contínuas padrão
Algumas atualizações a um node pool, como quando modifica as anotações de um node pool, não requerem o reinício dos nós e, por isso, não provocam uma atualização contínua. Se o GKE no AWS puder aplicar alterações a um conjunto de nós sem ter de reiniciar ou recriar recursos, fá-lo-á para evitar interrupções.
No entanto, a maioria das atualizações de um conjunto de nós no GKE na AWS envolve normalmente terminar nós existentes e iniciar novos nós com as definições atualizadas. O processo de encerramento dos nós existentes pode interromper as cargas de trabalho.
Por predefinição, o GKE na AWS faz atualizações contínuas padrão. Este método atualiza os nós um de cada vez e são substituídos através de uma abordagem de "terminar antes de criar": primeiro, um nó é terminado e, em seguida, é iniciado um novo nó atualizado. Isto minimiza a interrupção porque apenas um nó é terminado e substituído em qualquer momento.
Seguem-se os passos que o GKE na AWS executa durante uma atualização contínua padrão:
- Seleciona um nó do conjunto de nós e marca o nó como indisponível para garantir que não são iniciados novos pods no mesmo. Esta ação denomina-se isolamento.
- Muda os pods ativos do nó isolado para outros nós disponíveis no cluster. Se outros nós tiverem capacidade suficiente, estes acomodam os pods desalojados. Caso contrário, o redimensionador automático de clusters, que permanece ativo durante uma atualização contínua padrão, inicia um aumento da escala e aprovisiona nós adicionais para garantir que existe capacidade suficiente para agendar os pods removidos. Para obter informações sobre as medidas tomadas para proteger as cargas de trabalho durante este processo, consulte o artigo Proteção de cargas de trabalho durante a alteração do tamanho.
- Termina o nó isolado.
- Substitui o nó isolado por um novo com as definições atualizadas.
- Realiza uma verificação de funcionamento no nó recentemente operacional. Se o conjunto de nós falhar na verificação de funcionamento, é marcado com o estado
DEGRADED
. Pode ver este estado executando o comandogcloud container aws node-pools describe
. Quando um conjunto de nós está marcado comoDEGRADED
, pode não ser possível agendar novos pods nos nós desse conjunto. - Continua a atualizar, nó a nó, até que todos os nós no conjunto tenham sido atualizados.
Como funcionam as atualizações de picos
No GKE na AWS, o método de implementação gradual padrão atualiza os nós um de cada vez. As atualizações rápidas, que são uma forma de atualização contínua, permitem-lhe atualizar vários nós em simultâneo. Por conseguinte, as atualizações rápidas são mais rápidas do que as atualizações progressivas padrão. No entanto, a atualização de vários nós em simultâneo pode interromper as cargas de trabalho. Para mitigar esta situação, as atualizações de picos oferecem opções para modular o nível de interrupção das suas cargas de trabalho.
Outra forma como as atualizações rápidas podem diferir das atualizações implementadas padrão é a forma como os nós são substituídos. As atualizações contínuas padrão substituem os nós através de uma estratégia "terminar antes de criar". Consoante as definições que escolher, as atualizações de picos podem usar uma estratégia "criar antes de terminar", uma estratégia "terminar antes de criar" ou até mesmo uma combinação de ambas.
O redimensionador automático do cluster desempenha um papel mais importante nas atualizações de picos do que nas atualizações implementadas padrão, motivo pelo qual se destaca na seguinte lista de ações que o GKE no AWS realiza durante uma atualização de picos:
- Criação de um novo grupo de escalabilidade automática: o GKE on AWS aprovisiona novos nós com as modificações especificadas pelo comando de atualização e atribui estes novos nós a um novo grupo de escalabilidade automática (ASG) da AWS.
- Comportamento do redimensionador automático de clusters: quando a atualização de picos começa, o redimensionador automático de clusters é ativado para o novo grupo de redimensionamento automático. O redimensionador automático do grupo de escala automática original está desativado. Isto garante que as operações de expansão segmentam apenas o novo grupo.
- Substituição de nós: consoante os parâmetros de atualização de picos, são usadas diferentes estratégias para a substituição de nós:
- "create before terminate": esta estratégia é ativada quando o parâmetro
max-surge-update
é definido como um valor superior a zero. Gera novos nós no novo ASG antes de terminar os antigos no ASG original, com o objetivo de minimizar as interrupções do serviço. - "terminate before create": este método é acionado quando o parâmetro
max-surge-update
está definido como zero e o parâmetromax-unavailable-update
tem um valor superior a zero. Os nós do ASG original são terminados primeiro, seguidos da criação de novos nós no novo ASG.
- "create before terminate": esta estratégia é ativada quando o parâmetro
- Ajustes do tamanho do node pool: durante a atualização, o tamanho do node pool (ou seja, a soma dos nós no ASG antigo e no novo) pode flutuar acima ou abaixo da contagem original de nós presentes no node pool antes do início da atualização. Especificamente, o GKE on AWS tem como objetivo manter a quantidade total de nós no intervalo de (
original_count
-max-unavailable-update
) a (original_count
+max-surge-update
). Eventualmente, os nós no ASG antigo (original_count
) são substituídos por nós atualizados no novo ASG. O escalador automático de clusters pode iniciar mais nós no novo ASG se detetar que não é possível agendar pods, mas permanece dentro dos limites definidos pormin-nodes
emax-nodes
.
Um exemplo para ilustrar o processo
Para compreender melhor como funcionam as atualizações de picos, considere o seguinte exemplo. Suponhamos que tem um conjunto de nós com 5 nós e executa o seguinte comando:
gcloud container aws node-pools update production-node-pool
--cluster my-cluster \
--location us-west1 \
--max-surge-update 2 \
--max-unavailable-update 1 \
--node-version 1.27.6-gke.700
Neste exemplo, max-surge-update
está definido como 2, max-unavailable-update
está definido como 1 e está a fornecer uma nova versão do conjunto de nós (ou seja, está a alterar a versão do GKE que está a ser executada nos nós no conjunto de nós).
A execução deste comando aciona uma atualização de pico e o GKE no AWS executa as seguintes ações:
- Cria 2 nós adicionais porque o valor de
max-surge-update
é igual a 2. - Atribui estes 2 nós adicionais a um novo grupo de escalamento automático da AWS.
- Remove nós do grupo de escalamento automático original assim que estes novos nós estiverem
operacionais. O GKE na AWS desativa até 3 nós (o valor combinado de
max-surge-update
emax-unavailable-update
), mas garante que, em qualquer altura, fica indisponível, no máximo, apenas um nó (devido ao valor demax-unavailable-update
de 1). - Repita estes passos até todos os nós no conjunto de nós terem sido atualizados para a nova versão do GKE.
Durante esta atualização, o node pool contém entre 4 e 7 nós operacionais.
Aspetos a considerar antes de executar atualizações de picos
Antes de executar uma atualização de pico, tenha em atenção o seguinte:
- As instâncias adicionais criadas como parte deste passo de pico podem exceder o limite da quota de instâncias da AWS. Se não tiver quota suficiente e não for possível aprovisionar estas instâncias adicionais, a atualização pode falhar.
- Se
max-unavailable-update
estiver definido como 0, as interrupções nas cargas de trabalho podem continuar a ocorrer à medida que os pods são removidos e reagendados nos nós mais recentes. - O número máximo de nós que podem ser atualizados em simultâneo é igual à soma de
max-surge-update
emax-unavailable-update
, e está limitado a 20.
Escolha as definições de aumento de preços adequadas às suas necessidades
Embora as atualizações contínuas padrão usem frequentemente uma abordagem "terminar antes de criar", as atualizações rápidas introduzem mais flexibilidade. Consoante a configuração, as atualizações de picos podem seguir uma estratégia de "criar antes de terminar", uma estratégia de "terminar antes de criar" ou uma combinação de ambas. Esta secção descreve diferentes configurações para ajudar a selecionar a melhor abordagem para as suas cargas de trabalho.
A tabela seguinte mostra três exemplos de definições e realça o respetivo impacto na velocidade da atualização e na potencial interrupção das suas cargas de trabalho:
Nome | Descrição | Configuração |
Definição equilibrada (predefinição) | Equilibrado, mais lento, mas menos disruptivo. | maxSurge=1, maxUnavailable=0 |
Atualizações rápidas sem recursos adicionais | Rápido, sem recursos de picos, mais disruptivo. | maxSurge=0, maxUnavailable=20 |
Atualizações rápidas e menos disruptivas | Rápido, usa a maioria dos recursos de picos e é menos disruptivo. | maxSurge=20, maxUnavailable=0 |
Cada uma das definições na tabela é descrita nas secções seguintes.
Definição equilibrada (predefinição)
A forma mais simples de usar as atualizações de picos é com a configuração predefinida de max-surge-update=1
e max-unavailable-update=0
. Esta configuração adiciona apenas 1 nó de pico ao node pool durante a atualização e apenas 1 nó é atualizado de cada vez, seguindo uma abordagem de "criar antes de terminar". Em comparação com a atualização contínua padrão sem picos, que é equivalente a (max-surge-update=0
, max-unavailable-update=1
), este método é menos
disruptivo, acelera os reinícios dos pods durante as atualizações e é mais conservador na
sua progressão.
É importante ter em atenção que a adoção da definição equilibrada pode gerar custos adicionais devido ao nó de pico temporário adicionado durante a atualização. Este nó adicional incorre em custos enquanto estiver ativo, o que aumenta ligeiramente a despesa geral em comparação com os métodos sem nós de pico.
Atualizações rápidas sem recursos adicionais
Para cargas de trabalho que podem tolerar interrupções, uma abordagem de atualização mais rápida pode ser
adequada. A configuração de max-surge-update=0
e max-unavailable-update=20
permite alcançar este objetivo. Com esta configuração, é possível atualizar 20 nós em simultâneo sem adicionar nós de pico. Este método de atualização segue uma abordagem de "terminar antes de criar". Como não são introduzidos nós de pico adicionais durante o processo, este método também é o mais rentável, evitando despesas adicionais associadas a nós temporários.
Atualizações rápidas e menos disruptivas
Se as suas cargas de trabalho forem sensíveis a interrupções, pode aumentar a velocidade da atualização com as seguintes definições: max-surge-update=20
e max-unavailable-update=0
. Esta configuração atualiza 20 nós em paralelo de forma "criar antes de terminar".
No entanto, a velocidade geral da atualização pode ser restrita se tiver configurado um
PodDisruptionBudgets
(PDB)
para as suas cargas de trabalho. Isto acontece porque o PDB restringe o número de pods que podem ser esvaziados em qualquer momento. Embora as configurações dos PDBs possam variar, se criar um PDB com maxUnavailable
igual a 1 para uma ou mais cargas de trabalho em execução no conjunto de nós, apenas um pod dessas cargas de trabalho pode ser removido de cada vez, o que limita o paralelismo de toda a atualização.
Lembre-se de que iniciar vários nós de pico no início do processo de atualização pode levar a um aumento temporário dos custos, especialmente quando comparado com configurações que não adicionam nós adicionais ou adicionam menos nós durante as atualizações.
O que se segue?
Para ver informações sobre como ativar e configurar atualizações rápidas para o GKE no AWS, consulte o artigo Configure atualizações rápidas de conjuntos de nós.