Nota perev. : JĂĄ escrevemos mais de uma publicação (consulte os links no final do artigo) sobre tempos de execução do contĂȘiner (tempos de execução do contĂȘiner) - como regra geral, eles sĂŁo discutidos no contexto do Kubernetes. No entanto, muitas vezes esses materiais suscitaram perguntas dos leitores, indicando uma falta de entendimento de onde o prĂłximo projeto veio, como ele estĂĄ conectado com outros e o que estĂĄ acontecendo em todo esse âzoolĂłgicoâ de contĂȘineres.
Um artigo recente de Phil Estes, diretor tĂ©cnico de arquitetura de contĂȘineres e arquitetura Linux da IBM Watson & Cloud Platform, fornece uma excelente retrospectiva sobre como navegar e obter uma compreensĂŁo mais ampla de quem perdeu (ou nunca capturou) o encadeamento de eventos. Sendo um dos mantenedores dos projetos Moby e container, um membro dos comitĂȘs tĂ©cnicos da Open Container Initiative (OCI) e da Moby, e tambĂ©m com o status de Docker Captain, o autor escreve sobre o passado, presente e futuro do novo mundo maravilhoso dos tempos de execução de contĂȘineres. E para os mais preguiçosos, o material começa com um TL; DR compacto sobre o assunto ... Principais conclusĂ”es
- Com o tempo, a escolha entre tempos de execução de contĂȘineres aumentou, oferecendo mais opçÔes do que o popular mecanismo Docker.
- A Open Container Initiative (OCI) padronizou com sucesso o conceito de imagem de contĂȘiner e contĂȘiner para garantir a interoperabilidade (âinteroperabilidadeâ - aprox. Transl.) Entre ambientes de tempo de execução.
- O Kubernetes adicionou a Interface de Tempo de Execução do ContĂȘiner (CRI), que permite que os contĂȘineres se conectem aos ambientes de tempo de execução com a camada de orquestração subjacente no K8s.
- As inovaçÔes nessa ĂĄrea permitem que os contĂȘineres aproveitem a virtualização leve e outras tĂ©cnicas exclusivas de isolamento para aumentar os requisitos de segurança.
- Com o OCI e o CRI, a interoperabilidade e a escolha se tornaram realidade no ecossistema de ambientes de contĂȘiner e orquestração de tempo de execução.
A tecnologia de conteinerização existe hå algum tempo no mundo dos sistemas operacionais Linux - as primeiras idéias sobre espaços para nome separados para sistemas e processos de arquivos surgiram hå mais de uma década. E em um passado relativamente recente, o LXC apareceu e se tornou a maneira padrão para os usuårios do Linux interagirem com a poderosa tecnologia de isolamento escondida no kernel do Linux.
No entanto, apesar das tentativas
do LXC de ocultar a complexidade de combinar vĂĄrios "interiores" tecnolĂłgicos do que hoje chamamos de contĂȘiner atualmente, os contĂȘineres continuaram sendo uma espĂ©cie de mĂĄgica e se tornaram mais fortes apenas no mundo daqueles com conhecimento especial e nĂŁo obtiveram ampla distribuição entre as massas.
Tudo mudou em 2014 com o
Docker , quando um novo invĂłlucro de desenvolvedor para a mesma tecnologia de kernel Linux que o LXC tinha em serviço apareceu - afinal, as versĂ”es anteriores do Docker ânos bastidoresâ usavam o LXC e os contĂȘineres se tornaram - um fenĂŽmeno de massa real, pois os desenvolvedores estavam imbuĂdos da simplicidade e das possibilidades de reutilizar imagens de contĂȘineres do Docker e comandos simples para trabalhar com eles.
Ă claro que a Docker nĂŁo foi a Ășnica pessoa que queria ganhar uma participação no mercado de contĂȘineres quando o hype que os acompanhou nĂŁo pensou em diminuir apĂłs o primeiro interesse explosivo em 2014. Ao longo dos anos, surgiram vĂĄrias idĂ©ias alternativas para ambientes de contĂȘineres executĂĄveis ââdo
CoreOS (rkt) ,
Intel Clear Containers ,
hyper.sh (virtualização leve baseada em contĂȘiner) e
Singularidade e
mudança no mundo da pesquisa em computação de alto desempenho (HPC).
O mercado continuou a crescer e amadurecer e, com a
Open Container Initiative (OCI), veio o esforço de padronizar as idĂ©ias iniciais promovidas pela Docker. Atualmente, muitos ambientes executĂĄveis ââde contĂȘineres jĂĄ sĂŁo compatĂveis com a OCI ou estĂŁo a caminho disso, oferecendo aos fabricantes condiçÔes iguais para promover seus recursos e capacidades focados em um aplicativo especĂfico.
Popularidade de Kubernetes
O prĂłximo estĂĄgio na evolução dos contĂȘineres foi combinar contĂȘineres de computação distribuĂdos Ă microsserviços com contĂȘineres - e tudo isso no novo mundo de iteraçÔes rĂĄpidas de desenvolvimento e implantação (podemos dizer que o DevOps), que estava ganhando impulso ativamente junto com a popularidade do Docker.
Embora o
Apache Mesos e outras plataformas de orquestração de software existissem antes do
Kubernetes dominar, o
K8s decolou rapidamente de um pequeno projeto de cĂłdigo aberto do Google para o projeto principal da
CNC Native (Cloud Native Computing Foundation) .
Nota perev. : VocĂȘ sabia que o CNCF apareceu em 2015 por ocasiĂŁo do lançamento do Kubernetes 1.0? Ao mesmo tempo, o projeto foi transferido pelo Google para uma nova organização independente que se tornou parte da Linux Foundation.
Evento de lançamento do K8s 1.0 patrocinado por, entre outros, Mesosfera, CoreOS, Mirantis, OpenStack, Bitnami
Das notĂcias sobre o lançamento do Kubernetes 1.0 no ZDNetMesmo depois que o Docker lançou a plataforma de orquestração rival,
Swarm , incorporada ao Docker e apresentando simplicidade no Docker e foco na configuração padrão de cluster seguro, isso não era mais suficiente para conter o crescente interesse no Kubernetes.
No entanto, muitas partes interessadas fora das comunidades nativas da nuvem em rĂĄpido crescimento estavam confusas. Um observador comum nĂŁo conseguia descobrir o que estava acontecendo: os Kubernetes brigam com o Docker ou com a cooperação deles. Como o Kubernetes era apenas uma plataforma de orquestração, era necessĂĄrio um ambiente de contĂȘiner executĂĄvel que iniciasse diretamente contĂȘineres orquestrados no Kubernetes. Desde o inĂcio, o Kubernetes usou o mecanismo do Docker e, apesar da tensĂŁo competitiva entre o Swarm e o Kubernetes, o Docker ainda era o tempo de execução padrĂŁo e era necessĂĄrio para o cluster Kubernetes funcionar.
Com um pequeno nĂșmero de tempos de execução de contĂȘiner alĂ©m do Docker, parecia claro que o tempo de execução do emparelhamento com o Kubernetes exigiria uma interface especialmente escrita - shim - para cada tempo de execução. A falta de uma interface clara para implementar os tempos de execução do contĂȘiner dificultava a adição de suporte para novos tempos de execução no Kubernetes.
Interface de Tempo de Execução do ContĂȘiner (CRI)
Para resolver a crescente complexidade da implementação de tempos de execução no Kubernetes, a comunidade definiu uma função especĂfica da interface que o tempo de execução do contĂȘiner deveria implementar no Kubernetes - nomeando-a
Interface de Tempo de Execução do Container (CRI) (que apareceu no Kubernetes 1.5 - tradução aproximada). . Esse evento nĂŁo apenas ajudou o problema do crescente nĂșmero de fragmentos da base de cĂłdigo Kubernetes que afetava o uso de tempos de execução do contĂȘiner, mas tambĂ©m ajudou a entender quais funçÔes deveriam ser suportadas por tempos de execução em potencial, se eles quisessem cumprir o CRI.
Como vocĂȘ pode imaginar, o CRI espera coisas muito simples do tempo de execução. Esse ambiente deve poder iniciar e parar pods, manipular todas as operaçÔes com contĂȘineres no contexto de pods (iniciar, parar, pausar, eliminar, excluir) e tambĂ©m oferecer suporte ao gerenciamento de imagens de contĂȘineres usando o registro. TambĂ©m existem funçÔes auxiliares para coletar logs, mĂ©tricas etc.
Quando novos recursos aparecem no Kubernetes, se eles dependem da camada do tempo de execução do contĂȘiner, essas alteraçÔes sĂŁo feitas na API CRI com versĂŁo. Por sua vez, isso cria uma nova dependĂȘncia funcional do Kubernetes e requer o lançamento de versĂ”es mais recentes dos tempos de execução que suportam novos recursos (um exemplo recente sĂŁo os espaços de nome de usuĂĄrio).
CenĂĄrio atual do CRI
A partir de 2018, existem vĂĄrias opçÔes para uso como tempos de execução de contĂȘineres no Kubernetes. Conforme mostrado na ilustração abaixo, uma das opçÔes reais ainda Ă© o Docker, com seu
dockershim que implementa a API do CRI. De fato, na maioria das instalaçÔes do Kubernetes atualmente, é ele, Docker, quem permanece o tempo de execução padrão.

