Qual orquestração de contêiner é melhor para você?

Muitas opções são apresentadas às equipes de tecnologia da informação (TI) ao executar aplicativos em contêineres, abordando todos os níveis de especialização técnica.

Pode ser difícil selecionar uma, considerando que depois de fazer sua escolha, provavelmente você não migrará para outra opção tão cedo.

Esta postagem compara duas opções de peso: Amazon Elastic Container Service (ECS) e Kubernetes.

Ambas são plataformas capazes nos domínios de gerenciamento de microsserviços e orquestração de contêineres. E pouco antes de prosseguir, uma atualização nos contêineres não faz mal. Os contêineres foram popularizados para facilitar o desenvolvimento, a promoção e a implantação de código em muitos ambientes. Eles são abstrações nas camadas do aplicativo, envolvendo o código com as dependências, bibliotecas e configurações de ambiente necessárias em um pacote executável.

Embora o principal objetivo do uso de contêineres seja simplificar o processo de implantação de código, o gerenciamento de milhares deles se torna cada vez mais desafiador. Outro mecanismo é necessário para implementar implantações altamente confiáveis, dimensionar aplicativos de acordo com a carga, trocar contêineres não íntegros por novos, balanceamento de carga e expor portas.

É aí que entra a ajuda da orquestração de contêineres. Além disso, há necessidade de meios para executar contêineres e gerenciar sua infraestrutura geral. Muitas ferramentas estão disponíveis para resolver esse problema, mas vamos restringir o foco a algumas.

Esta peça compara ECS e Kubernetes, destacando os benefícios de cada um, e conclui com uma orientação sobre como escolher o caminho certo com base em seu projeto.

O que é o Amazon ECS?

O Amazon ECS é um serviço de orquestração de contêineres que simplifica a implantação, o gerenciamento e o dimensionamento de aplicativos em contêineres. Basicamente, você define seu aplicativo e seus recursos necessários. Em seguida, o Amazon ECS inicia, monitora e dimensiona seu aplicativo nas opções de computação, permitindo a integração de outros serviços da AWS necessários. Por exemplo, você pode verificar o status e modificar seus clusters programaticamente.

O ECS permite que você implemente seus aplicativos por meio de um grupo de servidores, chamados clusters, usando definições de tarefas e chamadas de interfaces de programa de aplicativo (API).

Leia também: Quais instâncias do AWS EC2 você deve usar?

