Implemente GitLab Runners no OCI Kubernetes Engine com o Cluster Autoscaling

Implemente Executores do GitLab no Oracle Cloud Infrastructure (OCI) Kubernetes Engine com funcionalidade de dimensionamento automático para dimensionar nós de trabalho automaticamente com base na carga para jobs de execução tranquila no pipeline de CI/CD.

Arquitetura

Essa arquitetura mostra os Executores GitLab implantados em um cluster do OCI Kubernetes Engine (OKE).

O diagrama a seguir ilustra essa arquitetura de referência.

Veja a seguir a descrição da git-lab-runner-kubernetes.png
Descrição da ilustração git-lab-runner-kubernetes.png

kubernetes do git-lab-runner-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.

  • Domínios de falha

    Um domínio de falha é um agrupamento de hardware e infraestrutura dentro de um domínio de disponibilidade. Cada domínio de disponibilidade tem três domínios de falha com energia e hardware independentes. Quando você distribui recursos entre vários domínios de falha, seus aplicativos podem tolerar falha no servidor físico, manutenção do sistema e falhas de energia dentro de um domínio de falha.

  • 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.

  • Gateway de serviço

    O gateway de serviço fornece acesso de uma VCN a outros serviços, como o Oracle Cloud Infrastructure Object Storage. O tráfego da VCN para o serviço Oracle percorre a malha da rede Oracle e não passa pela internet.

  • 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.

  • Cloud Guard

    Você pode usar o Oracle Cloud Guard para monitorar e manter a segurança de seus recursos 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 em relação a determinadas atividades arriscadas. Quando qualquer configuração incorreta ou atividade insegura é detectada, o Cloud Guard recomenda ações corretivas e auxilia na execução dessas ações, com base nas receitas do respondedor que você pode definir.

  • Zona de segurança

    As zonas de segurança garantem as melhores práticas de segurança da Oracle desde o início, impondo políticas, como criptografar dados e impedir o acesso público a redes de um compartimento inteiro. Uma zona de segurança está associada a um compartimento com o mesmo nome e inclui políticas de zona de segurança ou uma "receita" que se aplica ao compartimento e seus subcompartimentos. Não é possível adicionar ou mover um compartimento padrão para um compartimento de zona de segurança.

  • Kubernetes Cluster Autoscaler

    O Kubernetes Cluster Autoscaler aumenta ou diminui o tamanho de um pool de nós automaticamente com base nas solicitações de recursos, em vez da utilização de recursos dos nós do pool.

  • Serviços do OKE

    O serviço Kubernetes (OKE) é uma abstração que define um conjunto lógico de pods e uma política pela qual acessá-los. O conjunto de pods direcionados por um serviço geralmente é determinado por um seletor. Os serviços do Kubernetes gerenciam o dimensionamento automático.

  • Pool de nós de trabalho do OKE

    Um nó de trabalho do Kubernetes é uma máquina de trabalho que executa aplicativos conteinerizados em um cluster do Kubernetes. Cada cluster tem pelo menos um nó de trabalho.

    Um pool de nós de trabalho do Kubernetes (OKE) é um subconjunto de nós de trabalho em um cluster em que todos têm a mesma configuração. Os pools de nós permitem criar pools de máquinas em um cluster que tenham configurações distintas. Por exemplo, você pode criar um pool de nós em um cluster como máquinas virtuais e outro pool de nós como máquinas bare metal. Um cluster deve ter no mínimo um pool de nós, mas um pool de nós não deve conter nós de trabalho.

    Os nós de trabalho em um pool de nós estão conectados a uma sub-rede de nós de trabalho na sua VCN.

  • Gateway de internet

    O gateway de internet permite o tráfego entre as sub-redes públicas em uma VCN e a internet pública.

  • Gateway de conversão de endereço de rede (NAT)

    Um gateway NAT permite que recursos privados em uma VCN acessem hosts na internet, sem expor esses recursos a conexões de internet de entrada.

Recomendações

