Um Guia do Engenheiro DevOps para o OCI

O OCI (Oracle Cloud Infrastructure) fornece aos desenvolvedores ferramentas para criar, gerenciar e automatizar aplicativos nativos da nuvem. Este guia fornece uma visão geral dessas ferramentas e de sua aplicação dentro do ciclo de vida de DevOps.

O Ciclo de Vida do DevOps

DevOps é uma maneira de trabalhar que incentiva várias equipes, principalmente Desenvolvimento e Operações, a colaborar e alcançar a entrega contínua no ciclo de vida de desenvolvimento de software. Diferentes ferramentas contribuem para diferentes etapas no ciclo de vida.

Uma imagem representando o ciclo de vida DevOps.

No lado Desenvolvimento, você precisa de ferramentas para ajudá-lo com as seguintes etapas:

  • Plano: Gerenciar a infraestrutura de forma a suportar velocidade, flexibilidade e consistência
  • Código: Projetar software que possa ser adaptado a alterações constantes
  • Criação: Criar um workflow que possa atingir ciclos de liberação semanais
  • Teste: Automatizar o máximo possível

E no lado Operações você precisa de ferramentas para ajudá-lo com as seguintes etapas:

  • Liberação: Compilar e entregar aos repositórios e registros
  • Implantação: Enviar o aplicativo a ambientes de destino
  • Operação: Proteger cada etapa do ciclo de vida
  • Monitoramento: Exibir o status e o desempenho da infraestrutura e registrar no log cada alteração

Muitas das ferramentas que o OCI fornece para uso do DevOps são estreitamente conectadas e abordam várias etapas no ciclo de vida. As seções deste guia agrupam etapas e informações relacionadas adequadamente.

A Abordagem DevOps

Gerenciamento de Configuração e Infraestrutura como Código

A automação é usada em todo o ciclo de vida do DevOps. Ela reduz a necessidade de tarefas manuais e intervenção e aumenta a frequência de entregas. O gerenciamento de configuração e a infraestrutura como código tornam grande parte dessa automação possível.

CM (Gerenciamento de configuração) é o processo de aplicação de métodos programáticos para garantir a implementação, a função e o desempenho de um aplicativo.

A Infraestrutura como código (IaC) usa código legível por humanos para definir, provisionar e gerenciar a infraestrutura. A IaC é um componente-chave do modelo de entrega contínua.

No OCI, Ansible e Terraform são as ferramentas mais usadas que ajudam com CM e IaC. O Ansible é basicamente uma ferramenta de CM usada para configuração de infraestrutura, aplicação de patches e implantação e manutenção de aplicativos. O Terraform é uma ferramenta de IaC usada para provisionamento e descontinuação de infraestrutura. Eles são frequentemente usados juntos.

Gerenciamento de Configuração

O serviço OCI DevOps foi projetado para integração perfeita com duas ferramentas de CM: Ansible e Chef.

Ansible

O OCI Ansible Collection automatiza o provisionamento e a configuração de infraestrutura de recursos do OCI, como computação, balanceamento de carga e serviços de banco de dados.

Os módulos do OCI Ansible são um conjunto de interpretadores que ajudam o Ansible a fazer chamadas em pontos finais de API do OCI. Em um nível básico, o Ansible traz um servidor ou uma lista de hosts para um estado conhecido usando os seguintes conceitos:

  • Inventário: Explica onde executar; pode ser estático ou dinâmico
  • Tarefa: Uma chamada para um módulo do Ansible
  • Plays: Uma série de tarefas ou atribuições do Ansible mapeadas para um grupo de hosts no inventário; execute em ordem
  • Playbooks: Uma série de reproduções que explicam o que executar e como usar o YAML
  • Atribuição: uma estrutura padrão para especificar tarefas e variáveis; permite modularidade e reutilização
Dica

Experimente um LiveLab para ajudar você a começar a usar o Ansible no OCI.

Chef

O Chef é uma ferramenta de automação para CM que se concentra na entrega e gerenciamento de pilhas inteiras de TI. Com o serviço OCI DevOps, os usuários podem gerenciar recursos do OCI usando o Plug-in do Chef Knife.

Observação

