Prática de DevOps com Docker
  • Prática de DevOps com Docker
  • Autores e Agradecimentos
  • Uso do Livro
  • Contribua com o Livro
  • Licença
  • Organização do Livro
  • 1. Introdução
    • 1.1 - Máquinas Virtuais e Contêineres
    • 1.2 DevOps e Docker
    • 1.3 Configuração do Ambiente
  • 2. Produção
    • 2.1 Produção: o fim ou o início?
    • 2.2 Ambiente de Produção
    • 2.3 Instalação do Servidor de Banco de Dados
    • 2.4 Instalação do Servidor de Web
  • 3. Monitoramento
    • 3.1 Introdução
    • 3.2 Configurando o Servidor de Monitoramento
    • 3.3 Monitorando Servidores do Ambiente de Produção
    • 3.4 Comandos de Verificação do Nagios
    • 3.5 Criando Verificações Mais Específicas
    • 3.6 Criando Alertas
    • 3.7 Recuperando de Problemas
  • 4. Infraestrutura como Código e Orquestração
    • 4.1 Introdução
    • 4.2 Orquestração com Docker Compose
  • 5. Integração Contínua
    • 5.1 Introdução
    • 5.2 Controle de Versão
    • 5.3 Construindo o Projeto Utilizando Contêiner
    • 5.4 Garantindo Acesso de Desenvolvedor nas Plataformas por meio de Tokens
    • 5.5 Integrando GitLab e GitHub
    • 5.6 Pipeline de Integração Contínua com GitLab CI/CD
  • 6. Entrega Contínua
    • 6.1 Introdução
    • 6.2 Personalizando Imagem Docker
    • 6.3 Personalizando Imagem do Servidor Web via GitLab CI/CD
    • 6.4 Atualizando o Servidor Web no Ambiente de Produção
  • 7. Deploy na Nuvem
    • 7.1 Introdução
    • 7.2 Configurando o ambiente local de desenvolvimento
    • 7.3 Conhecendo os recursos e conceitos do Kubernetes
    • 7.4 Entendendo o Chart
    • 7.5 Configurando o Jib
    • 7.6 Definindo o chart utilizado para execução local e na nuvem
  • 8. Conclusão
    • Conclusão
Powered by GitBook
On this page

Was this helpful?

  1. 4. Infraestrutura como Código e Orquestração

4.1 Introdução

Previous3.7 Recuperando de ProblemasNext4.2 Orquestração com Docker Compose

Last updated 4 years ago

Was this helpful?

Infraestrutura como Código (do Inglês, Infrastructure as Code - IaC) refere-se a prática de configurar automaticamente a dependência de sistemas e de prover instâncias locais e remotas de tais sistemas ().

De forma simplificada, dada a importância da infraestrutura estar sempre operacional, não apenas para os usuários finais da aplicação mas para toda a equipe de desenvolvimento do produto de software, os scripts que garante a criação de contêineres e a coordenação entre os mesmos, deve ter qualidade semelhante ao do código da própria aplicação, daí o termo de Infraestrutura como Código.

Entretanto, mesmo com toda essa importância, conforme destacado por , ainda há muito o que avanças nessa área.

Rahman et al. (2019) conduziram uma mapeamento sistemático, visando a com compreender a partir da literatura, o estado atual sobre IaC. Ao final eles identificaram quatro tópicos principais: 1) frameworks e ferramentas para IaC; 2) uso de IaC; 3) estudos experimentais relacionados a IaC; e 4) teste em IaC. Concluíram com o estudo que existe uma vasta gama de trabalhos propondo ferramentas e frameworks para IaC. Entretanto, pesquisas no contexto de defeitos e falhas de segurança em IaC ainda estão apenas iniciando. Tais resultados são corroborados pelo estudo de .

