Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

DevOps & Docker com a stack Microsoft

208 views

Published on

Esta é uma introdução às práticas de DevOps com ênfase no lado técnico - conceitos, disciplinas, ferramentas e resultados.

Published in: Technology
  • Be the first to comment

DevOps & Docker com a stack Microsoft

  1. 1. DevOps & Docker Com a stack Microsoft Grazi Bonizi Sou Consultora DevOps e auxilio empresas durante seu processo de transformação digital. Coordeno a trilha de Arquitetura .Net no The Developers Conference, compartilho código no GitHub, escrevo no Medium, e participo de Meetups e PodCasts sobre DevOps, Azure, .Net, Docker e DDD https://twitter.com/grazibonizi https://github.com/grazibonizi https://medium.com/@grazibonizi https://www.linkedin.com/in/graziella-bonizi-b14835a0/ 1 2
  2. 2. Conteúdo Fundamentos do DevOps Introdução ao Docker Introdução ao Kubernetes Apresentando o Azure DevOps 3 DevOps é um assunto amplo, e envolve tanto um lado mais humano e cultural, quanto um lado técnico e mais prático. O conteúdo desta palestra é voltado para o lado prático, portando, além dos conceitos do DevOps, apresentarei os fundamentos de Docker e Kubernetes, relacionados à containerização e microsserviços, e também apresentarei a plataforma de DevOps da Microsoft, o Azure DevOps, antigo VSTS.
  3. 3. Por que DevOps? 4 • DevOps consiste em um conjunto de práticas para entregar software melhor e mais rápido. • Um dos pilares é a aproximação entre as áreas Desenvolvimento e Operações, tanto culturalmente, quanto por meio de tecnologias e ferramentas que atravessem ou reduzam esses limites. • Reduzindo o tempo entre o desenvolvimento e a entrega, é possível ter ciclos que favoreçam a aprendizagem validada, viabilizando maior integridade, segurança e eficiência nas entregas.
  4. 4. Disciplinas DevOps Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 5 • As disciplinas DevOps são as principais áreas que uma organização pode focar para entregar e sustentar uma solução com maior agilidade e eficiência. • Algumas envolvem uma quebra de paradigma, como Planejamento Ágil e Nuvens Híbridas, outras não necessariamente, como Infraestrutura como Código. • Algumas são mais subjetivas e podem surtir efeito a longo prazo, outras são mais práticas e de resultado concreto – com a implementação de integração e entrega contínuas (CI/CD), por exemplo, é possível reduzir deploys que demoravam horas a dias para serem executados manualmente a apenas alguns minutos. • Algumas afetam mais a área de Desenvolvimento, outras a de Operações.
  5. 5. Agile Planning Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 6 • Planejamento Ágil, ou Práticas Lean, envolvem um conjunto de processos e mudança de mindset para reduzir o ciclo de entregas e permitir a aprendizagem validada. Kaban, Scrum, CMMI ou outras frameworks de trabalho podem ser utilizadas. • Essa disciplina se torna bem desafiadora por trazer um impacto direto na cultura da empresa, inclusive na forma em que a contratação de desenvolvimento de software é realizada – por escopo e/ou por prazo. • É importante abordar esta disciplina, porém insistir nela quando há uma resistência muito forte pode trazer o efeito oposto ao que se busca, causando desgaste entre as pessoas, impactando os prazos e diminuindo a qualidade das entregas. Jeff Ries fala sobre isso em seu artigo “Developers should abandom Agile”, disponível no link https://ronjeffries.com/articles/018-01ff/abandon-1/
  6. 6. Agile Planning 7 Independente de usar ou não alguma framework Ágil, o planejamento, distribuição e acompanhamento de atividades deve ser realizado. A ferramenta de apoio deve permitir • Organizar e distribuir tarefas • Garantir a visibilidade do andamento do projeto • Trazer indicadores para viabilizar a aprendizagem validada das entregas
  7. 7. Version Control Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 9 Versionamento de código é uma disciplina que a maioria das empresas já atua em algum nível. É muito claro que o código precisa ser versionado, porém alguns pontos muitas vezes não são abordados com os devidos cuidados: • Mesmo que haja apenas um desenvolvedor trabalhando no código, ele precisa ser versionado, desde suas primeiras linhas • Demos, samples e scripts utilitários também deveriam ser versionados em um repositório apropriado – você nunca sabe quando irá precisar deles • Scripts de banco e de automação de infraestrutura também são código, portanto deveriam ser versionados • O time deve conseguir recuperar determinada versão de código facilmente – por exemplo, o que está em produção, ou a versão anterior
  8. 8. Version Control 10 • Hoje, a ferramenta mais sólida e aceita no mercado para versionamento é o Git • Controle de Versão não se trata apenas de armazenamento e histórico – afeta diretamente como a equipe trabalha • Para isso, defina estratégias de branches, ou ramificações de código, para que o time possa trabalhar isoladamente sem sobreescrever o trabalho um do outro • Permita que o time revise o código antes de disponibilizá-lo, com estratégias de pull requests e branch policies • É importante utilizar ferramentas que permitam vincular o código desenvolvido à tarefas planejadas para permitir o rastreamento (ex: vincular o ID de um commit com o ID de uma tarefa)
  9. 9. Continuous Integration Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 12 Continuous Integration é uma disciplina chave para o DevOps. Com ela são implementadas ferramentas e automações para garantir que o código no servidor esteja sempre íntegro e pronto para ser obtido por alguém da equipe ou deployado em algum ambiente.
  10. 10. Continuous Integration 13 As ferramentas de CI fornecem o feedback rápido se o código que está sendo enviado manteve os critérios definidos pela equipe em relação à integridade, por exemplo • Compila? • Atende a padronização especificada? • Os testes unitários / integração / aceitação foram bem sucedidos? • Os testes unitários atendem a taxa mínima de cobertura de código? • Está protegido contra vulnerabilidades conhecidas?
  11. 11. Continuous Integration 14 A esteira, ou pipeline de build / CI, consiste normalmente nos seguintes passos • Obtenção do código em um local “limpo”, sem configurações prévias de dependências de aplicação (ex: se um programador novo clonar o repositório e executar algum script de inicialização, será o suficiente para que o código compile? Ou será necessária alguma operação manual?) • Compilação • Execução das etapas de validação de integridade (testes, análise estática de código) • Geração do artefato (também chamado de “Build” ou “Pacote”) • Publicação do artefato em um repositório centralizado
  12. 12. Continuous Integration 15 • Uma das premissas do processo de Integração Contínua é a geração de um artefato imutável. O artefato, que pode ser por exemplo um executável, um conjunto de dll’s, páginas web ou scripts, quando combinado com as configurações de um ambiente, é um release em potencial neste ambiente • Se o artefato permitir alterações, não há a garantia de que o que foi validado em um ambiente será o mesmo conteúdo a ser publicado no próximo ambiente • Mais informações sobre como lidar com artefatos e arquivos de configuração podem ser vistas no • https://12factor.net/build-release-run • https://12factor.net/config
  13. 13. Continuous Delivery Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 17 • Continuous Delivery é o conjunto de processos e ferramentas que permitem que o produto seja entregue no ambiente de destino automaticamente, isto é, sem necessidade de intervenção manual. • Essa disciplina traz efeitos imediatos na velocidade de entrega da empresa ou organização. Aproxima as áreas de Desenvolvimento e Operações, permitindo que os desenvolvedores se foquem na entrega das soluções de ponta a ponta, e operadores foquem na sustentação e crescimento dos ambientes e plataforma.
  14. 14. Continuous Delivery 18 • As ferramentas de automação de esteira de deploy devem permitir configurar fluxo de aprovação, deploy em horários agendados, pré e pós condições • Continuous Delivery significa que toda versão estável de código é um release em potencial • Continuous Deployment significa que toda versão estável será disponibilizada
  15. 15. Continuous Delivery 19 Exemplo de pipelines de Build e Release combinadas: • Determinado commit dispara um processo de build, gerando um artefato. • A cada estágio da esteira (DEV, BETA e PROD) o artefato é combinado com a configuração deste ambiente e entregue • As entregas ficam mais velozes, menos sujeitas a falhas humanas, e o fluxo de aprovação tem mais credibilidade
  16. 16. Public & Hybrid Clouds Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 21 O uso de nuvens públicas ou híbridas está para a área de Infraestrutura como o CI/CD para a área de Desenvolvimento. Enquanto com o CI/CD é possível reduzir o tempo de deploy de aplicações de dias para minutos, com os grandes provedores de nuvens públicas, como a Azure, AWS e Google Cloud Platform, é possível reduzir o tempo de provisionamento de recursos de semanas para horas ou minutos.
  17. 17. Public & Hybrid Clouds 22 Para ilustrar o impacto da utilização de nuvens públicas em uma organização, pense no seguinte cenário: uma empresa fornece uma solução que foi muito bem aceita no mercado, e passou a ter um crescimento exponencial de usuários, exigindo uma expansão de recursos. • Datacenter On Premises: Caso a infraestrutura da solução esteja em um datacenter local, será necessário adquirir mais hardware. Em um processo tradicional, o responsável pela infra fará uma requisição de compra, que passará por uma série de etapas até ser aprovada. O hardware será entregue no estabelecimento, e precisará ser configurado para ficar disponível. Isso supondo que o datacenter suporte fisicamente a expansão de hardware. Caso contrário, será necessário montar um outro datacenter ou migrar para uma área maior, com resfriamento, no-breaks, e talvez implique até na contratação de mais pessoas para suportá-lo 24/7. Isso pode demorar semanas ou até meses. • Nuvem Privada: Esse processo é reduzido a abrir um chamado com o fornecedor e aguardar o cumprimento do SLA, que pode durar horas ou poucos dias. • Nuvem Híbrida: Provedores como o Azure fornecem portais e ferramentas em que é possível solicitar diretamente o recurso e tê-lo disponível em minutos.
  18. 18. Public & Hybrid Clouds 23 • Utilizar nuvens públicas pode implicar em uma quebra de paradigma, principalmente se a organização lida com dados altamente confidenciais, como financeiros ou judiciais. Porém as nuvens públicas possuem mais certificados de segurança, alta disponibilidade e eficiência no atendimento do que a maioria das nuvens privadas, quanto mais em relação à datacenters on premisses. • Conheça mais sobre os Azure Datacenters com esta curta demonstração: https://channel9.msdn.com/Blogs/Azure/Azure-Datacenter-Video
  19. 19. Monitoring & Logging Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 25 • DevOps não diz respeito apenas ao desenvolvimento e deploy de software, e sim a práticas que permitem o crescimento sustentável da solução em todo o seu ciclo de vida. Isso inclui ferramentas de logging e monitoramento em diversos níveis. • Informação consistente, atual e disponível é um pilar para a aprendizagem validada.
  20. 20. Monitoring & Logging 26 O monitoramento pode ser aplicado em vários níveis: • Infraestrutura: Acompanhe o uso de CPU, disco e memória do servidores e rede, identifique falhas e faça projeções para o aumento de capacidade de acordo com o uso • Aplicação: Acompanhe o consumo dos serviços, identifique falhas e tenha acesso aos logs para maior agilidade no troubleshoot • Comportamento de usuários: Obtenha feedback sobre as features da solução, e identifique quais áreas são mais utilizadas e o grau de satisfação
  21. 21. Infrastructure as a Code Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 28 Infrastrutura como código é transformar o provisionamento e/ou configuração de recursos em scripts que podem ser versionados e até testados.
  22. 22. Infrastructure as a Code 29 • Com a infraestrutura como código, é possível guardar os pré requisitos de determinado ambiente para que seja possível recriá-lo sempre que necessário. • Isso aumenta a velocidade no provisionamento de recursos e diminui as chances de falha humana. Aliando essa prática à utilização de nuvens públicas, é possível criar múltiplos recursos com a mesma configuração, em um intervalo de minutos. • “Servers are not pets” – essa frase mostra uma quebra de paradigma ao se considerar um servidor On Premises configurado manualmente, em que há a preocupação em mantê-lo operacional, e servidores criados via script na nuvem, que podem ser descartados e recriados facilmente.
  23. 23. Containers Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 31 A utilização de containers abstrai claramente alguns princípios do DevOps de aproximação entre as áreas de Desenvolvimento e Infraestrutura. Com containers, o que é entregue é todo um ambiente, desde o sistema operacional até a aplicação pronta para ser executada, ao invés de apenas os binários e arquivos da aplicação.
  24. 24. Containers 32 • O problema mais clássico que a utilização de containers reduz é o famoso “funciona na minha máquina”. O ambiente de produção é diferente do ambiente de homologação, por sua vez, diferente do ambiente de desenvolvimento. Até a máquina de um desenvolvedor é diferente da máquina do outro. Sem algum nível de isolamento, a aplicação pode depender de recursos que estão pré-configurados na máquina, que podem não ser compatíveis em outros ambientes. • O container provém esse isolamento. A aplicação fica dentro de uma estrutura semelhante à uma máquina virtual, porém muito mais leve, possibilitando que todos os pré-requisitos de software e dependências da aplicação estejam contidas dentro dessa estrutura, independente da configuração do ambiente em que o container está rodando.
  25. 25. • Em 2020, mais de 50% das empresas irão rodar aplicações críticas, conteinerizadas e nativas para a nuvem em produção, comparando com os menos de 5% de hoje. – Gartner • Docker é a plataforma mais bem sucedida e aceita de containers no Mercado • Suporte a containers Windows e Linux Por que Docker? 33 Docker é uma plataforma open source de containers, a mais aceita no mercado. Já deixou de ser uma novidade e é hoje uma solução consolidada
  26. 26. Dockerfile Imagem Container Elementos 34 Para entender mais sobre Docker, é importante estar familiarizado com os seguintes termos: • Dockerfile: conjunto de instruções de criação e configuração do ambiente • Imagem: binários compactados de forma a serem armazenados e transportados • Container: imagem em execução
  27. 27. Dockerfile Imagem Container Elementos 35 Uma analogia que pode ajudar a compreender o que representam esses termos: • Dockerfile: receita de bolo • Imagem: mistura para bolo • Container: o próprio bolo 
  28. 28. Sistema Operacional Middleware Dependências de aplicação Web Server Aplicação Comando de inicialização Debian DotnetCore Runtime Pacotes Nuget Kestrel Binários e arquivos estáticos dotnet app.dll Estrutura comum de um Dockerfile 36 Um exemplo de aplicação containerizada na estrutura de um Dockerfile, desde o SO até o comando que será executado quando o container for inicializado. Atenção para o ponto em destaque – em um contexto tradicional, o que é entregue é um pacote com os binários e arquivos estáticos da aplicação. No contexto de aplicações containerizadas, todo o restante também é fornecido
  29. 29. FROM microsoft/dotnet:sdk AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM microsoft/dotnet:aspnetcore-runtime WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "aspnetapp.dll"] 37 Exemplo de um dockerfile
  30. 30. Microservices Agile Planning Version Control Continuous Integration Continuous Delivery Public & Hybrid Clouds Monitoring & Logging Containers Microservices Infrastructure as a Code 40 Microsserviços é um conceito muito atual no mercado. Quando aplicado de maneira adequada, permite o crescimento sustentável e maior escalabilidade de soluções complexas, porém aumenta o grau de complexidade do gerenciamento da solução como um todo. Antes de mais nada, é importante frisar: uma aplicação monolítica ou um conjunto pequeno de serviços normalmente é o suficiente para atender um produto. Não aplique o conceito de microsserviços sem haver a real necessidade disso.
  31. 31. Microservices 41 • A principal diferença entre uma aplicação monolítica de uma solução em microsserviços é que o desenvolvimento não é apenas distribuído, mas independente. Pense ainda que é uma única solução, mas com componentes cujo ciclo de vida é individual. • Isso adiciona a complexidade técnica de gerenciar dezenas ou centenas de repositórios e esteiras de deploy, além da complexidade de versionamento/ compatibilidade e dificuldade de realizar testes integrados. • Porém é possível lidar com serviços mais críticos de maneira diferenciada. Para um e- commerce durante a Black Friday, é necessário escalar os serviços de autenticação e carrinho de compras, mas não o de cadastro de produtos novos, por exemplo. Não só em relação à escalabilidade, é possível utilizar tecnologias mais adequadas em aplicações de alta performance, definir os times de desenvolvimento de maneira coerente à complexidade do serviço e outras práticas que o desenvolvimento distribuído permite.
  32. 32. • Plataforma completa para publicação e gerenciamento de serviços, oferecendo alta disponibilidade, autocura • Gerenciamento de comunicação externa e interna dos containers • Gerenciamento de configurações e senhas • Coleta e centraliza logs • Facilida a gestão de elasticidade e escalabilidade das aplicações Por que Kubernetes? 42 • Quando se fala em Microsserviços, podem haver dezenas ou centenas de serviços se comunicando para atender uma solução de negócio. Alguns deles podem ser acessados externamente, como o frontend de um e-commerce ou uma API de produto, e outros se comunicam apenas internamente. O grau de criticidade e disponibilidade pode ser diferente, alguns podem exigir mais processamento que outros… • O Kubernetes é uma plataforma desenhada para o gerenciamento de containers em um cenário de Microsserviços. • A plataforma permite gerenciar cenários complexos de uma maneira muito mais simples, comparando com configurações.
  33. 33. 43 • Um cluster Kubernetes normalmente é composto por um ou mais servidores master e dois ou mais nodes. O master é responsável pela orquestração e gerenciamento, e os containers e outros recursos são executados dentro dos nodes. É possível dividir de maneira lógica o cluster em ambientes – (DEV, HML e PROD), mas sem se preocupar necessariamente com a divisão física, isto é, que nodes atendem DEV, HML ou PROD. • Isso por padrão não importa para a plataforma – a divisão lógica, também chamada de Namespace, é isolada por natureza. • O mesmo namespace utilizar recursos de nodes distintos permite que, caso um node fique indisponível, os recursos dele sejam realocados nos outros sem comprometer a disponibilidade da solução.
  34. 34. Secrets Config Maps App 1 Registry App 2 Storage 44 • Em um namespace há tudo que é necessário para a execução das aplicações – repositório de imagens docker, configurações, segredos, armazenamento, permissões, logs, e as aplicações em si. • É possível criar ambientes para representarem o fluxo de validação tradicional (ex: DEV / HML / PRD), ou criá-los sob demanda. • Em resumo, quando se trata de containers e microsserviços, o Kubernetes é uma das plataformas mais consolidadas no Mercado para o gerenciamento de aplicações.
  35. 35. MS Outros Git source control Azure DevOps Bitbucket, GitLab Agile Planning Azure DevOps Jira, Trello CI/CD Azure DevOps Bamboo, Jenkins Wiki Azure DevOps Confluence Package Management Azure DevOps Nexus Monitoring Application Insights Kibana, New Relic Tests Azure DevOps ALM Container Registry Azure Container Registry Docker Hub Kubernetes Platform Azure Kubernetes Service Openshift Comparativo de ferramentas 47 O Azure DevOps reúne os principais recursos para viabilizar a implementação do DevOps em uma organização. Combinado com outros recursos do Azure, como o Application Insights, Container Registry e o AKS, é possível contemplar todas as práticas mencionadas nesta apresentação, de forma moderna, intuitiva e integrada.
  36. 36. • Introdução ao DevOps: https://docs.microsoft.com/en-us/azure/devops/what-is-devops • Podcast sobre Kubernetes: https://www.lambda3.com.br/2018/04/lambda3-podcast-94- kubernetes/ • 12-Factor App: https://12factor.net/ • Developers should abandom Agile: https://ronjeffries.com/articles/018-01ff/abandon-1/ Aprofunde seus conhecimentos 48
  37. 37. Grazi Bonizi https://twitter.com/grazibonizi https://github.com/grazibonizi https://medium.com/@grazibonizi https://www.linkedin.com/in/graziella-bonizi-b14835a0/ 49

×