O Puppet é outra ferramenta de CM comum usada para projetar, implantar, configurar e gerenciar servidores. Você pode integrar o Puppet ao OCI, mas ele requer criação de script manual porque o OCI não tem um plug-in direto.

Infraestrutura como Código

O OCI usa o Terraform para IaC. O Terraform tem uma linguagem declarativa que permite codificar a infraestrutura e um mecanismo que usa essas configurações para gerenciar a infraestrutura.

Dica

Experimente um LiveLab para ajudar você a começar a usar o Terraform no OCI. Muitos tutoriais, exemplos, modelos e soluções também estão disponíveis.

Você pode usar o Provedor Terraform do OCI e a CLI do Terraform para elaborar e aplicar configurações da sua máquina local que gerenciem a infraestrutura do OCI; no entanto, essa abordagem tem dois problemas:

  • Falta de controle de versão: Será necessário rastrear várias versões do código caso precise fazer rollback ou ramificar.
  • Colaboração: Você deve centralizar configurações e planos para garantir que todos permaneçam em sincronia.

Em vez de usar o Terraform diretamente, use o OCI Resource Manager, um host Terraform baseado em nuvem para controle de origem centralizado, gerenciamento de estado e enfileiramento de jobs. O serviço Resource Manager facilita para o pessoal do DevOps o gerenciamento da infraestrutura, ou pilhas, ocultando o Terraform em modelos.

Dica

Assista a uma introdução em vídeo ao serviço Resource Manager ou experimente um LiveLab.

O serviço Resource Manager também inclui a automação baseada em Terraform, como descoberta de recursos e detecção de divergência. Como nem sempre é realista elaborar as configurações do Terraform primeiro e, em seguida, provisionar a infraestrutura, você pode criar recursos na Console e, em seguida, usar a Descoberta de Recursos do Resource Manager para gerar a pilha e a configuração. Os relatórios de detecção de divergência podem determinar se os recursos provisionados têm estados diferentes dos definidos na configuração de última execução da pilha.

Design do Aplicativo

Os microsserviços permitem que você projete um aplicativo como uma coleção de serviços acoplados de forma livre que usam o modelo "nada compartilhado" e são executados como processos sem monitoramento de estado. Essa abordagem facilita o dimensionamento e a manutenção do aplicativo.

Em uma arquitetura de microsserviços, cada microsserviço possui uma tarefa simples e se comunica com clientes ou outros microsserviços usando mecanismos de comunicação leves, como solicitações de API REST. Os aplicativos projetados como microsserviços têm as seguintes características:

  • Fácil de manter e implantável de forma independente
  • Fácil de escalar e altamente disponível
  • Acoplado de forma livre a outros serviços
  • Desenvolvido usando a linguagem de programação e a estrutura que melhor se adequa ao problema

A conteinerização é uma abordagem comum para a arquitetura de microsserviços. OS contêineres usam a virtualização do sistema operacional e contêm somente o aplicativo e seus arquivos binários relacionados, o que resulta em inicialização rápida e maior segurança.

Conteinerização e Docker

O Docker é uma plataforma de conteinerização e projeto de código-fonte aberto que padroniza o empacotamento de aplicativos e suas dependências em contêineres, os quais compartilham o mesmo sistema operacional do host. Use contêineres Docker para entrega rápida e consistente de seus aplicativos, implantação e dimensionamento responsivos e portabilidade.

Uma imagem do Docker é um modelo somente para leitura com instruções para criar um contêiner do Docker. Uma imagem do Docker mantém o aplicativo que você deseja que o Docker execute como um contêiner, junto com quaisquer dependências. Para criar uma imagem do Docker, primeiro crie um Dockerfile para descrever esse aplicativo e, em seguida, crie a imagem do Docker com base no Dockerfile.

As imagens do Docker podem ser armazenadas em um registro como o OCI Container Registry. Sem um registro, é difícil para as equipes de desenvolvimento manter um conjunto consistente de imagens do Docker para seus aplicativos em contêineres. Sem um registro gerenciado, é difícil impor direitos de acesso e políticas de segurança para imagens.

Dica

Para ver um tutorial introdutório, consulte Pushing an Image to Oracle Cloud Infrastructure Registry ou experimente um LiveLab.

