Como usar o containerd para o ambiente de execução de contêiner

O ambiente de execução do contêiner é um software responsável por gerenciar contêineres e imagens de contêiner em um nó do Kubernetes. containerd é um ambiente de execução de contêiner gradual do CNCF (Cloud Native Cloud Foundation). Ele é compatível com o Kubernetes de maneira nativa e é considerado mais eficiente e seguro do que o Docker Engine para Kubernetes. Até o Kubernetes 1.20, o Docker Engine era o ambiente de execução do contêiner principal. Entretanto, o Dockershim, o código de integração do Docker Engine no Kubernetes, teve seu uso descontinuado no Kubernetes 1.20 e foi removido no Kubernetes 1.24.

A partir de agora, use o containerd nos clusters.

Suporte a contêineres em um cluster de administrador

O GKE no VMware usa o containerd para todos os nós de cluster de administrador.

Suporte para o containerd em um cluster de usuário

O GKE no VMware é compatível com os seguintes tipos de imagem do SO para nós de cluster de usuário:

Tipo de imagem do SOAmbiente de execução do contêiner
ubuntu_containerdcontainerd
coscontainerd
windowscontainerd

Restrições e recomendações

  • A partir da versão 1.13.0, o GKE no VMware não oferece mais suporte ao tipo de imagem do SO ubuntu. Todos os nós do cluster precisam usar o ambiente de execução em contêiner.

  • Não é possível fazer upgrade de um cluster que usa o Docker Engine para a versão 1.13. Você precisa atualizar seu cluster para usar o ambiente de execução containerd antes de fazer upgrade para a versão 1.13.

  • A partir da versão 1.12.0, não é mais possível criar clusters novos que usam o tipo de imagem ubuntu do SO. Ou seja, não é mais possível criar novos clusters que usam o ambiente de execução de contêiner do Docker Engine.

Determinar quais pools de nós estão usando o Docker Engine

Ubuntu

Liste os pools de nós do Ubuntu que usam o Docker Engine:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get onpremnodepools \
    -o json -A | jq -r '.items[] |select(.spec.osImageType == "ubuntu")|.metadata.name'

Substitua USER_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster de usuário.

Exemplo de saída:

ubuntu-node-pool-1
ubuntu-node-pool-3

Windows

Todos os pools de nós do Windows em um cluster de usuário usam o mesmo ambiente de execução do contêiner. O ambiente de execução para nós do Windows é determinado pelo valor de enableWindowsDataplaneV2, que é um campo no arquivo de configuração do cluster de usuário.

Se enableWindowsDataplaneV2 for true, todos os nós do Windows no cluster de usuário usarão o containerd. Se for false, todos os nós do Windows usarão o Docker Engine.

Execute o seguinte comando para determinar quais clusters de usuários têm enableWindowsDataplaneV2 definido como false. Isso informa quais clusters de usuário estão configurados para usar o Docker Engine em nós do Windows.

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get onpremuserclusters \
    -A -o json | jq -r '.items[] |select(.spec.enableWindowsDataplaneV2 == false)|.metadata.name'

A saída lista todos os clusters de usuário configurados para usar o Docker Engine em nós do Windows. Exemplo:

user-cluster-1

Independentemente de um cluster de usuário ter pools de nós do Windows, se o cluster tiver enableWindowsDataplaneV2 definido como false, não será possível fazer upgrade para a versão 1.13.

Atualizar pools de nós do Linux para usar o containerd

Para cada pool de nós no arquivo de configuração do cluster de usuário, defina osImageType ubuntu_containerd ou cos.

Exemplo:

nodePools
- name: "my-node-pool"
  osImageType: "ubuntu_containerd"

Atualize o cluster de usuário:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

Substitua:

  • ADMIN_CLUSTER_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador

  • USER_CLUSTER_CONFIG: é o caminho do arquivo de configuração do cluster de usuário

Atualizar nós do Windows para usar o containerd

No arquivo de configuração do cluster de usuário, defina enableWindowsDataplaneV2 como true.

enableWindowsDataplaneV2: true

Atualize o cluster de usuário:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

O comando anterior define o ambiente de execução do contêiner como containerd para todos os nós do Windows no cluster.