Distribuire un'applicazione dall'origine ad Azure Red Hat OpenShift
In questo articolo è possibile distribuire un'applicazione in un cluster Azure Red Hat OpenShift dal codice sorgente usando una compilazione da origine a immagine (S2I). Da origine a immagine (S2I) è un processo di compilazione per la creazione di immagini del contenitore riproducibili dal codice sorgente. S2I produce immagini pronte per l'esecuzione inserendo il codice sorgente in un'immagine del contenitore e consentendo al contenitore di preparare il codice sorgente per l'esecuzione. OpenShift può creare un'applicazione dall'origine per distribuirla, in modo da non dover creare un contenitore manualmente ad ogni modifica. OpenShift può quindi creare e distribuire automaticamente nuove versioni quando viene notificata la modifica del codice sorgente.
Operazioni preliminari
Nota
Questo articolo presuppone che sia stato configurato un segreto pull. Se non si dispone di un segreto pull per il cluster, è possibile seguire la documentazione per Aggiungere o aggiornare il segreto pull di Red Hat.
Creare un cluster
Segui l'esercitazione per creare un cluster Azure Red Hat OpenShift. Se si sceglie di installare e usare l'interfaccia della riga di comando (CLI) in locale, questa esercitazione richiede l'uso dell'interfaccia della riga di comando di Azure versione 2.6.0 o successiva. Eseguire az --version
per trovare la versione corrente. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
Stabilire la connessione al cluster
Per gestire un cluster Azure Red Hat OpenShift, è necessario usare oc, il client della riga di comando OpenShift.
Nota
È consigliabile installare la riga di comando di OpenShift in Azure Cloud Shell e usarla per tutte le operazioni della riga di comando in questo articolo. Aprire la shell da shell.azure.com o selezionare il collegamento:
Seguire l'esercitazione per installare l'interfaccia della riga di comando, recuperare le credenziali del cluster e connettersi al cluster con la console Web e l'interfaccia della riga di comando di OpenShift.
Dopo aver eseguito l'accesso, si dovrebbe visualizzare un messaggio che informa che si sta usando il progetto di default
.
Login successful.
You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
Creare un progetto
Per creare un nuovo progetto denominato demoproject
, eseguire il comando :
oc new-project demoproject
L'output visualizzato dovrebbe essere simile al seguente:
Now using project "demoproject" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app django-psql-example
to build a new example application in Python. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Avviare la console Web
Individuare l'URL della console Web del cluster eseguendo:
az aro show \
--name <cluster name> \
--resource-group <resource group> \
--query "consoleProfile.url" -o tsv
L'URL visualizzato dovrebbe essere simile a questo.
https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/
Avviare l'URL della console in un browser e accedere usando le credenziali kubeadmin
.
Passare alla prospettiva Sviluppatore anziché alla prospettiva Amministratore nel menu a sinistra e selezionare demoproject
nell'elenco dei progetti. Ci si dovrebbe quindi trovare nella pagina topologia per il progetto.
Poiché il progetto è vuoto, non si dovrebbero trovare carichi di lavoro e verranno presentate varie opzioni per la distribuzione di un'applicazione.
Distribuzione tramite la console Web
Nelle opzioni presentate per la distribuzione di un'applicazione selezionare Da Git. Verrà visualizzata la pagina Importa da Git. Usare https://github.com/sclorg/django-ex.git
come URL del repository Git. L'applicazione Web di esempio viene implementata usando il linguaggio di programmazione Python.
Nota
OpenShift rileva che si tratta di un progetto Python e seleziona l'immagine del generatore appropriata.
Scorrere verso il basso fino a Opzioni avanzate e assicurarsi che sia selezionata Crea una route per l'applicazione. Questa azione creerà una route OpenShift, un modo per esporre un servizio assegnandogli un nome host raggiungibile esternamente.
Quando si è pronti, nella parte inferiore della pagina fare clic su Crea. Verranno create risorse per gestire la compilazione e la distribuzione dell'applicazione. Si verrà quindi reindirizzati alla panoramica della topologia per il progetto.
La panoramica della topologia fornisce una rappresentazione visiva dell'applicazione distribuita. Con questa visualizzazione è possibile visualizzare la struttura generale dell'applicazione.
È possibile fare clic sull'icona Git per passare al repository Git da cui è stato compilato il codice sorgente per l'applicazione. L'icona visualizzata in basso a sinistra mostra lo stato di compilazione dell'applicazione. Facendo clic su questa icona si accede alla sezione dei dettagli della build. Se l'applicazione ha esposto route, è possibile fare clic sull'icona in alto a destra per aprire l'URL per la route dell'applicazione creata.
Durante il ridimensionamento dell'applicazione, l'avvio delle implementazioni e la ricreazione dei pod, la rappresentazione dell'applicazione nella vista topologia verrà animata per offrire una visualizzazione in tempo reale delle attività in corso.
Facendo clic sull'icona dell'applicazione verranno visualizzati altri dettagli, come illustrato di seguito.
Visualizzazione dei log del generatore
Dopo l'avvio della compilazione, fare clic sul collegamento Visualizza log mostrato nel pannello Risorse.
In questo modo sarà possibile monitorare lo stato di avanzamento della build durante l'esecuzione. L'immagine del generatore, Python in questo caso, inserirà il codice sorgente dell'applicazione nell'immagine finale prima di eseguirne il push nel registro delle immagini interne di OpenShift. La build verrà completata correttamente quando viene visualizzato un messaggio finale "Push completato correttamente".
Accesso all'applicazione
Una volta completata la compilazione dell'immagine dell'applicazione, verrà distribuita.
Fare clic su Topologia nella barra dei menu a sinistra per tornare alla visualizzazione topologia per il progetto. Quando l'applicazione è stata creata usando la console Web, viene creata automaticamente una Route per l'applicazione e verrà esposta all'esterno del cluster. L'URL che può essere usato per accedere all'applicazione da un Web browser era visibile nella scheda Risorse per l'applicazione visualizzata in precedenza.
Dalla vista topologia è possibile accedere all'URL dell'applicazione distribuita facendo clic sull'icona in alto a destra dell'anello. Al termine della distribuzione, fare clic sull'icona e verrà visualizzata l'applicazione distribuita.
Distribuzione tramite la riga di comando
Si è appreso come distribuire un'applicazione usando la console Web, ora è possibile distribuire la stessa applicazione Web, ma questa volta usando lo strumento da riga di comando oc
.
Eseguire il comando seguente per eliminare il progetto e ricominciare da capo:
oc delete project demoproject
Dovrebbe essere visualizzato un messaggio di conferma che demoproject
è stato eliminato.
project.project.openshift.io "demoproject" deleted
Creare di nuovo demoproject
eseguendo:
oc new-project demoproject
All'interno del progetto creare una nuova applicazione dall'origine in GitHub, specificando il generatore S2I per la versione più recente di Python fornita.
oc new-app python:latest~https://github.com/sclorg/django-ex.git
L'output dovrebbe essere simile al seguente:
--> Found image 8ec6f0d (4 weeks old) in image stream "openshift/python" under tag "latest" for "python:latest"
Python 3.8
----------
[...]
Tags: builder, python, python38, python-38, rh-python38
* A source build using source code from https://github.com/sclorg/django-ex.git will be created
* The resulting image will be pushed to image stream tag "django-ex:latest"
* Use 'oc start-build' to trigger a new build
* This image will be deployed in deployment config "django-ex"
* Port 8080/tcp will be load balanced by service "django-ex"
* Other containers can access this service through the hostname "django-ex"
--> Creating resources ...
imagestream.image.openshift.io "django-ex" created
buildconfig.build.openshift.io "django-ex" created
deploymentconfig.apps.openshift.io "django-ex" created
service "django-ex" created
--> Success
Build scheduled, use 'oc logs -f bc/django-ex' to track its progress.
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
'oc expose svc/django-ex'
Run 'oc status' to view your app.
OpenShift userà il nome del repository Git come nome per l'applicazione. Esaminare lo stato della compilazione e della distribuzione eseguendo:
oc status
Al termine della compilazione e distribuzione, verrà visualizzato un output simile a.
In project demoproject on server https://api.wzy5hg7x.eastus.aroapp.io:6443
svc/django-ex - 172.30.200.50:8080
dc/django-ex deploys istag/django-ex:latest <-
bc/django-ex source builds https://github.com/sclorg/django-ex.git on openshift/python:latest
deployment #1 deployed about a minute ago - 1 pod
2 infos identified, use 'oc status --suggest' to see details.
Per esporre l'applicazione all'esterno del cluster OpenShift, è necessario creare una route eseguendo:
oc expose service/django-ex
Si dovrebbe ottenere una conferma.
route.route.openshift.io/django-ex exposed
Recuperare l'URL eseguendo:
oc get route django-ex
Dovrebbe essere restituito il nome host assegnato alla route che è possibile usare per passare all'applicazione distribuita.
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
django-ex django-ex-demoproject.apps.wzy5hg7x.eastus.aroapp.io django-ex 8080-tcp None
Attivazione di una nuova build binaria
Quando si lavora sull'applicazione, è probabile che si vogliano apportare modifiche e vederle distribuite. È possibile configurare facilmente un webhook che attiverà una nuova build e una nuova distribuzione con ogni commit di codice. Tuttavia, ciò potrebbe non essere auspicabile perché a volte si desidera vedere le modifiche senza dover eseguire il push di ogni modifica del codice nel repository.
Nei casi in cui si stia eseguendo rapidamente l'iterazione delle modifiche, è possibile usare la cosiddetta build binaria. Per illustrare questo scenario, clonare in locale il repository Git per l'applicazione eseguendo:
git clone https://github.com/sclorg/django-ex.git
In questo modo verrà creata una sottodirectory django-ex
contenente il codice sorgente per l'applicazione:
Cloning into 'django-ex'...
remote: Enumerating objects: 980, done.
remote: Total 980 (delta 0), reused 0 (delta 0), pack-reused 980
Receiving objects: 100% (980/980), 276.23 KiB | 4.85 MiB/s, done.
Resolving deltas: 100% (434/434), done.
Passare alla sottodirectory:
cd django-ex
Aprire l'editor integrato di Azure Cloud Shell:
code welcome/templates/welcome/index.html
Scorrere verso il basso e modificare la riga Welcome to your Django application on OpenShift
per dire Welcome to Azure Red Hat OpenShift
. Salvare il file e chiudere l'editor tramite il menu ...
in alto a destra.
Avviare una nuova build eseguendo il comando:
oc start-build django-ex --from-dir=. --wait
Passando il flag --from-dir=.
, la riga di comando di OpenShift caricherà il codice sorgente dalla directory specificata e quindi avvierà il processo di compilazione e distribuzione. Si dovrebbe visualizzare un output simile al seguente e, dopo alcuni minuti, la build dovrebbe essere completata.
Uploading directory "." as binary input for the build ...
.
Uploading finished
build.build.openshift.io/django-ex-2 started
Se si aggiorna il browser con l'applicazione, verrà visualizzato il titolo aggiornato.
Pulire le risorse
Quando si è terminato con l'applicazione, sarà possibile eseguire il comando seguente per eliminare il progetto:
oc delete project demoproject
È anche possibile eliminare il cluster seguendo le istruzioni riportate in Esercitazione: eliminare un cluster Azure Red Hat OpenShift 4.
Passaggi successivi
In questa guida si è appreso come:
- Creare un progetto
- Distribuire un'applicazione dal codice sorgente usando la console Web
- Distribuire un'applicazione dal codice sorgente usando la riga di comando OpenShift
- Attivare una build binaria usando la riga di comando OpenShift
Altre informazioni su come creare e distribuire applicazioni usando l'origine per l'immagine e altre strategie di compilazione.