Procurar no blog

25 de agosto de 2020

Roteiro para se tornar um DevOps



Roteiro para se tornar um DevOps

Um roteiro com os passos que você deve dar para se tornar um engenheiro de DevOps e, é claro, as habilidades necessárias que você precisa dominar para essa finalidade.

Neste artigo, você verá tudo muito bem explicado e em detalhes.

Antes de continuar, observe atentamente a imagem abaixo.

Isso parece um pouco complicado? Eu sei que é um pouco demais, não fique espantado, vamos começar pelo básico.

O que é o DevOps?

De acordo com a Wikipédia, DevOps é um conjunto de práticas que combina desenvolvimento de software e operações de TI. O objetivo é reduzir o ciclo de vida de desenvolvimento de sistemas e fornecer entrega contínua com alta qualidade de software. O DevOps é complementar ao desenvolvimento de software Agile; vários aspectos do DevOps vieram da metodologia Agile.

Na definição da AWS, DevOps é a combinação de filosofias, práticas e ferramentas culturais que aumentam a capacidade de uma organização de fornecer aplicativos e serviços em alta velocidade: evoluindo e melhorando produtos em um ritmo mais rápido do que as organizações que usam processos tradicionais de desenvolvimento de software e gerenciamento de infraestrutura. Essa velocidade permite que as organizações atendam melhor a seus clientes e concorram com mais eficiência no mercado.

A partir da definição e da imagem acima, você já está entendendo a ideia do que pode ser DevOps.

Em termos simples, é algo que pode tornar o processo abaixo mais rápido e suave:

Codificar 👉Construir 👉Testar 👉Empacotar 👉Liberar 👉Configurar 👉Monitorar 👉Repetir e Melhorar👈

Até aqui já dá pra entender o que é DevOps, agora vamos falar sobre DevSecOps.

O que é o DevSecOps:

DevSecOps na definição da RedHat significa simplesmente garantir a segurança como parte do processo do DevOps e torná-la automatizada.

Ou seja, pensar na segurança da aplicação e da infraestrutura desde o início. Também significa automatizar algumas barreiras de segurança para evitar que o fluxo de trabalho de DevOps fique lento. Selecionar as ferramentas corretas para integrar a segurança continuamente – como concordar em implementar um ambiente de desenvolvimento integrado (IDE) com funcionalidades de segurança – é um meio de atingir essas metas. No entanto, uma segurança eficaz em DevOps requer mais do que ferramentas novas: ela deve ser construída tendo como base as mudanças culturais geradas pelo DevOps e se integrar ao trabalho das equipes de segurança o quanto antes.

Antes de avançar, é importante entender as tarefas diárias dos engenheiros do DevOps, abaixo estão alguns exemplos:

  • Projetar, construir, testar e implantar sistemas escaláveis, seguros e distribuídos, do desenvolvimento à produção.

  • Gerenciar o repositório de código (como Git, SVN, BitBucket etc.), incluindo mesclagem e integração de código, ramificação e manutenção e gerenciamento remoto de repositórios, manter o sistema de infraestrutura.

  • Projetar a arquitetura e os objetos do banco de dados e sincronizar os vários ambientes.

  • Projetar implementar e dar suporte aos pipelines de Integração Contínua e Entrega Contínua do DevOps.

  • Pesquisar e implementar novas tecnologias e práticas.

  • Documentar processos, sistemas e fluxos de trabalho.

  • Criação e aprimoramento de soluções dinâmicas de monitoramento e alerta usando serviços líderes do setor.

  • Analisar continuamente as tarefas que são executadas manualmente e podem ser substituídas pelo código de automação.

  • Criação e aprimoramento da automação de Implantação Contínua criada no Docker e no Kubernetes.

Você pode sentir que é tudo responsabilidade do desenvolvedor e pessoal operacional combinados e, na verdade, é exatamente por isso que é:

Dev(elopment) + Op(eration)s = DevOps

Feitas as apresentações das principais definições, agora vamos falar sobre o roteiro propriamente dito e recomendado:

Saiba mais sobre a cultura e práticas do DevOps:

O DevOps é responsabilidade de todos, não é uma regra rígida ou algo semelhante; é quando toda a equipe se reúne para atingir o objetivo final, ou seja, otimizar a produtividade dos desenvolvedores e a confiabilidade das operações, criar um produto de qualidade, liberar recursos e corrigir erros mais rapidamente, introduza mais automação e siga as melhores práticas de DevOps, como:

Integração contínua:

