Back to Blog
dockerkubernetesdevopsnews

Containerização 2025: Por que containerd 2.0 e eBPF estão Mudando Tudo

Explore o cenário de contêineres em 2025: desde a revolução de segurança do containerd 2.0 e Sigstore até o networking eBPF e a ascensão do WebAssembly no Kubernetes.

DataFormatHub Team
December 22, 20259 min read
Share:
Containerização 2025: Por que containerd 2.0 e eBPF estão Mudando Tudo

O cenário de containerização, perpetuamente dinâmico, testemunhou uma série de avanços práticos e robustos no final de 2024 e ao longo de 2025. Como desenvolvedores seniores, já passamos pelo "ciclo de hype" e estamos nas trincheiras, avaliando recursos que oferecem benefícios operacionais tangíveis e abordam restrições do mundo real. O ano passado solidificou várias tendências: um impulso implacável por segurança aprimorada em toda a cadeia de suprimentos, melhorias fundamentais na eficiência de tempo de execução, um salto significativo na ergonomia de construção para implantações multiarquitetura e o surgimento do WebAssembly como uma alternativa credível, embora nascente, para cargas de trabalho específicas. Aqui está uma análise aprofundada dos desenvolvimentos que realmente importam.

O Cenário em Evolução do Runtime de Contêiner: containerd 2.0 e Além

A base do nosso mundo conteinerizado, o runtime de contêiner, passou por uma evolução significativa, mais notavelmente com o lançamento do containerd 2.0 no final de 2024. Este não é apenas um incremento; é uma estabilização estratégica e aprimoramento de recursos essenciais sete anos após seu lançamento 1.0. A mudança para longe do dockershim no Kubernetes v1.24 impulsionou o containerd e o CRI-O para a vanguarda, solidificando a Interface de Runtime de Contêiner (CRI) como o protocolo de interação padrão entre o kubelet e o runtime subjacente.

containerd 2.0 traz vários recursos-chave para o canal estável que merecem atenção. A Interface de Recursos do Nó (NRI) agora está habilitada por padrão, fornecendo um mecanismo de extensão poderoso para personalizar configurações de contêiner de baixo nível. Isso permite um controle mais granular sobre a alocação de recursos e a aplicação de políticas, semelhante aos webhooks de admissão mutáveis, mas operando diretamente no nível do runtime. Os desenvolvedores podem aproveitar os plugins NRI para injetar configurações de runtime específicas ou aplicar políticas de gerenciamento de recursos personalizadas dinamicamente, uma capacidade que antes era mais difícil de implementar sem modificações diretas no runtime. Considere um cenário em que uma organização precisa impor o pinamento específico da CPU ou a alocação de páginas de memória para cargas de trabalho críticas de desempenho; um plugin NRI agora pode mediar isso no início do contêiner, garantindo a consistência do aplicativo em diversos tipos de nós sem alterar o daemon containerd central.

Outro avanço notável é a estabilização dos plugins de verificação de imagem. Embora o plugin CRI no containerd 2.0 ainda não se integre totalmente ao novo serviço de transferência para extração de imagens e, portanto, não esteja imediatamente disponível para cargas de trabalho do Kubernetes, sua presença sinaliza um futuro robusto para a aplicação de políticas de imagem no momento da extração. Esses plugins são programas executáveis que o containerd pode invocar para determinar se uma imagem é permitida a ser extraída, oferecendo um ponto de controle crítico para a segurança da cadeia de suprimentos. Uma vez integrado ao CRI, isso permitirá que os administradores do Kubernetes definam políticas granulares – por exemplo, permitindo apenas imagens assinadas por chaves específicas ou aquelas com uma Lista de Materiais de Software (SBOM) verificada – diretamente no nível do nó, antes mesmo que um contêiner tente iniciar. Isso desloca a aplicação de políticas para a esquerda, impedindo que imagens potencialmente comprometidas cheguem a um nó.

