Prática DevOps com Docker para Machine Learning
  • Prática de DevOps com Docker para Machine Learning
  • 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 - Python
    • 1.4 Configuração do Ambiente - Docker
    • 1.5 Dockerfile, Imagem e Contêiner Docker
    • 1.6 Docker Hub e Comandos Adicionais
  • 2. Desenvolvimento
    • 2.1 Do notebook para aplicação - parte 1
    • 2.2 Do notebook para aplicação - parte 2
    • 2.3 Do notebook para aplicação - parte 3
  • 3. Produção
    • 3.1 Desenvolvimento vs Produção: o fim ou o início?
    • 3.2 Ambiente de Produção - parte 1
    • 3.3 Ambiente de Produção - parte 2
    • 3.4 Ambiente de Produção - parte 3
  • 4. Monitoramento
    • 4.1 Introdução
    • 4.2 Configurando o Servidor de Monitoramento
    • 4.3 Monitorando Servidores do Ambiente de Produção
    • 4.4 Comandos de Verificação do Nagios
    • 4.5 Criando Verificações Mais Específicas
    • 4.6 Criando Alertas
    • 4.7 Recuperando de Problemas
    • 4.8 Verificação de Contêineres via NRPE
  • 5. Infraestrutura como Código e Orquestração
    • 5.1 Introdução
    • 5.2 Orquestração com Docker Compose
    • 5.3 Orquestração com Kubernetes
  • 6. Integração Contínua
    • 6.1 Introdução
    • 6.2 Controle de Versão
    • 6.3 Configurando um repositório no GitLab
    • 6.4 Branch e merge
    • 6.5 Pipeline de Integração Contínua com GitLab CI/CD
  • 7. Entrega Contínua
    • 7.1 Introdução
    • 7.2 Implantação automática no Docker Hub
    • 7.3 Implantação automática no Heroku
    • 7.4 Implantação automática no Google Kubernetes Engine (GKE)
    • 7.5 Testando tudo junto
  • 8. Model serving
    • 8.1 Introdução
    • 8.2 Model serving com mlserver
    • 8.3 CI/CD com GitLab e mlserver
    • 8.4 Testando tudo junto
  • 9. Model serving batch
    • 9.1 Introdução
    • 9.2 Spark
    • 9.3 Airflow
    • 9.4 Testando tudo junto
  • 10. MLOps com mlflow
    • 10.1 Introdução
    • 10.2 Visão geral do MLflow
    • 10.3 Configuração do MLflow
    • 10.4 Testando MLflow
  • 11. MLOps com Kubeflow
    • 11.1 Visão geral do Kubeflow
    • 11.2 Configuracão
    • 11.3 Kubeflow Pipeline
    • 11.4 Kserve
    • 11.5 Testando tudo junto
  • 12. Conclusão
    • Conclusão
Powered by GitBook
On this page
  1. 5. Infraestrutura como Código e Orquestração

5.1 Introdução

Previous4.8 Verificação de Contêineres via NRPENext5.2 Orquestração com Docker Compose

Last updated 3 years ago

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 garantem 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çar nessa área.

conduziram uma mapeamento sistemático, visando 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 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 elas.

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 envolvidas nesse cenário, dificultando até mesmo o aprendizado no tema. Entretanto, espera-se que com o amadurecimento da tecnologia, padrões passem a ser desenvolvidos ou algumas das tecnologias atuais se tornem padrões de fato e o cenário comece a mudar para 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 orquestrar 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)
Rahman et al. (2019)
Guerreiro at al. (2019)
Guerreiro at al. (2019)
Cohen (2016)
Ecossistema DevOps (Fonte: Cohen, (2016))