Na versão 1.5 no final de 2016, o Kubernetes introduziu um novo padrão de interface: CRI, Container Runtime Interface.
O CRI usa ProtoBuffer e gPRC para especificar como o kubelet chama o tempo de execução do contêiner para gerenciar contêineres e imagens, mas essa é uma interface totalmente nova e totalmente incompatível com as chamadas anteriores do Docker.
O Kubernetes pode fornecer apenas uma solução de "compromisso" ao mesmo tempo, adicionando um "adaptador" entre o kubelet e o Docker para converter a interface do Docker em uma interface que esteja em conformidade com o padrão CRI.
E o Docker dividiu o Docker Engine de arquitetura única original em vários módulos, e a parte do daemon do Docker foi doada ao CNCF para formar o containerd.
Como projeto gerido pelo CNCF, o containerd deve cumprir as normas do CRI. No entanto, por motivos próprios, o Docker apenas chama o containerd no Docker Engine, e a interface externa permanece inalterada, o que significa que ainda não é compatível com o CRI.
Existem duas cadeias de chamadas no Kubernetes:
- A primeira é usar a interface CRI para chamar o dockershim, depois o dockershim chama o Docker e o Docker usa o containerd para operar o contêiner.
- A segunda é usar a interface CRI para chamar diretamente o containerd para operar o contêiner.
Como o containerd é usado para gerenciar containers, o efeito final das duas cadeias de chamadas é exatamente o mesmo, mas o segundo método salva os dois links do dockershim e do Docker Engine, que é mais conciso e claro, com menos perdas e melhor desempenho Melhore alguns .
Portanto, "abandonar o Docker" não terá muito impacto no Kubernetes e no Docker, pois ambos já alteraram a camada inferior para open source containerd, e a imagem original do Docker e o container ainda rodarão normalmente, a única mudança é que o Kubernetes ignora Docker e chama diretamente o containerd dentro do Docker.
O Docker é uma linha completa de produtos de software, não apenas containerd, mas também inclui construção de espelhos, distribuição, teste e muitos outros serviços, e até mesmo Kubernetes integrado no Docker Desktop.
Este artigo é uma nota de estudo para o dia 10 de julho. O conteúdo vem do Geek Time "Kubernetes Introductory Practical Course". Este curso é recomendado.