A configuração do containerd também foi atualizada, passando para v3. Migrar configurações existentes é um processo simples usando containerd config migrate. Embora a maioria das configurações permaneça compatível, os usuários que utilizam o snapshotter aufs obsoleto precisarão fazer a transição para uma alternativa moderna. Isso força uma limpeza necessária, promovendo backends de armazenamento mais eficientes e mantidos.

Fortalecendo a Cadeia de Suprimentos de Software: A Ascensão do Sigstore

O ano de 2025 marca um ponto de inflexão definitivo na assinatura de imagens de contêiner, com o Sigstore se estabelecendo firmemente como o padrão aberto para segurança da cadeia de suprimentos de software. A Docker, reconhecendo o cenário em evolução e a adoção limitada de seu Docker Content Trust (DCT) legado, começou a descontinuar formalmente o DCT (que era baseado no Notary v1) em agosto de 2025. Essa mudança, embora exigindo migração para um pequeno subconjunto de usuários, abre caminho para uma abordagem mais unificada e robusta para a proveniência da imagem.

Sigstore aborda a necessidade crítica de integridade verificável da cadeia de suprimentos por meio de um conjunto de ferramentas: Cosign para assinar e verificar artefatos OCI, Fulcio como uma Autoridade de Certificação raiz pública e gratuita que emite certificados de curta duração e Rekor como um log de transparência para todos os eventos de assinatura. Essa tríade permite a assinatura "sem chaves", uma mudança de paradigma significativa. Em vez de gerenciar chaves estáticas de longa duração, os desenvolvedores usam tokens OIDC de seu provedor de identidade (por exemplo, GitHub, Google) para obter certificados de assinatura efêmeros do Fulcio. Cosign então usa este certificado para assinar a imagem, e a assinatura, juntamente com o certificado, é registrada no log de transparência imutável Rekor.

Por exemplo, assinar uma imagem com Cosign é notavelmente simplificado:

# Autenticar com seu provedor OIDC
# cosign geralmente detecta isso automaticamente das variáveis de ambiente.

# Assinar uma imagem (sem chaves)
cosign sign --yes <seu-registro>/<sua-imagem>:<tag>

# Verificar uma imagem
cosign verify <seu-registro>/<sua-imagem>:<tag>

O sinalizador --yes em cosign sign ignora prompts interativos, crucial para pipelines de CI/CD. O passo de verificação, cosign verify, consulta o Rekor para garantir a autenticidade e integridade da assinatura, vinculando-a a uma identidade verificável. Isso fornece uma proveniência forte e auditável sem a sobrecarga operacional de PKI tradicional.

Acelerando Builds com Buildx e BuildKit

O Buildx da Docker, alimentado pelo backend BuildKit, amadureceu em uma ferramenta indispensável para qualquer fluxo de trabalho sério de desenvolvimento de contêineres, particularmente para builds de imagem multi-plataforma e estratégias de cache. O comando tradicional docker build, embora funcional, geralmente sofre de gargalos de desempenho e suporte limitado entre arquiteturas. BuildKit reestrutura fundamentalmente o processo de construção usando um Grafo Acíclico Direcionado (DAG) para operações de construção, permitindo a execução paralela de etapas independentes e mecanismos de cache superiores.

O recurso de destaque, builds multi-plataforma, não é mais uma capacidade de nicho, mas uma necessidade prática em um mundo que se diversifica rapidamente em arquiteturas amd64, arm64 e até arm/v7. Buildx permite que um único comando docker buildx build produza uma lista de manifesto contendo imagens para várias plataformas de destino, eliminando a necessidade de ambientes de construção separados.

Considere este Dockerfile:

# Dockerfile
FROM --platform=$BUILDPLATFORM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
ARG TARGETOS TARGETARCH
RUN CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /app/my-app ./cmd/server

