Skip to content

Latest commit

 

History

History
296 lines (202 loc) · 14 KB

22. DevOps Avançado.md

File metadata and controls

296 lines (202 loc) · 14 KB

DevOps Avançado

Aula 01 - Cássio Trindade

Introdução

O que NÃO é DevOps

  • DevOps não é um Método
  • DevOps não é Cargo.
  • DevOps não é Dev + Ops.
  • DevOps não é uma Equipe.
  • DevOps não é um Processo.
  • DevOps não é uma Ferramenta.
  • DevOps não é sinônimo de CI ou CD.
  • DevOps não é exclusivo p/Métodos Ágeis.
  • DevOps não é automação do processo de build e deploy

O que é DevOps

Cultura de entrega continua de produtos digitas, com valor, que combina as áres de "desenvolvimento” (development) e "operações” (operations). Que faz uso das melhores metodologias, práticas e ferramentas da área da TI.

Principais práticas

  • Integração contínua (CI)
  • Distribuição/implantação contínua (CD)
  • Virtualização (IaaS) e containers
  • Infraestrutura como código
  • Gerenciamento de configuração
  • Comunicação e colaboração

Planejamento

A cultura DevOps nasceu da necessidade de maior colaboração entre Dev (desenvolvedores) e Ops (operadores) de sistemas de Tecnologia da Informação.

E esse alinhamento entre os setores surgiu na esteira do desenvolvimento ágil, empregando uma série de ferramentas.

O planejamento do DevOps geralmente é o primeiro estágio do DevOps. No entanto na prática, as equipes de software modernas trabalham em ciclos e os estágios tende a se repetir nos ciclos com mais ou menos intensidade de trabalho.

  • Metas e Objetivos

    • Levantamento das dificuldades
    • Definição do objetivo
    • Definição de metas (SMART)*
  • Equipe Multidisciplinar

    • Integração e treinamento
  • Método / Ferramentas

    • Scrum, Kanban e Extreme Programming (XP)
    • Git, AWS, Azure, Jenkins, etc...

Segundo a Microsoft, os seguintes itens são importantes e ajudam a implementação de DEVOPS:

  • Promover o alinhamento cultural e a autonomia.
  • Alterar o foco dos indivíduos para as equipes.
  • Criar novas estratégias de planejamento e aprendizagem.
  • Implementar um modelo de trabalhao com várias equipes.
  • Aprimorar as práticas de qualidade de código.
  • Promover transparência e responsabilidade.

Build/Construção

Cloud Computing

Centros de dados disponíveis para muitos utilizadores pela Internet. Nuvens em grande escala, predominantes hoje em dia, geralmente têm funções distribuídas em vários locais dos servidores centrais.

Na fase de Build são realizada as etapas integração, construção, versionamento, qualidade e compilação do código-fonte produzido. Muitas ferramentas, tais como Maven e Git (github, gitlab, etc..) são utilizadas para auxiliar na integração e monitoramento dos artefatos. Quando há quebra no Build devido a problema neste processo, todos os envolvidos deve ser informados, e os responsáveis precisam fazer as correções disponibilizar os codigos na esteira novamente.

image

Exemplo de Build

Aula 02 - Cássio Trindade

Aula 03 - Marcelo Veiga Neves

Introdução

...

O que é DevOps?

  • DevOps é uma prática de engenharia de software que possui o intuito de unificar o desenvolvimento de software (Dev) e a operação de software (Ops)
  • Práticas + Cultura + Ferramentas

image

Fonte: https://medium.com/@ahamed.mush/devops-a-culture-33d5bdd5a483

image

Fonte: https://www.atlassian.com/br/devops

Principais práticas em DevOps

  • Integração contínua (CI);
  • Distribuição/implantação contínua (CD);
  • Virtualização (IaaS) e containers;
  • Automação de infraestrutura;
  • Gerenciamento de configuração;
  • Infraestrutura como código;
  • Monitoramento e observabilidade;
  • Feedback contínuo, comunicação e colaboração;

Integração contínua (CI)

  • Projetos de software normalmente são desenvolvidos de forma modular e por múltiplos desenvolvedores

    • Cada desenvolvedor implementa e testa a sua parte
    • Necessidade de testes de integração no final de cada ciclo de desenvolvimento (ex: sprints, milestones)
    • Problema: ciclos muito longos, erros demoram a aparecer
  • Integração contínua é a prática de automatizar o build e teste de todos os componentes "continuamente"

    • Isto é, sem esperar um ciclo completo
  • Combinação das seguintes técnicas:

    • Versionamento de código (ex: Git)
    • Automatização de build/compilação (ex: Makefile, Ant, Maven, etc.)
    • Automação de testes (ex: JUnit, Cypress, Selenium, etc.)
  • Exemplos de ferramentas

    • Jenkins, AWS CodeBuild, CircleCI, Travis CI, GitHub Actions, BitBucket Pipelines, etc.

Distribuição contínua (CD)

  • Pode ser tratado como

    • Continuous delivery (Entrega contínua)
    • Continuous deployment (Implantação/publicação contínua)
  • Extensão da integração contínua para diminuir o “lead time”

    • Tempo entre uma nova linha de código ser escrita e o software estar disponível para o usuário final (produção)
  • Exemplos de ferramentas

    • AWS CodeDeploy, Octopus Deploy, TeamCity, GitHub Actions, etc.
    • Muitas ferramentas realizam todo o processo de CI/CD

Infraestrutura automatizada

  • Problemas típicos no gerenciamento de infraestruturas:

    • Tarefas manuais repetitivas, grande chance de gerar erros, dificuldade de manter/rastrear histórico de modificações, etc.
    • Dificuldade de escalar!
  • Conceitos:

    • Automatização de tarefas de gerenciamento
    • Gerenciamento de configuração
    • Infraestrutura como código

Automatização de tarefas de gerenciamento

  • Como administrar/gerenciar servidores?

    • Conectar no servidor via SSH, executar comandos, instalar pacotes, modificar arquivos de configuração, adicionar usuários, modificar permissões, etc.
    • E se forem dezenas ou centenas de servidores?
    • E se forem sistemas operacionais diferentes? Ou mesmo distribuições Linux diferentes?
  • Ferramentas de automação

    • Shell scripts, Ansible, Chef, CFEngine, Puppet, etc.

Shell do Sistema Operacional

  • Saber utilizar o shell (terminal ou console) do sistema operacional é uma habilidade imprescindível para um Desenvolvedor Full Stack

  • É um requisito para muitas das práticas de DevOps

    • Ex: CI/CD e automação de tarefas em geral
  • Roteiro para conhecer e praticar os principais comandos do Linux:

Ansible

  • Ansible é uma ferramenta de automação de TI de código aberto para gerenciamento de configuração e implantação de aplicações
  • Por que usar o Ansible? Ele simplifica processos complexos e repetitivos, aumentando eficiência e confiabilidade
  • Vantagens do Ansible: fácil de aprender, agentless (sem agente), arquitetura baseada em SSH, ampla comunidade e extensível com módulos e roles

Arquitetura do Ansible

  • Agentless: não requer instalação de agentes nos hosts gerenciados, minimizando a sobrecarga e os requisitos de manutenção
  • Baseado em SSH: utiliza protocolo SSH seguro para comunicação com hosts gerenciados
  • Playbooks: arquivos de definição de automação escritos em YAML que descrevem as tarefas e ações necessárias
  • Inventário de hosts: arquivo que lista todos os hosts gerenciados e suas respectivas informações (grupos, variáveis, etc.)
  • Ansible Tower e Rundeck (opcional): são soluções para gerenciamento e orquestração de automação baseadas em interface web
  • Não usa agentes, faz “push” via SSH (simplicidade!)
  • Arquitetura do Ansible:

image

Playbooks do Ansible

  • Playbooks são arquivos YAML que descrevem a automação desejada em termos de tarefas, handlers e variáveis

image

Demo

Para reproduzir, acesse: https://github.com/mvneves/ansible-demo

Infraestrutura como código (IaC)

  • Infraestructure-as-code (IaC)
  • Permite aplicar as melhores práticas de desenvolvimento de aplicações na infraestrutura
    • Exemplo: versionamento, code review, testes automatizados, etc.

Principais benefício de IaC

  • Consistência: Automatiza e padroniza o processo de implantação de infraestrutura.
  • Rastreabilidade: O código-fonte é facilmente rastreável, permitindo auditorias e identificação de alterações.
  • Reutilização: Permite a reutilização de componentes de infraestrutura, agilizando a implantação de novos ambientes.
  • Colaboração: Facilita a colaboração entre equipes de desenvolvimento, operações e suporte.

