Você realmente precisa do Kubernetes (K8)? – Relatório diário

0
55


O Kubernetes tem a reputação de ser complicado. Embora seja um software fantástico, às vezes os benefícios podem não superar a complexidade adicional, especialmente para pequenas empresas que gerenciam implantações simples. O Docker é bom o suficiente?

Em que o Kubernetes é bom

O Kubernetes (K8s) é usado com o Docker com muita frequência em ambientes profissionais, e isso pode fazer com que pareça uma versão melhorada ou mais organizada do Docker. Embora isso seja verdade em alguns aspectos, não é o propósito exato dos K8s.

O Kubernetes é um “sistema de orquestração de contêineres” e é importante lembrar o que isso significa. O plano de controle do Kubernetes lida com todos os detalhes de “orquestrar” quais contêineres serão executados em quais nós. Ele separa o hardware do software e permite que suas máquinas sejam executadas simplesmente como nós de trabalho, o que idealmente é tudo o que deveriam ser.

O Kubernetes é ótimo quando você tem uma grande implantação de produção que precisa ser autodimensionável, autorreparável e autogerenciada. Quando você gerencia centenas de contêineres em vários servidores, ter que lidar com balanceamento de carga e mover contêineres de um servidor para outro pode ser irritante. K8s lida com isso para você com opções de configuração adicionais.

Gráfico mostrando a arquitetura de cluster do Kubernetes
Gráfico mostrando a arquitetura de cluster do Kubernetes

O Kubernetes também é semelhante à infraestrutura como código (IaC), outro conceito útil. Ele permite que você controle seus serviços usando arquivos de configuração que podem ser rastreados pelo Git. Isso pode melhorar drasticamente seus processos de implantação, permitindo que eles sejam rastreados em todas as filiais, testados, versionados e revertidos, se necessário.

Em que o Kubernetes não é bom

A principal desvantagem do Kubernetes é que ele é notoriamente complicado. Isso pode não ser grande coisa se você já estiver familiarizado com ele, mas, em qualquer caso, adiciona mais tempo e complexidade para colocar seus aplicativos em funcionamento. É uma ótima ferramenta para aprender e uma boa habilidade para se ter. Mas funciona melhor com implantações maiores e, se você estiver executando apenas alguns servidores ou alguns contêineres, o Kubernetes pode não valer o esforço extra.

O Kubernetes é um intermediário, mas você sempre pode seguir a velha escola e assumir o papel de orquestrador. O melhor do Docker é que ele facilita o processo de construção e movimentação de aplicativos com conteinerização. Criar um novo servidor é relativamente simples e você pode ter uma nova instância do AWS EC2 executando seu contêiner em questão de minutos.

Sem o Kubernetes, o único problema adicional que você tem é a necessidade de executar comandos manualmente em seus servidores com o docker CLI ou docker-compose API. Se você precisar adicionar um novo contêiner ou mover um contêiner para outro nó, precisará executar esses comandos novamente. Isso pode ser um problema se, por exemplo, você tiver um tráfego inesperadamente alto e precisar iniciar mais instâncias automaticamente. K8s resolveria esse problema. Mas, em muitos casos, seu tráfego pode ser relativamente estável, ou pelo menos previsível de semana para semana, especialmente para serviços de back-end que não precisam ser dimensionados automaticamente.

Essencialmente, o próprio Docker já melhora bastante o processo de execução de aplicativos portáteis. É uma grande melhoria em relação à instalação de aplicativos à moda antiga. O Kubernetes melhora um pouco o Docker e automatiza algumas tarefas necessárias para redes grandes, mas adiciona muita complexidade.

O valor dependerá de quanto tempo você realmente economiza. Se essa complexidade for aceitável para você e acabar economizando seu tempo, você deve usar o K8, mas se não, você não deve mexer com isso, especialmente quando você sempre pode alterá-lo mais tarde, se necessário. .

O que devo usar em vez disso?

É bom dar um passo atrás e ver para que você está realmente considerando o Kubernetes. Se você deseja que sua rede seja dimensionada automaticamente, gerencie seus recursos automaticamente e inicie pods em diferentes servidores com base na configuração, o Kubernetes é uma ótima ferramenta para aprender. Se você está preocupado com a complexidade, provedores de nuvem como a AWS gerenciam serviços do Kubernetes como o EKS, que pode lidar com parte do trabalho sujo para você, especialmente quando se trata de gerenciamento e provisionamento de recursos.

No entanto, se tudo o que você deseja é uma maneira de gerenciar seus contêineres com mais facilidade ou atualizá-los automaticamente, existem ferramentas muito mais simples para o trabalho. Eles podem não ter tantos recursos quanto o Kubernetes, mas serão mais simples e podem economizar seu tempo.

Se você deseja dimensionar automaticamente determinados serviços, quase sempre precisará conversar com a API de um provedor de nuvem para provisionar novos recursos. O Kubernetes pode lidar com isso para você em muitas plataformas, mas serviços como AWS, Azure e GCP têm serviços de contêiner simples com recursos de dimensionamento automático. O serviço AWS ECS pode ser facilmente configurado para dimensionar automaticamente para atender à alta demanda.

RELACIONADO: Introdução às implantações de contêiner de escalonamento automático no AWS ECS

Se você precisar atualizar contêineres automaticamente sempre que enviar novas versões para o registro do Docker, poderá usar um serviço como o Watchtower. Ele é executado em um nó do trabalhador como um serviço do Docker em si, com o soquete do Docker exposto e observa as alterações. Assim que um novo contêiner for enviado, a Torre de Vigia reiniciará o contêiner. Isso economizará tempo executando reinicializações de contêiner e é uma boa alternativa às atualizações do Kubernetes.

docker run --detach 
--name watchtower 
--volume /var/run/docker.sock:/var/run/docker.sock 
containrrr/watchtower

Se você deseja ser mais organizado em geral com a forma como gerencia seus contêineres, considere configurar uma GUI de gerenciamento do Docker como o Portainer. O Portainer é uma GUI baseada na Web para gerenciar implantações do Docker. Ele funciona com vários nós de trabalho, assim como o Kubernetes, mas permite lidar com o trabalho de orquestração, configurando contêineres em qualquer servidor que você desejar.

O Portainer é realmente fácil de configurar, pois é embalado como um contêiner. Se você quiser saber mais, leia nosso guia para configurá-lo e trabalhar com ele.

RELACIONADO: Como começar a usar o Portainer, uma interface do usuário da Web para o Docker