Distribuisci GitOps con Argo CD e OCI Kubernetes Engine
GitOps è un'architettura CI/CD che utilizza i repository Git come un'unica fonte di informazioni affidabili per distribuire l'infrastruttura sotto forma di codice. Si consiglia di inserire l'intera applicazione, dal codice sorgente e dalla configurazione dell'applicazione, in modo dichiarativo nei repository Git. Ciò fornisce un modo coerente per distribuire le modifiche alla configurazione di un'applicazione e fornisce il controllo della versione utilizzando flussi di lavoro Git ben noti, come le richieste Pull e le richieste di unione.
- Un flusso di lavoro standard per lo sviluppo di applicazioni.
- Maggiore sicurezza per l'impostazione anticipata dei requisiti delle applicazioni.
- Maggiore affidabilità con visibilità e controllo delle versioni tramite Git.
- Coerenza tra qualsiasi cluster, qualsiasi cloud e qualsiasi ambiente on-premise.
Si consiglia di disporre di repository Git separati per il codice sorgente e la configurazione dell'applicazione, poiché le modifiche alla configurazione in genere non richiedono modifiche al codice sorgente dell'applicazione. La presenza di repository diversi consente di modificare la configurazione dell'applicazione senza attivare una build CI.
- File manifesto Kubernetes
- Grafici Helm
- Personalizza file manifesti.
Architettura
È possibile accedere all'applicazione Argo CD tramite l'interfaccia Web o l'interfaccia della riga di comando di Argo CD. La connettività allo strumento CD Argo viene fornita da un servizio di load balancer distribuito nel cluster OCI Kubernetes Engine. Una volta distribuito, il CD Argo viene configurato per la sincronizzazione con i repository Git ospitati internamente o esternamente su Oracle Cloud Infrastructure, a condizione che il cluster OCI Kubernetes Engine disponga della connettività IP sulle porte richieste e sulle credenziali per i repository Git. Dopo la sincronizzazione di Argo CD con i repository, gli eventuali aggiornamenti alla configurazione dell'applicazione apportati nel repository verranno applicati al cluster OCI Kubernetes Engine. Se vengono apportate modifiche all'applicazione al di fuori del repository Git, Argo CD considererà l'applicazione non sincronizzata e ripristinerà le modifiche in modo che sia in linea con lo stato desiderato del repository Git.
Il seguente diagramma illustra questa architettura di riferimento.
Descrizione dell'immagine argocd.png
- Tenancy
Oracle Autonomous Transaction Processing è un servizio di database self-driving, self-securing, self-repairing ottimizzato per i carichi di lavoro di elaborazione delle transazioni. Non è necessario configurare o gestire alcun componente hardware né installare software. Oracle Cloud Infrastructure gestisce la creazione del database, nonché il backup, l'applicazione di patch, l'aggiornamento e l'ottimizzazione del database.
- Area
Un'area geografica di 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).
- Compartimento
I compartimenti sono partizioni logiche tra più aree all'interno di una tenancy Oracle Cloud Infrastructure. Utilizza i compartimenti per organizzare le risorse in Oracle Cloud, controllare l'accesso alle risorse e impostare le quote d'uso. Per controllare l'accesso alle risorse in un determinato compartimento, definire criteri che specificano chi può accedere alle risorse e quali azioni possono eseguire.
- 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 improbabile che l'eventuale guasto di un dominio di disponibilità influenzi gli 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 geografica Oracle Cloud Infrastructure. Come le tradizionali reti di data center, le reti VCN offrono un controllo completo sull'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. Il load balancer fornisce l'accesso a diverse applicazioni.
- Repository di codici
Nel servizio DevOps è possibile creare repository di codici privati personalizzati o connettersi a repository di codici esterni quali GitHub, GitLab e Bitbucket Cloud.
- 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.
- Gateway NAT
Il gateway NAT consente alle risorse private in una VCN di accedere agli host su Internet, senza esporre tali risorse alle connessioni Internet in entrata.
- 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 viaggia sul fabric di rete Oracle e non passa mai attraverso Internet.
- 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 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.
- 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.
- Storage degli oggetti
Lo storage degli oggetti offre un accesso rapido a grandi quantità di dati strutturati e non strutturati di qualsiasi tipo di contenuto, inclusi backup del database, dati analitici e contenuti avanzati come immagini e video. Puoi memorizzare e quindi recuperare i dati direttamente da Internet o dall'interno della piattaforma cloud. Puoi ridimensionare lo storage senza problemi senza compromettere le prestazioni o l'affidabilità del servizio. Utilizza lo storage standard per lo storage "caldo" a cui è necessario accedere rapidamente, immediatamente e frequentemente. Utilizza lo storage di archivio per lo storage "freddo" che conservi per lunghi periodi di tempo e a cui accedi raramente o raramente.
- FastConnect
Oracle Cloud Infrastructure FastConnect consente di creare facilmente una connessione dedicata e privata tra il data center e Oracle Cloud Infrastructure. FastConnect fornisce opzioni per una maggiore larghezza di banda e un'esperienza di rete più affidabile se confrontata con le connessioni basate su Internet.
- Local Peering Gateway (LPG)
Un GPL ti consente di eseguire il peer di una VCN con un'altra VCN nella stessa area. Peering significa che le VCN comunicano utilizzando indirizzi IP privati, senza il traffico che attraversa Internet o l'instradamento tramite la rete on premise.
- Autonomous Database
I database autonomi di Oracle Cloud Infrastructure sono ambienti di database completamente gestiti e preconfigurati che puoi utilizzare per l'elaborazione delle transazioni e i carichi di lavoro di data warehousing. Non è necessario configurare o gestire alcun componente hardware né installare software. Oracle Cloud Infrastructure gestisce la creazione del database, nonché il backup, l'applicazione di patch, l'aggiornamento e l'ottimizzazione del database.
- Autonomous Data Warehouse
Oracle Autonomous Data Warehouse è un servizio di database self-driving, self-securing, self-repairing ottimizzato per i carichi di lavoro di data warehousing. Non è necessario configurare o gestire alcun componente hardware né installare software. Oracle Cloud Infrastructure gestisce la creazione del database, nonché il backup, l'applicazione di patch, l'aggiornamento e l'ottimizzazione del database.
- Autonomous Transaction Processing
Oracle Autonomous Transaction Processing è un servizio di database self-driving, self-securing, self-repairing ottimizzato per i carichi di lavoro di elaborazione delle transazioni. Non è necessario configurare o gestire alcun componente hardware né installare software. Oracle Cloud Infrastructure gestisce la creazione del database, nonché il backup, l'applicazione di patch, l'aggiornamento e l'ottimizzazione del database.
- Sistema DB Exadata
Exadata Cloud Service ti consente di sfruttare la potenza di Exadata nel cloud. Puoi eseguire il provisioning di sistemi X8M flessibili che ti consentono di aggiungere server di calcolo del database e server di storage al tuo sistema man mano che le tue esigenze aumentano. I sistemi X8M offrono funzionalità di networking RoCE (RDMA su Converged Ethernet) per larghezza di banda elevata e bassa latenza, moduli PMEM (persistent memory) e software Exadata intelligente. È possibile eseguire il provisioning dei sistemi X8M utilizzando una forma equivalente a un sistema X8 con Quarter Rack, quindi aggiungere database server e storage in qualsiasi momento dopo il provisioning.
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.
Seleziona i blocchi CIDR che non si sovrappongono a qualsiasi altra rete (in Oracle Cloud Infrastructure, nel tuo data center on-premise o in un altro provider cloud) a cui intendi 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 mantenere la sicurezza delle tue risorse 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, 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.
- 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.
- Zone di sicurezza
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.
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.
- 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.
Distribuire
Il codice Terraform per questa architettura di riferimento è disponibile come stack di esempio in Oracle Cloud Infrastructure Resource Manager. Questo stack Terraform di esempio distribuisce un ambiente applicativo OCI Data Flow, insieme ai criteri IAM e ai bucket di storage degli oggetti OCI (non di terze parti). Per impostazione predefinita, verrà distribuita anche un'applicazione Spark Python demo. Puoi anche scaricare il codice da GitHub e personalizzarlo in base alle tue esigenze specifiche.
- Eseguire la distribuzione utilizzando lo stack di esempio in Oracle Cloud Infrastructure Resource Manager:
- Fare clic su
.
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.
- Fare clic su
- 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
.
Oltre al codice Terraform fornito su GitHub, gli snippet di codice riportati di seguito illustrano come connettersi ad Amazon Web Services S3 e come eseguire query sui dati.
- Per connettersi e interrogare i dati da S3, è necessario includere i pacchetti
hadoop-aws.jar
eaws-java-sdk.jar
. Nel filepom.xml
è possibile fare riferimento ai seguenti pacchetti:<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-aws</artifactId> <version>2.9.2</version> <exclusions> <exclusion> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.7.4</version> </dependency>
- Utilizzare codice simile al seguente per connettersi ad Amazon Web Services S3. È necessario fornire la chiave di accesso e la chiave segreta. Nello snippet seguente, questi valori sono rappresentati rispettivamente dalle variabili
ACCESS
eSECRET
:SparkSession spark = SparkSession.builder().master("local") .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") .config("spark.hadoop.fs.s3a.access.key", ACCESS) .config("spark.hadoop.fs.s3a.secret.key", SECRET) .config("fs.s3a.connection.ssl.enabled", "false") .getOrCreate();
- Utilizzare un codice simile al seguente per eseguire una query sui dati utilizzando la posizione S3 e il nome della tabella specificati.
Dataset<Row> ds = sqlContext.read().format("csv").option("header","true").load("<S3 Location>"); ds.createOrReplaceTempView("<Table Name>"); Dataset<Row> result_ds = sqlContext.sql("<SQL Query Using <Table Name>>");