Distribuire un'applicazione dall'origine ad Azure Red Hat OpenShift

In questo articolo si distribuisce un'applicazione in un cluster Azure Red Hat OpenShift dal codice sorgente usando una compilazione da origine a immagine (S2I). Source-to-Image (S2I) è un processo di compilazione per la compilazione di immagini di contenitori 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. È possibile creare un'applicazione da un'origine per distribuirla, quindi non è necessario costruire un contenitore manualmente con ogni modifica. OpenShift può quindi compilare 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:

Button to launch Azure Cloud Shell

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, verrà visualizzato un messaggio che informa che si sta usando il default progetto.

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

Verrà visualizzato un output 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

Dovrebbe essere visualizzato un URL 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.

Azure Red Hat OpenShift login screen

Passare alla prospettiva Sviluppo anziché alla prospettiva Amministrazione istrator nel menu a sinistra e selezionare demoproject nell'elenco dei progetti. Si dovrebbe quindi trovarsi nella pagina Topologia per il progetto.

Azure Red Hat OpenShift project topology

Poiché il progetto è vuoto, non dovrebbero essere trovati 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 repository Git. L'applicazione Web di esempio viene implementata usando il linguaggio di programmazione Python.

Azure Red Hat OpenShift project from Git

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 l'opzione Crea una route all'applicazione sia selezionata. Questa azione creerà una route OpenShift, un modo per esporre un servizio assegnandogli un nome host raggiungibile esternamente.

Azure Red Hat OpenShift project from Git - Route setup

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.

Azure Red Hat OpenShift project from Git - Topology

La panoramica della topologia fornisce una rappresentazione visiva dell'applicazione distribuita. Con questa visualizzazione è possibile visualizzare la struttura complessiva 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 passerà alla sezione dei dettagli della compilazione. 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 l'aumento o la riduzione dell'applicazione, l'avvio delle implementazioni e la ricreazione dei pod, la rappresentazione dell'applicazione nella visualizzazione 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.

Azure Red Hat OpenShift project from Git - Details

Visualizzazione dei log del generatore

Dopo aver avviato la compilazione, fare clic sul collegamento Visualizza log visualizzato nel pannello Risorse .

Azure Red Hat OpenShift project from Git - Build logs

In questo modo sarà possibile monitorare lo stato di avanzamento della compilazione durante l'esecuzione. L'immagine del generatore, Python in questo caso, inserisce il codice sorgente dell'applicazione nell'immagine finale prima di eseguirne il push nel registro delle immagini interne di OpenShift. La compilazione verrà completata correttamente quando viene visualizzato un messaggio finale "Push successful".

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 della topologia per il progetto. Quando l'applicazione è stata creata usando la console Web, è stata 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 visualizzazione 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.

Azure Red Hat OpenShift project from Git - Browse app

Distribuzione tramite la riga di comando

Si è appreso come distribuire un'applicazione usando la console Web, ora consente di distribuire la stessa applicazione Web, ma questa volta usando lo strumento da oc riga di comando.

Eseguire il comando seguente per eliminare il progetto e ricominciare:

oc delete project demoproject

Dovrebbe essere visualizzato un messaggio di conferma che è demoproject stato eliminato.

project.project.openshift.io "demoproject" deleted

Creare di demoproject nuovo 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 della 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

Dovrebbe essere visualizzata 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 compilazione binaria

Quando si lavora sull'applicazione, è probabile che si voglia apportare modifiche e visualizzarle distribuite. È possibile configurare facilmente un webhook che attiverà una nuova compilazione e una nuova distribuzione con ogni commit del codice. Tuttavia, questo potrebbe non essere auspicabile come a volte si desidera visualizzare le modifiche senza dover eseguire il push di ogni modifica del codice nel repository.

Nei casi in cui si sta eseguendo rapidamente l'iterazione delle modifiche, è possibile usare ciò che viene chiamato compilazione binaria. Per illustrare questo scenario, clonare il repository Git per l'applicazione in locale eseguendo:

git clone https://github.com/sclorg/django-ex.git

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 che indica Welcome to your Django application on OpenShift di dire Welcome to Azure Red Hat OpenShift. Salvare il file e chiudere l'editor tramite il ... menu in alto a destra.

Azure Red Hat OpenShift project from Git - Edit application in Azure Cloud Shell editor

Avviare una nuova compilazione eseguendo il comando :

oc start-build django-ex --from-dir=. --wait

Passando il --from-dir=. flag, la riga di comando di OpenShift caricherà il codice sorgente dalla directory specificata e quindi avvierà il processo di compilazione e distribuzione. Dovrebbe essere visualizzato un output simile al seguente e, dopo alcuni minuti, la compilazione 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.

Azure Red Hat OpenShift project from Git - Browse updated app

Pulire le risorse

Al termine dell'applicazione, è 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 compilazione binaria usando la riga di comando openshift

Altre informazioni su come compilare e distribuire applicazioni usando le strategie di creazione da origine a immagine e altre strategie di compilazione.