FROM --platform=$BUILDPLATFORM alpine:3.18
COPY --from=builder /app/my-app /usr/local/bin/my-app
CMD ["/usr/local/bin/my-app"]

Para construir para linux/amd64 e linux/arm64 e enviar para um registro:

docker buildx create --name multiarch-builder --use
docker buildx inspect --bootstrap
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myregistry/my-app:latest \
  --push .

Em termos de desempenho, o cache do BuildKit é superior. Além do cache de camada local, Buildx suporta cache de registro, onde camadas de build anteriores enviadas para um registro podem ser aproveitadas para builds subsequentes, reduzindo significativamente os tempos de build para projetos atualizados com frequência. Isso é particularmente impactante em pipelines de CI/CD, onde os ambientes de construção são frequentemente efêmeros.

eBPF: Redefinindo Networking e Observabilidade do Kubernetes

A integração do eBPF (Berkeley Packet Filter estendido) em stacks de networking e observabilidade do Kubernetes passou de uma curiosidade experimental para uma tecnologia fundamental no final de 2024 e 2025. eBPF permite que programas sandboxed sejam executados diretamente dentro do kernel Linux, acionados por vários eventos, oferecendo desempenho e flexibilidade sem precedentes sem a sobrecarga das tradicionais trocas de contexto kernel-para-espaço do usuário.

Para networking, plugins CNI (Container Network Interface) baseados em eBPF como Cilium e Calico estão substituindo ativamente ou oferecendo alternativas superiores às abordagens baseadas em iptables. A principal vantagem reside no processamento eficiente de pacotes. Em vez de percorrer cadeias complexas de iptables para cada pacote, os programas eBPF podem tomar decisões de roteamento e política diretamente em um ponto anterior na pilha de rede do kernel. Isso reduz drasticamente a sobrecarga da CPU e a latência, especialmente em clusters Kubernetes em grande escala.

Além do desempenho, eBPF aprimora profundamente a observabilidade. Ao anexar programas eBPF a chamadas de sistema, eventos de rede e atividades de processo, os desenvolvedores podem capturar dados de telemetria detalhados diretamente do kernel em tempo real. Ferramentas como Cilium Hubble aproveitam o eBPF para monitorar fluxos de rede no Kubernetes, fornecendo insights profundos sobre a comunicação entre serviços, incluindo latência, bytes transferidos e decisões de aplicação de políticas.

WebAssembly: Um Novo Paradigma para Cargas de Trabalho Cloud-Native

WebAssembly (Wasm), inicialmente concebido para o navegador, inegavelmente cruzou o abismo para ambientes de servidor e cloud-native, apresentando uma alternativa atraente aos contêineres tradicionais para casos de uso específicos em 2025. Suas principais vantagens – tempos de inicialização incrivelmente rápidos, pegada mínima e segurança de sandbox forte – o tornam particularmente atraente para funções sem servidor e computação de borda. Como vemos na evolução de Node.js, Deno, Bun em 2025, o cenário de tempo de execução está se diversificando para atender a essas demandas de desempenho.

Os módulos Wasm normalmente iniciam em milissegundos, um contraste marcante com os segundos frequentemente necessários para as inicializações de contêineres tradicionais. A integração do Wasm com o Kubernetes é alcançada principalmente por meio de runtimes compatíveis com CRI e shims. Projetos como runwasi fornecem um shim containerd que permite que o Kubernetes agende módulos Wasm junto com contêineres Linux tradicionais.

Por exemplo, para executar um aplicativo Wasm com crun:

# runtimeclass.yaml
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: wasm-crun
handler: crun
---
# wasm-app.yaml
apiVersion: v1
kind: Pod
metadata:
  name: wasm-demo
  annotations:
    module.wasm.image/variant: compat
spec:
  runtimeClassName: wasm-crun
  containers:
  - name: my-wasm-app
    image: docker.io/myuser/my-wasm-app:latest
    command: ["/my-wasm-app"]

