A tecnologia de conteinerização é a espinha dorsal do desenvolvimento e da escalabilidade das aplicações modernas. Como as empresas dependem de workloads em containers, é essencial entender as principais tecnologias, como Docker e Kubernetes.
O Docker é uma plataforma versátil responsável por criar, gerenciar e compartilhar containers em um único host, enquanto o Kubernetes é uma ferramenta de orquestração de containers responsável pelo gerenciamento, implementação e monitoramento de clusters de containers em vários nós.
Neste artigo, exploraremos como tecnologias de conteinerização como Kubernetes e Docker gerenciam workloads para aplicações escaláveis, resilientes e independentes de plataforma. Falaremos sobre containers, tempos de execução de containers e mecanismos de orquestração. Em seguida, veremos os benefícios de usar o Kubernetes e o Docker juntos.
Uma introdução aos containers
A conteinerização permite que engenheiros agrupem um código de aplicação com dependências específicas da aplicação em um pacote leve chamado container. Os containers virtualizam sistemas operacionais e recursos de máquina, como CPU e RAM, com base no consumo esperado. É por isso que muitas das aplicações distribuídas de hoje são construídas em containers, pois cada container tem seu próprio sistema de arquivos e evita conflitos de dependência ao não compartilhar recursos. Isso diferencia os containers das máquinas virtuais, que são réplicas digitais de um host com seu sistema operacional e recursos preservados com antecedência.
Por que usar um tempo de execução do container e mecanismos de orquestração de containers
Um tempo de execução de container é um componente de software responsável por gerenciar o ciclo de vida de um container em um sistema operacional host. Ele funciona em conjunto com mecanismos de orquestração de containers para conduzir um cluster distribuído de containers de forma fácil e eficiente. Por exemplo, o Docker é uma tecnologia de container comumente usada junto com o mecanismo de orquestração do Kubernetes.
Mecanismos de orquestração de containers (COEs) como o Kubernetes simplificam o gerenciamento de containers e automatizam tarefas complexas que incluem:
- Containers de escala automática
- Configuração de redes
- Balanceamento de carga
- Realizar exames de saúde.
Os COEs garantem operações eficientes na implementação de workloads em containers.
Uma introdução ao Docker e ao Kubernetes
Docker
O tempo de execução do container é um componente essencial do Docker, fornecendo o ambiente para executar e gerenciar containers. Como uma tecnologia de conteinerização, o Docker oferece uma interface legível por humanos, conhecida como cliente Docker, que gerencia workloads na máquina host interagindo com o tempo de execução do container chamado Containerd.
O cliente Docker tem dois tipos:
- Docker compose: ajuda a gerenciar aplicações compostas de vários containers e pode iniciá-las ou interrompê-las com um único comando.
- docker: gerencia containers individualmente para iniciá-los, pará-los ou removê-los.
O Docker também oferece suporte a outros processos de conteinerização:
- As imagens Docker são criadas usando um arquivo de configuração chamado Dockerfile e são armazenadas dentro de uma aplicação sem estado (chamada Registro do Docker). As imagens podem ser hospedadas localmente ou na nuvem (por exemplo, por meio do DockerHub).
- Um ponto de montagem é um sistema de arquivos onde um diretório ou arquivo do sistema de arquivos host é montado. Ao iniciar um container, o Docker cria um ponto de montagem e envia alertas ao Kernel para alocar a CPU, a memória, o disco e as portas de host necessárias.
Apesar de seus muitos pontos fortes, o Docker é limitado nos seguintes aspectos:
- Gerenciar vários clusters de containers em nós distribuídos em uma única sessão
- Operações em massa em um ambiente de vários nós (como containers de escala automática).
No entanto, o Kubernetes ajuda a superar essas limitações gerenciando workloads em containers em um cluster de nós.
Kubernetes
O Kubernetes é uma ferramenta de orquestração poderosa para gerenciar containers em vários hosts usando sua interface de tempo de execução do container (CRI). O CRI permite que o Kubernetes ofereça suporte a plataformas de conteinerização como o Docker para criar, excluir e gerenciar containers nos nós do servidor.
O Kubernetes simplifica o gerenciamento de cluster usando objetos de recursos, como implementações, para direcionar um grupo de pods de aplicações (um pequeno cluster de containers) como uma unidade, permitindo fácil escalonamento de pods ou atualização de imagens do container com um único comando.
O Kubernetes fornece aos operadores maior visibilidade sobre o cluster registrando em três níveis diferentes de granularidade:
- Logs em nível de container são gerados capturando stdout e stderr de aplicações.
- Os logs de nível de nó são agregados dos containers das aplicações e mantidos de acordo com a política de rotação de log definida para cada configuração de implementação.
- Os logs em nível de cluster fornecem insights mais profundos sobre os componentes do Kubernetes, como etcd ou kube-proxy.
Saiba mais
Este guia se concentrará na parte do Kubernetes de segurança em nuvem, discutindo a superfície de ataque, o ciclo de vida da segurança e as 12 práticas recomendadas.
Por que usar o Kubernetes com o Docker?
Kubernetes e Docker são tecnologias que se complementam. Quando integradas, a combinação de ambas as tecnologias pode gerar benefícios significativos com capacidades aprimoradas.
- Alta disponibilidade
- Escala automática
- Armazenamento
- Painéis de monitoramento
Alta disponibilidade
A limitação do Docker de gerenciar apenas containers em um único nó hospedado e não conseguir alterar o estado dos servidores pode ser resolvida com o Kubernetes, que pode agendar containers em vários nós. O Kubernetes implementa um novo nó quando um nó existente falha ou se torna insalubre. Ao manter uma distribuição equilibrada da workload, essa abordagem garante alta disponibilidade o tempo todo.
Escala automática
O Kubernetes tem suporte integrado para escalonamento automático em clusters de servidores, permitindo que os usuários definam critérios de escalonamento, como limites para diversas métricas (como utilização de CPU ou RAM). Quando esses limites são atingidos (por exemplo, alto tráfego ou alto uso de CPU), o Kubernetes pode escalar automaticamente os containers. Da mesma forma, ele pode reduzir a escala dos containers quando a utilização cair abaixo dos limites. Isso ajuda a manter a latência baixa de forma econômica.
Armazenamento
Para lidar com a natureza frequentemente efêmera dos containers, o Docker fornece dois modos de armazenamento persistente: montagens de volume e de vinculação. No entanto, o Kubernetes permite diversas opções de integração de armazenamento ao abstrair a camada de armazenamento dos containers. Isso nos dá opções como:
- Armazenamento não persistente
- Armazenamento persistente (como Network File Systems, Fiber Channel)
- Armazenamento efêmero (como emptyDirs e ConfigMaps)
Painéis de monitoramento
O monitoramento agora é um aspecto fundamental do gerenciamento do ciclo de vida da aplicação. O Kubernetes oferece suporte à integração de vários painéis de monitoramento para fornecer monitoramento robusto e mecanismos de alerta rápido para resposta rápida a incidentes. Painéis e visualizações do Prometheus e do Grafana são populares por fornecer uma interface amigável com alertas, visibilidade e análises de diferentes métricas em uma infraestrutura de microsserviços.
Painel do PrometheusSumário
A tecnologia de conteinerização se tornou um aspecto essencial das aplicações modernas. Plataformas de containers como o Docker e mecanismos de orquestração de containers como o Kubernetes se complementam, trabalhando juntos para simplificar o gerenciamento de containers.
O Docker é uma solução leve que resolve problemas de implementação de aplicações em vários ambientes empacotando uma aplicação com suas dependências. O Kubernetes aproveita a conteinerização com suas funcionalidades avançadas, permitindo maior visibilidade e controle sobre clusters que executam workloads complexas.
Quando integrado, o Docker com o Kubernetes torna a implementação e o escalonamento de ecossistemas distribuídos grandes e complexos mais simples e gerenciáveis.