Escolar Documentos
Profissional Documentos
Cultura Documentos
Fundamentos de DevOps e SRE
Fundamentos de DevOps e SRE
by ChatGPT
DevOps e SRE (Site Reliability Engineering) são duas abordagens importantes para a entrega de
software de alta qualidade e confiabilidade. Ambas surgiram como uma resposta às
necessidades dos desenvolvedores de software que precisavam entregar rapidamente novos
recursos e atualizações aos usuários, ao mesmo tempo em que garantiam a estabilidade e
disponibilidade do sistema.
Na prática, o DevOps e o SRE trabalham juntos para garantir que os sistemas de software sejam
desenvolvidos, entregues e operados com eficiência. Os desenvolvedores criam o código e os
SREs garantem que o código seja implantado e executado de maneira confiável.
Um exemplo de como o DevOps e o SRE trabalham juntos na prática é a entrega contínua. Nesse
processo, o código é testado e implantado em um ambiente de produção em um ritmo
constante, permitindo que os desenvolvedores entreguem novos recursos aos usuários
rapidamente. O SRE garante que a implantação seja bem-sucedida e que o sistema permaneça
confiável e disponível para os usuários finais.
Em resumo, DevOps e SRE são fundamentos críticos para a entrega de software confiável e de
alta qualidade. Ao colaborar de perto, as equipes de desenvolvimento e operações podem
entregar produtos com mais eficiência e garantir que os usuários finais recebam um serviço
confiável e disponível.
Integração Contínua e Entrega Contínua (CI/CD): ferramentas como Jenkins, GitLab CI/CD e
Travis CI ajudam a automatizar o processo de compilação, teste e implantação de software,
permitindo que as equipes entreguem novos recursos aos usuários rapidamente.
Além disso, o DevOps e o SRE envolvem uma série de práticas e abordagens que ajudam a criar
uma cultura de colaboração e responsabilidade compartilhada. Algumas dessas práticas
incluem:
Dica de Laboratório: O Chef oferece tutoriais e documentação para iniciantes. Experimente criar
uma receita simples que instale e configure um pacote de software em um servidor Linux.
Dica de Laboratório: O Puppet oferece uma ampla documentação e uma comunidade ativa.
Experimente criar uma manifestação simples que instale e configure um pacote de software em
um servidor Linux.
Ansible: O Ansible é uma ferramenta de automação de infraestrutura que usa linguagem YAML
para definir e gerenciar a configuração do sistema. O Ansible é conhecido por sua simplicidade
e facilidade de uso, pois não requer a instalação de agentes nos servidores e pode ser usado
para configurar servidores Windows e Linux. O Ansible também pode ser usado para provisionar
servidores em nuvem, como AWS e Azure.
Aqui está uma análise comparativa das três ferramentas de automação de infraestrutura mais
populares: Chef, Puppet e Ansible. Para ajudar a comparar as ferramentas, compilamos uma
tabela que destaca as funcionalidades de cada uma.
Como podemos ver na tabela, as três ferramentas têm muitas funcionalidades em comum.
Todas são usadas para gerenciar a configuração, o estado e o provisionamento do sistema. Além
disso, todas têm suporte para gerenciamento de pacotes, conformidade e nuvem.
No entanto, existem algumas diferenças importantes entre as ferramentas. O Chef usa a
linguagem Ruby para definir as configurações, enquanto o Puppet usa a Puppet DSL e o Ansible
usa YAML. Além disso, o Chef usa uma arquitetura cliente-servidor e requer um agente nos
servidores gerenciados, enquanto o Puppet e o Ansible usam uma arquitetura agentless.
Ferramentas Alternativas:
Juju: O Juju é uma ferramenta de orquestração de aplicativos que permite implantar e gerenciar
aplicativos em diferentes nuvens e sistemas operacionais.
Cada uma dessas ferramentas de automação de infraestrutura tem suas próprias vantagens e
desvantagens. É importante avaliar as necessidades e requisitos do seu projeto antes de
escolher uma ferramenta.
PRÁTICA LABORATORIAL
Para obter mais experiência prática com essas ferramentas, recomendamos que você configure
um laboratório e crie uma infraestrutura de teste usando uma ou mais dessas ferramentas. Aqui
estão algumas dicas para ajudá-lo a começar:
Escolha uma ou mais ferramentas: Com base nas necessidades do seu projeto, escolha uma ou
mais ferramentas de automação de infraestrutura para experimentar. Comece com uma única
ferramenta e adicione outras à medida que você ganha experiência.
Instale as ferramentas: Siga as instruções de instalação fornecidas por cada ferramenta para
configurar um ambiente de teste. Você pode usar uma máquina virtual ou um servidor de teste
dedicado para isso.
Crie configurações de teste: Crie configurações de teste simples usando a linguagem de
configuração da ferramenta escolhida. Comece com uma configuração básica, como instalar um
pacote, e depois aumente a complexidade à medida que você ganha experiência.
Experimente outras ferramentas: Depois de ganhar experiência com uma ou mais ferramentas,
experimente outras ferramentas de automação de infraestrutura para comparar e contrastar as
funcionalidades e recursos.
Cenário: Sua empresa está implementando uma solução de BPM e Gestão de Protocolos para
gerenciar o fluxo de trabalho e processos internos. Você foi designado para liderar a equipe de
implementação e escolheu Ansible como a ferramenta de automação de infraestrutura para
gerenciar a infraestrutura necessária para a solução.
Passos a seguir:
Escolha da ferramenta: Com base nas necessidades do projeto, escolha Ansible como a
ferramenta de automação de infraestrutura para gerenciar a infraestrutura necessária para a
solução.
Instale Ansible: Siga as instruções de instalação do Ansible em uma máquina de teste dedicada.
Defina os requisitos de infraestrutura: Defina os requisitos de infraestrutura para a solução de
BPM e Gestão de Protocolos, como o número de servidores, o tipo de armazenamento
necessário, a quantidade de memória RAM e CPU necessárias.
Crie as tarefas do Ansible: Crie tarefas Ansible para instalar e configurar as dependências
necessárias para a solução de BPM e Gestão de Protocolos, como o banco de dados, servidor
web, servidor de e-mail, entre outros.
Instalação do Ansible:
Requisitos de infraestrutura:
Execução do Ansible:
Abra o terminal e navegue até o diretório onde se encontra o arquivo de inventário e o playbook;
Teste da solução:
Documentação do processo:
• Introdução;
• Escolha do Ansible como ferramenta de automação de infraestrutura;
• Requisitos de infraestrutura;
• Configuração do inventário do Ansible;
• Tarefas do Ansible para instalar e configurar as dependências necessárias;
• Execução do Ansible;
• Teste da solução;
• Conclusão.
A implementação de uma solução de BPM e Gestão de Protocolos usando Ansible é uma tarefa
simples, mas que requer atenção aos requisitos de infraestrutura e à criação das tarefas do
Ansible. Testar a solução é fundamental para garantir que tudo esteja funcionando
corretamente antes de documentar todo o processo de implementação. Com esse exemplo,
você pode usar o Ansible para implementar outras soluções de infraestrutura de forma rápida e
fácil.
capitulo 2.3 -
A Integração Contínua (CI) e a Entrega Contínua (CD) são práticas essenciais para os times de
DevOps e SREs, permitindo a entrega de software de forma rápida e confiável. A CI se concentra
em integrar e testar o código regularmente, enquanto a CD se concentra na implantação
automatizada de código validado em ambientes de produção.
Para implementar a CI/CD, os times usam diversas ferramentas que automatizam o processo de
construção, testes e implantação de software. O Jenkins, o GitLab CI/CD e o Travis CI são
exemplos populares de ferramentas de CI/CD.
Tomando como exemplo o cenário hipotético de criação de uma solução de BPM e Gestão de
Protocolos apresentado no subcapítulo 2.1, a implementação da CI/CD é uma etapa importante
do processo de desenvolvimento e implantação. O objetivo é garantir que o software seja
construído, testado e implantado de forma automatizada, permitindo que as atualizações sejam
entregues rapidamente e com alta qualidade.
Escolher uma ferramenta de CI/CD, como o Jenkins, GitLab CI/CD ou Travis CI, e instalar em um
servidor adequado.
Definir um pipeline de implantação que inclua etapas como build, testes de unidade, testes de
integração, testes de aceitação e implantação automatizada em diferentes ambientes.
Realizar testes regulares e revisões de segurança para garantir que o software entregue é
confiável e seguro.
Com a implementação da CI/CD, o time pode reduzir o tempo e o esforço necessários para
entregar atualizações de software, ao mesmo tempo em que garante a qualidade e a segurança
do software.
Neste exercício prático, vamos implementar um pipeline de CI/CD com o GitLab para um projeto
simples de software.
Crie um repositório de código fonte no GitLab para o projeto e adicione um arquivo Dockerfile
para a construção de imagens Docker do software.
yaml
Copy code
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t myapp .
unit_test:
stage: test
script:
- docker run --rm myapp pytest tests/unit
integration_test:
stage: test
script:
- docker run --rm myapp pytest tests/integration
acceptance_test:
stage: test
script:
- docker run --rm myapp pytest tests/acceptance
deploy_dev:
stage: deploy
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN
$CI_REGISTRY
- docker tag myapp $CI_REGISTRY_IMAGE:dev
- docker push $CI_REGISTRY_IMAGE:dev
deploy_prod:
stage: deploy
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN
$CI_REGISTRY
- docker tag myapp $CI_REGISTRY_IMAGE:prod
- docker push $CI_REGISTRY_IMAGE:prod
only:
- master
Este arquivo configura o pipeline de CI/CD com três estágios: build, test e deploy. O estágio de
build usa o Dockerfile para construir uma imagem Docker do software. Os estágios de test usam
a imagem Docker construída para executar testes de unidade, testes de integração e testes de
aceitação.
Configure o GitLab para executar o pipeline sempre que ocorrer uma alteração no repositório.
Ao executar o pipeline, o GitLab executará as seguintes etapas:
Se a alteração foi feita na branch master, o estágio deploy_prod implanta a imagem Docker no
ambiente de produção.
Com a implementação do pipeline de CI/CD, o time pode garantir que o software seja
construído, testado e implantado de forma automatizada e confiável.
Instalação
Para começar, é necessário instalar o Grafana. Ele está disponível como pacote de software e
pode ser facilmente instalado em várias plataformas, incluindo Windows, macOS e Linux.
Configuração
Coleta de informações
Análise
Depuração
Se ocorrerem problemas no sistema, é importante depurar o sistema de monitoramento e logs
para encontrar a causa raiz do problema. O Grafana permite a visualização dos logs de forma
mais amigável, facilitando a identificação dos problemas.
Instalando o Docker
O Docker é uma plataforma de contêineres que permite que você empacote um aplicativo com
todas as suas dependências em um contêiner. Isso torna mais fácil para os desenvolvedores
garantir que seus aplicativos sejam executados de maneira consistente em diferentes
ambientes. Para instalar o Docker, siga as etapas abaixo:
Baixe o instalador do Docker para o seu sistema operacional a partir do site oficial do Docker.
Instalando o Kubernetes
Baixe o instalador do Kubernetes para o seu sistema operacional a partir do site oficial do
Kubernetes.
Crie um arquivo Dockerfile que descreva como o contêiner deve ser construído.
Execute o comando docker build para construir o contêiner com base no arquivo Dockerfile.
Crie um arquivo de manifesto YAML que descreva como o aplicativo deve ser implantado.
Execute o comando kubectl apply para implantar o aplicApós a criação da imagem do aplicativo,
é hora de orquestrá-lo em um ambiente de produção. Para isso, utilizaremos o Kubernetes, uma
ferramenta de orquestração de contêineres amplamente utilizada no mercado.
yaml
Copy code
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app-container
image: myapp:latest
ports:
- containerPort: 5000
Este arquivo define um deployment com 3 réplicas da imagem "myapp:latest" e expõe a porta
5000.
Este comando deve retornar o nome do serviço ("app-service"), o tipo do serviço ("NodePort")
e a porta externa atribuída pelo Kubernetes.
Imagine que uma empresa de grande porte precisa desenvolver uma solução de Business
Process Management (BPM) e Gestão de Protocolos para o seu ambiente de negócios. Essa
solução precisa ser escalável, de fácil manutenção, com alta disponibilidade e com entregas
frequentes e contínuas. Para atender a essas necessidades, a empresa decidiu adotar uma
abordagem DevOps com a utilização de ferramentas e tecnologias modernas.
A ferramenta de automação escolhida para o gerenciamento da infraestrutura foi o Ansible,
devido à sua facilidade de uso, flexibilidade e capacidade de orquestrar múltiplos ambientes.
Para implementar a integração contínua e entrega contínua (CI/CD), a empresa optou pela
utilização do GitLab como plataforma de repositório de código e pipeline de integração e
entrega.
O pipeline do GitLab foi configurado para executar as etapas de build, teste de unidade, teste
de integração, teste de aceitação e implantação automatizada em diferentes ambientes,
utilizando contêineres Docker e orquestração Kubernetes. Para monitorar e analisar a aplicação,
foi utilizada a solução de monitoramento e logging baseada no Grafana e Prometheus.
Com essa abordagem DevOps, a empresa foi capaz de desenvolver e implantar uma solução
escalável, de fácil manutenção, com alta disponibilidade e com entregas frequentes e contínuas.
Isso ajudou a empresa a alcançar seus objetivos de negócios e melhorar sua eficiência e
produtividade.
• Etapa de Build:
o Utilização do Docker para criar a imagem da aplicação;
o Definição do Dockerfile com as dependências necessárias;
o Utilização do comando docker build para criar a imagem da aplicação.
• Etapa de Testes:
o Realização de testes unitários e de integração;
o Utilização do Jest como framework de testes;
o Utilização do comando npm run test para executar os testes.
• Etapa de Análise de Código:
o Utilização do ESLint e do SonarQube para análise estática do código;
o Utilização do comando npm run lint para executar a análise do ESLint;
o Utilização do SonarScanner para realizar a análise do código.
• Etapa de Deploy:
o Utilização do Kubernetes como ferramenta de orquestração de containers;
o Utilização do Helm para gerenciamento de pacotes;
o Utilização do GitLab CI/CD para o deploy automatizado em diferentes
ambientes;
o Utilização do comando helm install para realizar o deploy no ambiente de
produção.
• Etapa de Monitoramento:
o Utilização do Grafana para monitoramento e análise dos logs da aplicação;
o Utilização do Prometheus para coleta de métricas;
o Configuração de alertas no Grafana para notificação de possíveis falhas ou
problemas na aplicação.
Com este pipeline completo, é possível realizar a integração contínua e entrega contínua
(CI/CD), garantindo a qualidade e eficiência no desenvolvimento e implantação da aplicação.