Uma das conseqĂŒĂȘncias interessantes da tensĂŁo entre a estratĂ©gia de orquestração do Docker com o Swarm e a comunidade Kubernetes foi um projeto conjunto, que tomou a base do tempo de execução do Docker e reuniu um novo projeto de cĂłdigo aberto desenvolvido em conjunto -
contemerd . Com o tempo, o containererd foi transferido para o CNCF, a mesma organização que gerencia e é dona do projeto Kubernetes.
( Nota : traduzimos a aparĂȘncia de container em mais detalhes em um artigo separado .)
A partir do anĂșncio de containsererd no blog DockerO Containerd, sendo uma implementação simples, bĂĄsica e
independente da empresa
(nĂŁo opinativa) do tempo de execução para o Docker e o Kubernetes (via CRI), começou a ganhar popularidade como um substituto potencial para o Docker em muitas instalaçÔes do Kubernetes. AtĂ© o momento, o IBM Cloud e o Google Cloud possuem clusters baseados emerd no modo beta / acesso antecipado. O Microsoft Azure tambĂ©m prometeu mudar para oerderd no futuro, e a Amazon ainda estĂĄ considerando vĂĄrias opçÔes de tempos de execução para suas soluçÔes de contĂȘiner (ECS e EKS), enquanto continua usando o Docker.
A Red Hat entrou no espaço de
tempo de execução do contĂȘiner criando uma implementação simples de CRI chamada
cri-o com base na implementação de referĂȘncia da OCI,
runc . O Docker e oerderd também são baseados em runc, mas os criadores do cri-o afirmam que seus tempos de execução são "apenas o suficiente" para o Kubernetes e não precisam de mais - apenas adicionaram as funçÔes mais necessårias para implementar o Kubernetes CRI sobre o binårio båsico do runc.
( Observação : escrevemos mais sobre o projeto CRI-O neste artigo e aqui sobre seu desenvolvimento na forma de podman.)Projetos leves de virtualização: Intel Clear Containers e hyper.sh - apareceram nos bastidores da OpenStack Foundation,
contĂȘineres Kata e oferecem sua visĂŁo de contĂȘineres virtualizados para isolamento adicional usando uma implementação de CRI chamada
frakti . Cri-o e container tambĂ©m funcionam com contĂȘineres Kata, portanto, seu tempo de execução compatĂvel com OCI pode ser selecionado como uma opção conectĂĄvel.
Prevendo o futuro
Dizer que vocĂȘ sabe que o futuro geralmente nĂŁo Ă© muito sĂĄbio, mas podemos pelo menos corrigir algumas tendĂȘncias emergentes Ă medida que o ecossistema de contĂȘineres se move do entusiasmo e do hype para um estĂĄgio mais maduro da nossa existĂȘncia.
Havia temores iniciais de que o ecossistema de contĂȘineres formaria um ambiente fragmentado, cujos diferentes participantes apresentariam idĂ©ias diferentes e incompatĂveis sobre o que Ă© um contĂȘiner. Graças ao trabalho da OCI e Ă s açÔes responsĂĄveis ââdos principais fornecedores e participantes, vimos um ambiente saudĂĄvel no setor entre as ofertas de software que preferiam a compatibilidade com a OCI.
Mesmo em ambientes mais recentes, onde o padrĂŁo de uso do Docker encontrou menos resistĂȘncia devido Ă s restriçÔes existentes - por exemplo, no HPC - todas as tentativas de criar ambientes de contĂȘineres nĂŁo baseados no Docker tambĂ©m chamaram a atenção para o OCI. EstĂŁo em andamento discussĂ”es sobre se a OCI pode ser uma solução viĂĄvel para as necessidades especĂficas das comunidades de cientistas e pesquisadores.
Adicionando a isso a padronização dos tempos de execução do contĂȘiner de plug-in no Kubernetes usando o CRI, podemos imaginar um mundo em que desenvolvedores e administradores podem escolher as ferramentas e pilhas de software certas para suas tarefas, aguardando e observando a interoperabilidade em todo o ecossistema do contĂȘiner.
Considere um exemplo especĂfico para entender melhor este mundo:
- Um desenvolvedor com um MacBook usa o Docker para Mac para desenvolver seu aplicativo e até usa o suporte Kubernetes interno (o Docker aqui funciona como tempo de execução CRI) para tentar implantar um novo aplicativo nos pods do K8s.
- O aplicativo passa pelo CI / CD no software do fornecedor, que usa cĂłdigo runc e especial (gravado pelo fornecedor) para empacotar a imagem OCI e carregĂĄ-la no registro corporativo de contĂȘineres para teste.
- A instalação local do cluster Kubernetes, trabalhando com o container como um tempo de execução CRI, executa um conjunto de testes para o aplicativo.
- Por alguma razĂŁo, essa empresa escolheu os contĂȘineres Kata para determinadas cargas de trabalho na produção; portanto, quando vocĂȘ implanta o aplicativo, ele inicia nos pods com o container configurado para usar os contĂȘineres Kata como tempo de execução em vez de runc.
Todo o cenårio descrito funciona maravilhosamente devido à compatibilidade com a especificação OCI para ambientes e imagens de tempo de execução e o fato de o CRI fornecer flexibilidade na escolha do tempo de execução.
Essa possĂvel flexibilidade e escolha tornam o ecossistema de contĂȘineres verdadeiramente notĂĄvel e tambĂ©m Ă© uma condição muito importante para a maturidade da indĂșstria, que cresce tĂŁo rapidamente desde 2014. No limiar de 2019 e nos anos seguintes, vejo um futuro brilhante com inovaçÔes e flexibilidade contĂnuas para quem usa e cria plataformas baseadas em contĂȘineres.
Mais informaçÔes sobre esse tĂłpico podem ser encontradas em uma recente conversa de Phil Estes no QCon NY: â
Mergulho profundo nos tempos de execução do
CRI: quem estĂĄ executando meu pod de Kubernetes!? "
PS do tradutor
Leia também em nosso blog: