Neste documento, descrevemos as práticas recomendadas e considerações para fazer upgrade do Google Distributed Cloud. Saiba como se preparar para upgrades de cluster e as práticas recomendadas a serem seguidas antes do upgrade. Essas práticas recomendadas ajudam a reduzir os riscos associados aos upgrades de cluster.
Se você tiver vários ambientes, comoteste, desenvolvimento e produção, recomendamos que você comece com o ambiente menos crítico, como teste e verifique a funcionalidade do upgrade. Depois de verificar se o upgrade foi concluído, passe para o próximo ambiente. Repita esse processo até fazer upgrade dos ambientes de produção. Essa abordagem permite que você se mova de um ponto crítico para o próximo e verifique se o upgrade e as cargas de trabalho são executados corretamente.
Lista de verificação do upgrade
Para tornar o processo de upgrade o mais simples possível, revise e conclua as verificações a seguir antes de começar a fazer upgrade dos clusters:
Planejar o upgrade
As atualizações podem causar interrupções. Antes de iniciar o upgrade, planeje com cuidado para garantir que o ambiente e os aplicativos estejam prontos e preparados.
Estime o compromisso de tempo e planeje uma janela de manutenção
Por padrão, todos os pools de nós são atualizados em paralelo, mas dentro de cada pool de nó os nós são atualizados sequencialmente. O tempo total de um upgrade depende do número de nós no maior pool de nós. Para calcular uma estimativa geral do tempo de upgrade, utilize 15 minutos * o número de nós no maior pool de nós. Por exemplo, se você tiver 10 nós no maior pool, o o tempo total de upgrade será de cerca de 150 minutos.
Na versão 1.28 e mais recentes, é possível acelerar um upgrade definindo o valor do
maxSurge
para pools de nós individuais.
Fazer backup do cluster de usuário e administrador
Antes de iniciar um upgrade, faça backup dos clusters de usuário e de administrador.
Um backup de cluster de usuário é um snapshot do armazenamento etcd do cluster de usuário. O armazenamento etcd contém todos os objetos do Kubernetes e objetos personalizados necessários para gerenciar o estado do cluster. O snapshot contém os dados necessários para recriar os componentes e as cargas de trabalho do cluster. Para mais informações, veja como fazer backup de um cluster de usuário.
Com o Google Distributed Cloud versão 1.8 e mais recentes, é possível configurar
o backup automático com
clusterBackup.datastore
no arquivo de configuração do cluster de administrador. Para ativar esse recurso em um cluster
existente, edite o arquivo de configuração do cluster de administrador e adicione o
campo clusterBackup.datastore
. Em seguida, execute gkectl update admin
.
Depois que clusterBackup.datastore
for ativado, o cluster de administrador será salvo
automaticamente em etcd
no repositório de dados configurado do vSphere. Esse processo de backup
será repetido sempre que houver uma alteração no cluster de administrador. Quando você inicia um
upgrade de cluster, uma tarefa de backup é executada antes do upgrade do cluster.
Para restaurar um cluster de administrador do backup se tiver problemas, consulte
Fazer backup e restaurar um cluster de administrador com gkectl
.
Revise o uso de PodDisruptionBudgets
No Kubernetes, os PDBs PodDisruptionBudgets
podem ajudar a evitar inatividade
ou interrupções indesejadas do aplicativo. Os PDBs instruem o programador a sempre manter vários
pods em execução, enquanto outros pods podem falhar. Esse comportamento é uma
maneira útil de informar a disponibilidade do aplicativo.
Para verificar quais PDBs estão configurados no cluster, use o comando
kubectl get pdb
:kubectl get pdb -A --kubeconfig KUBECONFIG
Substitua
KUBECONFIG
pelo nome do seu arquivo kubeconfig.O exemplo de saída a seguir mostra PDBs chamados
istio-ingress
,istiod
ekube-dns
:NAMESPACE NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE gke-system istio-ingress 1 N/A 1 16d gke-system istiod 1 N/A 1 16d kube-system kube-dns 1 N/A 1 16d
Na tabela anterior, cada PDB especifica que pelo menos um pod precisa estar sempre disponível. Essa disponibilidade se torna crítica durante os upgrades quando os nós são drenados.
Verifique se há PDBs que não podem ser atendidos. Por exemplo, é possível definir uma disponibilidade mínima de 1, quando a implantação apresentar apenas uma réplica. Neste exemplo, a operação de drenagem foi interrompida porque o PDB não pode ser atendido pelo controlador de recursos.
Para garantir que os PDBs não interfiram no procedimento de upgrade, verifique todos os PDBs em um determinado cluster antes de iniciar o upgrade. Talvez seja necessário coordenar com as equipes de desenvolvimento e proprietários do aplicativo para alterar ou desativar temporariamente os PDBs durante um upgrade de cluster.
O Google Distributed Cloud executa uma verificação de simulação durante o processo de upgrade para alertar sobre PDBs. No entanto, você também precisa verificar manualmente os PDBs para garantir uma experiência de upgrade tranquila. Para saber mais sobre PDBs, consulte Como especificar um orçamento de interrupção para seu aplicativo.
Analise os endereços IP disponíveis
As seguintes considerações sobre endereços IP se aplicam durante os upgrades de cluster:
- O processo de upgrade de clusters cria um novo nó e drena os recursos antes de excluir o nó antigo. Recomendamos que você sempre tenha endereços IP N+1 para o cluster de administrador ou de usuário, em que N é o número de nós no cluster.
- Ao usar endereços IP estáticos, os endereços IP necessários precisam ser listados nos arquivos de blocos de IP.
- Se você usa o DHCP, verifique se as novas VMs podem receber leases de IP adicionais na
sub-rede desejada durante um upgrade.
- Se você precisar adicionar endereços IP, atualize o arquivo de bloco de IP e execute o comando
gkectl update
. Para mais informações, consulte Planejar seus endereços IP.
- Se você precisar adicionar endereços IP, atualize o arquivo de bloco de IP e execute o comando
- Se você usa endereços IP estáticos e quer acelerar o processo de upgrade do cluster
de usuários, liste endereços IP suficientes no arquivo de bloco de IP para que cada pool de nós
possa ter um endereço IP extra disponível. Essa abordagem permite que o processo acelere o procedimento de adição e remoção de VMs, já que ele é executado a cada pool de nós.
- Embora essa abordagem seja uma boa opção para acelerar os upgrades de clusters de usuário, considere a disponibilidade de recursos e desempenho do ambiente do vSphere antes de continuar.
- Se houver apenas um IP reserva para todo o cluster de usuário, essa limitação atrasará o processo de upgrade para apenas uma VM por vez, mesmo quando vários pools de nós forem usados.
Verificar a utilização do cluster
Verifique se os pods podem ser evacuados quando o nó é drenado e se
há recursos suficientes no cluster sendo atualizados para gerenciar o upgrade. Para
verificar o uso atual de recursos do cluster, é possível usar painéis personalizados
do Google Cloud Observability ou diretamente no cluster com comandos como
kubectl top nodes
:
Os comandos que você executa no cluster mostram um snapshot do uso atual de recursos do cluster. Os painéis podem fornecer uma visão mais detalhada dos recursos que estão sendo consumidos ao longo do tempo. Esses dados de uso de recursos podem ajudar a indicar quando um upgrade causaria a menor interrupção, como durante fins de semana ou à noite, dependendo da carga de trabalho em execução e dos casos de uso.
O tempo para o upgrade do cluster de administrador pode ser menos crítico do que o dos clusters de usuário, porque um upgrade de cluster de administrador geralmente não introduz a inatividade do aplicativo. No entanto, ainda é importante verificar se há recursos gratuitos no vSphere antes de iniciar um upgrade de cluster de administrador. Além disso, o upgrade do cluster de administrador pode sugerir algum risco e, portanto, é recomendado durante períodos de uso menos ativos quando o acesso de gerenciamento ao cluster é menos crítico.
Para mais informações, consulte quais serviços são afetados durante um upgrade de cluster.
Verificar o uso do vSphere
Verifique se há recursos suficientes na infraestrutura subjacente do vSphere. Para verificar o uso de recursos, selecione um cluster no vCenter e consulte a guia Resumo.
A guia de resumo mostra a memória geral, a CPU e o consumo de armazenamento de todo o cluster. Como os upgrades do Google Distributed Cloud demandam mais recursos, verifique também se o cluster pode lidar com essas solicitações adicionais de recursos.
Como regra geral, o cluster do vSphere precisa oferecer suporte aos seguintes recursos extras:
- Upgrade de +1 VM por cluster de administrador
- +1 VM por pool de nós por upgrade de cluster de usuário
Por exemplo, suponha que um cluster de usuário tenha três pools de nós, cada um com nós que usam 8 vCPUs e 32 GB ou mais de RAM. Como o upgrade acontece em paralelo nos três pools de nós por padrão, o procedimento de upgrade consome os seguintes recursos extras para os outros três nós de sobretensão:
- 24 vCPUs
- 256 GB de RAM
- Espaço em disco da VM + 256 GB de vSwap
O processo de upgrade cria VMs usando a operação de clone do vSphere. Clonar várias VMs de um modelo pode gerar estresse para o sistema de armazenamento substancial na forma de operações de E/S crescentes. O upgrade poderá ser muito lento se o subsistema de armazenamento subjacente não for capaz de fornecer desempenho suficiente durante um upgrade.
Embora o vSphere tenha sido projetado para uso simultâneo de recursos e tenha mecanismos para fornecer recursos, mesmo quando comprometido demais, recomendamos não comprimir a memória da VM. A alocação excessiva de memória pode levar a sérios impactos no desempenho que afetam todo o cluster, já que o vSphere fornece a "RAM ausente" ao trocar páginas para o armazenamento de dados. Esse comportamento pode causar problemas durante o upgrade de um cluster e causar impactos no desempenho de outras VMs em execução no cluster do vSphere.
Se os recursos disponíveis já forem escassos, desligue as VMs desnecessárias para ajudar a cumprir esses requisitos adicionais e evitar possíveis hits de desempenho.
Verificar a integridade e a configuração do cluster
Execute as seguintes ferramentas em todos os clusters antes do upgrade:
O comando
gkectl diagnose
:gkectl diagnose
garante que todos os clusters estejam íntegros. O comando executa verificações avançadas, como para identificar nós que não estão configurados corretamente ou que têm pods que estão em um estado travado. Se o comandogkectl diagnose
mostrar um avisoCluster unhealthy
, corrija os problemas antes de tentar um upgrade. Para saber mais, consulte Como diagnosticar problemas de cluster.A ferramenta de pré-upgrade: além de verificar a integridade e a configuração do cluster, a ferramenta de pré-upgrade verifica se há problemas conhecidos que podem acontecer durante um upgrade de cluster.
Além disso, ao fazer upgrade de clusters de usuário para a versão 1.29 e mais recentes,
recomendamos executar o comando gkectl upgrade cluster
com
a sinalização --dry-run
. A sinalização --dry-run
executa
verificações de simulação,
mas não inicia o processo de upgrade. Embora versões anteriores
do Google Distributed Cloud Run executem verificações de simulação, elas não podem ser executadas separadamente
do upgrade. Ao adicionar a sinalização --dry-run
, é possível encontrar e corrigir problemas
que as verificações de simulação encontram no cluster de usuário antes do upgrade.
Usar implantações para minimizar a interrupção do aplicativo
Como os nós precisam ser drenados durante as atualizações, os upgrades de cluster podem causar interrupções do aplicativo. Drenar os nós significa que todos os pods em execução precisam ser encerrados e reiniciados nos nós restantes no cluster.
Se possível, os aplicativos devem usar implantações. Com essa abordagem, os aplicativos são projetados para lidar com interrupções. Qualquer impacto precisa ser mínimo nas implantações com várias réplicas. Ainda é possível fazer upgrade do cluster se os aplicativos não usarem implantações.
Também existem regras para que as implantações possam garantir que um número definido de réplicas continue em execução. Essas regras são conhecidas como PodDisruptionBudgets
(PDBs). Os PDBs permitem limitar a interrupção a uma carga de trabalho quando os pods
precisam ser reprogramados por algum motivo, como upgrades ou manutenção nos
nós de cluster, e são importantes para verificar antes de um upgrade.
Usar um par de balanceador de carga de alta disponibilidade
Se você usar o Seesaw como balanceador de carga em um cluster, ele será atualizado automaticamente quando você fizer upgrade do cluster. Esse upgrade pode causar a interrupção do serviço. Para reduzir o impacto de um upgrade e de um erro de balanceador de carga, use um par de alta disponibilidade (par de alta disponibilidade). Nessa configuração, o sistema cria e configura duas VMs de balanceador de carga para que um failover para o outro peering possa acontecer.
Para aumentar a disponibilidade do serviço, ou seja, para o servidor da API Kubernetes, recomendamos que você sempre use um par de alta disponibilidade na frente do cluster de administrador. Para saber mais sobre o Seesaw e a configuração de alta disponibilidade dele, consulte Balanceamento de carga em pacote com o Seesaw.
Para evitar a interrupção do serviço durante um upgrade com um par de alta disponibilidade, o cluster inicia um failover antes de criar a nova VM do balanceador de carga. Se um cluster de usuário usar apenas uma única instância do balanceador de carga, haverá uma interrupção do serviço até que o upgrade seja concluído.
Recomendamos que você tenha um par de balanceador de carga de alta disponibilidade se o próprio cluster de usuário também estiver configurado para ser altamente disponível. Esta série de práticas recomendadas pressupõe que um cluster de usuário de alta disponibilidade utilize um par de balanceador de carga de alta disponibilidade.
Se você usar MetalLB como um balanceador de carga em pacote, nenhuma configuração pré-upgrade será necessária. O balanceador de carga é atualizado durante o processo de upgrade do cluster.
Decidir como fazer upgrade de cada cluster de usuário
Na versão 1.14 e mais recentes, é possível fazer upgrade de um cluster de usuário como um todo, ou seja, é possível fazer upgrade do plano de controle e de todos os pools de nós do cluster. Também é possível fazer upgrade do plano de controle do cluster de usuário e deixar os pools de nós na versão atual. Para saber por que fazer upgrade do plano de controle separadamente, consulte Upgrades de cluster de usuário.
Em um ambiente de vários clusters, monitore quais clusters de usuário foram atualizados e registre o número da versão. Se você decidir atualizar o os pools de nós e o plano de controle separadamente, registre a versão do plano de controle e de cada pool de nós em cada cluster.
Verificar as versões do cluster de usuário e administrador
gkectl
Para verificar a versão dos clusters de usuário:
gkectl list clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Substitua
ADMIN_CLUSTER_KUBECONFIG
pelo caminho do arquivo kubeconfig para o cluster de administrador;Para verificar a versão dos clusters de administrador:
gkectl list admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG
CLI da gcloud
Para clusters que estão registrados na API GKE On-Prem, é possível usar a gcloud CLI para acessar as versões dos clusters de usuário, pools de nós no cluster de usuário e clusters de administrador.
Verifique se você tem a versão mais recente da CLI gcloud. Atualize os componentes da CLI gcloud, se necessário:
gcloud components update
Execute os seguintes comandos para verificar as versões:
Para verificar a versão dos clusters de usuário:
gcloud container vmware clusters list \ --project=PROJECT_ID \ --location=-
Substitua
PROJECT_ID
. O ID do projeto host da frota.Definir
--location=-
significa listar todos os clusters em todas as regiões. Se você precisar reduzir o escopo da lista, defina--location
como a região especificada ao registrar o cluster.A saída do comando inclui a versão do cluster.
Para verificar a versão dos clusters de administrador:
gcloud container vmware admin-clusters list \ --project=PROJECT_ID \ --location=-
Verifique a versão dos nós do cluster:
É possível usar kubectl
para conseguir a versão dos nós do cluster, mas kubectl
retorna a versão do Kubernetes. Para acessar o serviço correspondente do Google Distributed Cloud
para uma versão do Kubernetes, consulte
Controle de versões:
kubectl get nodes --kubeconfig USER_CLUSTER_KUBECONFIG
Substitua USER_CLUSTER_KUBECONFIG
pelo caminho do
arquivo kubeconfig do cluster de usuário.
Verificar se os certificados de CA precisam ser alternados
Durante um upgrade, os certificados de folha são alternados, mas os de CA não. É preciso alternar manualmente os certificados de CA pelo menos uma vez a cada cinco anos. Para mais informações, consulte Alternar autoridades certificadoras de cluster de usuário e Alternar certificados de CA de cluster de administrador.
Diferenças entre tipos de cluster
Há dois tipos diferentes de cluster:
- Cluster de usuário
- Cluster de administrador
Dependendo de como você cria um cluster de usuário, ele pode conter os nós de trabalho e nós do plano de controle (Controlplane V2) ou apenas nós de trabalho (kubeception). Com o kubeception, o plano de controle de um cluster de usuário é executado em um ou mais nós em um cluster de administrador. Em ambos os casos, na versão 1.14 e mais recentes, é possível atualizar um plano de controle do cluster de usuário separadamente dos pools de nós que executam suas cargas de trabalho.
Diferentes efeitos do cluster de usuário e das atualizações de cluster de administrador
O procedimento de upgrade do Google Distributed Cloud envolve um processo de drenagem de nós que remove todos os pods de um nó. O processo cria uma nova VM para cada nó de trabalho drenado e a adiciona ao cluster. Depois, os nós de trabalho drenados são removidos do inventário do VMware. Durante esse processo, qualquer carga de trabalho executada nesses nós é interrompida e reiniciada em outros nós disponíveis no cluster.
Dependendo da arquitetura escolhida da carga de trabalho, este procedimento pode ter impacto na disponibilidade de um aplicativo. Para evitar muita pressão nas atividades do recurso do cluster, o Google Distributed Cloud faz upgrade de um nó ao longo do tempo.
Interrupção do cluster de usuário
A tabela a seguir descreve o impacto de um upgrade no cluster de usuário no local:
Função | Cluster de administrador | Cluster de usuário não de alta disponibilidade | Cluster de usuário de alta disponibilidade |
---|---|---|---|
Acesso à API Kubernetes | Não afetado | Não afetado | Não afetado |
Cargas de trabalho de usuário | Não afetado | Não afetado | Não afetado |
PodDisruptionBudgets* | Não afetado | Não afetado | Não afetado |
Nó do plano de controle | Não afetado | Afetado | Não afetado |
Escalonamento automático de pods (VMware) | Não afetado | Não afetado | Não afetado |
Reparo automático | Não afetado | Não afetado | Não afetado |
Escalonamento automático de nós (VMware) | Não afetado | Não afetado | Não afetado |
Escalonamento automático de pod horizontal | Afetado | Afetado | Não afetado |
- * : os PDBs podem causar falha ou interrupção do upgrade.
- Afetado: uma interrupção do serviço durante o upgrade é perceptível até que ela seja concluída.
- Não afetado: uma interrupção do serviço pode ocorrer durante um período muito curto, mas é quase imperceptível.
Os nós do plano de controle do cluster de usuário, sejam eles executados no cluster de administrador (kubeception) ou o próprio cluster de usuário (Controlplane V2), não execute nenhuma carga de trabalho de usuário. Durante um upgrade, esses nós do plano de controle são drenados e, em seguida, atualizados.
Em ambientes com planos de controle de alta disponibilidade (HA, na sigla em inglês), fazer upgrade do plano de controle de um cluster de usuário não causa a interrupção das cargas de trabalho do usuário. Em um ambiente de alta disponibilidade, o upgrade de um cluster de administrador não causa a interrupção das cargas de trabalho de usuário. Para clusters de usuários usando o Controlplane V2, o upgrade apenas do plano de controle não causa a interrupção das cargas de trabalho de usuário.
Durante um upgrade em um ambiente de plano de controle que não é de alta disponibilidade, o plano de controle não consegue controlar ações de escalonamento, recuperação ou implantação de pods. Durante a breve interrupção do plano de controle durante o upgrade, as cargas de trabalho de usuário podem ser afetadas se estiverem em um estado de escalonamento, implantação ou recuperação. Isso significa que que os lançamentos vão falhar durante um upgrade em um ambiente que não seja de alta disponibilidade.
Para melhorar a disponibilidade e reduzir as interrupções dos clusters de usuário de produção durante os upgrades, recomendamos que você utilize três nós do plano de controle (modo de alta disponibilidade).
Interrupção do cluster de administrador
A tabela a seguir descreve o impacto de um upgrade no cluster de administrador local:
Função | Cluster de administrador | Cluster de usuário não de alta disponibilidade | Cluster de usuário de alta disponibilidade |
---|---|---|---|
Acesso à API Kubernetes | Afetado | Afetado | Não afetado |
Cargas de trabalho de usuário | Não afetado | Não afetado | Não afetado |
Nó do plano de controle | Afetado | Afetado | Não afetado |
Escalonador automático de pod | Afetado | Afetado | Não afetado |
Reparo automático | Afetado | Afetado | Não afetado |
Escalonamento automático de nós | Afetado | Afetado | Não afetado |
Escalonamento automático de pod horizontal | Afetado | Afetado | Não afetado |
- Afetado: uma interrupção do serviço durante o upgrade é perceptível até que ela seja concluída.
- Não afetado: uma interrupção do serviço pode ocorrer durante um período muito curto, mas é quase imperceptível.