Vantagens do Amazon ECS

  • ECS Tradicional – Esta versão foi lançada em 2015 e é alimentada pelo Amazon EC2 para executar contêineres Dockers facilmente na nuvem. O ECS tradicional oferece controle subjacente sobre as opções do EC2, permitindo flexibilidade. Isso significa que você escolhe os tipos de instâncias que gostaria de executar em seu contêiner. O modelo conecta você a outros serviços da AWS que você pode usar para monitorar e registrar atividades nas instâncias do EC2.
  • Fargate ECS – lançado em 2017 para executar contêineres sem a necessidade de gerenciar opções de computação do EC2 subjacentes. O Fargate adota uma abordagem diferente ao calcular a CPU e a memória necessárias. Se você deseja colocar as cargas de trabalho em funcionamento rapidamente, essa pode ser sua melhor opção, pois você não precisa se preocupar com as opções de computação subjacentes.
  • Arquiteturas de aplicativos simplificadas – ECS é uma boa opção para aplicativos com poucos microsserviços (aqueles com poucas dependências externas ou com poucas partes móveis) trabalhando de forma independente.
  • Monitoramento e registro fáceis – você pode integrar facilmente o ECS com ferramentas de registro e monitoramento da AWS, como o CloudWatch. Você não precisa configurar a visibilidade nas cargas de trabalho do contêiner, economizando algum tempo.
  • Fácil curva de aprendizado – ECS é fácil de aprender. O Kubernetes hospedado está ganhando mais popularidade do que os modelos tradicionais, como sabores KOPS e Kubeadm.
  • Infraestrutura serverless – ECS permite rodar containers sem a necessidade de gerenciamento de máquinas virtuais; implanta contêineres enquanto está livre de intervenção humana.
  • Segurança integrada – Por padrão, o Amazon ECS é protegido e distribui as medidas de segurança por meio de um mecanismo de rede Virtual Private Cloud isolado.
  •   Como alternar manualmente os AirPods entre Mac, iPhone e iPad

    Limitações do ECS

  • Armazenamento limitado – O armazenamento externo é limitado exclusivamente à Amazon, até o Amazon EBS.
  • Limitações de validação – ECS é um produto baseado na Amazon, portanto, indisponível para implantações públicas fora da Amazon.
  • Bloqueio do fornecedor – o ECS é tendencioso; ele só pode gerenciar seus contêineres criados.
  • Indisponibilidade do código ECS – Grande parte do código ECS não está disponível publicamente. Ferramentas como o AWS Blox (uma estrutura para criar agendadores personalizados) têm uma seção muito pequena de suas bases de código de código aberto.
  • O que é Kubernetes?

    O Kubernetes, comumente chamado de K8s, é um software de código aberto para automatizar a implantação, dimensionamento e administração de aplicativos em contêineres.

    Aproveitando 15 anos de experiência executando cargas de trabalho de produção do Google (combinando as melhores ideias e práticas da comunidade), o K8s agrupa seus contêineres de aplicativos em unidades lógicas que você pode descobrir e gerenciar com facilidade.

    Além disso, os principais recursos do K8s, como balanceamento de carga, armazenamento persistente, reversões automatizadas para aplicativos em contêineres, segredos, autocorreção para clusters Kubernetes e gerenciamento de configuração.

    Leia também: Introdução ao Kubernetes: uma introdução para iniciantes

    Vantagens do Kubernetes

  • Código aberto (sem bloqueio de fornecedor) – Seja executando no local ou na nuvem, você pode usar o Kubernetes sem reprojetar a estratégia de orquestração. Ao contrário do software tradicional que incorre em algumas taxas de licença, o K8s é gratuito e de código aberto. Como se isso não bastasse, os clusters K8s são executados em nuvens públicas e privadas, fornecendo recursos de virtualização em ambas as entidades.
  • Flexibilidade de alta potência – o K8s é uma ótima solução se seus aplicativos precisarem de alta disponibilidade, ao mesmo tempo em que suportam eficiência e escalabilidade. Esta característica é taticamente útil em aplicações que geram receitas de alto rendimento. Simplificando, é um controle granular sobre suas cargas de trabalho. Nos casos em que você gostaria de mudar seus aplicativos para plataformas mais poderosas, o K8s não se limita a bloqueios de fornecedores como o ECS.
  • Alta disponibilidade – Conforme mencionado acima, o design do K8s é voltado para fornecer a disponibilidade de aplicativos e sua infraestrutura necessária, tornando-o um recurso necessário para contêineres em produção. Sob alta disponibilidade, existem algumas técnicas:
    • Verificações de integridade e autocorreção – o Kubernetes protege seus aplicativos contra falhas por meio de inspeções regulares de nós. Se um pod ou contêiner for esmagado devido a um erro, o K8s automaticamente oferece uma substituição.
    • Balanceamento de carga e roteamento de tráfego – Com relação ao roteamento de tráfego, os K8s enviarão solicitações apenas para os contêineres apropriados. E com o balanceamento de carga, o K8s distribui as cargas entre os pods, equilibrando seus recursos para várias instâncias, como interrupções, pico de tráfego acidental ou processamento em lote. Novamente, você também pode usar balanceadores de carga externos, se desejar.
  • Escalabilidade da carga de trabalho – Embora mencionado anteriormente, vamos detalhar ainda mais. O K8s usa seus recursos para fornecer dimensionamento eficiente nos seguintes critérios.
    • Dimensionamento automático – esse recurso permite ajustar automaticamente o número de contêineres em execução de acordo com a utilização da CPU e outras métricas da CPU.
    • Dimensionamento manual – Com a ajuda desse recurso, você pode dimensionar a contagem de contêineres em execução por meio da linha de comando ou interface.
    • Controlador de replicação – essa ferramenta permite determinar o número de pods que correspondem à especificação do cluster; se forem poucos, começa de novo, e se forem muitos, os encerra.
      Cada ruído ao mesmo tempo permite que você ouça músicas de todos os gêneros existentes
  • Projetado para implantação – o K8s foi especialmente projetado para acelerar o processo de criação, teste e envio de software. Aqui estão alguns de seus recursos oferecidos:
    • Rollbacks e rollouts automatizados – Você pode querer lançar algumas novas configurações ou atualizações de aplicativos durante o desenvolvimento. O K8s permite que você execute o processo sem tempo de inatividade do aplicativo. Em caso de falha, os K8s revertem roboticamente para a versão anterior.
    • Implantações canárias – você pode aproveitar esse recurso testando novas implantações em produção paralela à versão anterior; O K8s permite reduzir o aplicativo da última versão e, ao mesmo tempo, aumentar a versão mais recente.
    • Suporte diversificado para linguagens de programação e frameworks – Quer você tenha experiência em linguagens de programação Go, Java ou .Net, o Kubernetes oferece suporte a muitas linguagens e frameworks de desenvolvimento. Se um aplicativo puder ser executado em um contêiner, ele será executado no K8s.
  • Descoberta de serviço – Todo desenvolvedor deseja que todos os serviços fornecidos tenham uma maneira de se comunicar entre si. No entanto, o modelo de operação do K8s envolve a criação e destruição de contêineres continuamente, tornando alguns serviços inexistentes em determinados locais. No desenvolvimento tradicional, um registro de serviço seria adaptado para rastrear a localização desses serviços. O K8s resolve esse problema por meio de um conceito de serviço nativo para agrupar pods e descobrir serviços perfeitamente. Portanto, o K8s fornece endereços IP para todos os pods, aloca nomes DNS para cada conjunto de pods e equilibra o tráfego de carga em cada conjunto de pods. Essa arquitetura gera um ambiente onde a descoberta de serviço é abstraída de cada contêiner.
  • Comunidade vibrante – K8s é apoiado por uma comunidade vibrante com milhares de desenvolvedores que utilizam seus serviços. No momento da redação deste artigo, mais de 100 milhões de desenvolvedores usam K8s para descobrir, contribuindo com 330 milhões de projetos. A comunidade não mostra sinais de desaceleração e incentiva a colaboração entre os desenvolvedores.
  • Limitações do Kubernetes

  • Curva de aprendizado acentuada – Para começar a usar o Kubernetes, você precisará entender seu cenário. Além disso, entregar uma solução ponta a ponta requer a inclusão de uma variedade de tecnologias e serviços. E com as tecnologias complementares variando significativamente (às vezes, algumas soluções remontam ao domínio do UNIX, enquanto outras são novas tecnologias com baixa adoção), descobrir quais incluir pode ser agitado. Você também precisaria descobrir como todos os componentes se encaixam para fornecer uma solução mais abrangente para problemas específicos. A documentação está disponível, mas você precisará entender como fornecer e gerenciar esses serviços.
  • Diferenciando recursos e projetos – Compreender as diferenças entre projetos e recursos pode ser um desafio. Embora você possa facilmente obter conselhos sobre como gerenciar projetos, talvez não consiga uma distinção clara entre recursos e projetos comunitários.
  • Conhecimento além do Kubernetes – o Kubernetes é uma plataforma sofisticada. Com toda essa complexidade na entrega de soluções, você provavelmente encontrará alguma confusão, especialmente se for novo nisso. No entanto, as organizações ainda desejam fornecer soluções (como armazenamento de dados como serviço), ampliando a curva de aprendizado. Se você usa tais serviços em seu produto, deve ampliar seu conhecimento além do Kubernetes.
  • Gerenciar o Kubernetes é difícil – chegar à produção com K8s é uma coisa. Você precisará fornecer todos os recursos necessários para que seus aplicativos o gerenciem. Você também precisará lidar com toda a segurança e integrá-la à sua infraestrutura. Além disso, você precisará de algum conhecimento de alto nível para processar e operar suas ferramentas com eficiência. Você precisará obter conhecimento profundo para gerenciar clusters Kubernetes, monitorar e solucionar problemas de clusters e apoiá-los em escala.
  •   Como resgatar um código promocional na Google Play Store

    Comparando ECS e Kubernetes

    Aqui está uma comparação lado a lado mostrando as diferenças:

    Ponto de diferençaKubernetesAmazon ECSAdefinição do aplicativoOs aplicativos são implantados combinando pods, nós e serviços. A implantação do aplicativo assume a forma de tarefas. As tarefas são instâncias de contêiner – por exemplo, contêineres do Docker em execução em instâncias do ECS. Implantação Complexa, pois você precisa implantar e configurar clusters manualmente. Implantação fácil por meio do console AWS. Suporte a nós (número de máquinas) 5.000 nós por cluster. 1.000 nós por cluster .ContêineresAté 300.000 contêineres por cluster.Limitado pela capacidade de infraestrutura utilizada.Os pods de balanceamento de carga são expostos por meio de serviços usados ​​como balanceadores de carga por trás dos controladores de entrada.Dois balanceadores de carga disponíveis; ELB-Application ou Network.PricingFree.ECS é gratuito, mas você precisa pagar pelos recursos do EC2.OptimizationBem otimizado para um único cluster grande.Pré-configurado com requisitos e requisitos de contêiner.Escala AutomáticaVocê define parâmetros de escalabilidade automática ao criar implantações.Você usa serviços de monitoramento como o CloudWatch para dimensionar automaticamente com base na CPU, memória e parâmetros personalizados.Verificação de integridadeDuas verificações de integridade estão disponíveis: prontidão e vivacidade.Obtida por meio de serviços de monitoramento como CloudWatch.Descoberta de serviçoExecutada por meio de variáveis ​​de ambiente ou DNS.Obtida por meio de serviços de monitoramento – CloudWatch.Vendor-lock emNão.Sim.

    Casos de uso de ECS e Kubernetes

    Veja como a tecnologia de conteinerização ECS e Kubernetes está revolucionando os setores:

    A ECS INC International destaca vários casos de uso em que a tecnologia ECS foi implementada. Em dispositivos médicos modernos, você encontrará métodos revolucionados para tratar pacientes e técnicas de administração de medicamentos. Existem muitas ferramentas, como inaladores eletrônicos, autoinjetores médicos e bombas de infusão.

    No domínio IoT, temos dispositivos domésticos inteligentes. Se você mudar a atenção para a indústria automotiva, temos carros elétricos inteligentes com experiência de direção aprimorada e medidas de segurança aprimoradas, como sistemas de frenagem assistida.

    Até agora, essa é a ponta do iceberg; você pode conferir mais aplicações do ECS que não estão limitadas a tecnologia sem fio, dispositivos vestíveis e casos de uso industrial.

    Por outro lado, o Kubernetes tem sua parcela de aplicações práticas. Primeiro, a nuvem IBM oferece funcionalidades privadas, públicas e híbridas em um amplo escopo de tempos de execução.

    O Spotify, um gigante no campo de streaming de música, utiliza a tecnologia Kubernetes para facilitar operações contínuas de até 10 milhões de solicitações por segundo. Embora esses sejam casos de uso do mundo real, o K8s oferece mais funcionalidades na arquitetura de microsserviços, funções de rede nativas da nuvem, aprendizado de máquina e dinamização do ciclo de vida do desenvolvimento de software.

    Palavras Finais

    Depois de percorrer este guia, você terá uma visão geral sólida dos méritos e deméritos de optar pelo ECS ou pelo K8s. A chave para escolher a opção certa é baseada em alguns argumentos. Você terá que pesar entre custo, limitações de serviço e custos de talento.

    Se você quiser usar um serviço gratuito, o K8s será sua escolha número um. No entanto, você precisará de talento ou habilidades sólidas para lidar com a complexidade que o acompanha. Embora o K8s não tenha limitações de bloqueio de fornecedores, ele exigirá uma compreensão profunda de como a plataforma funciona. O ECS, por outro lado, obteve configurações rápidas.

    Em seguida, confira o guia detalhado sobre Kubernetes vs. Docker.