Evolução da API Kubernetes: Mantendo-se à Frente das Depreciações

O Kubernetes refina consistentemente sua superfície de API para introduzir novos recursos e remover recursos descontinuados. No final de 2024 e 2025, a vigilância contra depreciações e remoções de API continua sendo uma tarefa operacional crítica. O projeto Kubernetes adere a uma política de depreciação bem definida em APIs Alpha, Beta e GA.

As implicações são claras: os desenvolvedores devem monitorar ativamente os avisos de depreciação. Desde o Kubernetes v1.19, qualquer solicitação a uma API REST descontinuada retorna um aviso. Ferramentas automatizadas e verificações de pipeline de CI/CD são essenciais para identificar recursos que usam APIs descontinuadas.

# Exemplo: Encontre implantações usando a API extensions/v1beta1 descontinuada
kubectl get deployments.v1.apps -A -o custom-columns="NAMESPACE:.metadata.namespace,NAME:.metadata.name,APIVERSION:.apiVersion" | grep "extensions/v1beta1"

O planejamento de migração proativo, bem antes de uma janela de atualização, é a única abordagem robusta para manter a estabilidade do cluster. Os lançamentos Kubernetes v1.34 (agosto de 2025) e v1.31 (julho de 2024) incluíram depreciações e remoções que exigiram atenção.

Primitivas de Segurança de Contêiner Aprimoradas: Além da Verificação de Imagem

Embora a verificação de vulnerabilidades permaneça uma prática fundamental, os desenvolvimentos recentes se concentram em fortalecer as primitivas de segurança no nível de tempo de execução. Um avanço significativo no containerd 2.0 é o suporte aprimorado para Namespaces de Usuário. Esse recurso permite que os contêineres sejam executados como root dentro do contêiner, mas mapeados para um ID de Usuário (UID) não privilegiado no sistema host, reduzindo drasticamente o raio de explosão de uma fuga de contêiner.

Além dos namespaces de usuário, a ênfase na infraestrutura imutável e no monitoramento de tempo de execução se intensificou. As soluções de segurança de tempo de execução, frequentemente aproveitando o eBPF, fornecem visibilidade crucial do comportamento do contêiner, detectando anomalias e violações de políticas em tempo real. Além disso, o impulso para o privilégio mínimo se estende às capacidades do contêiner. Os desenvolvedores são incentivados a descartar capacidades Linux desnecessárias (por exemplo, CAP_NET_ADMIN) e impor sistemas de arquivos somente leitura sempre que possível.

Experiência do Desenvolvedor e Refinamentos de Ferramentas

O refinamento contínuo de ferramentas de desenvolvimento, particularmente em torno do Docker Desktop e ambientes Kubernetes locais, tem sido um tema persistente ao longo de 2025. Essas melhorias se concentram em aprimorar a segurança e simplificar fluxos de trabalho complexos para os milhões de desenvolvedores que confiam nessas plataformas.

O Docker Desktop viu um fluxo constante de patches de segurança abordando vulnerabilidades críticas (por exemplo, CVE-2025-9074). Para o desenvolvimento local do Kubernetes, ferramentas como kind e minikube continuam a evoluir, oferecendo provisionamento de cluster mais rápido. A integração do BuildKit e Buildx em ambientes locais melhorou significativamente a eficiência da construção de imagens, particularmente para aqueles que trabalham com alvos multiarquitetura.

Essencialmente, a experiência do desenvolvedor se tornou mais segura por padrão, com ênfase em processos de construção robustos e patches de segurança contínuos. As ferramentas estão tornando os fluxos de trabalho existentes mais práticos, seguros e eficientes, o que, para desenvolvedores seniores, é frequentemente o tipo de progresso mais valioso.


Fontes


🛠️ Ferramentas Relacionadas

Explore estas ferramentas DataFormatHub relacionadas a este tópico:


📚 Você Também Pode Gostar