Distribuisci i runner GitLab su OCI Kubernetes Engine con il ridimensionamento automatico dei cluster
Distribuisci GitLab Runner su Oracle Cloud Infrastructure (OCI) Kubernetes Engine con funzionalità di ridimensionamento automatico per ridimensionare automaticamente i nodi di lavoro in base al carico per garantire job senza problemi nella pipeline CI/CD.
Architettura
Questa architettura mostra i runner GitLab distribuiti in un cluster OCI Kubernetes Engine (OKE).
Il seguente diagramma illustra questa architettura di riferimento.

Descrizione dell'immagine git-lab-runner-kubernetes.png
git-lab-runner-kubernetes-oracle.zip
L'architettura presenta i seguenti componenti:
- Area
Un'area geografica Oracle Cloud Infrastructure è un'area geografica localizzata che contiene uno o più data center, denominati domini di disponibilità. Le regioni sono indipendenti da altre regioni e grandi distanze possono separarle (tra paesi o addirittura continenti).
- Domini di disponibilità
I domini di disponibilità sono data center standalone e indipendenti all'interno di un'area geografica. Le risorse fisiche in ciascun dominio di disponibilità sono isolate dalle risorse negli altri domini di disponibilità, il che fornisce tolleranza agli errori. I domini di disponibilità non condividono l'infrastruttura, ad esempio alimentazione o raffreddamento, o la rete interna del dominio di disponibilità. Pertanto, un errore in un dominio di disponibilità non dovrebbe influire sugli altri domini di disponibilità nell'area.
- Domini di errore
Un dominio di errore consiste in un gruppo di hardware e infrastruttura all'interno di un dominio di disponibilità. Ogni dominio di disponibilità dispone di tre domini di errore con alimentazione e hardware indipendenti. Quando distribuisci le risorse su più domini di errore, le tue applicazioni possono tollerare errori fisici del server, manutenzione del sistema e errori di alimentazione all'interno di un dominio di errore.
- Rete cloud virtuale (VCN) e subnet
Una VCN è una rete personalizzabile e definita dal software configurata in un'area Oracle Cloud Infrastructure. Come le tradizionali reti di data center, le reti VCN consentono di controllare l'ambiente di rete. Una VCN può avere più blocchi CIDR non sovrapposti che è possibile modificare dopo aver creato la VCN. Puoi segmentare una VCN in subnet, che possono essere definite in un'area o in un dominio di disponibilità. Ogni subnet è costituita da un intervallo contiguo di indirizzi che non si sovrappongono alle altre subnet nella VCN. È possibile modificare le dimensioni di una subnet dopo la creazione. Una subnet può essere pubblica o privata.
- Gateway del servizio
Il gateway di servizi fornisce l'accesso da una VCN ad altri servizi, come Oracle Cloud Infrastructure Object Storage. Il traffico dalla VCN al servizio Oracle viene instradato sul fabric di rete Oracle e non attraversa Internet.
- Motore Kubernetes
Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine o OKE) è un servizio completamente gestito, scalabile e ad alta disponibilità che puoi utilizzare per distribuire le tue applicazioni containerizzate nel cloud. Puoi specificare le risorse di computazione richieste dalle tue applicazioni e Kubernetes Engine le esegue sul Oracle Cloud Infrastructure in una tenancy esistente. OKE utilizza Kubernetes per automatizzare l'implementazione, la scalabilità e la gestione di applicazioni containerizzate tra cluster di host.
- Cloud Guard
Puoi utilizzare Oracle Cloud Guard per monitorare e gestire la sicurezza delle tue risorse in Oracle Cloud Infrastructure. Cloud Guard utilizza ricette del rilevatore che è possibile definire per esaminare le risorse per individuare eventuali punti deboli della sicurezza e per monitorare operatori e utenti per determinate attività rischiose. Quando viene rilevata una configurazione errata o un'attività non sicura, Cloud Guard consiglia azioni correttive e aiuta a eseguire tali azioni, in base alle ricette dei rispondenti che è possibile definire.
- Zona di sicurezza
Le zone di sicurezza garantiscono le procedure ottimali di sicurezza di Oracle fin dall'inizio applicando criteri quali la cifratura dei dati e la prevenzione dell'accesso pubblico alle reti per un intero compartimento. Una zona di sicurezza è associata a un compartimento con lo stesso nome e include criteri della zona di sicurezza o una "ricetta" che si applica al compartimento e ai relativi compartimenti secondari. Non è possibile aggiungere o spostare un compartimento standard in un compartimento della zona di sicurezza.
- Autoscaler del cluster Kubernetes
Kubernetes Cluster Autoscaler aumenta o riduce automaticamente la dimensione di un pool di nodi in base alle richieste di risorse, anziché l'utilizzo delle risorse dei nodi nel pool di nodi.
- Servizi OKE
Il servizio Kubernetes (OKE) è un'astrazione che definisce un set logico di pod e un criterio mediante il quale accedervi. Il set di pod mirati da un servizio è in genere determinato da un selettore. I servizi Kubernetes gestiscono il ridimensionamento automatico.
- Pool di nodi di lavoro OKE
Un nodo di lavoro Kubernetes è una macchina operativa che esegue applicazioni containerizzate all'interno di un cluster Kubernetes. Ogni cluster dispone di almeno un nodo di lavoro.
Un pool di nodi di lavoro Kubernetes (OKE) è un subset di nodi di lavoro all'interno di un cluster che hanno tutti la stessa configurazione. I pool di nodi consentono di creare pool di computer all'interno di un cluster con configurazioni diverse. Ad esempio, è possibile creare un pool di nodi in un cluster come virtual machine e un altro pool di nodi come computer Bare Metal. Un cluster deve avere almeno un pool di nodi, ma un pool di nodi non deve contenere nodi di lavoro.
I nodi di lavoro in un pool di nodi sono connessi a una subnet di nodi di lavoro nella VCN.
- Gateway Internet
Il gateway Internet consente il traffico tra le subnet pubbliche in una VCN e la rete Internet pubblica.
- Gateway NAT (Network Address Translation)
Un gateway NAT consente alle risorse private in una VCN di accedere agli host su Internet, senza esporre tali risorse alle connessioni Internet in entrata.
Suggerimenti
- VCN
Quando crei una VCN, determina il numero di blocchi CIDR necessari e la dimensione di ciascun blocco in base al numero di risorse che intendi collegare alle subnet nella VCN. Utilizzare i blocchi CIDR all'interno dello spazio di indirizzi IP privati standard.
Selezionare i blocchi CIDR che non si sovrappongono a qualsiasi altra rete (in Oracle Cloud Infrastructure, nel data center on premise o in un altro provider cloud) a cui si intende impostare connessioni private.
Dopo aver creato una VCN, puoi modificarne, aggiungerne e rimuoverne i blocchi CIDR.
Quando si progettano le subnet, considerare il flusso di traffico e i requisiti di sicurezza. Collega tutte le risorse all'interno di un livello o ruolo specifico alla stessa subnet, che può fungere da limite di sicurezza.
Utilizzare le subnet regionali.
- Sicurezza
Utilizza Oracle Cloud Guard per monitorare e gestire la sicurezza delle tue risorse in OCI in modo proattivo. Oracle Cloud Guard utilizza ricette del rilevatore che è possibile definire per esaminare le risorse alla ricerca di punti deboli nella sicurezza e per monitorare operatori e utenti per attività rischiose. Quando viene rilevata una configurazione errata o un'attività non sicura, Oracle Cloud Guard consiglia azioni correttive e aiuta a eseguire tali azioni, in base alle ricette del rispondente che è possibile definire.
Per le risorse che richiedono una maggiore sicurezza, Oracle consiglia di utilizzare le zone di sicurezza. Una zona di sicurezza è un compartimento associato a una ricetta definita da Oracle dei criteri di sicurezza che si basano sulle best practice. Ad esempio, le risorse in una zona di sicurezza non devono essere accessibili dalla rete Internet pubblica e devono essere cifrate utilizzando chiavi gestite dal cliente. Quando crei e aggiorni le risorse in una zona di sicurezza, OCI convalida le operazioni rispetto ai criteri nella ricetta della zona di sicurezza e nega le operazioni che violano uno qualsiasi dei criteri.
- Cloud Guard
Duplica e personalizza le ricette predefinite fornite da Oracle per creare ricette personalizzate del rilevatore e del rispondente. Queste ricette consentono di specificare il tipo di violazione della sicurezza che genera un'avvertenza e le azioni consentite per l'esecuzione. Ad esempio, potresti voler rilevare i bucket di storage degli oggetti con visibilità impostata su Pubblico.
Applica Cloud Guard a livello di tenancy per coprire l'ambito più ampio e ridurre l'onere amministrativo legato alla gestione di più configurazioni.
È inoltre possibile utilizzare la funzione Lista gestita per applicare determinate configurazioni ai rilevatori.
- Gruppi di sicurezza di rete (NSG)
Puoi utilizzare i gruppi NSG per definire un set di regole in entrata e in uscita che si applicano a VNIC specifiche. Si consiglia di utilizzare i gruppi NSG anziché gli elenchi di sicurezza, poiché i gruppi NSG consentono di separare l'architettura della subnet della VCN dai requisiti di sicurezza dell'applicazione.
- Motore Kubernetes OCI
Sebbene l'operatore supporti qualsiasi cluster Kubernetes generico, questa architettura utilizza i cluster Kubernetes Engine. Questi cluster dispongono di tre nodi di lavoro distribuiti su domini di disponibilità e di errore diversi. Il cluster mostrato contiene nodi di lavoro distribuiti su host fisici diversi. È possibile creare fino a 1000 nodi in un cluster.
- Zone di sicurezza
Per le risorse che richiedono una maggiore sicurezza, Oracle consiglia di utilizzare le zone di sicurezza. Una zona di sicurezza è un compartimento associato a una ricetta definita da Oracle dei criteri di sicurezza che si basano sulle best practice. Ad esempio, le risorse in una zona di sicurezza non devono essere accessibili dalla rete Internet pubblica e devono essere cifrate utilizzando chiavi gestite dal cliente. Quando crei e aggiorni le risorse in una zona di sicurezza, Oracle Cloud Infrastructure convalida le operazioni in base ai criteri nella ricetta della zona di sicurezza e nega le operazioni che violano uno qualsiasi dei criteri.
- Calcolo
Scegli le forme con la combinazione appropriata di OCPU e memoria ed esegui il provisioning dello storage locale NVMe e a blocchi in base alle esigenze per i nodi del cluster Kubernetes.
Considerazioni
Quando si distribuisce questa architettura di riferimento, tenere presente quanto riportato di seguito.
- Prestazioni
Il ridimensionamento automatico del cluster si basa sulla prenotazione delle risorse di distribuzione. È possibile controllare la prenotazione delle risorse di job modificando il file
gitlab-ci.yaml
. - Sicurezza
Utilizza criteri che limitano chi può accedere a quali risorse Oracle Cloud Infrastructure (OCI) ha la tua azienda e come.
OCI Kubernetes Engine è integrato con OCI Identity and Access Management, che offre una facile autenticazione con la funzionalità di identità OCI nativa.
Utilizzare le variabili riportate di seguito per controllare la prenotazione delle risorse per un job.
KUBERNETES_CPU_REQUEST: 1 KUBERNETES_MEMORY_REQUEST: 4000M
- Scalabilità
Puoi eseguire lo scale out della tua applicazione aggiornando il numero di nodi di lavoro nel cluster Kubernetes, a seconda del carico. Analogamente, è possibile eseguire lo scale in riducendo il numero di nodi di lavoro nel cluster. Quando crei un servizio nel cluster Kubernetes, puoi creare un load balancer per distribuire il traffico del servizio tra i nodi assegnati a tale servizio. Il ridimensionamento automatico del cluster si basa sulla prenotazione delle risorse di distribuzione. È possibile controllare la prenotazione modificando il file
gitlab-ci.yaml
.Nota
La prenotazione delle risorse del job utilizzando i parametri nel filegitlab-ci.yaml
non deve superare il numero massimo di prenotazioni consentite definito per GitLab Runner nell'ambito delle righe seguenti del filelocals.tf
:cpu_request_overwrite_max_allowed = "1" memory_request_overwrite_max_allowed = "4096M"
- Costo
L'utilizzo di OCI Kubernetes Engine è gratuito e l'utilizzo di Oracle Container Registry è gratuito. I costi dei nodi nel cluster Kubernetes vengono addebitati alla stessa velocità di qualsiasi altra istanza di computazione con la stessa forma.
Distribuire
- Distribuisci utilizzando lo stack di esempio in Oracle Cloud Infrastructure Resource Manager:
- Andare a
.
Se non si è già connessi, immettere la tenancy e le credenziali utente.
- Selezionare l'area in cui distribuire lo stack.
- Seguire i prompt visualizzati e le istruzioni per creare lo stack.
- Dopo aver creato lo stack, fare clic su Azioni Terraform e selezionare Piano.
- Attendere il completamento del job e rivedere il piano.
Per apportare eventuali modifiche, tornare alla pagina Dettagli stack, fare clic su Modifica stack e apportare le modifiche necessarie. Eseguire quindi di nuovo l'azione Piano.
- Se non sono necessarie ulteriori modifiche, tornare alla pagina Dettagli stack, fare clic su Azioni Terraform e selezionare Applica.
- Andare a
- Eseguire la distribuzione utilizzando il codice Terraform in GitHub:
- Passare a GitHub.
- Duplica o scarica il repository nel computer locale.
- Seguire le istruzioni riportate nel documento
README
.
Visualizza altro
Ulteriori informazioni su Oracle Cloud Infrastructure (OCI) e Kubernetes.
Esamina il playbook della soluzione Best practice per Oracle Cloud Infrastructure per le best practice.
Esamina queste risorse aggiuntive OCI e GitLab: