GitHub Actions – Self-Hosted Runner no Kubernetes

GitHub Actions – Self-Hosted Runner no Kubernetes

O GitHub Actions é uma plataforma de integração contínua (CI) e entrega contínua (CD) que faz parte do GitHub. Ele permite automatizar fluxos de trabalho diretamente no repositório, como testes, builds, deploys e outras tarefas repetitivas, sem precisar de ferramentas externas.

No GitHub Actions, um runner é o ambiente onde os jobs de um workflow são executados. Existem duas opções principais de runners: GitHub Hosted Runners e Self-Hosted Runners. A diferença entre eles está na infraestrutura, controle e customização que você tem sobre o ambiente de execução.

GitHub Hosted Runners

Os GitHub Hosted Runners são fornecidos e gerenciados diretamente pelo GitHub. Ou seja, o GitHub cuida da infraestrutura, manutenção, e configuração do ambiente onde seus jobs serão executados.

Vantagens:

  • Facilidade de uso: Não é necessário se preocupar com a configuração ou manutenção de servidores.
  • Escalabilidade: Como o GitHub gerencia os runners, a infraestrutura pode facilmente escalar conforme a necessidade.
  • Variedade de Ambientes: Vem com uma ampla variedade de imagens de sistemas operacionais e ferramentas já configuradas (por exemplo, Ubuntu, macOS, Windows).

Desvantagens:

  • Falta de personalização: Não é possível alterar a configuração do runner ou instalar software personalizado de forma persistente entre execuções. Cada execução começa com um ambiente limpo.
  • Limitação de tempo e recursos: Existe um limite para a quantidade de tempo e recursos disponíveis para cada execução, especialmente em planos gratuitos.

Self-Hosted Runners

Os Self-Hosted Runners são runners que você configura e gerencia em sua própria infraestrutura, seja em servidores próprios, máquinas virtuais, ou até mesmo em containers. Esses runners podem ser personalizados conforme as necessidades específicas do seu projeto ou da sua organização.

Vantagens:

  • Personalização: Ideal para projetos que precisam de ferramentas ou dependências específicas que não estão disponíveis em GitHub Hosted Runners.
  • Maior controle sobre a infraestrutura: Como você controla a máquina, pode ajustar recursos (CPU, RAM) conforme necessário, e até mesmo manter o estado da máquina entre as execuções.
  • Economia de tempo em builds grandes: Para builds ou testes longos, você pode configurar caches ou otimizações para evitar a necessidade de configurar o ambiente do zero a cada execução.

Desvantagens:

  • Gerenciamento e manutenção: Você precisa configurar e manter o servidor ou máquina que roda o runner, o que pode ser mais trabalhoso e exigir monitoramento.
  • Infraestrutura adicional: Se você não tiver infraestrutura própria, pode ter que gerenciar a infraestrutura na nuvem ou em servidores locais, o que pode aumentar os custos e o gerenciamento.

Ambos têm suas vantagens e desvantagens, e a escolha depende das necessidades específicas do seu projeto.

Neste artigo veremos como implementar Self-Hosted Runner no Kubernetes utilizando o ARC (Actions Runner Controller)

Pré-requisitos

  • Cluster Kubernetes
  • Helm 3

Instalando o Actions Runner Controller

O Actions Runner Controller (ARC) atua como um operator no Kubernetes que orquestra e dimensiona self-hosted runners para o GitHub Actions.

Faremos a instalação do controller utilizando o Helm:

helm install arc \
    --namespace arc-controller \
    --create-namespace \
    oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set-controller

Autenticando na API do GitHub

Para que o controller consiga registrar os runners na API do GitHub, precisamos configurar a autenticação. Para isso, podemos utilizar um Github App, para registrar os runners a nível de organização, ou utilizar um PAT, para utilizar os runners a nível de repositório.

Nesse artigo iremos criar um GitHub App. Caso deseje utilizar um PAT, visite a documentação oficial do GitHub.

Criando um GitHub App

Vá até a url da sua organização no GitHub e clique em Settings

No canto inferior esquerdo, expanda o item Developer settings e clique em GitHub Apps

Crie um novo GitHub App e defina um nome para o mesmo.

Em Homepage URL defina como https://github.com/actions/actions-runner-controller

Em Permissions devemos garantir as seguintes permissões:

  • Repositoru permissions
    • Metadata: Read-only
  • Organization permissions
    • Self-hosted runners: Read and write

