Esta página mostra como migrar o cluster Standard e os node pools do Google Kubernetes Engine (GKE) do Docker para imagens de nós que usam o tempo de execução de contentores containerd.
Vista geral
Os nós do Kubernetes usam o tempo de execução do contentor para iniciar, gerir e parar contentores em execução em Pods. O tempo de execução do containerd é um tempo de execução de contentores em conformidade com a norma da indústria suportado pelo GKE.
O tempo de execução do containerd oferece a abstração de camadas que permite a implementação de um conjunto avançado de funcionalidades, como o gVisor e o streaming de imagens, para expandir a funcionalidade do GKE. O motor de execução do containerd é considerado mais eficiente em termos de recursos e mais seguro do que o motor de execução do Docker.
Para migrar o tempo de execução do contentor:
- Identifique os nós que usam o tempo de execução do Docker
- Valide o impacto da migração
- Altere a imagem do nó
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
Identifique os nós que usam o tempo de execução do Docker
Pode verificar que nós usam imagens de nós baseadas no Docker através dos seguintes métodos:
- Use um script para iterar todos os nós em todos os clusters do GKE no seu Google Cloud projeto.
- Use a CLI do Google Cloud,
kubectl
, ou a consola para identificar imagens de nós. Google Cloud - Use estatísticas e recomendações de descontinuação para identificar clusters e nós em zonas ou regiões específicas num Google Cloud projeto.
Recomendamos que use um script para identificar rapidamente todos os nós que precisa de migrar.
Use um script para identificar nós do Docker
O script seguinte itera todos os nós em todos os clusters nos seus projetos disponíveis e fornece recomendações acionáveis, como:
- Se a administração de contas automática de nós está configurada para imagens Docker
- Equivalentes de imagem do nó do containerd sugeridos para migração
- Versões de imagens de nós sugeridas para migração
- Comandos sugeridos para executar a migração dos nós e das definições identificados
O script ignora os clusters do GKE Autopilot, que usam a imagem do nó do SO otimizado para contentores com o containerd por predefinição.
Execute o seguinte guião:
Identifique imagens de nós com Google Cloud
Pode verificar as imagens dos nós dos nós existentes através da CLI do Google Cloud,
kubectl
, ou da Google Cloud consola.
gcloud
Execute o seguinte comando:
gcloud container node-pools list \
--cluster=CLUSTER_NAME \
--format="table(name,version,config.imageType)"
Substitua CLUSTER_NAME
pelo nome do seu cluster.
O resultado é semelhante ao seguinte:
NAME NODE_VERSION IMAGE_TYPE
default-pool 1.19.6-gke.600 UBUNTU
Consola
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Na lista de clusters, clique no nome do cluster que quer validar.
Selecione o separador Nós.
Na secção Pools de nós, verifique o valor na coluna Tipo de imagem.
kubectl
Execute o seguinte comando:
kubectl get nodes -o wide
O resultado é semelhante ao seguinte:
# For Docker runtime
NAME STATUS VERSION OS-IMAGE CONTAINER-RUNTIME
gke-node-1 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
gke-node-2 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
gke-node-3 Ready v1.16.15-gke.6000 Container-Optimized OS from Google docker://19.3.1
O valor na coluna CONTAINER-RUNTIME
mostra o tempo de execução e a versão.
Identifique clusters através de estatísticas e recomendações de descontinuação
O GKE deteta a utilização de algumas funcionalidades e APIs descontinuadas, incluindo imagens de nós baseadas no Docker. Para saber mais, consulte o artigo Descontinuações de funcionalidades e APIs.
Como parte da deteção da utilização de descontinuações, o GKE gera
estatísticas e recomendações
que identificam a utilização de imagens de nós baseadas no Docker com o subtipo de estatísticas DEPRECATION_K8S_1_24_DOCKERSHIM
.
Uma combinação de estatísticas e recomendações identifica um cluster com nós que estão a usar imagens de nós baseadas no Docker. Cada estatística e recomendação fornece uma lista dos node pools específicos num cluster que estão a usar imagens de nós baseadas no Docker e têm de ser migrados para imagens de nós do containerd.
Para começar, siga as instruções para ver estatísticas e recomendações de descontinuação. Para os comandos da CLI gcloud, use a seguinte flag para ver apenas estatísticas sobre esta descontinuação:
--filter="insightSubtype:DEPRECATION_K8S_1_24_DOCKERSHIM"
Depois de identificar os conjuntos de nós do cluster que estão a usar imagens de nós baseadas no Docker, siga as instruções para alterar a imagem de nó para uma imagem de nó do containerd.
Valide o impacto da migração
Antes de migrar os clusters de produção e os conjuntos de nós para imagens de nós que usam o containerd, recomendamos vivamente que teste o impacto da migração num ambiente de preparação para minimizar o risco de problemas.
Recomendamos que, quando migrar os nós, o faça independentemente da atualização dos nós, para poder isolar as variáveis quando verificar se as cargas de trabalho funcionam com a nova configuração. Além disso, se atualizar o conjunto de nós para a versão 1.24 ao mesmo tempo, não pode reverter a alteração, uma vez que a versão 1.24 não suporta nós do Docker e não pode reverter versões secundárias.
Altere a imagem do nó para uma imagem do Containerd
Se usou o script para identificar os seus nós do Docker, pode usar os comandos sugeridos devolvidos pelo script para alterar as definições de aprovisionamento automático dos nós e as imagens dos nós para os equivalentes do containerd.
Também pode migrar nós de um tipo de imagem do Docker para um tipo de imagem do containerd atualizando o conjunto de nós e definindo uma imagem diferente através da CLI gcloud ou da Google Cloud consola.
O GKE usa a estratégia de atualização de nós selecionada e a configuração para migrar a imagem de um nó. Para esta migração, recomendamos que use a estratégia de atualização azul-verde porque, se as suas cargas de trabalho tiverem problemas com a nova imagem do nó durante a atualização, pode reverter para o ambiente anterior com a configuração original da imagem do nó.
gcloud
Execute o seguinte comando:
gcloud container clusters upgrade CLUSTER_NAME \
--image-type=NODE_IMAGE \
--node-pool=POOL_NAME \
--cluster-version=NODE_VERSION
Substitua o seguinte:
NODE_IMAGE
: a imagem do nó que quer que os nós usem.POOL_NAME
: o nome do node pool a migrar.NODE_VERSION
: a versão existente do conjunto de nós. Recomendamos que defina esta flag porque, caso contrário, o GKE tenta atualizar a versão do conjunto de nós para a versão do plano de controlo e atualizar a imagem do nó na mesma operação. Se o plano de controlo estiver a executar a versão 1.24, o comando falha. Se o plano de controlo estiver a ser executado na versão 1.23, o comando é bem-sucedido, o que impede que teste as duas alterações (atualização da versão e atualização da imagem) isoladamente.
O resultado é semelhante ao seguinte:
NAME NODE_VERSION IMAGE_TYPE
default-pool 1.23.6-gke.600 UBUNTU_CONTAINERD
Consola
Aceda à página do Google Kubernetes Engine na Google Cloud consola.
Na lista de clusters, clique no nome do cluster que quer validar.
Clique no separador Nós.
Na secção Conjuntos de nós, clique no nome do conjunto de nós que quer modificar.
Na página Detalhes do conjunto de nós, clique em
Editar.Na secção Nodes, em Tipo de imagem, clique em Alterar.
Selecione um dos tipos de imagens do containerd.
Clique em Alterar.
Reverta para imagens de nós do Docker
Se os seus nós foram migrados automática ou manualmente para nós do containerd e detetou um problema com as suas cargas de trabalho, siga os passos abaixo para reverter para imagens de nós do Docker:
- Escolha o passo seguinte consoante o estado da operação:
- Se a operação ainda estiver em curso, pode cancelá-la e reverter.
- Se a operação estiver concluída, consulte os passos da secção anterior e selecione a imagem Docker equivalente.
- Configure uma exclusão de manutenção para impedir temporariamente que o GKE volte a tentar a migração.
- Investigue a causa principal do problema para poder migrar do Docker e garantir que o cluster está a executar uma versão suportada do GKE.
- Tente novamente alterar a imagem do nó para uma imagem do containerd. Se remover a exclusão de manutenção, o GKE aciona novamente a operação.
Atualize as configurações da ferramenta de infraestrutura como código (IaC)
Se usar ferramentas de IaC, como Terraform, Ansible ou Pulumi, para gerir clusters do GKE, certifique-se de que atualiza as suas configurações para usar imagens de nós do containerd, de modo a impedir que as ferramentas reconciliem o estado desejado anteriormente com o novo estado real. Por exemplo, o fornecedor do Terraform do GKE suporta tipos de imagens configuráveis.
Atualize todas as configurações para que a ferramenta não atualize novamente a imagem do nó para uma imagem do nó baseada no Docker depois de migrar para imagens do nó do containerd.
Altere a imagem do nó predefinida para o aprovisionamento automático dos nós
Se usar o aprovisionamento automático de nós no seu cluster, altere o tipo de imagem predefinido para uma imagem de nó do containerd. A alteração do tipo de imagem predefinido aplica-se apenas a novos conjuntos de nós aprovisionados automaticamente. Tem de alterar manualmente a imagem do nó para os conjuntos de nós aprovisionados automaticamente existentes.
Pode alterar o tipo de imagem de aprovisionamento automático de nós predefinido através da CLI gcloud ou de um ficheiro de configuração.
gcloud
Execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--enable-autoprovisioning \
--autoprovisioning-image-type=IMAGE_TYPE
Substitua o seguinte:
CLUSTER_NAME
: o nome do cluster a atualizar.IMAGE_TYPE
: o tipo de imagem do nó, que pode ser um dos seguintes:cos_containerd
ubuntu_containerd
Ficheiro
Pode usar um ficheiro de configuração YAML para alterar o tipo de imagem do nó predefinido para o aprovisionamento automático de nós. Quando usa um ficheiro, também tem de especificar os valores máximos para os recursos de CPU e memória.
Guarde o seguinte ficheiro YAML:
resourceLimits: - resourceType: 'cpu' minimum: 4 maximum: 10 - resourceType: 'memory' maximum: 64 autoprovisioningNodePoolDefaults: imageType: 'IMAGE_TYPE'
Substitua
IMAGE_TYPE
pelo tipo de imagem do containerd.Aplique a configuração:
gcloud container clusters update CLUSTER_NAME \ --enable-autoprovisioning \ --autoprovisioning-config-file=FILE_NAME
Substitua
FILE_NAME
pelo caminho para o ficheiro de configuração.
Resolução de problemas
Para a resolução de problemas e problemas conhecidos com soluções alternativas, consulte o artigo Resolução de problemas do tempo de execução do contentor.
O que se segue?
- Saiba mais acerca do aprovisionamento automático de nós.
- Saiba mais sobre as imagens de nós do containerd.