Kubernetes

A implantação de aplicativos em contêiner cria um novo problema: o gerenciamento de milhares de contêineres. O Kubernetes é uma ferramenta de código-fonte aberto que orquestra automaticamente o ciclo de vida do contêiner, distribuindo os contêineres pela infraestrutura de hospedagem. O Kubernetes aumenta ou diminui os recursos, dependendo da demanda. Ele provisiona, programa, exclui e monitora a integridade dos contêineres.

Observação

O que é Kubernetes? abrange alguns conceitos e histórico fundamentais do Kubernetes.

Mecanismo do Kubernetes do OCI

O OCI Kubernetes Engine (OKE) (às vezes chamado de OKE) é um serviço totalmente gerenciado, escalável e altamente disponível que você pode usar para implantar seus aplicativos em contêineres na nuvem.

Embora você não precise usar um serviço de Kubernetes gerenciado, o OCI Kubernetes Engine é uma maneira fácil de executar clusters altamente disponíveis com o controle, a segurança e o desempenho previsível da OCI que dá às equipes DevOps maior visibilidade e controle.

Serviço Functions

O serviço Functions hospeda aplicativos enquanto se abstrai dos servidores reais. A arquitetura sem servidor e elástica do Functions significa que não há administração de infraestrutura ou administração de software para você executar. Você não provisiona nem mantém instâncias de computação, e patches e atualizações de software do sistema operacional são aplicados automaticamente. O serviço Functions garante que seu aplicativo seja altamente disponível, escalável, seguro e monitorado. Você pode escrever código em Java, Python, Node, Go, Ruby e C# (e para casos de uso avançados, trazer seu próprio Dockerfile e Graal VM). Em seguida, você pode implantar seu código, chamá-lo diretamente ou acioná-lo em resposta a eventos.

Observação

Experimente o serviço Functions neste LiveLab.
CI/CD

Integração contínua e entrega ou implantação contínua - CI/CD - é uma prática recomendada de DevOps.

Integração contínua é a prática de desenvolvedores que integram todo o seu trabalho o mais rápido possível no ciclo de vida. Alterações de código frequentes incrementais são construídas, testadas e revisadas conforme necessário, com base em feedback constante. Uma alteração no código deve acionar automaticamente etapas de criação e teste padronizadas que garantam que as alterações de código que estão sendo mescladas no repositório não apresentem erros e trabalhem com o código existente.

Entrega ou implantação contínua é a prática de obter rapidamente alterações de código dos desenvolvedores para os usuários. Depois que o código passa por unidade, integração, aceitação e outros testes, ele é liberado para produção em uma implantação contínua automatizada ou em um processo de entrega contínua manual.

OCI DevOps

Os pipelines de criação e implantação são a essência do workflow de CI/CD DevOps.

O serviço OCI DevOps permite criar scripts visualmente de pipelines de build e implantação que automatizam chamadas para ferramentas mais focadas. O DevOps tem a flexibilidade de integração com seus workflows de CI/CD existentes.

DevOps Projetos

A primeira etapa da criação e implantação de aplicativos usando o serviço DevOps do OCI é criar um projeto do DevOps. Um projeto do DevOps é um agrupamento lógico de recursos do DevOps necessários para implementar um workflow de CI/CD. Como parte da criação do projeto na Console ou usando uma API ou CLI, você cria os seguintes recursos:

  • Um repositório de código externo ou do OCI para hospedar seu código
  • Pipelines de build ou um conjunto definido de estágios para criar, testar e compilar artefatos de software; entregar artefatos a repositórios; e, opcionalmente, acionar uma implantação
  • Artefatos a serem usados em implantações e repositórios de artefatos e registros de contêiner para hospedá-los
  • Pipelines de implantação ou sequências de etapas para implantar em um ambiente de destino um conjunto de artefatos ou imagens criadas com base em um registro
  • Ambientes, ou recursos nos quais os artefatos são implantados
Imagem dos componentes do Projeto do DevOps.

Os projetos do DevOps permitem gerenciar seus recursos de ciclo de vida de entrega de software em um só lugar e compartilhá-los facilmente. Ao usar o OCI DevOps e os repositórios de artefatos juntos, você pode ter certeza de que a versão de software destinada à release é o que é implantado e que você pode fazer rollback para uma versão anterior conhecida.

