Dimensione e otimize o Jenkins noOracle Cloud Infrastructure Kubernetes Engine
O Jenkins é um sistema de CI/CD ainda usado pelos desenvolvedores para verificar, criar e implantar automaticamente seu código, para que eles possam se concentrar apenas na entrega de novos recursos.
Com o lançamento do Kubernetes, as arquiteturas distribuídas e compartilhadas nada se tornaram gradualmente a norma, tanto que todos os sistemas CI/CD mais recentes são implementados no Kubernetes. Quanto ao Jenkins, a arquitetura de controlador/agente pode não ser escalável o suficiente para grandes organizações e equipes de desenvolvimento, mas graças ao esforço da comunidade é possível conteinerizar o Jenkins e implantá-lo de maneira Nativa da Nuvem.
Você pode hospedar o Jenkins no Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou OKE) para centralizar sua automação de construção e dimensioná-la à medida que seus projetos de software crescem. Ao implementar um Jenkins escalável no OKE, os desenvolvedores poderão desenvolver novos serviços com agilidade e também dimensionar seus pipelines de CI/CD facilmente.
Arquitetura
Essa arquitetura de referência de alto nível mostra um exemplo de várias implantações do Jenkins no OKE. Ao implantar o Jenkins no OKE as a Service, é possível dimensionar conforme necessário.
Cada pod de controlador do Jenkins tem um volume persistente anexado, para manter o histórico do pipeline e os plug-ins adicionais instalados pelas equipes. Os agentes do Jenkins serão criados toda vez que um job de pipeline for acionado e destruído automaticamente no final.
Cada instância do Jenkins pode ser exposta individualmente por meio de um Balanceador de Carga ou usando uma Entrada do Kubernetes.
O diagrama a seguir ilustra essa arquitetura de referência.
oci-jenkins-oke-arch-oracle.zip
A arquitetura tem os seguintes componentes:
- Região
Região do Oracle Cloud Infrastructure é uma área geográfica localizada que contém um ou mais data centers, denominada domínios de disponibilidade. As regiões são independentes de outras regiões, e grandes distâncias podem separá-las (entre países ou até mesmo continentes).
- Domínios de disponibilidade
Domínios de disponibilidade são data centers stand-alone e independentes dentro de uma região. Os recursos físicos de cada domínio de disponibilidade são isolados dos recursos de outros domínios de disponibilidade, o que oferece tolerância a falhas. Os domínios de disponibilidade não compartilham infraestrutura como energia ou refrigeração ou a rede interna do domínio de disponibilidade. Portanto, uma falha em um domínio de disponibilidade não deve afetar os outros domínios de disponibilidade na região.
- Rede virtual na nuvem (VCN) e sub-redes
Uma VCN é uma rede personalizável definida por software que você configura em uma região do Oracle Cloud Infrastructure. Como as redes tradicionais de data center, as VCNs oferecem controle sobre seu ambiente de rede. Uma VCN pode ter vários blocos CIDR não sobrepostos que você pode alterar após a criação da VCN. Você pode segmentar uma VCN em sub-redes, com escopo definido para uma região ou para um domínio de disponibilidade. Cada sub-rede consiste em um intervalo contíguo de endereços que não se sobrepõem a outras sub-redes da VCN. Você pode alterar o tamanho de uma sub-rede após a criação. Uma sub-rede pode ser pública ou privada.
- Balanceador de carga
O serviço Oracle Cloud Infrastructure Load Balancing fornece distribuição automatizada de tráfego de um único ponto de entrada para vários servidores no back-end.
- Lista de segurança
Para cada sub-rede, você pode criar regras de segurança que especifiquem a origem, o destino e o tipo de tráfego que deve ser permitido dentro e fora da sub-rede.
- Kubernetes Engine
O Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine ou 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. Você especifica os recursos de computação necessários, e o serviço Kubernetes Engine os provisiona no Oracle Cloud Infrastructure em uma tenancy existente. O OKE usa o Kubernetes para automatizar a implantação, o dimensionamento e o gerenciamento de aplicativos em contêineres entre clusters de hosts.
Recomendações
- VCN
Ao criar uma VCN, determine o número de blocos CIDR necessários e o tamanho de cada bloco com base no número de recursos que você planeja anexar a sub-redes na VCN. Use blocos CIDR que estejam dentro do espaço de endereço IP privado padrão.
Selecione blocos CIDR que não se sobreponham a nenhuma outra rede (no Oracle Cloud Infrastructure, em seu data center local ou em outro provedor de nuvem) para a qual você pretende configurar conexões privadas.
Depois de criar uma VCN, você poderá alterar, adicionar e remover seus blocos CIDR.
Ao projetar as sub-redes, considere seus requisitos de fluxo de tráfego e segurança. Anexe todos os recursos dentro de uma camada ou atribuição específica à mesma sub-rede, que pode servir como um limite de segurança.
- Segurança
Usar o Oracle Cloud Guard para monitorar e manter proativamente a segurança dos seus recursos de OCI no Oracle Cloud Infrastructure. O Cloud Guard usa receitas do detector que você pode definir para examinar seus recursos quanto a pontos fracos de segurança e para monitorar operadores e usuários quanto a atividades arriscadas. Quando qualquer configuração incorreta ou atividade insegura é detectada, o Cloud Guard recomenda ações corretivas e ajuda a tomar essas ações, com base nas receitas do respondedor que você pode definir.
Para recursos que exigem segurança máxima, a Oracle recomenda o uso de zonas de segurança. Uma zona de segurança é um compartimento associado a uma receita de políticas de segurança definida pela Oracle baseada nas melhores práticas. Por exemplo, os recursos de uma zona de segurança não devem ser acessíveis por meio da internet pública e devem ser criptografados usando chaves gerenciadas pelo cliente. Quando você criar e atualizar recursos em uma zona de segurança, o OCI validará as operações de acordo com as políticas na receita da zona de segurança e negará as operações que violem qualquer uma das políticas.
- Largura de banda do balanceador de carga
Ao criar o balanceador de carga, você pode selecionar uma forma predefinida que forneça uma largura de banda fixa ou especificar uma forma personalizada (flexível), na qual você define uma faixa de largura de banda e permite que o serviço dimensione a largura de banda automaticamente com base nos padrões de tráfego. Com qualquer uma das abordagens, você pode alterar a forma a qualquer momento após criar o balanceador de carga.
- Oracle Cloud Infrastructure Kubernetes Engine e formas de computação
No mínimo, dois pools de nós são implantados no OCI Kubernetes Engine: um para os controladores Jenkins e outro para os agentes Jenkins.
Para economizar custos e otimizar toda a solução, recomenda-se usar o VM.Standard.A1. Instâncias flexíveis para controladores Jenkins, pois o Jenkins é totalmente compatível com instâncias ARM. Para o pool de nós do agente, a sugestão é usar instâncias preemptíveis, pois geralmente os jobs do pipeline são de curta duração e tolerantes a falhas.
- Oracle Cloud Infrastructure Registry
O Oracle Cloud Infrastructure Registry é um repositório de contêiner privado compatível com o OCI para hospedar imagens. Nesta arquitetura, é opcional e pode ser usado para hospedar suas próprias imagens personalizadas do Jenkins com todos os plugins necessários instalados. A criação de uma imagem de controlador Jenkins personalizada é recomendada para reforçar a segurança e empacotar todos os plug-ins comumente usados em uma única imagem de contêiner.
Considerações
Considere os pontos a seguir ao implantar essa arquitetura de referência.
- Desempenho e escalabilidade
Ao usar o Kubernetes, é fácil dimensionar o controlador e os agentes do Jenkins à medida que a equipe de desenvolvimento cresce ou diminui. Além disso, à medida que os pods do agente são criados toda vez que há um job de pipeline em execução, é possível personalizar os recursos usados por esses pods em uma base por pipeline.
- Disponibilidade
Para maximizar a disponibilidade, é recomendável ter vários nós do OKE provisionados em diferentes domínios de disponibilidade ou falha. Além disso, para proteger o Jenkins de interrupções voluntárias e involuntárias, é possível usar o mecanismo padrão do Kubernetes, como orçamentos de interrupção de pod e antiafinidade de pod.
- Custo
O objetivo dessa arquitetura também é minimizar custos ao usar o Jenkins no OKE. É possível usar nós ARM para controladores Jenkins, que custam um quarto das instâncias de computação flexíveis. Quanto aos agentes do Jenkins, os nós de instância preemptíveis permitem que os clientes economizem metade do orçamento.
Explorar Mais
Revise esses recursos adicionais para saber mais sobre os recursos dessa arquitetura de referência.
- Blog: Dimensionando e otimizando o Jenkins no Oracle Container Engine
- Gráfico Helm da comunidade Jenkins
- Documentação do Oracle Cloud Infrastructure Kubernetes Engine
- Estrutura de melhores práticas do Oracle Cloud Infrastructure
- Documentação do Oracle Cloud Infrastructure
- Estimador de Custos do Oracle Cloud