Princípios fundamentais de IaC

  • Versionamento: O código de infraestrutura é armazenado em sistemas de controle de versão, como Git, permitindo rastrear alterações e colaboração entre equipes.
  • Imutabilidade: As alterações na infraestrutura são feitas substituindo componentes, em vez de modificá-los, reduzindo o risco de falhas e a complexidade do gerenciamento.
  • Infraestrutura declarativa: A infraestrutura é descrita em arquivos de configuração (ex: YAML), declarando o estado desejado, e as ferramentas de IaC cuidam do processo de implantação.
  • Testes e validação: O código de infraestrutura deve ser testado e validado antes da implantação, garantindo a qualidade e a conformidade com as políticas de segurança e governança.
  • Automação: As etapas de provisionamento, configuração e gerenciamento da infraestrutura são automatizadas, reduzindo o tempo de implantação e a possibilidade de erros humanos.

Ferramentas de IaC

  • Específica de provedor de nuvem

    • AWS CloudFormation;
    • Azure Resource Manager;
    • Google Cloud Deployment Manager.
  • Independente de provedor de nuvem

    • Terraform;
    • Pulumi.

Terraform

  • Terraform é uma ferramenta para construir, modificar e versionar infraestruturas de forma segura e eficiente.
  • Suporta múltiplas plataformas e provedores de serviços (AWS, Google Cloud, Azure, etc).

image

Demo

Para reproduzir, acesse: [https://github.com/mvneves/terraform- demo](https://github.com/mvneves/terraform- demo)

Observabilidade

  • Do Inglês, Observability e as vezes abreviado como O11y.
  • Observabilidade é a capacidade de entender o estado interno de um sistema, analisando sinais externos produzidos pelo mesmo.
  • Problema: aplicações executando na nuvem, de forma distribuída e em infraestruturas cada vez mais complexas e automatizadas.
  • Importante para identificar, diagnosticar e resolver problemas rapidamente.
  • Aumenta a eficiência, confiabilidade e segurança de sistemas.

Pilares da observabilidade

  • Métricas: Indicadores quantitativos que representam o estado e o desempenho do sistema. Exemplos incluem latência, vazão e taxa de erros.
  • Logs: Registros detalhados de eventos e interações do sistema, auxiliando na identificação de problemas.
  • Rastreamento: Permite acompanhar o caminho que uma requisição percorre pelos diferentes componentes de um sistema (distribuído).

Ferramentas de observabilidade

  • AWS CloudWatch: monitoramento e alerta de métricas, logs e eventos para aplicativos e serviços na AWS.
  • ELK Stack (Elasticsearch, Logstash, Kibana): solução popular para gerenciamento de logs e métricas.
  • Grafana: ferramenta de visualização e análise de dados para métricas e logs.
  • Datadog: plataforma de monitoramento e análise de desempenho em tempo real, com suporte para logs, métricas e rastreamento.
  • Sentry: plataforma de monitoramento de erros e exceções em tempo real que auxilia na identificação e rastreamento de problemas em campo.

Implantação de observabilidade

  • Desafios: Seleção das ferramentas adequadas, integração com sistemas e serviços na nuvem, escalabilidade e custo.
  • Melhores práticas para implementar observabilidade em sistemas na nuvem:
    • Definir metas e objetivos claros (O que eu quero observar?).
    • Selecionar e padronizar ferramentas e métricas.
    • Incentivar a colaboração entre as equipes envolvidas.
    • Monitorar e ajustar continuamente a estratégia de observabilidade.

Feedback contínuo

  • Feedback contínuo é o processo de coleta, análise e aplicação de informações para melhorar a qualidade e a eficiência do desenvolvimento e das operações de software.
  • Reduz riscos e erros, permitindo ajustes rápidos e melhorias no processo.
  • Facilita a colaboração e a comunicação entre as equipes de desenvolvimento e operações.
  • O feedback contínuo é uma parte essencial da abordagem de melhoria contínua em DevOps.

Implantação de feedback contínuo

  • Estabelecer uma cultura de abertura e transparência na comunicação.
  • Utilizar métricas e indicadores de desempenho para monitorar o progresso e identificar áreas de melhoria.
  • Integrar sistemas de monitoramento e alerta para identificar e resolver problemas rapidamente.
  • Realizar revisões de código e sessões de retrospectiva para discutir sucessos e áreas de melhoria.

Considerações finais

  • Estamos vivendo a era das coisas definidas por software

    • Ex: software-defined everything (SDN, SDS, SDDC, etc).
    • Importante aprender a "programar" a infraestrutura.
  • DevOps está eliminando a barreira entre infra e código (tanto de forma prática como cultural).

  • Dicas de como continuar os estudos:

    • Criar uma conta em um provedor nuvem (ex: AWS, Google, Linode, DigitalOcean, etc).
    • Reproduzir os roteiros apresentados nas aula.
    • Experimentar ferramentas e serviços por conta própria.

Resultado da prova

Em 31/01/2024 - Nota 10 - 1º