A integração contínua é uma prática de desenvolvimento de software em que os desenvolvedores mesclam regularmente suas alterações de código em um repositório central, após o qual são executadas compilações e testes automatizados. Os principais objetivos da integração contínua são encontrar e solucionar erros mais rapidamente, melhorar a qualidade do software e reduzir o tempo necessário para validar e lançar novas atualizações de software.

Entrega Contínua:

A entrega contínua é uma prática de desenvolvimento de software em que as alterações de código são criadas, testadas e preparadas automaticamente para uma liberação para produção. Ele se expande com a integração contínua, implantando todas as alterações de código em um ambiente de teste e / ou em um ambiente de produção após o estágio de construção. Quando a entrega contínua é implementada corretamente, os desenvolvedores sempre terão um artefato de construção pronto para implantação que passou por um processo de teste padronizado.

Microsserviços:

A arquitetura de microsserviços é uma abordagem de design para criar um único aplicativo como um conjunto de pequenos serviços. Cada serviço é executado em seu próprio processo e se comunica com outros serviços por meio de uma interface bem definida, usando um mecanismo leve, geralmente uma API (interface de programação de aplicativos) baseada em HTTP. Os microsserviços são criados com base nos recursos de negócios; cada serviço tem escopo definido para um único propósito. Você pode usar estruturas ou linguagens de programação diferentes para escrever microsserviços e implantá-los independentemente, como um único serviço ou como um grupo de serviços.

Infraestrutura como código (IaC):

Infraestrutura como código é uma prática na qual a infraestrutura é provisionada e gerenciada usando técnicas de desenvolvimento de código e software, como controle de versão e integração contínua. O modelo orientado a API da nuvem permite que desenvolvedores e administradores de sistema interajam com a infraestrutura de forma programática e em escala, em vez de precisar instalar e configurar manualmente os recursos. Assim, os engenheiros podem interagir com a infraestrutura usando ferramentas baseadas em código e tratar a infraestrutura de maneira semelhante à maneira como tratam o código do aplicativo. Como eles são definidos pelo código, a infraestrutura e os servidores podem ser implantados rapidamente usando padronização, atualizados com os patches e versões mais recentes ou duplicados de maneiras repetitivas.

Monitoramento e registro:

As organizações monitoram métricas e logs para ver como o desempenho de aplicativos e infraestrutura afeta a experiência do usuário final de seus produtos. Ao capturar, categorizar e depois analisar dados e logs gerados por aplicativos e infraestrutura, as organizações entendem como as alterações ou atualizações afetam os usuários, oferecendo informações sobre as principais causas dos problemas ou mudanças inesperadas. O monitoramento ativo se torna cada vez mais importante, pois os serviços devem estar disponíveis 24 horas por dia, 7 dias por semana e a medida que a frequência de atualização de aplicativos e infraestrutura aumenta. Criar alertas ou realizar análises em tempo real desses dados também ajuda as organizações a monitorar de maneira mais proativa seus serviços.

Comunicação e Colaboração:

Uma maior comunicação e colaboração em uma organização é um dos principais aspectos culturais do DevOps. O uso das ferramentas de DevOps e a automação do processo de entrega de software estabelece a colaboração, reunindo fisicamente os fluxos de trabalho e as responsabilidades do desenvolvimento e operações. Com base nisso, essas equipes estabelecem fortes normas culturais em torno do compartilhamento de informações e facilitam a comunicação através do uso de aplicativos de bate-papo, sistemas de rastreamento de problemas ou projetos e wikis. Isso ajuda a acelerar a comunicação entre desenvolvedores, operações e até outras equipes, como marketing ou vendas, permitindo que todas as partes da organização se alinhem mais estreitamente com objetivos e projetos.

Aprenda pelo menos uma linguagem de programação Back-end:


Sim, você precisa aprender pelo menos uma linguagem de programação para poder programar scripts de automação e, se puder aprender várias linguagens, é melhor ainda, mas não tente aprender todas.

As mais recomendadas são: Go, Python, JavaScript (Node.Js)

Entenda os conceitos de Sistemas Operacionais:

Conceitos de Sistemas Operacionais são essenciais e necessários para um engenheiro de DevOps, pois, como tal, trabalhará com diferentes SOs (principalmente Linux) durante o desenvolvimento e/ou implantação.

O engenheiro do DevOps geralmente precisa fazer otimizações do sistema operacional no nível do sistema para aumentar o desempenho e/ou fazer outras otimizações conforme as necessidades do aplicativo, conhecimento de gerenciamento de processos, threads e simultaneidade, soquetes, gerenciamento de E/S, virtualização, memória de armazenamento e sistemas de arquivos serão muito úteis nesse processo.

Aprenda sobre o gerenciamento de servidores:

Como engenheiro de DevOps, temos que gerenciar todos os tipos de servidores, e o interessante é que não são apenas 1 ou 2, mas uma grande quantidade de servidores (às vezes muito mais de 100), geralmente consistem em instâncias do Linux (e raramente em outro SO) e é por isso que a etapa anterior, ou seja, entendimento básico, são necessários diferentes conceitos de sistema operacional e, depois disso, aprofundar seu conhecimento em sistemas Linux, que facilitará sua vida diária.

Como engenheiro de DevOps, devemos ter o conhecimento de aumentar/diminuir dinamicamente os servidores, sem reescrever os arquivos de configuração e fazer as recomendações necessárias aos desenvolvedores para que o próprio aplicativo cumpra a abordagem de escalabilidade.

Além disso, você definitivamente terá que lidar com servidores da Web em algum momento, se não o tempo todo, portanto, também é necessário ter conhecimento e experiência prática de servidores Proxy Reverso, como Nginx e/ou Apache.

Aprenda sobre rede, segurança e protocolos:

O conhecimento de redes, segurança e protocolos básicos é absolutamente necessário; como engenheiro do DevOps, precisamos configurar VPC (Virtual private cloud) e grupos/ firewalls de segurança e utilizar vários protocolos, como TCP/IP (Transfer Control Protocol/Internet Protocol), HTTP (Hypertext Protocolo de transferência), TSL/SSL (Transport Layer Security/Secure Sockets Layer), SSH (Secure Shell), FTP (File Transfer Protocol), SMTP (Simple Mail Transfer Protocol) e muito mais.

Em particular aos conceitos de rede, também são necessários outros conceitos, como gerenciamento de registros DNS, roteamento, firewalls e portas, utilitários básicos como ping, ssh, netstat, netcat, ifconfig ou ip, balanceamento de carga e criptografia TLS.

Aprenda infraestrutura como código (IaC):

“Infraestrutura como código é o processo de gerenciar e provisionar data centers de computadores por meio de arquivos de definição legíveis por máquina, em vez de configuração de hardware físico ou ferramentas de configuração interativas”.

A AWS define que: Infraestrutura como código é uma prática na qual a infraestrutura é provisionada e gerenciada usando técnicas de desenvolvimento de código e software, como controle de versão e integração contínua. O modelo orientado a API da nuvem permite que desenvolvedores e administradores de sistema interajam com a infraestrutura de forma programática e em escala, Em vez de precisar instalar e configurar manualmente os recursos. Assim, os engenheiros podem interagir com a infraestrutura usando ferramentas baseadas em código e tratar a infraestrutura de maneira semelhante à forma como tratam o código do aplicativo. Como são definidas pelo código, a infraestrutura e os servidores podem ser rapidamente implementado usando padrões, atualizados com os patches e versões mais recentes ou duplicados de maneiras repetíveis”.

Já a Microsoft diz que: “Infraestrutura como código (IaC) é o gerenciamento da infraestrutura (redes, máquinas virtuais, balanceadores de carga e topologia de conexão) em um modelo descritivo, usando o mesmo controle de versão que a equipe do DevOps usa para o código-fonte. Como o princípio de que o mesmo código-fonte gera o mesmo binário, um modelo IaC gera o mesmo ambiente toda vez que é aplicado. O IaC é uma prática essencial do DevOps e é usado em conjunto com a entrega contínua.

A infraestrutura à medida que o Código evoluiu para resolver o problema de desvio do ambiente no pipeline de lançamento. Sem o IaC, as equipes devem manter as configurações de ambientes de implantação individuais. Com o tempo, cada ambiente se torna um floco de neve, ou seja, uma configuração exclusiva que não pode ser reproduzida automaticamente. A inconsistência entre ambientes gera problemas durante as implantações. Com os flocos de neve, a administração e manutenção da infraestrutura envolve processos manuais difíceis de rastrear e que contribuem para erros.”

Colocando tudo isso em palavras simples:

Infraestrutura como código (IaC) significa gerenciar sua infraestrutura de TI usando arquivos de configuração.

Como engenheiro do DevOps, devemos saber sobre contêineres (Docker), orquestração de contêineres (Kubernetes, Docker Swarm), ferramentas de gerenciamento de configuração como Ansible, Chef, Salt e Puppet, ferramentas de provisionamento de infraestrutura, como Terraform e formação de nuvens.

Aprenda algumas ferramentas de CI/CD

Integração Contínua (IC):

A Integração Contínua (IC) é uma prática de desenvolvimento em que os desenvolvedores integram o código em um repositório compartilhado com frequência, de preferência, várias vezes ao dia. Cada integração pode ser verificada por uma construção automatizada e testes automatizados. Embora o teste automatizado não faça parte estritamente do IC, normalmente está implícito.

Entrega Contínua (CD):

Entrega Contínua (CD) é uma abordagem de engenharia de software na qual as equipes produzem software em ciclos curtos, garantindo que o software possa ser lançado com segurança a qualquer momento e, ao liberar o software, faça-o manualmente. O objetivo é criar, testar e liberar software com maior velocidade e frequência.

Como engenheiro do DevOps, as ferramentas abaixo são amplamente usadas, e você deve conhecer, aprender e utilizar: Jenkins, CI do GitLab, CircleCI, Microsoft VSTS, CodeShip, Bamboo, Ações do GitHub.

Aprenda a monitorar software e infraestrutura


As organizações monitoram métricas e logs para ver como o desempenho de aplicativos e infraestrutura afeta a experiência do usuário final de seus produtos. Ao capturar, categorizar e depois analisar dados e logs gerados por aplicativos e infraestrutura, as organizações entendem como as alterações ou atualizações afetam os usuários, oferecendo informações sobre as causas principais dos problemas ou mudanças inesperadas. O monitoramento ativo se torna cada vez mais importante, pois os serviços devem estar disponíveis 24 horas por dia, 7 dias por semana e à medida que a frequência de atualização de aplicativos e infraestrutura aumenta. Criar alertas ou realizar análises em tempo real desses dados também ajuda as organizações a monitorar de maneira mais proativa seus serviços.

É muito importante que um engenheiro do DevOps colete feedback e implemente as alterações rapidamente, para isso você deve ter conhecimento de ferramentas de monitoramento como: Nagios, Prometheus, Grafana, Zabbix.

Aprenda sobre provedores de nuvem:

Não há DevOps sem nuvem, tem que ter, pelo menos, nuvem privada

Na verdade, é autoexplicativo, mas ainda assim, deixe-me simplificar um pouco, pois isso permite que você faça uma pergunta.

Você pensaria em fazer o DevOps para sua máquina local?

A resposta é simples, não, não é! Sim, não incomodamos o DevOps em ambientes de desenvolvimento local, mas nos preocupamos quando pensamos em hospedar aplicativos na nuvem, gerenciar vários aplicativos e servidores e monitorar aplicativos e infraestrutura para ambientes de preparação e produção.

Atualmente, existem vários provedores de serviços em nuvem por aí, dos quais três estão ocupando a maior participação de mercado, são AWS, AZURE e GCP, e algumas ferramentas que esses provedores fornecem você deve necessariamente aprender para ser chamado de DevOps.

AWS:

IC e CD do líder na nuvem: AWS CodePipeline, AWS CodeBuild, AWS CodeDeploy, AWS CodeStar

Microsserviços: Amazon Elastic Container Service (ECS), AWS Lambda,

Infraestrutura como código: formação em nuvem, AWS OpsWorks

Gerenciamento de configuração: AWS System Manager

Política como código: AWS Config

Monitoramento e registro: Amazon CloudWatch, X-Ray AWS CloudTrail

Plataforma como serviço: AWS Elastic Beanstalk

Controle de versão: AWS CodeCommit

Microsoft Azure:

CI e CD: Pipelines do Azure, Planos de Teste do Azure, Artefatos do Azure

Controle de versão: repositórios do Azure

GCP (Google Cloud Provider):

CI / CD: criação em nuvem, Tekton, registro de artefato, gerenciador de implantação.

Resumo:

Eu diria que ser DevOps, ou engenheiro DevOps é uma jornada longa e interminável, continue aprendendo, continue melhorando, não tente aprender tudo de uma vez, aprenda aos pouco, com consistencia, em topicos, um de cada vez e relacionados juntos, para tornar o processo de aprendizagem um pouco mais rápido. 

Não basta aprender, tem que praticar, é isso que é importante e irá ajudá-lo a "colher frutos" de qualidade posteriormente.

Desejo-lhe boa sorte em sua jornada para se tornar um DevOps.

Nenhum comentário: