Desenvolvimento

9 nov, 2017

Liberando o potencial completo de containerização para DevOps e evitando imprevistos

Publicidade

Uma ferramenta poderosa para simplificar o DevOps é a containerização, que oferece uma forma conveniente de application packaging, combinada com a oportunidade de automatizar determinados processos de provisionamento de TI. Com a containerização, as equipes de DevOps podem se concentrar em suas prioridades – a equipe do Ops prepara containers com todas as dependências e configurações necessárias, e a equipe do Dev se concentra na codificação eficiente de uma aplicação que pode ser facilmente implementada.

Essa automação pode ser alcançada através de soluções PaaS ou CaaS, que oferecem benefícios adicionais, incluindo a eliminação de erros humanos, a aceleração do tempo de mercado e uma utilização mais eficiente de recursos.

Outros benefícios importantes da containerização são:

  • A virtualização baseada em container garante a maior densidade de aplicação e a máxima utilização dos recursos do servidor em comparação com máquinas virtuais.
  • Considerando o isolamento avançado dos containers do sistema, diferentes tipos de aplicações podem ser executadas no mesmo nó de hardware, levando a uma redução do TCO.
  • Os recursos que não são consumidos dentro dos limites do container são compartilhados automaticamente com outros containers que funcionam no mesmo nó de hardware.
  • O vertical scaling automático dos containers otimiza o uso da memória e da CPU com base na carga atual, e não é necessário reiniciar para alterar os limites de recursos em relação à escala de máquina virtual.

Liberar o potencial da containerização para o DevOps exige atenção cuidadosa em vários desafios, mas especialmente para os first-time adopters.

Descobrindo as necessidades do projeto

Nos estágios iniciais, as equipes de DevOps devem analisar o estado atual de seus projetos e decidir o que é necessário deslocar para os containers, a fim de obter benefícios contínuos em longo prazo.

Para uma arquitetura ideal, o tipo certo de container deve ser selecionado. Existem dois tipos:

  • Um container de aplicação (containers Docker) roda tão pouco quanto um único processo.
  • Um container de sistema (LXC, OpenVZ) se comporta como um sistema operacional completo e pode rodar sistemas de unidades completas, como systemd, SysVinit e openrc, que permitem gerar outros processos como openssh, crond e syslogd juntos dentro de um único container.

Para novos projetos, os containers de aplicação geralmente são mais apropriados, pois é relativamente fácil criar as imagens necessárias usando os templates disponíveis publicamente do Docker, levando em consideração os requisitos específicos dos padrões de microsserviços e o design da infraestrutura imutável e moderno.

É um equívoco comum achar que os containers são bons apenas para aplicativos greenfield (microsserviços e nativos da nuvem). Eles podem realmente dar nova vida às aplicações legadas, com apenas um pouco de trabalho extra na fase inicial, enquanto migram das máquinas virtuais.

Para aplicações monolíticas e legadas, é preferível usar containers do sistema, para que as organizações possam reutilizar a arquitetura e as configurações que foram implementadas no projeto original baseado em máquina virtual.

Estratégia de containerização de provisão futura

Depois de determinar o que o projeto exige hoje, é melhor pensar sobre o futuro e entender para onde a tecnologia está indo. Com o crescimento do projeto, a complexidade aumentará, então provavelmente será necessária uma plataforma para orquestração e automação dos principais processos.

O gerenciamento de ambientes containerizados é complexo e denso, e as soluções de PaaS ajudam os desenvolvedores a se concentrarem na codificação. Existem muitas opções quando o assunto é plataformas de orquestração de containers e serviços. Descobrir qual é o melhor para as necessidades e as aplicações de uma determinada organização pode ser um desafio, especialmente quando as necessidades estão em constante mudança.

