Nota:
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriversi a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Crea pipeline DevOps OCI per creare e distribuire i microservizi Golang
Introduzione
Questa parte è quattro di una serie di esercitazioni in sei parti che ti mostra come distribuire un set temporaneo di risorse in un cluster OKE utilizzando microservizi Golang che rappresentano l'uso di SDK OCI, OCI-CLI, Resource Manager, OCI Devops e Helm per distribuire ed eliminare Apache Airflow.
Obiettivo
In questa esercitazione imparerai come creare pipeline DevOps OCI per la creazione e la distribuzione.
Prerequisiti
- Completamento dell'esercitazione precedente in questo percorso di apprendimento, Parte 3/6 - Creazione di un progetto Devops OCI, impostazione delle autorizzazioni e del repository di codici per i microservizi.
Task 1: Esplora il codice di accesso
-
Questo microservizio è un codice di esempio in Golang utilizzato per creare un token JWT e restituirlo all'utente. Questo token verrà quindi utilizzato dai go-microservizi per autenticare la chiamata. Si tratta di un semplice metodo di autenticazione per garantire la sicurezza per questa esercitazione.
-
Il repository contiene tutti i file necessari per la distribuzione in OKE utilizzando il servizio DevOps OCI, ad esempio i grafici Helm, Dockerfile e
build_spec.yaml
.
Nota
Il codice è già stato caricato nel repository OCI, denominato go-login, nei passi precedenti di questo laboratorio.
Task 2: esplora il codice go-microservices
-
Questo microservizio è un codice di esempio per eseguire le attività seguenti:
Metodo Descrizione /oci-init Questo instradamento eseguirà un job di applicazione stack nel Resource Manager OCI. Verrà eseguito un terraform per creare un nuovo pool di nodi sul OKE del cluster. Verrà inoltre avviata la pipeline di build Devops OCI per installare il flusso dell'aria sui nuovi nodi. /oci-distruzione Questa operazione eliminerà la distribuzione del flusso d'aria in OKE e quindi eseguirà l'eliminazione dello stack su Resource Manager per rimuovere il pool-nodo aggiuntivo -
Il repository contiene tutti i file necessari da distribuire su OKE utilizzando il servizio OCI DevOps, ad esempio i grafici Helm, Dockerfile e
build_spec.yaml
.
Nota
Il codice è già stato caricato nel repository OCI denominato go-microservice nei passi precedenti di questo laboratorio.
Task 3: creare gli artifact DevOps per go-login e go-microservice
Prima di creare la pipeline di build DevOps, è necessario creare gli artifact che si connetteranno ai risultati della build (pacchetto Helm e immagine contenitore).
-
Andare al registro OCI creato per questa esercitazione.
-
Fare clic sugli artifact nel progetto DevOps, quindi fare clic su Aggiungi artifact e quindi digitare Repository di immagini contenitore.
Nota importante per quanto riguarda l'URL del registro:
-
Base del registro per l'area sa-saopaulo-1.
-
Controlla che il codice della tua regione sia diverso se non stai utilizzando "sa-saopaulo-1". Per ulteriori informazioni, consulta Aree e domini di disponibilità.
-
-
Ripetere il passo 2 e aggiungere l'artifact go-microservice.
-
Creare un nuovo artifact generale per memorizzare i valori Helm per go-login incollando il contenuto del file
values.yaml
dal repository di codici. -
Creare un nuovo artifact generale per memorizzare i valori Helm per go-microservice incollando il contenuto del file
values.yaml
dal repository di codici. -
Creare un nuovo artifact del tipo di grafico Helm per il login. È necessario impostare lo spazio dei nomi e il codice area corretti nell'URL del grafico.
-
Creare un nuovo artifact del tipo di grafico Helm per go-microservice. È necessario impostare lo spazio dei nomi e il codice area corretti nell'URL del grafico.
A questo punto, nel progetto DevOps devono essere presenti gli artifact seguenti.
Task 4: creare la pipeline di build Devops per il plugin
-
Andare alla pagina della console per il DevOps progetto e selezionare il progetto DevOps creato.
-
Selezionare Crea pipeline, quindi fare clic su Crea pipeline di build, immettere il nome e la descrizione e fare clic su Crea.
-
Fare clic su Aggiungi fase, quindi selezionare Build gestita.
-
In Repository di codici primario selezionare il repository OCI per go-login.
- Confermare il repository, selezionare e fare clic su Aggiungi.
-
Aggiungere una nuova fase nella pipeline di build per pubblicare l'artifact nel registro. Selezionare l'opzione Distribuisci artifact, quindi selezionare l'artifact go-login-image creato nei passi precedenti.
La pipeline deve essere simile a questa.
Task 5: creare la pipeline di build DevOps per go-microservice
-
Andare alla pagina della console per il DevOps progetto e selezionare il progetto DevOps creato.
-
Selezionare Crea pipeline, fare clic su Crea pipeline di build, immettere il nome e la descrizione, quindi fare clic su Crea.
-
Fare clic su Aggiungi fase, quindi selezionare Build gestita.
-
In Repository di codici primario selezionare il repository OCI per go-microservice.
- Confermare il repository, selezionare e fare clic su Aggiungi.
-
Aggiungere una nuova fase nella pipeline di build per pubblicare l'artifact nel registro. Selezionare l'opzione Distribuisci artifact, quindi selezionare l'artifact go-microservice-image creato nei passi precedenti.
La pipeline deve essere simile a questa.
Task 6: Pipeline di build {build_spec.yaml} - go-login
Il file build_spec
è un file yaml che descrive i passi da eseguire durante l'esecuzione della pipeline di build. Viene eseguito su un canale di esecuzione di build cloud e supporta la maggior parte delle lingue più diffuse nelle applicazioni cloud native. Il file si trova nella radice del codice di repository go-login su OCI. Questo file utilizza alcune variabili di VAULT e occorre modificarle nelle OCID del vault di esercitazione.
Per ulteriori dettagli sulle specifiche di build, vedere Genera specifica.
È necessario impostare le due variabili seguenti.
-
HELM_REPO_USER
: il nome utente memorizzato come segreto nel vault. -
USER_AUTH_TOKEN
: il token di autorizzazione per l'utente memorizzato nel vault.
-
Andare ai segreti del vault e ottenere l'OCID per ogni segreto.
-
Accedere ai repository di progetto e ottenere
ssh url
per eseguire il login.-
Aggiornare il file build_spec.yaml e sostituire i valori con i segreti OCID copiati, quindi commit sulle modifiche apportate al codice.
-
-
Vai alla console della shell jump-box bastion.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-login/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Andare alla pipeline di build go-login sotto il progetto DevOps, selezionare la scheda "Parametri" e aggiungere i nuovi parametri seguenti.
HELM_REPO
: la base del registro OCI xxx.ocir.io.HELM_REPO_URL
: URL del registro OCI per il grafico Helm correlato.APP_HOST
: l'host verrà utilizzato per accedere all'applicazione sul controller in entrata.IMAGE_URL
: l'URL dell'immagine del registro OCI senza la tag.
-
Fare clic sulla scheda Crea pipeline, quindi fare clic su Avvia esecuzione manuale.
-
Come possiamo vedere, la build è stata completata correttamente insieme al push delle immagini nel registro OCI.
-
-
Andare al Container Registry OCI e verificare se vi è un'immagine.
Task 7: impostare le credenziali OCI per go-microservice
I go-microservizi interagiscono con OCI utilizzando SDK e per poterlo fare, è necessario impostare le credenziali corrette. Utilizzeremo le informazioni simili utilizzate per impostare l'interfaccia CLI OCI durante l'impostazione del bastion dai passi precedenti di questa esercitazione.
Tutte le credenziali necessarie verranno memorizzate nella configmap di OKE e inserite nelle variabili di ambiente all'interno del contenitore in esecuzione.
-
Andare ai repository OCI e ottenere
ssh url
per il repository go-microservice. -
Andare alla pagina della console del cluster OKE, copiare il cluster ocid e sostituire il comando per la variabile di ambiente
ENV_CLUSTER_ID
nel passo successivo. -
Aprire il terminale shell jump-box bastion. Assicurarsi di aver creato la chiave ssh all'indirizzo: ~/.oci/oci_api_key.pem. Ad eccezione della variabile ENV_CLUSTER_ID, tutte le altre variabili sono disponibili nel file ~/.oci/config sotto l'host bastion che in precedenza era stato impostato sull'interfaccia CLI OCI
cat ~/.oci/config
-
La lista di comandi shell riportata di seguito creerà un nuovo file configmap/values.yaml con tutte le variabili necessarie da inserire nel contenitore in esecuzione, quindi lo trasmetterà nel repository di codice in OCI. Prima di eseguire i comandi sul terminale host bastion, sostituire i valori "PASTE VOI..." di seguito.
cd $HOME rm -rf go-microservice/ git clone <PAST YOUR ssh url> cd go-microservice/chart-go-microservice/configmap/ rm values.yaml pem=$(cat ~/.oci/oci_api_key.pem|base64 -w 0) echo 'ENV_PEM: "'$pem'"' > values.yaml echo 'ENV_TENANCY_OCID: "PASTE YOUR TENANCY OCID"' >> values.yaml echo 'ENV_USER_OCID: "PASTE YOUR USER OCID"' >> values.yaml echo 'ENV_REGION: "PASTE YOUR REGION NAME"' >> values.yaml echo 'ENV_FINGERPRINT: "PASTE YOUR FINGERPRINT"' >> values.yaml echo 'ENV_CLUSTER_ID: "PASTER YOUR CLUSTER OCID"' >> values.yaml cd $HOME/go-microservice git add . git commit -m "added correct values on configmap" git push
Ora, il go-microservice è in grado di comunicare con OCI utilizzando l'SDK.
Task 8: Pipeline di build {build_spec.yaml} - go-microservices
Il file build_spec è un file Yaml che descrive i passi da eseguire durante l'esecuzione della pipeline di build. Viene eseguito su un canale di esecuzione di build cloud e supporta la maggior parte delle lingue più diffuse nelle applicazioni cloud native. Il file si trova nella radice del codice di repository go-microservice su OCI. Questo file utilizza alcune variabili di VAULT e occorre modificarle nelle OCID del vault di esercitazione.
Per ulteriori dettagli sulle specifiche di build, vedere Genera specifica.
È necessario impostare le due variabili seguenti.
-
HELM_REPO_USER
: il nome utente memorizzato come segreto nel vault. -
USER_AUTH_TOKEN
: il token di autorizzazione per l'utente memorizzato nel vault.
-
Andare ai segreti del vault e ottenere l'OCID per ogni segreto.
-
Andare ai repository di progetto e ottenere l'URL ssh per eseguire il login.
- Sarà necessario aggiornare il file build_spec.yaml e sostituire i valori con i segreti OCID copiati, quindi commettere le modifiche nel codice.
-
Vai alla console della shell jump-box bastion.
cd $HOME # If you still have the old go-login.git and go-microservices.git directory, delete it! rm -rf go-login.git rm -rf go-microservice.git git clone <your ssh url for the repo> cd go-microservice/ vi build_spec.yaml #perform the needed changes for your ocid variables and save the file. git add . git commit -m "fixed ocid variables" git push
-
Andare alla pipeline di build go-microservice sotto il progetto Devops, selezionare la scheda "Parametri" e aggiungere nuovi parametri.
HELM_REPO
: la base del registro OCI xxx.ocir.io.HELM_REPO_URL
: URL del registro OCI per il grafico Helm correlato.APP_HOST
: l'host verrà utilizzato per accedere all'applicazione sul controller in entrata.IMAGE_URL
: l'URL dell'immagine del registro OCI senza la tag.
-
Fare clic sulla scheda Crea pipeline, quindi fare clic su Avvia esecuzione manuale.
-
Come possiamo vedere, la build è stata completata correttamente insieme al push delle immagini nel registro OCI.
-
-
Andare al Container Registry OCI e verificare se vi è un'immagine.
Task 9: preparare OKE per ricevere le distribuzioni
In questa esercitazione, verranno creati manualmente gli spazi di nomi OKE per go-login e go-microservices. È inoltre necessario impostare le credenziali del Container Registry OCI all'interno di ciascuno degli spazi di nomi utilizzando i segreti. Ciò è necessario, altrimenti la distribuzione non sarà in grado di recuperare l'immagine del container dal registro.
-
Recuperare il testo semplice TOKEN e il nome utente dal registro OCI memorizzato nel vault.
-
Aprire la console della shell jump-box bastion ed eseguire il comando seguente.
Nota: assicurarsi di sostituire le variabili nei comandi riportati di seguito con le credenziali fornite nel passo precedente e controllare anche il docker-server corretto in base all'area in uso gru.ocir.io.
cd $HOME kubectl get ns kubectl create ns go-login kubectl create ns go-microservices kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-login kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-microservices
-
Distribuiamo ora il controller in entrata per poter accedere ai microservizi tramite Internet. Stiamo utilizzando l'immagine ufficiale in entrata nella versione v1.4.0.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml kubectl scale --replicas=4 deployment ingress-nginx-controller -n ingress-nginx
-
Ora, controlliamo se i servizi di ingresso sono buoni, dovrebbe essere così.
kubectl get svc -n ingress-nginx
-
Dopo aver creato l'ambiente in entrata-nginx, viene creato automaticamente un nuovo load balancer su OCI. Ora aggiorna la forma del load balancer a una forma meno costosa ed evita costi aggiuntivi.
-
-
Andare alla console, selezionare Load balancer in Networking, quindi selezionare il load balancer appena creato.
-
Fare clic per aggiornare SHAPE e selezionare la casella di controllo Usa un load balancer flessibile.
Task 10: creare un nuovo ambiente OCI DevOps
Per poter distribuire le tue applicazioni, è necessario creare l'ambiente.
-
Selezionare il progetto DevOps, fare clic su Ambienti e quindi su Crea ambiente.
Task 11: distribuzione del login go-login a OCI DevOps mediante i grafici Helm
-
Andare al progetto Devops, fare clic su Pipeline di distribuzione e creare una nuova pipeline per l'go-login.
-
Fare clic per aggiungere una nuova fase da distribuire, selezionare "Installa grafici Helm nel cluster Kubernetes", selezionare l'artifact di helm e l'artifact di valori per go-login. Assicurarsi di compilare il nome dello spazio di nomi come go-login.
-
Creare un trigger nella pipeline di build per avviare automaticamente la distribuzione al termine della build.
-
Andare alla pipeline di build go-login sotto il progetto Devops e fare clic su Aggiungi fase.
-
Selezionare Distribuzione trigger, fare clic su Seleziona pipeline di distribuzione, quindi selezionare distribuzione login-distribuzione.
-
-
Fare clic su Avvia esecuzione manuale per eseguire il test della pipeline.
-
Nella pagina Progetto Devops fare clic su Distribuzioni per controllare lo stato della distribuzione in esecuzione.
Task 12: verificare la distribuzione di login
-
Accedere al terminale host bastion e controllare quanto segue:
-
Controllare lo stato del pod.
kubectl get pod -n go-login
-
Controllare l'host e l'indirizzo di entrata per l'applicazione.
kubectl get ingress -n go-login
-
Questa distribuzione utilizza il traffico di instradamento del controllo in entrata sul nome host. Ciò significa che è necessario chiamare il servizio utilizzando il nome host corretto nell'ambito dell'URL.
-
In questa esercitazione non sono stati utilizzati certificati SSL. Per poter chiamare i servizi è necessario includere nel tuo laptop /etc/hosts l'itinerario DNS appropriato. Consigliato per gli ambienti di produzione.
-
Prendere nota del proprio indirizzo IP esterno e aggiungere la voce al proprio indirizzo /etc/hosts.
sudo vi /etc/hosts
-
Aggiungere una nuova riga alla fine del file.
your.ip.aaa.xx go-login.superocilab.com
-
Eseguire il comando seguente.
cat /etc/hosts
-
L'aspetto di /etc/hosts deve essere simile al seguente.
-
-
Ora è possibile chiamare il servizio go-login utilizzando un arriccio e generare un messaggio TOKEN jwt chiamando l'endpoint /login.
curl http://go-login.superocilab.com curl http://go-login.superocilab.com/login
Task 13: distribuzione di go-microservice in Devops OCI utilizzando i grafici Helm
-
Andare al progetto Devops, fare clic su Pipeline di distribuzione e creare una nuova pipeline per go-microservice.
-
Fare clic per aggiungere una nuova fase da distribuire, selezionare Installa grafici Helm nel cluster Kubernetes, selezionare l'artifact di supporto e l'artifact di valori per go-microservice. Assicurarsi di riempire il nome dello spazio di nomi come go-microservices.
-
Creare un trigger nella pipeline di build per avviare automaticamente la distribuzione dopo il completamento della build.
-
Andare alla pipeline di build go-microservice sotto il progetto Devops e fare clic su Aggiungi fase.
-
Selezionare Attiva distribuzione, quindi fare clic su Seleziona pipeline di distribuzione e selezionare go-microservice-deploy.
-
-
Fare clic su Avvia esecuzione manuale per eseguire il test della pipeline.
-
Nella pagina Progetto Devops fare clic su Distribuzioni per controllare lo stato della distribuzione in esecuzione.
Task 14: verificare la distribuzione go-microservice
-
Vai al terminale dell'host bastion e controlla i seguenti dettagli:
-
Controllare lo stato del pod.
kubectl get pod -n go-microservices
-
Controllare l'host e l'indirizzo di entrata per l'applicazione.
kubectl get ingress -n go-microservices
-
Questa distribuzione utilizza il traffico di instradamento del controllo in entrata sul nome host. Ciò significa che è necessario chiamare il servizio utilizzando il nome host corretto nell'ambito dell'URL.
-
In questa esercitazione non sono stati utilizzati certificati SSL. Per poter chiamare i servizi è necessario includere nel tuo laptop /etc/hosts l'itinerario DNS appropriato. Consigliato per gli ambienti di produzione.
-
Prendi nota del tuo indirizzo IP esterno e aggiungi la voce sul tuo /etc/hosts (può essere aggiunta anche sul tuo computer locale!)
sudo vi /etc/hosts
-
Aggiungere una nuova riga alla fine del file.
your.ip.aaa.xx go-microservice.superocilab.com
-
Eseguire il comando seguente.
cat /etc/hosts
-
L'aspetto di /etc/hosts deve essere simile al seguente.
-
Ora è possibile chiamare il servizio go-microservice.
curl curl http://go-microservice.superocilab.com
Fase successiva
Per passare all'esercitazione successiva in questo percorso di apprendimento, fare clic qui.
Collegamenti correlati
Approvazioni
- Autore - Joao Tarla (Oracle LAD A-Team Solution Engineer)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a contenuti di formazione gratuiti sul canale YouTube di Oracle Learning. Inoltre, visitare education.oracle.com/learning-explorer per diventare Explorer di Oracle Learning.
Per la documentazione sul prodotto, visitare il sito Oracle Help Center.
Create OCI DevOps pipelines to build and deploy the Golang microservices
F79787-01
April 2023
Copyright © 2023, Oracle and/or its affiliates.