Distribuire GitHub Actions a disponibilità elevata nel servizio Azure Kubernetes usando la panoramica di File di Azure

In questa guida si distribuisce un controller GitHub Actions a disponibilità elevata e agenti self-hosted in esecuzione nel servizio Azure Kubernetes. Gli strumenti di esecuzione self-hosted usano condivisioni file di Azure SMB per l'archiviazione permanente.

Importante

Il software open source è citato nella documentazione e negli esempi di AKS (Azure Kubernetes Service). Il software che distribuisci è escluso dagli accordi sul livello di servizio di AKS, dalla garanzia limitata e dal supporto Azure. Quando si utilizza la tecnologia open source insieme ad AKS, consultare le opzioni di supporto disponibili dalle rispettive community e dai manutentori di progetti per sviluppare un piano.

Microsoft si assume la responsabilità di creare i pacchetti open source che distribuiamo su AKS. Tale responsabilità include la completa gestione dei processi di build, scan, firma, validazione e hotfix, oltre al controllo dei file binari nelle immagini dei contenitori. Per altre informazioni, vedere Gestione delle vulnerabilità per il servizio Azure Kubernetes e Copertura del supporto del servizio Azure Kubernetes.

Che cos'è Actions Runner Controller (ARC)?

Actions Runner Controller (ARC) è un operatore di Kubernetes che orchestra e scala i runner self-hosted per GitHub Actions. ARC si basa su volumi persistenti (PV) per condividere le informazioni sui processi tra il pod dello strumento di esecuzione e il pod del processo contenitore. Per ulteriori informazioni, vedere Informazioni su Actions Runner Controller.

Perché usare le azioni GitHub auto-ospitate su AKS (Azure Kubernetes Service)?

I runner di GitHub Actions autogestiti su AKS offrono alle organizzazioni un maggiore controllo, scalabilità e sicurezza sulla loro infrastruttura CI/CD. Invece di basarsi su strumenti di esecuzione ospitati su GitHub, che sono strumenti di esecuzione condivisi e temporanei, gli strumenti di esecuzione self-hosted offrono:

  • Ambienti personalizzati: Personalizza i runner per soddisfare requisiti specifici di build, test o distribuzione.
  • Miglioramenti delle prestazioni: sfruttare l'archiviazione permanente e la memorizzazione nella cache per ridurre i tempi di compilazione e migliorare l'affidabilità.
  • Efficienza dei costi su larga scala: scala dinamicamente i runner all'interno della tua infrastruttura, ottimizzando i flussi di lavoro frequenti o a lunga durata.
  • Sicurezza e isolamento migliorati: mantenere il controllo completo sull'infrastruttura e sui dati, ideale per settori regolamentati o carichi di lavoro sensibili.

Casi d'uso comuni

  • Pipeline CI/CD aziendali: per i team che necessitano di ambienti di compilazione coerenti, sicuri e scalabili.
  • Pipeline monorepos o ML di grandi dimensioni: dove la memorizzazione nella cache o la persistenza degli artefatti è fondamentale.
  • Ottimizzazione delle prestazioni: uso delle condivisioni SMB Premium di File di Azure per ridurre la latenza dei metadati e aumentare le operazioni di I/O al secondo.

Prerequisiti

  • Questa guida presuppone una conoscenza di base dei concetti di base di Kubernetes.
  • Sono necessari i ruoli predefiniti di AzureProprietario o Amministratore accesso utenti e Collaboratore in una sottoscrizione nell'account Azure.

Processo di distribuzione

In questa guida si apprenderà come:

  • Usare Azure CLI per creare un cluster AKS multizona.
  • Distribuire una condivisione file di Azure per usarla nei volumi persistenti di AKS.
  • Installare il GitHub Actions Runner Controller (ARC) su AKS.
  • Installare un set di scalabilità di strumenti di esecuzione ARC e montare la condivisione file nel servizio Azure Kubernetes.
  • Eseguire un flusso di lavoro di esempio usando GitHub Actions.

Architettura di distribuzione

Questa architettura di riferimento illustra come implementare una soluzione di runner autogestito di GitHub Actions usando AKS e Azure File Share (SMB). La soluzione consente alle organizzazioni di eseguire processi del flusso di lavoro GitHub in modo sicuro all'interno della propria infrastruttura di Azure mantenendo al tempo stesso una gestione efficiente delle risorse di archiviazione e scalabilità.

Screenshot del diagramma dell'architettura per GitHub Actions con Azure Files su AKS.

L'architettura è costituita da tre componenti principali:

  1. Livello di integrazione di GitHub: connette i flussi di lavoro dai repository GitHub all'infrastruttura di Azure.
  2. Livello di orchestrazione di AKS: Gestisce le istanze di esecuzione containerizzate e il loro ciclo di vita.
  3. Livello di archiviazione: offre funzionalità di archiviazione permanenti e temporanee per i runner.

Livello di integrazione di GitHub

Il livello di integrazione di GitHub connette i flussi di lavoro dai repository GitHub all'infrastruttura di Azure. I processi del flusso di lavoro vengono inviati da GitHub tramite api.github.com e githubusercontent.com a strumenti di esecuzione self-hosted.

Livello di orchestrazione del cluster AKS

Il livello di orchestrazione del cluster AKS gestisce le istanze in contenitori del runner e il loro ciclo di vita. Il cluster è suddiviso in due spazi dei nomi: arc-controller e arc-runners.

arc-controller gestisce l'infrastruttura dello strumento di esecuzione e i listener di processi. arc-runners gestisce i segreti, il controllo degli accessi e i runner pod. I runner sono containerizzati, utilizzano archiviazione effimera e si connettono a volumi condivisi e dedicati.

Livello di archiviazione

Il livello di archiviazione Condivisioni file di Azure fornisce sia la condivisione file NuGet con accesso ReadWriteMany per le dipendenze condivise sia l'archiviazione temporanea per gli strumenti di esecuzione, tutti supportati da attestazioni di volume persistente.

Passo successivo

Contributori

Microsoft gestisce questo articolo. I collaboratori seguenti l'hanno originariamente scritto:

  • Jorge Arterio | Esperto Senior di Cloud
  • Jeff Patterson | Product Manager principale
  • Rena Shah | Senior Product Manager
  • Shekhar Singh Sorot | Product Manager 2
  • Erin Schaffer | Sviluppatore di contenuti 2