Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prá$cas DevOps Marco Mendes Pipelines DevOps Marco Mendes Pipelines DevOps Pipelines DevOps Mecanismos automa-zados para reduzir o tempo de entrega de demandas, aumentar o feedback entre pessoas e também habilitar experimentos e inovações. Exemplo simples de pipeline CI Build automa+zado Testes automatizados Entrega no ambiente de testes Outro exemplo de pipeline Provisionamento de ambientes Provisiona ambiente com o Docker Publica aplicação em contêiner Docker Habilita contêiner em ambiente de produção Um terceiro exemplo de pipeline SecOps Iden:fica ambientes com vulnerabilidades Aplica patch de segurança de forma automa:zada Gera dados analíticos para time de segurança Linhas de montagem DevOps As linhas de montagem DevOps estão focadas em automa7zar e conectar a7vidades realizadas por várias equipes Exemplos: Builds para desenvolvedores, provisionamento de infraestrutura e gerenciamento de configuração para operações, teste de automação para teste, patch de segurança para SecOps, portais de aprovação e versionamento semân7ca para gerentes de liberações e assim por diante. Bene:cios de negócio de pipelines e linhas de montagem (01/02) Ga#lhos automá#cos ou aprovação manual entre pipelines ou centros de trabalho. Métricas e análises em pipelines para ajudar a iden#ficar gargalos. Visibilidade em cada pipeline ou centros de trabalho Trilhas de auditoria Bene:cios de negócio de pipelines e linhas de montagem (02/02) Redução do tempo de execução para executar as tarefas nos centros de trabalho Capacidade de definir facilmente fluxos de trabalho em vários pipelines Automação da infraestrutura de DevOps, incluindo VMs e containers Capacidade de transmi7r estado e outras informações (feedback e feedforward) Resumo • Mecanismos automa#zados para reduzir o tempo de entrega de demandas, aumentar o feedback entre pessoas e também habilitar experimentos e inovações. • Experimente e crie pipelines diversos conforme as necessidades de automação. • Oriente seus pipelines pelos fluxos de valor. Automação de Builds e Integração Contínua (CI) Marco Mendes Times tradicionais Passam a maior parte do tempo de um projeto com o software sem funcionar. Operam durante muito tempo com códigos isolados. Adiam tarefas de integração e testes de aceite para o final do projeto. A automação de builds é prática essencial para garantir que os executáveis dos seus produtos sejam gerados de forma consistente, em base diária. Esta prática busca evitar o problema comum do código funcionar apenas máquina do desenvolvedor. A automação de builds externaliza todas as dependências de bibliotecas e con7igurações feitas dentro de uma IDE para scripts e que possa ser consistentemente executado por robôs. Ela é pilar básico para avançarmos em direção a 7luxos de CI Exemplo de Automação de Builds Código Fonte 1 2 3 Embora a automação de builds, na sua definição inicial, lide apenas com a construção de um build, a prática comum de mercado é que builds devam executar um conjunto mínimo de testes de unidade automatizados (smoke tests) para estabelecerem confiabilidade mínima ao executável sendo produzido. Frequência de Geração de Builds Processos Técnicos Automatizados Integração Contínua Ausência de automação de builds Automação de Builds em Estabelecimento Requisitos para a Gestão de Builds Acordos entre o time Gestão de configuração Compilação automatizada Checkins diários de código Testes de unidade automa=zados Suíte abrangente de testes Processo leve de compilação e testes Caso real: Ferramenta antes da cultura • Inovação trazida de forma unilateral pelo “cara mais esperto na sala” • Time de desenvolvimento ainda sem maturidade em gestão de configuração e automação de testes. • Esforços de builds automatizados fracassaram e eventualmente foram abortados pelo gestor. Caso real: Ferramenta com a cultura • Testes de unidades foram estabelecidos e aprimorados como prática do time. • Durante 9 meses, o time de quase 15 pessoas cresceu a linha base de testes de unidade para quase 5000 testes automatizados. • Pipelines DevOps com automação de builds foram desenvolvidos e se expandiram para rodar em troncos específicos na gestão de configuração, em base diária e depois em múltiplas vezes por dia. Ferramentas CNCF para CI h"ps://landscape.cncf.io Resumo • Automação de Builds é prá#ca popular e essencial em implementações DevOps • Elas fornecem consistência e disciplina para #mes de desenvolvimento. Automação de Testes Marco Mendes Automação de testes é peça fundamental nos processos DevOps #1 – O que deve ser automaIzado? Conceito: Pirâmide de testes Fonte: mar.nfowler.com/bliki/TestPyramid.html #1 – O que deve ser automatizado? Conceito: Pirâmide de testes para microsserviços Fonte: h>ps://mar.nfowler.com/ar.cles/microservice-tes.ng #2 – Teste em Produção? Sim, com testes de fumaça Pareamento com o time de desenvolvimento, mais que trabalho isolado para pegar defeitos. #3 – Como devemos investir o tempo do time de testes? #4 - Testes automa@zados devem ser incluídos em pipelines DevOps Resumo • Testes automa#zados são a fundação do segundo caminho DevOps. • Eles fornecem feedback instantâneo e aumentam a segurança psicológica para criar entregas mais frequentes e consistentes Automação de Entregas Marco Mendes A automação das entregas é uma prá5ca que buscar garan5r que o processo de promoção do executável para os ambientes de testes, homologação e produção sejam automa5zados e assim tornados consistentes e eficientes. Be ne $c io s reduzir o tempo para entregar um novo build em ambiente de produção através da automação da instalação e configuração de ferramentas e componentes arquiteturais; reduzir erros em implantação causadas por parâmetros específicos que não foram corretamente configurados pelos +mes de desenvolvimento e operações minimizar a fricção entre os +mes de desenvolvimento, QA e operações prover confiabilidade e segurança no processo de implantar aplicações A automação de entregas é prática essencial para garantir que os executáveis dos seus produtos sejam promovidos de forma consistente entre ambientes, em base diária. A automação de entregas não deve “compilar” o código fonte. Ela deve promover o builds com a recon<iguração variáveis de ambientes e outras informações de parâmetros conforme o desejo. A automação de entregas pode incluir solicitações de aprovação pré-implantação e pós-implantação. Isso automatiza processos de gestão de mudanças em organizações que usem ITIL. Exemplo de Automação de Entregas 1 2 Promoção para homologação e aprovação pós-publicação pelo time de testes. Aprovação pré-publicação e promoção para ambiente de produção pelo gestor. 3 Builds são coletados de ambientes de integração (staging areas) Frequência de Promoção de Builds Processos Técnicos Automatizados Entrega Contínua (CD) Promoção de builds manual e demorada Promoção de Builds em Estabelecimento Ferramentas CNCF para CD h"ps://landscape.cncf.io Ferramentas CNCF para CD h"ps://landscape.cd.founda2on Resumo • Automatizar a promoção de builds é essencial para reduzir a fricção entre times de desenvolvimento e operações. • É pratica chave e praticamente batizou o termo DevOps em 2009. • Empresas como Amazon e várias outras no Brasil usam essa prática com grande impacto econômico. Entrega ConBnua versus Implantação ConBnua Marco Mendes Entrega Contínua (Continuous Delivery) • A entrega contínua realiza a promoção automatizada entre ambientes de desenvolvimento. • Exemplos: ambientes de testes integrado ou ambientes de homologação Entrega Contıńua (Continuous Delivery) Na entrega contı́nua, entretanto, a etapa de publicaçãopara o ambiente de produção requer aprovação humana, em conformidade por exemplo com regulatórios exigidos por ITIL. Implantação Contıńua (Continuous Deployment) Com a entrega contínua implantada, é possível automatizar até mesmo a transferência de objetos para a produção. Isso é desejado em ambientes altamente dinâmicos como startups e aplicações que não estejam submetidas a elementos regulatórios de ITIL. Ou organizações que possuem implementações avançadas de gestão de mudanças no ITIL. Fonte: puppet.com/blog/con1nuous-delivery-vs-con1nuous-deployment-what-s-diff Atenção aos bancos de dados • Automatizar a promoção de builds também deve considerar a promoção de scripts de banco de dados e até mesmo o transporte de dados de configuração. • Ignorar o processo de automação nas bases de dados criam processos flácidos de entrega contínua. Atenção aos testes • Toda promoção de ambientes deve incluir processos de verificação da estabilidade. • Testes pós-implantação e testes de fumaça são práPcas comuns para criar pipelines de entrega robustos. Atenção aos processos de reversão • Testes que falham implicam na reversão do ambiente ao seu estado prévio. Integração Contínua, Entrega Contínua e Implantação Contínua A integração contínua (Continuous Integration) é o processo contínuo de compilar o código em ambiente limpo, rodar testes e outros processos de qualidade e gerar um build, disparado por commits em algum branch do repositório de código. A entrega contínua (Continuous Delivery) habilita a promoção contıńua de builds para ambientes na sua TI A implantação contínua (Continuous Deployment) habilita a promoção contıńua de builds para ambientes de produção. Resumo • A frequência de automação de entregas (CD) deve atender as expecta;vas de negócio e podem variar conforme segmento (ex. varejo ou engenharia automa;va) • CD deve incorporar processos de testes pós-implantação • CD pode significar Entrega ConDnua ou Implantação ConDnua. • Processos de gestão de mudanças com ITIL são elementos crí;cos para discu;r Automação de Ambientes e Infraestrutura como Código (IaC) Marco Mendes O primeiro caminho do DevOps Para maximizar o fluxo, precisamos tornar o trabalho visível, reduzir o tamanho dos lotes e os intervalos de trabalho, aumentar a qualidade evitando que os defeitos sejam passados para os centros de trabalho mais à direita e otimizar constantemente as metas globais. O primeiro caminho do DevOps As prá'cas resultantes incluem processos con2nuos de construção, integração, teste e implantação; criando ambientes sob demanda; limitando o trabalho em progresso (WIP); e construir sistemas e organizações que sejam seguros para mudar. Mas.. o trabalho tradicional da infraestrutura 7sica em muitas empresas é moroso e repe;;vo. Disponibilização de so0ware em produção Até pouco tempo atrás, a única forma de disponibilizar software em produção era através de acesso de trabalho manual de: • Provisionamento manual de hardware • Instalação manual de SOs e servidores • Configuração manual de aplicativos O surgimento de tecnologias de virtualização como Hypervisor e programas como o VMWare e VirtualBox começou a facilitar a administração de servidores. Fonte: h)ps://www.docker.com/blog/top-ques:ons-docker-kubernetes-compe:tors-or-together/ Virtualização de Ambientes Ainda assim, você precisa fazer muita coisa. A instalação e con:iguração de muitos aplicativos continua manual, mesmo emmáquinas virtuais. Entram em cena os contêineres • Produtos como o Docker foram criados a par2r da evolução de conceitos existentes no Unix nos úl2mos 30 anos • 1979 - chroot system calls • 2000 - Free BSD Jails • 2001 - Linux Vservers • 2004 - Solaris Containers • 2006 - Cgroups (Control Groups) • 2013 - Docker h)ps://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016 Contêineres • São um método de virtualização em nı́vel de sistema operacional que permite executar uma aplicação e suas dependências como processos e com recursos isolados que simulam uma máquina virtual. • Permitem empacotar facilmente o código, as conIigurações e as dependências de uma aplicação em elementos fundamentais que oferecem consistência ambiental, eIiciência operacional, produtividade de desenvolvedores e controle de versões. Contêineres • Podem ajudar a garantir rapidez, conCiabilidade e consistência de implantação, independentemente do ambiente de implantação. • Além disso, eles oferecem um controle mais granular dos recursos, aumentando a eCiciência da infraestrutura. Fonte: h)ps://www.docker.com/blog/top-ques:ons-docker-kubernetes-compe:tors-or-together/ Conteinerização de Ambientes O Docker é uma tecnologia Open Source que permite criar, executar, testar e implantar aplicações distribuıd́as dentro de containers de software. Ele permite que você empacote um software de uma padronizada para o desenvolvimento de software, contendo tudo que é necessário para a execução: código, runtime, ferramentas, bibliotecas, etc. O Docker permite que você implante aplicações rapidamente, de modo conIiável e estável, em muitos ambientes virtuais e fıśicos. Exemplo de como “instalar e rodar” o mysql com o apoio do Docker > docker pull mysql > docker run mysql Orquestração de Ambientes A grande popularidade de contêineres começa a criar fazendas com muitos contêineres para administração pelos times de produção. Orquestradores de contêineres se tornam populares Docker Swarm e o Kubernetes Fonte: h)ps://www.docker.com/blog/top-ques:ons-docker-kubernetes-compe:tors-or-together/ Orquestração de Ambientes Ferramentas de Provisionamento Automação e Configuração de Ambientes hUps://landscape.cncf.io Ferramentas com Suporte a Kubernetes hUps://landscape.cncf.io Resumo • Automação de ambientes com virtualização, contêineres e orquestradores habilitam infraestrutura como código. • Ferramentas como Docker e Kubernetes se popularizam na TI e reduzem muito esforço manual de provisionamento de ambientes. Engenharia do Caos Marco Mendes Os macacos do caos da NeWlix h=ps://github.com/Ne?lix/chaosmonkey Engenharia do Caos • "Precisamos iden.ficar fragilidades antes que elas se manifestem em comportamentos aberrantes em todo o sistema. Devemos lidar com as fraquezas mais significa.vas de forma proa.va, antes que afetem nossos clientes na produção. Precisamos de uma maneira de gerenciar o caos inerente a esses sistemas, aproveitar o aumento da flexibilidade e velocidade e ter confiança em nossas implantações de produção, apesar da complexidade que eles representam." • hCp://principlesofchaos.org Exemplos de Estressores • Injeção de latência na chamada de APIs •Aumento da carga de um processador • Interromper conexões de rede • Terminar um contêiner. O processo de Engenharia do Caos 1. Comece definindo o "estado estável" como uma saída mensurável de um sistema que indica um comportamento normal. 2. A hipótese de que este estado estável con=nuará tanto no grupo controle quanto no grupo experimental. 3. Introduza variáveis que refletem eventos do mundo real, como servidores que falham, discos rígidos que funcionam mal, conexões de rede que são cortadas, etc. 4. Tente refutar a hipótese procurando uma diferença de estado estável entre o grupo controle e o grupo experimental. Engenharia do Caos hUps://landscape.cncf.io "Sistemas an5frágeis se tornam cada vez melhores e mais fortes sob ataques e erros conJnuos", Nicholas Taleb Fonte: Marco Mendes Resumo • Engenharia do caos é prá#ca avançada para experimentar um sistema a fim de construir confiança na capacidade do sistema de suportar condições turbulentas na produção. Observabilidade e Análise Marco Mendes Observabilidade e Análise • O processo de administração de ambientesde produção tem se automa#zado. • As tecnologias para monitoração, registro (logging) e rastreamento permitem observar e analisar eventos diversos em ambientes de so]ware, banco de dados, infraestrutura, eventos de negócio. • Análise de tendências, correlações complexas e capacidade de antecipação também tem sido incorporadas a tecnologias de análise de ambientes. Ferramentas para Monitoração hUps://landscape.cncf.io Ferramentas para Registro (logs) hUps://landscape.cncf.io Ferramentas para Rastreamento (tracing) hUps://landscape.cncf.io Observabilidade é função dos Imes de desenvolvimento e qualidade também • Processos de observabilidade nascem ainda com os #mes de desenvolvimento. • Uma boa arquitetura técnica para geração de registros (logs) é essencial para facilitar a análise de problemas e incidentes em produção. Resumo • Capacidades analí#cas de observabilidade são essenciais para operar ambientes complexos em produção. • Observabilidade pode se dar através de monitoração, registro e rastreamento. • Observabilidade se inicia com boas arquiteturas técnicas de registros (logs).
Compartilhar