Observação

Os projetos facilitam a observabilidade de todos os seus recursos do DevOps.

Código

No serviço DevOps, você pode criar seus próprios repositórios de código privado em um repositório de código do OCI, que é como o Git. Commits, atualizações, ramificações e uso de armazenamento ficam visíveis na Console, e um OCID (Oracle Cloud ID) é designado ao repositório quando você o cria. Você também pode editar, clonar e excluir repositórios.

Como alternativa, você pode usar repositórios de código externos, como GitHub e GitLab, ou espelhar um repositório de código externo do GitHub, GitLab ou Bitbucket Cloud para um repositório de código do OCI. Se você estiver usando repositórios hospedados automaticamente (GitLab Server e Bitbucket Server) com endereços IP privados, ainda poderá acessá-los de seus pipelines.

Artefatos

Um artefato é uma referência a qualquer arquivo binário, pacote, manifesto do Kubernetes, imagem de contêiner ou outro arquivo que compõe seu aplicativo e será entregue a um ambiente de implantação de destino. Os artefatos gerados pelo seu build e usados em sua implantação são armazenados nos registros. O OCI tem dois tipos de registros para armazenar, compartilhar e gerenciar artefatos:

  • O Container Registry é um serviço gerenciado baseado em padrões abertos, que armazena várias versões do Docker ou outras imagens de contêiner, além de arquivos relacionados como manifestos e gráficos Helm. Essas imagens podem ser enviadas a um cluster do Kubernetes para implantação usando o serviço Kubernetes Engine (OKE).
  • O serviço Artifact Registry armazena pacotes de software, bibliotecas, arquivos .zip e outros tipos de arquivos usados para implantar aplicativos. Esses arquivos podem ser chamados quando o pipeline de implantação é acionado.
Observação

Você também pode usar registros de artefato externos, como Sonatype ou Artifactory, e espelhá-los no OCI Artifact Registry. Isso significa que você pode continuar usando sua configuração atual com o OCI DevOps.

Pipelines de Build e Implantação

Os pipelines de build e implantação do OCI DevOps reduzem os erros motivados por alterações e diminuem o tempo gasto em builds e implantações. Os desenvolvedores fazem commit do código-fonte em um repositório de código, criam e testam artefatos de software com um executor de build, fornecem artefatos aos repositórios do OCI e, em seguida, executam uma implantação nas plataformas do OCI.

Você pode usar o DevOps para implementar várias estratégias de pipeline de implantação, incluindo uma estratégia azul-verde (que consiste em dois ambientes de produção idênticos), uma estratégia canária e uma estratégia contínua.

Dica

Para obter instruções detalhadas sobre o pipeline, consulte Gerenciando Pipelines de Build e Gerenciando Pipelines de Implantação.

Os logs de suas execuções de build e implantações são armazenados no serviço OCI Logging para auditoria e governança. Sua equipe também pode receber notificações de eventos em seus pipelines DevOps por meio do serviço OCI Notifications.

Observação

Você também pode usar o Plug-in Compute Jenkins para centralizar a automação de build e implantações de escala, entregar seus artefatos ao OCI Artifact Registry e acionar pipelines de implantação do DevOps.
Ambientes

Um ambiente é uma coleção dos recursos de computação para os quais os artefatos são implantados e é a plataforma de destino do seu aplicativo. Os tipos de ambiente de runtime de destino suportados no OCI incluem instâncias de Computação VM ou bare metal no Oracle Linux e CentOS, Kubernetes Engine e Functions. Qual ambiente você escolhe para implantação depende de suas necessidades de flexibilidade, segurança, velocidade e outros requisitos:

  • Os hosts bare metal oferecem o máximo em termos de controle, segurança e custo. Uma boa opção para projetos que exigem um espaço mais constante, maior ou separado e seguro. Consulte Visão Geral do Serviço Compute.
  • As VMs permitem mais versatilidade, dimensionamento e compartilhamento de recursos. Aplicativos compartilhados e hardware físico permitem economia de custos, velocidade de recuperação de desastre e provisionamento mais rápido. Consulte Visão Geral do Serviço Compute.
  • O Kubernetes Engine é ideal para ambientes de alta densidade e para implantações pequenas e médias nas quais você precisa fazer mais com menos recursos. Consulte Design do Aplicativo.
  • As Funções são as melhores com cargas de trabalho dinâmicas nas quais o uso muda com frequência, porque você paga pelos serviços somente à medida que os usa.