investigaram o estado da prática sobre IaC por meio de entrevistas com pessoas técnicas que empregam IaC em suas empresas. Três pontos principais foram investigados: 1) como a IaC é adotada na prática; 2) que tipo de ferramenta de suporte existe e é utilizada, com suas vantagens e desvantagens; e 3) qual a necessidade dos praticantes em relação ao desenvolvimento, manutenção e evolução IaC. Ao final da análise, concluíram que é fundamental a condução de mais estudos na área uma vez que o apoio oferecido pelas ferramentas existentes ainda é precário e limitado. Além disso, os desenvolvedores sentem necessidade de novas técnicas de teste e manutenção para código de IaC.

Desse modo, apesar de ser algo extremamente importante no cenário de desenvolvimento de software atual, as pesquisas em termos de técnicas e ferramentas de apoio, principalmente em relação a validação de scripts de IaC ainda é rudimentar e há muito o que ser feito.

De maneira geral, ainda não há uma tecnologia aceita como padrão, nem mesmo uma linguagem padrão para a escrita dos scripts de IaC, o que torna difícil, não apenas o desenvolvimento de ferramentas de qualidade, mas também a integração entre eles.

A quantidade de tecnologias que fazem parte do Ecossistema DevOps é imensa. A figura abaixo, extraída de , dá uma visão geral da quantidade de tecnologias envolvida nesse cenário, dificultando até mesmo o aprendizado no tema. Entretanto, espera-se que com o amadurecimento da tecnologia, padrões passem a serem desenvolvidos ou algumas das tecnologias atuais se tornem padrões de fato e o cenário comece a mudar para a melhor.

Esse livro é baseado em Docker por ser essa uma tecnologia que se destaca nessa área de conteinerização. Entretanto, para que DevOps funcione de forma efetiva é necessário muito mais que contêineres. O gerenciamento dos mesmos, a orquestração entre eles, o monitoramento dos mesmos, dentre outras tarefas, são de fundamental importância para garantir a máxima automatização e a minimização de problemas decorrentes da intervenção humana no processo.

Entretanto, o uso de gerenciadores de configuração para IaC fazem sentido quando há a necessidade de se gerenciar centenas de servidores ou contêineres. Nesses casos, passa a valer a pena estudar um desses gerenciadores de configuração e passar a fazer uso do mesmo para coordenar essa tarefa de provimento de servidores e coordenar a criação dos mesmos. Além disso, as ferramentas de gerenciamento de configuração de IaC são muito úteis para gerenciar a instalação de servidores, quais pacotes devem conter, quais usuários e permissões devem ser definidas, dentre outras características inerentes da infraestrutura para a implantação de uma aplicação. São ferramentas úteis para fazer o chamado provisionamento da infraestrutura.

Em entrevista concedida a Yonas Beshawred (2014), , Engenheiro Senior na Docker Inc., fala sobre a evolução do Docker e como ele se integra com ferramentas destinadas ao chamado gerenciamento de configuração de IaC, tais como , ou , por exemplo. Petazzoni foi claro em dizer que o Docker não seria um substituto dessas tecnologias e não havia interesse da Docker Inc em que ele se tornasse um substituto.

Para mais informações sobre o Puppet, recomendo os Capítulos 4 e 5 do livo do . Para uma comparação de ferramentas como Puppet e Chef, recomendo o artigo de .

Para cenários de menor volume de contêineres, o é capaz de coordenar a criação dos contêineres de forma relativamente simples, como será apresentado a seguir. Combinando o Docker Compose com o Git, é possível orquestrar a criação dos contêineres e, ao mesmo tempo, manter o controle de versões dos arquivos e scripts responsáveis pela infraestrutura.

Jérôme Petazzoni
Chef,
Puppet,
Salt
Ansible
Sato (2019)
Yigal (2017)
Docker Compose
Rahman et al., 2019
Rahman et al., (2019)
Guerreiro at al. (2019)
Guerreiro at al. (2019)
Cohen (2016)
Ecossistema DevOps (Fonte: Cohen, (2016))