Ajudar a melhorar esta página
Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.
Quando uma nova versão do Kubernetes está disponível no Amazon EKS, você pode atualizar o cluster do Amazon EKS para a versão mais recente.
Importante
Depois de atualizar um cluster, não é possível revertê-lo uma versão anterior. Recomendamos que, antes de atualizar para uma nova versão do Kubernetes, você analise as informações em Entender o ciclo de vida da versão do Kubernetes no EKS e também as etapas de atualização neste tópico.
Novas versões do Kubernetes às vezes introduzem alterações significativas. Assim, recomendamos que você teste o comportamento das aplicações com relação a uma nova versão do Kubernetes antes de atualizar os clusters de produção. Você pode fazer isso, criando um fluxo de trabalho de integração contínua para testar o comportamento da aplicação antes de passar para uma nova versão do Kubernetes.
O processo de atualização consiste na execução de novos nós do servidor da API pelo Amazon EKS com a versão do Kubernetes atualizada para substituir as existentes. O Amazon EKS executa verificações padrão de integridade e prontidão da infraestrutura para o tráfego de rede nesses novos nós para confirmar que eles estão funcionando conforme o esperado. Porém, depois que você iniciou a atualização do cluster, não pode pausá-la nem interrompê-la. Se qualquer uma dessas verificações falhar, o Amazon EKS reverterá a implantação de infraestrutura e seu cluster permanecerá na versão do Kubernetes anterior. A execução de aplicações não será afetada e o cluster nunca será deixado em um estado irrecuperável ou não determinista. O Amazon EKS faz backup regularmente de todos os clusters gerenciados, além de ter mecanismos para recuperar clusters, se necessário. Estamos sempre avaliando e melhorando nossos processos de gerenciamento de infraestrutura do Kubernetes.
Para atualizar o cluster, o Amazon EKS requer até cinco endereços IP disponíveis das sub-redes que você especificou ao criar o cluster. O Amazon EKS cria novas interfaces de rede elásticas (interfaces de rede) de cluster em qualquer uma das sub-redes especificadas. Como as interfaces de rede podem ser criadas em sub-redes diferentes das interfaces de rede existentes, certifique-se de que as regras do grupo de segurança permitam a comunicação de cluster necessária para qualquer uma das sub-redes que você especificou ao criar o cluster. Se alguma das sub-redes que você especificou ao criar o cluster não existir, não tiver endereços IP disponíveis suficientes ou não tiver regras de grupo de segurança que permitam a comunicação necessária do cluster, a atualização poderá falhar.
Para garantir que o endpoint do servidor de API do cluster sempre esteja acessível, o Amazon EKS fornece um ambiente de gerenciamento do Kubernetes com alta disponibilidade e executa atualizações contínuas das instâncias do servidor de API durante as operações de atualização. Para contabilizar a alteração de endereços IP das instâncias do servidor de API compatíveis com o endpoint do servidor de API do Kubernetes, você deve garantir que seus clientes do servidor de API gerenciem as reconexões de modo eficaz. Versões recentes do kubectl
e das bibliotecas
nota
Para saber mais sobre o que acontece em uma atualização de cluster, consulte Best Practices for Cluster Upgrades no Guia de práticas recomendadas do EKS. Esse recurso ajuda você a planejar uma atualização e a entender a estratégia de atualização de um cluster.
Considerações sobre o Modo Automático do Amazon EKS
-
A capacidade computacional do Modo Automático do Amazon EKS controla a versão do Kubernetes dos nós. Depois de atualizar o ambiente de gerenciamento, o Modo Automático do EKS começará a atualizar incrementalmente os nós gerenciados. O Modo Automático do Amazon EKS respeita os orçamentos de interrupção de pods.
-
Você não precisa atualizar manualmente as capacidades do Modo Automático do Amazon EKS, incluindo as capacidades de ajuste de escala automático de computação, armazenamento em blocos e balanceamento de carga.
Etapa 1: preparar-se para o upgrade
-
Compare a versão do Kubernetes do plano de controle de cluster com a versão do Kubernetes dos seus nós.
-
Obtenha a versão do Kubernetes do ambiente de gerenciamento do cluster.
kubectl version
-
Obtenha a versão do Kubernetes dos nós. Esse comando retorna todos os nós autogerenciados e gerenciados pelo Amazon EC2, do Fargate e híbridos. Cada pod do Fargate é listado como seu próprio nó.
kubectl get nodes
Antes de atualizar seu ambiente de gerenciamento para uma nova versão do Kubernetes, certifique-se de que a versão secundária do Kubernetes dos nós gerenciados e dos nós Fargate no seu cluster sejam iguais à versão do seu ambiente de gerenciamento. Por exemplo, se o ambiente de gerenciamento estiver executando a versão
1.29
e um dos nós estiver executando a versão1.28
, será necessário atualizar os nós para a versão1.29
antes de atualizar o ambiente de gerenciamento para 1.30. Também recomendamos que você atualize os nós autogerenciados e híbridos para a mesma versão do ambiente de gerenciamento antes de atualizá-lo. Para ter mais informações, consulte Atualizar um grupo de nós gerenciados para seu cluster, Atualizar nós autogerenciados para seu cluster e Atualizar os nós híbridos do cluster. Se você tiver nós do Fargate com uma versão secundária inferior à versão do ambiente de gerenciamento, primeiro exclua o pod que é representado pelo nó. Em seguida, atualize seu ambiente de gerenciamento. Todos os pods restantes serão atualizados para a nova versão depois de reimplantados. -
-
Se a versão do Kubernetes com a qual você implantou originalmente seu cluster era o Kubernetes
1.25
ou posterior, ignore essa etapa.Por padrão, o controlador de admissão da política de segurança do pod é habilitado por padrão nos clusters do Amazon EKS. Antes de atualizar o cluster, certifique-se de que as políticas de segurança de pods adequadas estejam em vigor. Isso acontece para evitar possíveis problemas de segurança. Você pode verificar a política padrão com o comando
kubectl get psp eks.privileged
.kubectl get psp eks.privileged
Se receber o seguinte erro, consulte Política de segurança de pods padrão do Amazon EKS antes de prosseguir.
Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found
-
Se a versão do Kubernetes com a qual você implantou originalmente seu cluster era o Kubernetes
1.18
ou posterior, ignore essa etapa.Talvez seja necessário remover um termo descontinuado do manifesto do CoreDNS.
-
Verifique se o manifesto do CoreDNS tem uma linha que tenha apenas a palavra
upstream
.kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream
Se nenhuma saída for retornada, significa que o manifesto não tem a linha. Se este for o caso, pule para a próxima etapa. Se a palavra
upstream
for retornada, remova a linha. -
Remova a linha perto do topo do arquivo que só tem a palavra
upstream
no arquivo de configuração. Não mude mais nada no arquivo. Depois que a linha for removida, salve as alterações.kubectl edit configmap coredns -n kube-system -o yaml
-
Etapa 2: analisar as considerações sobre o upgrade
Analise o Deprecated API Migration Guide
-
Se você estiver atualizando para a versão
1.23
e usar volumes do Amazon EBS em seu cluster, será necessário instalar o driver de CSI do Amazon EBS no cluster antes de atualizar o cluster para a versão1.23
a fim de evitar interrupções de workload. Para ter mais informações, consulte Armazenar volumes do Kubernetes com o Amazon EBS. -
O Kubernetes
1.24
e versões posteriores são usadoscontainerd
como o runtime padrão do contêiner. Caso esteja mudando para o runtimecontainerd
e já tenha o Fluentd configurado para o Container Insights, você deverá migrar o Fluentd para o Fluent Bit antes de atualizar o cluster. Os analisadores Fluentd são configurados para analisar apenas mensagens de log no formato JSON. Ao contrário dedockerd
, o runtime docontainerd
contêiner tem mensagens de log que não estão no formato JSON. Se você não migrar para o Fluent Bit, alguns dos analisadores Fluentd configurados vão gerar muitos erros dentro do contêiner do Fluentd. Para obter mais informações sobre migração, consulte Configurar o Fluent Bit como um DaemonSet para enviar logs para o CloudWatch Logs.-
Como o Amazon EKS executa um ambiente de gerenciamento de alta disponibilidade, você pode atualizar apenas uma versão secundária por vez. Para saber mais sobre esse requisito, consulte Política de suporte da distorção da versão e da versão do Kubernetes
. Suponha que a versão atual do cluster seja a 1.28
e você queira atualizar para a versão1.30
. Você deve primeiro atualizar o cluster versão1.28
para versão1.29
e depois atualizar o cluster versão1.29
para a versão1.30
.
-
-
Analise a distorção da versão entre o
kube-apiserver
do Kubernetes e okubelet
nos nós.-
Com a versão
1.28
do Kubernetes e mais recentes, okubelet
pode ter até três versões secundárias anteriores ao dokube-apiserver
. Consulte a política de distorção de versão upstream do Kubernetes. -
Se o
kubelet
em seus nós gerenciados e do Fargate estiver na versão1.25
ou mais recente do Kubernetes, você poderá atualizar o cluster para até três versões à frente sem atualizar a versão dokubelet
. Por exemplo, se a versão1.25
dokubelet
estiver ativa, você poderá atualizar a versão do cluster do Amazon EKS de1.25
para1.26
e de1.27
para1.28
, enquanto okubelet
estiver na versão1.25
. -
Se o
kubelet
nos nós gerenciados e do Fargate estiver na versão1.24
ou mais antiga do Kubernetes, poderá ser apenas duas versões secundárias anteriores à dokube-apiserver
. Em outras palavras, se okubelet
estiver na versão1.24
ou anterior, você só poderá atualizar seu cluster até duas versões à frente. Por exemplo, se okubelet
estiver na versão1.21
, você poderá atualizar a versão do cluster do Amazon EKS de1.21
para1.22
e depois para1.23
, mas não poderá atualizar o cluster para a versão1.24
enquanto okubelet
estiver na versão1.21
.
-
-
Como prática recomendada, antes de iniciar uma atualização, verifique se o
kubelet
nos nós está na mesma versão do Kubernetes que a do seu ambiente de gerenciamento. -
Se o cluster estiver configurado com uma versão do plug-in CNI da Amazon VPC para Kubernetes anterior à versão
1.8.0
, recomendamos atualizar o plug-in para a versão mais recente recomendada antes de atualizar o cluster. Para atualizar o plug-in, consulte Atribuir IPs a pods com a CNI da Amazon VPC. -
Se você estiver atualizando o cluster para uma versão
1.25
ou mais recente e tiver o AWS Load Balancer Controller implantado em seu cluster, atualize o controlador para a versão2.4.7
ou mais recente antes de atualizar sua versão do cluster para1.25
. Para obter mais informações, consulte as notas de versão do Kubernetes 1.25.
Etapa 3: atualizar o ambiente de gerenciamento do cluster
Você pode enviar a solicitação de atualização da versão do ambiente de gerenciamento do EKS usando:
Atualizar o cluster - eksctl
Este procedimento exige a versão eksctl
0.205.0
ou superior. Você pode verificar a versão com o seguinte comando:
eksctl version
Para obter instruções sobre como instalar e atualizar o eksctl
, consulte Instalaçãoeksctl
.
Atualize a versão do Kubernetes do ambiente de gerenciamento do Amazon EKS. Substitua my-cluster
pelo nome do cluster. Substitua 1.30
pelo número da versão compatível com o Amazon EKS para a qual você deseja atualizar o cluster. Para obter a lista completa dos números das versões compatíveis, consulte Compreender o ciclo de vida da versão do Kubernetes no EKS.
eksctl upgrade cluster --name my-cluster --version 1.30 --approve
O processo pode demorar alguns minutos para ser concluído.
Avance para Etapa 4: atualizar componentes do cluster
Atualizar o cluster: console do AWS
-
Abra o console do Amazon EKS
. -
Escolha o nome do cluster do Amazon EKS a ser atualizado e selecione Update cluster version (Atualizar versão do cluster).
-
Para Kubernetes version (Versão do Kubernetes), selecione a versão para a qual atualizar seu cluster e escolha Update (Atualizar).
-
Em Cluster name (Nome do cluster), insira o nome do seu cluster e escolha Confirm (Confirmar).
O processo pode demorar alguns minutos para ser concluído.
-
Avance para Etapa 4: atualizar componentes do cluster
Atualizar o cluster: AWS CLI
-
Atualize seu cluster do Amazon EKS com o seguinte comando da AWS CLI. Substitua os
valores de exemplo
pelos seus próprios. Substitua1.30
pelo número da versão compatível com o Amazon EKS para a qual você deseja atualizar o cluster. Para obter a lista completa dos números das versões compatíveis, consulte Compreender o ciclo de vida da versão do Kubernetes no EKS.aws eks update-cluster-version --region region-code --name my-cluster --kubernetes-version 1.30
Veja um exemplo de saída abaixo.
{ "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "InProgress", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.30" }, { "type": "PlatformVersion", "value": "eks.1" } ], [...] "errors": [] }
-
Monitore o status do cluster com o comando a seguir. Use o nome do cluster e o ID da atualização que o comando anterior retornou. Quando um status de
Successful
for exibido, significa que a atualização está concluída. O processo pode demorar alguns minutos para ser concluído.aws eks describe-update --region region-code --name my-cluster --update-id b5f0ba18-9a87-4450-b5a0-825e6e84496f
Veja um exemplo de saída abaixo.
{ "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "Successful", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.30" }, { "type": "PlatformVersion", "value": "eks.1" } ], [...] "errors": [] }
-
Avance para Etapa 4: atualizar componentes do cluster
Etapa 4: atualizar componentes do cluster
-
Depois que a atualização do cluster for concluída, atualize os nós para a mesma versão secundária do Kubernetes do cluster atualizado. Para ter mais informações, consulte Atualizar nós autogerenciados para seu cluster, Atualizar um grupo de nós gerenciados para seu cluster e Atualizar os nós híbridos do cluster. Quaisquer novos pods iniciados no Fargate têm uma versão do
kubelet
que corresponde à versão do cluster. Os pods existentes do Fargate não são alterados. -
(Opcional) Se você implantou o Kubernetes Cluster Autoscaler no cluster antes de atualizá-lo, atualize o Cluster Autoscaler para a versão mais recente que corresponde à versão principal e secundária do Kubernetes para a qual você atualizou.
-
Abra a página de versões
do Cluster Autoscaler em um navegador da web e encontre a versão mais recente do Cluster Autoscaler que corresponda às versões principal e secundária do Kubernetes do seu cluster. Por exemplo, se a versão do Kubernetes do cluster for 1.30
, localize a versão mais recente do Cluster Autoscaler que começa com1.30
. Registre o número de versão semântico (1.30.n
, por exemplo) dessa versão para usar na próxima etapa. -
Defina a tag de imagem do Cluster Autoscaler como a versão que você registrou na etapa anterior com o comando a seguir. Se necessário, substitua
1.30
.n
pelo seu próprio valor.kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.n
-
-
(Somente clusters com nós de GPU) Se o cluster tiver grupos de nós compatíveis com GPU (por exemplo,
p3.2xlarge
), você deverá atualizar o plug-in de dispositivo NVIDIA para KubernetesDaemonSet no seu cluster. Substitua vX.X.X
pela versão desejada do NVIDIA/k8s-device-pluginantes de executar o seguinte comando. kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
-
Atualize o plug-in CNI da Amazon VPC para Kubernetes, o CoreDNS e os complementos
kube-proxy
. Recomendamos atualizar os complementos para as versões mínimas listadas nos tokens da conta de serviço.-
Se você está usando complementos do Amazon EKS, selecione Clusters no console do Amazon EKS e, em seguida, selecione o nome do cluster que você atualizou no painel de navegação esquerdo. As notificações serão exibidas no console. Elas informam que uma nova versão está disponível para cada complemento que tenha uma atualização disponível. Para atualizar um complemento, selecione a guia Add-ons (Complementos). Em uma das caixas de um complemento que tenha uma atualização disponível, selecione Update now (Atualizar agora), selecione uma versão disponível e, em seguida, selecione Update (Atualizar).
-
Como alternativa, você pode usar a AWS CLI ou o
eksctl
para atualizar os complementos. Para ter mais informações, consulte Atualizar um complemento do Amazon EKS.
-
-
Se necessário, atualize a versão do
kubectl
. Você deve usar uma versão dokubectl
que esteja em uma versão secundária de diferença do plano de controle do cluster do Amazon EKS.
Fazer o downgrade da versão do Kubernetes de um cluster do Amazon EKS
Não é possível fazer o downgrade do Kubernetes de um cluster do Amazon EKS. Em vez disso, crie um novo cluster em uma versão anterior do Amazon EKS e migre as workloads.