Ridimensiona e ottimizza Jenkins suOracle Cloud Infrastructure Kubernetes Engine

Jenkins è un sistema CI/CD ancora utilizzato dagli sviluppatori per verificare, creare e distribuire automaticamente il proprio codice, in modo che possano concentrarsi solo sulla distribuzione di nuove funzionalità.

Con il rilascio di Kubernetes, le architetture distribuite e condivise sono diventate gradualmente la norma, tanto che tutti i sistemi CI/CD più recenti vengono implementati su Kubernetes. Per quanto riguarda Jenkins, l'architettura controller/agente potrebbe non essere sufficientemente scalabile per grandi organizzazioni e team di sviluppo, ma grazie allo sforzo della community è possibile containerizzare Jenkins e distribuirlo in modo cloud nativo.

Puoi ospitare Jenkins su Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine o OKE) per centralizzare l'automazione dello sviluppo e ridimensionarla di pari passo con la crescita dei progetti software. Implementando un Jenkins scalabile su OKE, gli sviluppatori saranno in grado di sviluppare nuovi servizi con agilità e scalare facilmente le pipeline CI/CD.

Architettura

Questa architettura di riferimento di alto livello mostra un esempio di più distribuzioni Jenkins in OKE. Distribuendo Jenkins in OKE come servizio è possibile eseguire la scalabilità in base alle esigenze.

Ogni pod del controller Jenkins ha un volume persistente collegato, per mantenere la cronologia della pipeline e i plugin aggiuntivi installati dai team. Gli agenti Jenkins verranno creati ogni volta che un job della pipeline viene attivato ed eliminato automaticamente alla fine.

Ogni istanza Jenkins può essere esposta singolarmente tramite un load balancer o utilizzando un'entrata Kubernetes.

Il seguente diagramma illustra questa architettura di riferimento.



oci-jenkins-oke-arch-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.

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

  • Load balancer

    Il servizio Oracle Cloud Infrastructure Load Balancing fornisce la distribuzione automatica del traffico da un unico punto di accesso a più server nel back-end.

  • Lista di sicurezza

    Per ogni subnet, puoi creare regole di sicurezza che specificano l'origine, la destinazione e il tipo di traffico che devono essere consentiti all'interno e all'esterno della subnet.

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

Suggerimenti

Utilizzare i seguenti suggerimenti come punto di partenza. I tuoi requisiti potrebbero essere diversi dall'architettura descritta qui.
  • 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.

  • Sicurezza

    Utilizza Oracle Cloud Guard per monitorare e mantenere in modo proattivo la sicurezza delle tue risorse OCI in Oracle Cloud Infrastructure in modo proattivo. 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 qualsiasi attività di configurazione errata o non sicura, 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.

  • Larghezza di banda del load balancer

    Durante la creazione del load balancer, puoi selezionare una forma predefinita che fornisca una larghezza di banda fissa oppure specificare una forma personalizzata (flessibile) in cui impostare un intervallo di larghezza di banda e consentire al servizio di ridimensionare automaticamente la larghezza di banda in base ai pattern di traffico. Con entrambi gli approcci, puoi modificare la forma in qualsiasi momento dopo aver creato il load balancer.

  • Oracle Cloud Infrastructure Kubernetes Engine e forme di computazione

    Come minimo, due pool di nodi vengono distribuiti su OCI Kubernetes Engine: uno per i controller Jenkins e un altro per gli agenti Jenkins.

    Per risparmiare sui costi e ottimizzare l'intera soluzione, si consiglia di utilizzare VM.Standard.A1. Istanze Flex per i controller Jenkins, poiché Jenkins è completamente compatibile con le istanze ARM. Per il pool di nodi agente, il suggerimento è quello di utilizzare le istanze prerilasciabili in quanto in genere i job della pipeline sono di breve durata e tolleranti agli errori.

  • Oracle Cloud Infrastructure Registry

    Oracle Cloud Infrastructure Registry è un repository di container privato conforme a OCI per ospitare le immagini. In questa architettura è opzionale e può essere utilizzato per ospitare le proprie immagini personalizzate Jenkins con tutti i plugin necessari installati. Si consiglia di creare un'immagine del controller Jenkins personalizzata per applicare la sicurezza e raggruppare tutti i plugin comunemente utilizzati in un'unica immagine contenitore.

Considerazioni

Quando si distribuisce questa architettura di riferimento, tenere presente quanto riportato di seguito.

  • Prestazioni e scalabilità

    Utilizzando Kubernetes, è facile ridimensionare sia il controller Jenkins che gli agenti man mano che il team di sviluppo cresce o si riduce. Inoltre, poiché i pod agente vengono creati ogni volta che viene eseguito un job di pipeline, è possibile personalizzare le risorse utilizzate da questi pod su una base di pipeline.

  • Disponibilità

    Per ottimizzare la disponibilità, si consiglia di eseguire il provisioning di più nodi OKE in domini di disponibilità o di errore diversi. Inoltre, per proteggere Jenkins da interruzioni volontarie e involontarie, è possibile utilizzare un meccanismo Kubernetes standard, come i budget per l'interruzione dei pod e l'anti-affinità dei pod.

  • Costo

    L'obiettivo di questa architettura è anche quello di ridurre al minimo i costi quando si utilizza Jenkins in OKE. È possibile utilizzare i nodi ARM per i controller Jenkins, che costano un quarto delle istanze di computazione flessibili. Per quanto riguarda gli agenti Jenkins, i nodi di istanza prerilasciabili consentono ai clienti di risparmiare metà del budget.

conferme

  • Author: Alberto Campagna
  • Contributor: Marta Tolosa