Aqui estão vários pontos que devem ser considerados ao escolher uma plataforma para containerização:

  • Flexibilidade. É fundamental ter uma plataforma com um nível de automação suficiente, que pode ser ajustado facilmente de acordo com os requisitos variáveis.
  • Nível de bloqueio. As soluções de PaaS são muitas vezes proprietárias e, portanto, podem bloqueá-lo em um vendedor ou fornecedor de infraestrutura.
  • Liberdade de inovação. A plataforma deve oferecer um amplo conjunto de ferramentas integradas, bem como possibilidades de integração de tecnologias de terceiros, a fim de não restringir a capacidade de inovação dos desenvolvedores.
  • Opções de nuvem suportadas. Ao usar containerização na nuvem, também é importante que sua estratégia ofereça implementações de nuvens públicas, privadas e híbridas, já que as necessidades podem mudar eventualmente.
  • Modelo de preços. Quando você escolhe uma plataforma específica, geralmente é um compromisso de longo prazo. Portanto, é importante considerar o modelo de precificação oferecido. Muitas plataformas públicas em nuvem oferecem licenças baseadas em máquinas virtuais, que podem não ser eficientes quando você já migrou para containers, o que pode ser cobrado apenas para uso real, não para os limites reservados.

A plataforma que você escolher pode influenciar significativamente o sucesso do seu negócio, então o processo de seleção deve ser cuidadosamente considerado.

Expertise

A adoção bem-sucedida de containers não é uma tarefa trivial. Gerenciá-los requer um processo diferente e base de conhecimento em comparação com máquinas virtuais. A diferença é significativa, e muitos truques e melhores práticas com o gerenciamento do ciclo de vida da máquina virtual não podem ser aplicados aos containers. As equipes de Ops precisam se educar sobre isso para evitar distorções dispendiosas.

O conjunto de habilidades de operações tradicionais é obsoleto quando se trata de containerização eficiente na nuvem. Os provedores de nuvem agora fornecem principalmente o gerenciamento de hardware e redes de infraestrutura, e as equipes de Ops são solicitadas para fazer a automação de implementação de software criando scripts e usando ferramentas orientadas para containers.

Os integradores de sistemas e as empresas de consultoria podem fornecer sua expertise e maximizar os benefícios dos containers. Mas se você deseja que uma equipe interna gerencie todo o processo, é hora de começar a construir sua própria expertise – contratar profissionais de DevOps experientes, aprender as melhores práticas e criar uma nova base de conhecimento.

Investindo tempo e esforço

Não espere obter uma estrutura containerizada instantaneamente. Algum tempo de frente deve ser investido de antemão, especialmente se sua arquitetura precisa ser reestruturada para rodar microsserviços.

Para migrar das máquinas virtuais, por exemplo, as aplicações monolíticas devem ser decompostas em pequenas peças lógicas distribuídas entre um conjunto de containers interligados. Isso requer conhecimento específico para obter um resultado com sucesso.

Além disso, para grandes organizações, pode ser vital selecionar uma solução que lide com tipos heterogêneos de carga de trabalho usando máquinas virtuais e containers dentro de uma plataforma, porque a adoção de containers em toda a empresa pode ser um processo gradual.

Preocupações com segurança

Os ambientes containerizados são extremamente dinâmicos, com a capacidade de mudar muito mais rapidamente do que os ambientes nas máquinas virtuais. Essa agilidade é um enorme benefício do container, mas também pode ser um desafio alcançar o nível de segurança adequado, enquanto simultâneamente habilita o acesso rápido e fácil exigido pelos desenvolvedores.

Um conjunto de riscos de segurança deve ser considerado com a containerização:

  • A tecnologia básica de container não lida facilmente com autenticação de interserviços, configurações de rede, partições e outras preocupações em relação à segurança da rede ao chamar componentes internos dentro de uma aplicação de microsserviços.
  • O uso de templates de container disponíveis publicamente por terceiros não confiáveis ou desconhecidos é arriscado. Vulnerabilidades podem ser intencional ou involuntariamente adicionadas a esse tipo de container.

As abordagens tradicionais de segurança devem ser complementadas com estratégias de aprimoramento contínuo para acompanhar o ambiente de TI dinâmico de hoje. Um ponto chave aqui é que uma grande variedade de ferramentas e plataformas de orquestrações continua a evoluir. Eles oferecem templates certificados e comprovados, ajudam a proteger os containers e facilitam o processo de configuração.

O mercado de TI agora oferece uma ampla gama de soluções para a orquestração de containers, facilitando a adoção, mas são necessárias mãos habilitadas para que os benefícios possam ser totalmente alavancados e as consequências inesperadas possam ser evitadas.

***

Ruslan Synytsky faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://blog.jelastic.com/2017/09/26/discover-containerization-importance-for-devops-and-avoid-pitfalls/