Entendendo a cultura DevOps e seus paradigmas - SempreUpdate
Início / Artigo / Entendendo a cultura DevOps e seus paradigmas
Entendendo a cultura DevOps e seus paradigmas
Saiba um pouco mais sobre a cultura DevOps!
Este artigo discute sobre a cultura DevOps e seus paradigmas. O que é DevOps? Quais ferramentas estão envolvidas? Quais são os pontos positivos e negativos desta cultura que todos nós da área de TI em algum momento na vida já nos deparamos? Por que existem tantas oportunidades nessa área e poucos profissionais especializados neste assunto atualmente? E quais as tendências dessa "nova" cultura?
1. O que é cultura DevOps?
Conforme definição da Amazon, cultura DevOps é:
Outra diferença gritante é a quebra de barreira entre equipes, principalmente entre equipes de desenvolvimento (Dev) e operação (Ops). Essas duas devem trabalhar totalmente integradas para otimizar a produtividade, ao invés do modelo tradicional, onde uma equipe demanda a outra.
Para obter essa alta velocidade, precisamos inserir alguns novos conceitos e utilizar ferramentas que otimizem os processos:
1.1 Virtualização
Graças a virtualização temos uma abstração da camada de hardware e por consequência uma padronização em relação a configuração de dispositivos, ou seja, não precisamos mais se preocupar com drivers específicos de determinados fabricantes. Ferramentas como VMWare, VirtualBox e KVM são exemplos de virtualização. Sem essa padronização, a cultura DevOps ficaria impossibilitada de desenvolver novas soluções de forma ágil.
Também é bom deixar claro que virtualização NÃO É computação em nuvem. Mas a computação em nuvem utiliza virtualização para fornecer serviços com elasticidade, disponibilidade e flexibilidade através da Internet. Um exemplo de ferramenta de computação em nuvem é o OpenStack.
Outro termo bastante utilizado em relação a virtualização é a orquestração, que nada mais é que a criação ou configuração de várias máquinas virtuais ao mesmo tempo. Isso é possível graças ao próximo conceito apresentado abaixo.
1.2 Automação e infraestrutura como código
Automação, também conhecido como infraestrutura como código (IaaC – Infrastructure as a Code), é a utilização de scripts e ferramentas que automatizam processos repetitivos e reduzem a interação humana. Na cultura DevOps, tudo que é repetitivo é passível de automação.
Por exemplo, provisionar um servidor virtual, efetuar a configuração de uma aplicação, definir regras de segurança no sistema operacional (gerenciamento de configuração), entre outros. Segundo definição da Red Hat:
A automação de TI, às vezes chamada de automação de infraestrutura, é o uso de software para criar instruções e processos reproduzíveis capazes de substituir ou reduzir a interação humana com os sistemas de TI. O software de automação trabalha dentro dos limites dessas instruções, ferramentas e estruturas para executar tarefas com pouca ou nenhuma intervenção humana.
Para a automação de TI, existem várias ferramentas disponíveis atualmente, algumas delas são:
O Ansible gerencia várias máquinas de uma só vez via conexões SSH. Trabalha com o conceito de agentless, ou seja, não precisa de instalação de agentes em suas máquinas para execução do Ansible. Utiliza uma linguagem própria "humanamente legível" baseada em YAML e Python. Trabalha com os conceitos de inventário (lista de máquinas que serão gerenciadas), playbooks (comandos ou passo-a-passo a ser executado) e roles (modularização do código). Atualmente o Ansible pertence a Red Hat. O Ansible é mais indicado para provisionamento de novas máquinas e configurações temporais.
O Puppet também gerencia várias máquinas de uma só vez, mas necessita de agente instalado (puppet agent) na máquina a ser gerenciada e, na maioria dos casos, também precisa de um servidor central para gerenciá-los (puppet server). Utiliza linguagem declarativa baseada em Ruby e trabalha muito bem com abstração de recursos.
O Puppet possui uma comunidade bem interessante no Brasil chamada Puppet-Br que possui um material bem completo sobre o assunto em pdf. O Puppet é mais indicado para gerenciamento de configuração, já que seus puppet agents rodam por padrão a cada 30 minutos, mantendo a configuração das máquinas gerenciadas conforme o que é determinado pelo puppet server.
O Chef também gerencia várias máquinas de uma só vez, mas possui uma arquitetura um pouco diferente do Ansible e do Puppet. Trabalha com o conceito de workstation, server e nodes. O workstation é onde são desenvolvidos os códigos que serão aplicados nas máquinas a serem gerenciadas.
Esses códigos também são conhecidos como receitas, ou recipes em inglês e o conjunto de receitas é conhecido como cookbook. O server é o responsável por gerenciar as receitas ou cookbooks e aplicá-las nas máquinas gerenciadas.
Os nodes são as máquinas gerenciadas em si. O Chef utiliza linguagem baseada em Ruby e Erlang. Bem como o Puppet, o Chef é mais indicado para gerenciamento de configuração.
Futuramente detalharemos mais sobre cada uma dessas ferramentas. Lembrando que todas as ferramentas citadas acima possuem versões gratuitas e pagas. As indicações feitas são experiência própria do autor, mas é possível fazer a mesma coisa com as 3 ferramentas, como orquestração, gerenciamento de configuração
O Vagrant é uma ferramenta que permite o provisionamento de máquinas virtuais de forma rápida para efetuar testes. É possível integrar o Ansible, Puppet e Chef no provisionamento destas máquinas. Basicamente, o Vagrant baixa imagens de máquinas virtuais prontas da Internet (boxes) e a configuração automatizada pode ser feita pelas ferramentas citadas. Abaixo temos mais artigos sobre o Vagrant:
O Jenkins é uma ferramenta de integração contínua feito em Java. Com ele é possível efetuar testes contínuos do produto desenvolvido, com vários cenários e gerando relatórios de performance (teste ocorreu com sucesso ou não).
E para programar esta infraestrutura como código, nada mais justo utilizar um sistema de controle de versões de código distribuído chamado GIT. Abaixo alguns artigos sobre o assunto aqui no SUP:
Como mostrar a branch do Git no Bash no Linux
Outro conceito muito utilizado na cultura DevOps é a utilização de containers. Um container pode ser considerado "um empacotamento completo da aplicação", tornando a aplicação completamente portável. A ferramenta mais utilizada para isso é o Docker. As imagens abaixo ilustram como funciona o conceito de container e sua diferença com a virtualização:
Arquitetura em containers com o Docker. Fonte: https://www.docker.com/resources/what-container
Arquitetura de virtualização com Hypervisor. Fonte: https://www.docker.com/resources/what-container
Ou seja, na virtualização, cada máquina virtual precisa ter um sistema operacional instalado (Guest Operating System). Já com aplicações em container somente é necessário ter o Docker instalado, evitando assim problemas relacionados ao ambiente da aplicação. Com o Docker é possível definir limitações de recursos por container, por exemplo memória, CPU, I/O.
Também podemos utilizar as duas arquiteturas em simultâneo (virtualização + containers), ou seja, aplicações em containers rodando em cima de máquinas virtuais. Para facilitar na criação de containers, também podemos utilizar uma ferramenta de orquestração de containers chamada Kubernetes. Futuramente escreveremos mais sobre este assunto.
2. Aspectos positivos da cultura DevOps
3. Aspectos negativos da cultura DevOps
Mudança na carreira profissional. Devido ao paradigma citado acima, é necessária uma mudança na carreira profissional, principalmente em relação à capacitação e aprendizado. Sabemos que não é fácil absorver essa quantidade gigantesca de novas ferramentas e novos conceitos que a cultura DevOps nos ensina, mas nunca é tarde para começar.
4. Cursos gratuitos para DevOps
Abaixo alguns sites que fornecem cursos gratuitos sobre o assunto cultura DevOps:
Udacity (em Inglês)
Nota do autor: Os cursos citados são gratuitos, mas fazem referência a ferramentas que podem ser pagas. A minha ideia para indicação destes cursos é entender a cultura DevOps e não se apegar a determinado software.
5. Tendências DevOps
A cultura DevOps já é realidade em várias empresas como por exemplo Amazon, Google e Microsoft. Segundo estudo da CA Tecnhologies, em 2016 o Brasil foi quarta maior referência global em DevOps. Em sites de ofertas de emprego como por exemplo o Apinfo, vemos que existem diversas vagas relacionadas a DevOps (Desenvolvedor, Analista, Especialista). Tudo isso nos mostra que a cultura DevOps é uma grande tendência para o futuro do mercado de Tecnologia da Informação.
Em conclusão, esperamos que este artigo sobre cultura DevOps e seus paradigmas tenha explicado um pouco mais sobre essa evolução dos processos na área de TI, com pontos de vista positivos e negativos, apresentado algumas ferramentas que automatizam esses processos como o Ansible, Puppet e Chef e inserido novos conceitos como containers e Infraestrutura como Código.