Após a criação do GitHub App, seremos redirecionados para uma nova página contendo algumas informações sobre o processo que executamos. Nessa página, anote o valor do App ID.

Ainda na mesma página, em Private keys clique no botão para gerar uma nova chave e faça o download do arquivo .pem.

No menu lateral localizado no canto superior esquedo da página clique em Install app e faça a instalação do app na sua organização.

Após a confirmação da instalação na sua organização, guarde o valor do Installation ID, também iremos precisar dessa informação.

Em posse do app ID, installation ID e da chave .pem, iremos criar uma secret no Kubernetes com o seguinte comando:

kubectl create secret generic arc-controller-manager \
   --namespace=arc-runners \
   --from-literal=github_app_id=123456 \
   --from-literal=github_app_installation_id=654321 \
   --from-literal=github_app_private_key='-----BEGIN RSA PRIVATE KEY-----********'

Note que, neste exemplo, estou utilizando namespaces diferentes para o arc-controller e para o arc-runners.

Configurando os runners

Para configurar os runners, primeiro iremos fazer o download do arquivo values.yaml disponível no repositório oficial para utilizarmos como base da nossa configuração.

O arquivo com as mínimas configurações ficaria dessa forma:

githubConfigUrl: "https://github.com/fsociety-xyz"
githubConfigSecret: arc-controller-manager
template:
  spec:
    containers:
      - name: runner
        image: ghcr.io/actions/actions-runner:latest
        command: ["/home/runner/run.sh"]

Nele alteramos o parâmetro githubConfigUrl com a URL da nossa organização e o githubConfigSecret com o nome da secret que criamos na etapa anterior.

Em template podemos definir a configuração dos nossos runners.

Para fazer a instalação, novamente utilizaremos o Helm:

INSTALLATION_NAME="arc-runners"
NAMESPACE="arc-runners"
helm install "${INSTALLATION_NAME}" \
    --namespace "${NAMESPACE}" \
    --create-namespace \
    --values values.yaml \
    oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

Se atente ao INSTALLATION_NAME, iremos utilizar esse nome como valor do runs-on nos nossos workflows.

Ao executar o comando kubectl get pods -n arc-runners poderemos ver que não há nenhum pod rodando nesse namespace. Isso acontece porque o pod somente será criado durante a execução de algum workflow e será removido instantaneamente após a finalização do mesmo. Essa é a mágica por trás do ARC, teremos um pod para cada workflow em execução, podendo paralelizar ao máximo as nossas pipelines.

Testando os runners

Para testar a criação e execução dos runners, iremos criar um workflow simples que utilize os runners que acabamos de configurar.

Em um repositório qualquer dentro da organização, podemos criar o arquivo test-runner.yaml dentro do diretório .github/workflows/ com o seguinte conteúdo:

name: Actions Runner Controller Demo
on:
  workflow_dispatch:

jobs:
  Explore-GitHub-Actions:
    runs-on: arc-runners
    steps:
    - run: echo "🎉 Esse job utiliza um runner criado pelo ARC!"

Faça o push dessa alteração para o repositório e execute o workflow manualmente.

Durante a execução do mesmo, podemos rodar novamente o comando kubectl get pods -n arc-runners e, dessa vez, pelo menos um pod deverá estar rodando:

kubectl get pods -n arc-runners
NAME                                READY   STATUS    RESTARTS   AGE
arc-runner-set-xwvwr-runner-dk5lf   1/1     Running   0          6s

 

Anterior Gerenciamento de Acessos no Redis com Controle de Usuários e Permissões por Chaves
Próxima Como usar o Kustomize no Kubernetes

About author

Você pode gostar também

Uncategorized

The Sims 4 Anadius ➤ Atualize e Personalize Seu Jogo Facilmente

The Sims 4 Anadius ➤ atualize e gerencie seu jogo com facilidade, incluindo mods e conteúdo personalizado. Descubra como otimizar sua experiência de jogo agora!

Uncategorized

Invista na sua carreira com 50% de desconto em cursos de TI

Olá, Chegou a hora de você investir na sua carreira e a 4Linux te dá a ajuda que faltava: 50% de desconto em TODOS os nossos cursos nas turmas de

Uncategorized

Best Crypto Trading Platform ➤ Secure & User-Friendly Options

Best crypto trading platform ➤ Find top platforms with user-friendly interfaces, robust security, and a wide range of cryptocurrencies. Ideal for users in India & the USA, looking for local currency support and regulatory compliance.