Best practice per gli GitOps in Kubernetes con Config Sync
Questa pagina fornisce un punto di partenza per aiutarti a pianificare e creare architetture delle pipeline GitOps CI/CD per Kubernetes, che possono aiutarti a sfruttare al meglio Config Sync.
La stessa GitOps è una best practice universale per le organizzazioni che gestiscono la configurazione di Kubernetes su larga scala. Tuttavia, per quanto riguarda l'architettura di questa soluzione, hai molte opzioni. Comprendere le opzioni disponibili e i vantaggi e i compromessi di queste decisioni può aiutarti a evitare di riscrivere la tua architettura in futuro.
Non è necessario seguire tutte le best practice elencate in questa pagina. Le best practice che scegli di adottare dipendono dalla tua situazione unica. L'obiettivo di questa pagina è aiutarti a prendere decisioni informate durante la configurazione dell'architettura GitOps.
Usa un repository di pacchetti privato centralizzato
L'utilizzo di un repository centrale per i pacchetti pubblici o interni (come Helm o kpt
) può aiutare i team a trovare i pacchetti più facilmente. Puoi utilizzare servizi come i repository Artifact Registry o Git.
Il team dedicato alla piattaforma può implementare criteri in cui i team applicativi possano utilizzare i pacchetti solo dal repository centrale. In alternativa, potrebbero utilizzare il repository centrale come set di pacchetti controllati.
Puoi limitare le autorizzazioni di scrittura al repository solo a un numero limitato di ingegneri. Il resto dell'organizzazione può disporre dell'accesso in lettura. Ti consigliamo di implementare una procedura per la promozione dei pacchetti nel repository centrale e per la trasmissione degli aggiornamenti.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi dell'utilizzo di un repository di pacchetti privato e centralizzato:
Vantaggi |
Svantaggi |
|
|
Crea repository bagnati
Crea repository con l'output YAML che corrisponda allo stato desiderato del cluster o dello spazio dei nomi. Le modifiche al repository bagnato o completamente idratato devono essere facili da rivedere utilizzando un diff. È buona norma apportare modifiche solo al repository bagnato tramite un processo di revisione (ad esempio, in GitHub questa è una richiesta di pull).
Nella tabella seguente sono elencati i vantaggi e gli svantaggi della creazione di repository bagnati:
Vantaggi |
Svantaggi |
|
|
Sposta a sinistra per convalidare le configurazioni
Attendere che Config Sync inizi a eseguire la sincronizzazione per verificare eventuali problemi può creare commit Git non necessari e un lungo ciclo di feedback. Puoi riscontrare molti problemi prima che una configurazione venga applicata a un cluster utilizzando le funzioni di convalida kpt
come kubeval.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi del controllo dei problemi prima dell'applicazione di una configurazione:
Vantaggi |
Svantaggi |
|
|
Utilizzare le cartelle invece dei rami
Utilizza le cartelle per le varianti della configurazione anziché i rami. Con le cartelle, puoi usare il comando tree
per vedere le varianti. Ad esempio, con i rami non è possibile stabilire se il delta tra un ramo di produzione e un ramo è un cambiamento imminente di configurazione o una differenza permanente tra la fase e il produzione.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi dell'utilizzo delle cartelle anziché dei rami:
Vantaggi |
Svantaggi |
|
|
Riduci al minimo l'utilizzo di ClusterSelectors
ClusterSelectors
consente di applicare determinate parti di una configurazione a un sottoinsieme di cluster. Invece di configurare RootSync o RepoSync, puoi modificare la risorsa applicata o aggiungere etichette ai cluster. Nel tempo, tuttavia, con l'aumento del numero di ClusterSelectors
può essere complicato comprendere lo stato finale del cluster.
Config Sync consente di sincronizzare più istanze di RootSyncs
e RepoSyncs
contemporaneamente, il che significa che puoi aggiungere la configurazione pertinente a un repository separato e poi sincronizzarla con i cluster desiderati.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi dell'utilizzo di ClusterSelectors
:
Vantaggi |
Svantaggi |
|
|
Utilizza repository non strutturati
Config Sync supporta due strutture per organizzare un repository: non strutturato e gerarchico. L'approccio non strutturato è l'approccio consigliato perché ti consente di organizzare un repository nel modo più pratico per te.
I repository gerarchici, per confronto, applicano una struttura specifica. Ad esempio, i file CRD devono trovarsi in una directory specifica. Questo può causare problemi quando devi condividere le configurazioni. Ad esempio, se un team pubblica un pacchetto che contiene un CRD, un altro team che deve utilizzare questo pacchetto dovrà spostare il CRD in una directory cluster
, aggiungendo più overhead al processo.
La seguente tabella elenca i vantaggi e gli svantaggi dell'utilizzo di repository non strutturati:
Vantaggi |
Svantaggi |
|
|
Per scoprire come convertire un repository gerarchico, consulta Convertire un repository gerarchico in un repository non strutturato.
Repository di codice e configurazione separati
Quando viene fatto lo scale up di un monorepository, è necessaria una build specifica per ogni cartella. Le autorizzazioni e i problemi per le persone che lavorano al codice e lavorano alla configurazione del cluster sono generalmente diverse. Mantenendo separati i repository di codice e configurazione, ogni repository può avere le proprie autorizzazioni e la propria struttura.
La tabella seguente elenca i vantaggi e gli svantaggi della separazione dei repository del codice e della configurazione:
Vantaggi |
Svantaggi |
|
|
Utilizzare repository separati per isolare le modifiche
Quando si esegue lo scale up di un repository singolo, sono necessarie autorizzazioni diverse per cartelle diverse. Per questo motivo, la separazione dei repository consente di limitare la sicurezza tra configurazione di piattaforma, sicurezza e applicazione. Inoltre, è una buona idea separare i repository di produzione da quelli non di produzione.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi dell'isolamento delle modifiche nei repository separati:
Vantaggi |
Svantaggi |
|
|
Fissa versioni dei pacchetti
Sia che utilizzi Helm o Git, devi bloccare la versione del pacchetto di configurazione su un elemento che non venga accidentalmente spostato senza un'implementazione esplicita.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi delle versioni con pacchetto bloccato:
Vantaggi |
Svantaggi |
|
|
Utilizzo di Workload Identity
Puoi abilitare Workload Identity sui cluster GKE, che consente ai carichi di lavoro Kubernetes di accedere ai servizi Google in modo sicuro e gestibile.
Nella tabella seguente sono elencati i vantaggi e gli svantaggi dell'utilizzo di Workload Identity:
Vantaggi |
Svantaggi |
|
|
Architettura di alto livello
A livello generale, probabilmente ti servono almeno quattro tipi di repository:
- Un repository di pacchetti in cui è archiviata la configurazione condivisa. Potrebbe anche essere un grafico Helm memorizzato in Artifact Registry.
- Un repository di piattaforme in cui il team della piattaforma archivia la configurazione a livello di parco risorse per cluster e spazi dei nomi.
- Un repository di configurazione delle applicazioni.
- Un repository di codice dell'applicazione.
Il seguente diagramma mostra il layout di questi repository:

Il seguente diagramma mostra il flusso della configurazione dal codice dell'applicazione a un repository di configurazione dell'applicazione. I team di sviluppo eseguono il push del codice per applicazioni e configurazioni delle applicazioni in un repository. Il codice per le app e le configurazioni è archiviato nella stessa posizione e i team applicativi hanno il controllo di questi repository. I team dell'app possono quindi eseguire il push del codice in una build.