Você deve criar seu cluster, função ou instância do serviço Compute do Kubernetes Engine antes de criar um ambiente DevOps. Em seguida, você pode criar referências a diferentes ambientes de destino para a implantação do DevOps.

Segurança

DevSecOps é uma abordagem de cultura, automação e design de plataforma que integra a segurança como uma responsabilidade compartilhada em todo o ciclo de vida do DevOps.

A segurança contínua tem três elementos principais:

  • À medida que novos recursos são adicionados, a postura de segurança deve ser continuamente refinada e atualizada. Controles de segurança novos ou modificados podem ser adicionados (ou alguns podem ser removidos). Esses controles devem ser continuamente testados durante os ciclos de desenvolvimento e implantação usando conjuntos de testes de segurança automatizados.
  • Os aplicativos nativos da nuvem devem ser criados para ter resiliência. Como até mesmo um software cuidadosamente projetado e testado pode conter vulnerabilidades de segurança, um sistema de monitoramento de segurança robusto deve identificar invasões e infecções em tempo real. Respostas automatizadas a incidentes devem proteger os serviços.
  • À medida que novos recursos são liberados na produção por meio do pipeline de CI/CD, os verificadores de conformidade de segurança e os sistemas de avaliação de vulnerabilidade do aplicativo devem medir e registrar qualquer nova exposição ao risco. Os riscos identificados durante a integração de novos recursos exigem a revisão da estrutura de controles de segurança, que deve ser modificada para mitigar esses riscos.

Serviço IAM

Crie políticas do Oracle Cloud Infrastructure Identity and Access Management (IAM) para controlar quem tem acesso aos recursos do DevOps e para controlar o tipo de acesso de cada grupo de usuários. Consulte os seguintes tópicos para obter alguns conceitos básicos e exemplos de políticas relacionadas:

Vault

Como prática recomendada, os engenheiros do DevOps usam o Serviço Vault do OCI para ajudar a melhorar a postura de segurança geral de suas implantações de aplicativos e serviços.

Você pode usar o serviço Vault para gerenciar de forma centralizada chaves e segredos de criptografia. Segredos são credenciais como senhas, tokens ou quaisquer outros dados confidenciais que você precisa usar com outros serviços do OCI e aplicativos ou sistemas externos. O armazenamento de segredos em um vault oferece maior segurança do que você pode obter armazenando-os em outro local, como em arquivos de código ou de configuração.

O serviço Vault integra-se diretamente com serviços do OCI, SDKs e clientes de API, e trata a criptografia de credenciais de senha usadas com qualquer aplicativo externo.

Melhores Práticas de Segurança do Kubernetes Engine

Ao usar o OCI Kubernetes Engine, siga estas melhores práticas de segurança:

Melhores Práticas de Segurança para o Serviço Functions

Ao usar o serviço OCI Functions, siga estas melhores práticas de segurança:

Observabilidade

As ferramentas DevOps devem ajudá-lo a entender completamente o funcionamento do sistema e escolher as métricas certas para monitorar de forma proativa. Você deve encontrar problemas no início do processo e ser capaz de monitorar a integridade constantemente.

As ferramentas do DevOps também devem ajudá-lo a manter a segurança completa dos sistemas de informação, seja o data center físico, as redes ou os aplicativos.

Com a abordagem certa para a observabilidade, você pode reduzir o período de inatividade, acelerar o tempo médio para detecção (MTTD) e o tempo médio para resolução (MTTR) e aumentar a satisfação do cliente e a entrega de serviços.

Principais Serviços de Observabilidade do OCI

O serviço Monitoring pode ajudar você a obter insights sobre cargas de trabalho do OCI com métricas do DevOps para obter integridade e desempenho. Você pode configurar alarmes com limites para detectar e responder a anomalias na infraestrutura e no aplicativo.

Dica