Use as recomendações a seguir como ponto de partida. Os seus requisitos podem ser diferentes da arquitetura descrita aqui.
  • 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.

    Usar sub-redes regionais.

  • Segurança

    Usar o Oracle Cloud Guard para monitorar e manter a segurança dos seus recursos na OCI de maneira proativa. O Oracle Cloud Guard usa receitas do detector que você pode definir para examinar seus recursos em busca de pontos fracos de segurança e para monitorar operadores e usuários em busca de atividades arriscadas. Quando qualquer configuração incorreta ou atividade insegura é detectada, o Oracle 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á operações que violem qualquer uma das políticas.

  • Cloud Guard

    Clone e personalize as receitas padrão fornecidas pela Oracle para criar receitas personalizadas de detector e respondedor. Essas receitas permitem que você especifique que tipo de violações de segurança geram um aviso e quais ações podem ser executadas nelas. Por exemplo, talvez você queira detectar buckets do Object Storage que tenham visibilidade definida como pública.

    Aplique o Cloud Guard no nível da tenancy para cobrir o escopo mais amplo e reduzir a carga administrativa de manutenção de várias configurações.

    Você também pode usar o recurso Lista Gerenciada para aplicar determinadas configurações aos detectores.

  • Grupos de segurança de rede (NSGs)

    Você pode usar NSGs para definir um conjunto de regras de entrada e saída que se aplicam a VNICs específicas. Recomendamos o uso de NSGs em vez de listas de segurança, porque os NSGs permitem que você separe a arquitetura de sub-rede da VCN dos requisitos de segurança do seu aplicativo.

  • Mecanismo do Kubernetes do OCI

    Embora o operador suporte qualquer cluster genérico do Kubernetes, essa arquitetura usa clusters do Kubernetes Engine. Esses clusters têm três nós de trabalho distribuídos por diferentes domínios de disponibilidade e falha. O cluster mostrado tem nós de trabalho distribuídos por diferentes hosts físicos. Você pode criar até 1000 nós em um cluster.

  • Zonas de Segurança

    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 Oracle Cloud Infrastructure validará as operações de acordo com as políticas na receita de zona de segurança e negará as operações que violam qualquer uma das políticas.

  • Computação

    Escolha formas com a combinação apropriada de OCPUs e memória e provisione NVMe local e armazenamento em blocos de acordo com a necessidade, para nós do cluster do Kubernetes.

Considerações

Considere os seguintes pontos ao implantar essa arquitetura de referência:

  • Desempenho

    O dimensionamento automático do cluster é baseado na reserva de recursos de implantação. Você pode controlar a reserva de recursos de job editando o arquivo gitlab-ci.yaml.

  • Segurança

    Use políticas que restrinjam quem pode acessar os recursos do Oracle Cloud Infrastructure (OCI) que sua empresa tem e como.

    O OCI Kubernetes Engine é integrado ao OCI Identity and Access Management, que fornece autenticação fácil com a funcionalidade nativa de identidade do OCI.

    Use as seguintes variáveis para controlar a reserva de recursos para um job:

    KUBERNETES_CPU_REQUEST: 1  
    KUBERNETES_MEMORY_REQUEST: 4000M
  • Escalabilidade

    Você pode expandir seu aplicativo atualizando o número de nós de trabalho no cluster do Kubernetes, dependendo da carga. Da mesma forma, você pode ampliar reduzindo o número de nós de trabalho no cluster. Ao criar um serviço no cluster do Kubernetes, você pode criar um balanceador de carga para distribuir o tráfego de serviço entre os nós designados para esse serviço. O dimensionamento automático do cluster é baseado na reserva de recursos de implantação. Você pode controlar a reserva editando o arquivo gitlab-ci.yaml.

    Observação:

    A reserva de recursos de tarefa usando parâmetros no arquivo gitlab-ci.yaml não deve exceder o máximo permitido de reservas definido para o Executor GitLab como parte das seguintes linhas no arquivo locals.tf:
    cpu_request_overwrite_max_allowed = "1"        
    memory_request_overwrite_max_allowed = "4096M"
  • Custo

    O uso do OCI Kubernetes Engine é gratuito e o uso do registro de contêiner da Oracle é gratuito. Os Nós no cluster do Kubernetes são cobrados na mesma taxa que qualquer outra instância de computação com a mesma forma.

Implante

O código do Terraform permite implantar um cluster do OCI Kubernetes Engine (OKE) com todos os recursos dependentes (rede, pool de nós de trabalho), implantar o dimensionamento automático do cluster e Executores GitLab. O código está disponível como uma pilha de amostra no Oracle Cloud Infrastructure Resource Manager. Você também pode fazer download do código em GitHub e personalizá-lo de acordo com seus requisitos.
  • Implante usando a pilha de amostra no Oracle Cloud Infrastructure Resource Manager:
    1. Vá para Implantar para o Oracle Cloud.

      Se você ainda não tiver acessado, informe a tenancy e as credenciais do usuário.

    2. Selecione a região na qual você deseja implantar a pilha.
    3. Siga os prompts na tela e as instruções para criar a pilha.
    4. Após criar a pilha, clique em Ações do Terraform e selecione Planejar.
    5. Aguarde a conclusão do job e revise o plano.

      Para fazer qualquer alteração, retorne à página Detalhes da Pilha, clique em Editar Pilha e faça as alterações necessárias. Em seguida, execute a ação Planejar novamente.

    6. Se nenhuma alteração adicional for necessária, retorne à página Detalhes da Pilha, clique em Ações do Terraform e selecione Aplicar.
  • Implante usando o código do Terraform em GitHub:
    1. Vá para GitHub.
    2. Clone ou faça download do repositório para seu computador local.
    3. Siga as instruções no documento README.

Explorar Mais

Saiba mais sobre o Oracle Cloud Infrastructure (OCI) e o Kubernetes.

Consulte o playbook da solução Estrutura de melhores práticas do Oracle Cloud Infrastructure para obter as melhores práticas.

Analise esses recursos adicionais do OCI e do GitLab:

Reconhecimentos

  • Autores: Chandrashekar Avadhani, Andrei Ilas
  • Colaboradores: Ben Romine, Lukasz Feldman