Embora as métricas do OCI sejam visíveis em gráficos por meio da Console, você pode usar o Plug-in do Grafana para exibir métricas de recursos entre provedores em um único painel do Grafana.

O serviço Logging pode ingerir dados de log de centenas de origens. Você pode gerar logs como logs de auditoria e logs de fluxo de rede e usá-los para diagnosticar problemas de segurança. Os logs do DevOps emitem todos os logs de recursos de projeto do DevOps.

O Logging Analytics é uma solução de nuvem baseada em aprendizado de máquina que monitora, agrega, indexa e analisa todos os dados de log de ambientes on-premises e multinuvem. Ele permite pesquisar, explorar e correlacionar esses dados para diagnosticar e solucionar problemas mais rapidamente, obter insights operacionais e tomar decisões melhores.

O Notifications é um serviço de publicação/assinatura altamente disponível e de baixa latência que envia alertas e mensagens para funções, e-mail e parceiros de entrega de mensagens, incluindo Slack e PagerDuty.

O serviço Events rastreia alterações de recursos usando eventos que atendem ao padrão CloudEvents da CNCF (Cloud Native Computing Foundation). Ele elimina a complexidade de rastrear manualmente alterações entre recursos da nuvem. Eventos do DevOps são arquivos JSON emitidos com algumas operações de serviço e contêm informações sobre essa operação. Você pode definir regras que acionam uma ação específica quando um evento ocorre.

Serviços e Ferramentas do DevOps

Serviços
  • O Application Dependency Management detecta vulnerabilidades de segurança em dependências de aplicativos.
  • O serviço Application Performance Monitoring fornece um conjunto abrangente de recursos para monitorar aplicativos e diagnosticar problemas de desempenho.
  • O serviço Artifact Registry fornece repositórios para armazenar, compartilhar e gerenciar pacotes de desenvolvimento de software.
  • O Kubernetes Engine (OKE) ajuda a definir e criar clusters do Kubernetes para ativar a implantação, dimensionamento e gerenciamento de aplicativos conteinerizados.
  • O serviço Container Registry permite armazenar, compartilhar e gerenciar imagens de contêiner (como imagens do Docker) em um registro gerenciado pela Oracle.
  • Os Painéis da Console permitem criar painéis personalizados na Console para monitorar recursos, diagnósticos e métricas-chave para sua tenancy.
  • O DevOps é um serviço (CI/CD) que automatiza a entrega e a implantação de software.
  • O serviço Events ajuda a criar automação com base nas alterações de estado dos recursos em toda a sua tenancy.
  • O serviço Functions é uma plataforma sem servidor que permite criar, executar e dimensionar a lógica de negócios sem gerenciar qualquer infraestrutura.
  • O serviço IAM usa domínios de identidades para fornecer recursos de gerenciamento de identidades e acessos como autenticação, SSO (sign-on único) e gerenciamento de ciclo de vida de identidades.
  • O serviço Logging oferece uma interface única altamente escalável e totalmente gerenciada para todos os logs em sua tenancy.
  • O Logging Analytics permite indexar, enriquecer, agregar, explorar, pesquisar, analisar, correlacionar, visualizar e monitorar todos os dados de log de seus aplicativos e infraestrutura de sistema.
  • O serviço Monitoring permite consultar métricas e gerenciar alarmes. Métricas e alarmes ajudam a monitorar a integridade, a capacidade e o desempenho dos seus recursos de nuvem.
  • O serviço Notifications transmite mensagens a componentes distribuídos por meio de um padrão publicar-assinar, entregando mensagens seguras, altamente confiáveis, de baixa latência e duráveis.
  • O serviço Resource Manager automatiza a implantação e as operações de todos os recursos do OCI usando o modelo IaC.
  • O serviço Streaming oferece uma solução totalmente gerenciada, escalável e durável para a ingestão e o consumo de streams de dados de alto volume em tempo real.
  • O serviço Vault é um serviço de gerenciamento de criptografia que armazena e gerencia chaves de criptografia e segredos para acessar recursos com segurança.
  • O serviço Vulnerability Scanning ajuda a melhorar sua postura de segurança, verificando rotineiramente hosts e imagens de contêiner em busca de possíveis vulnerabilidades.