Esercizio: Configurare l'ambiente Azure DevOps
In questa sezione, verrà illustrato come configurare l'organizzazione di Azure DevOps per poi procedere con il resto di questo modulo e creare un ambiente di servizio Azure Kubernetes (AKS) in cui distribuire l'applicazione.
Per raggiungere questi obiettivi, occorre:
- Aggiungere un utente all'organizzazione di Azure DevOps.
- Configurare il progetto Azure DevOps.
- Gestire il flusso di lavoro con Azure Boards.
- Creare risorse di Azure usando l'interfaccia della riga di comando di Azure.
- Creare variabili di pipeline in Azure Pipelines.
- Creare una connessione al servizio per l’autenticazione con Azure.
- Aggiornare il manifesto della distribuzione Kubernetes.
Aggiungere un utente all'organizzazione
Per completare il modulo, è necessaria una sottoscrizione di Azure. È possibile iniziare a usare Azure gratuitamente.
Anche se non occorre usare Azure DevOps, è necessaria una sottoscrizione di Azure per la distribuzione nelle risorse di Azure tramite Azure DevOps. Per semplificare il processo, usare lo stesso account Microsoft per accedere alla sottoscrizione di Azure e all'organizzazione Azure DevOps.
Se si accede ad Azure e Azure DevOps usando account Microsoft diversi, è comunque possibile procedere aggiungendo un utente all'organizzazione DevOps nell'account Microsoft associato alla sottoscrizione di Azure. Per altre informazioni, vedere Aggiungere utenti all'organizzazione o al progetto. Quando si aggiunge l'utente, selezionare il livello di accesso Basic.
Dopo aver aggiunto l'utente con livello di accesso Basic, disconnettersi da Azure DevOps e accedere usando l'account Microsoft associato alla sottoscrizione di Azure.
Ottenere il progetto Azure DevOps
In questa sezione viene eseguito un modello per creare il progetto in Azure DevOps.
Eseguire il modello
Eseguire il modello per configurare il progetto Azure DevOps per questo modulo:
Nel portale generatore demo di Azure DevOps, attenersi alla procedura seguente per eseguire il modello:
Selezionare Accedi e accettare le condizioni per l'uso.
Nella pagina Crea nuovo progetto, selezionare l'organizzazione Azure DevOps e immettere un nome di progetto, ad esempio Space Game - Web - Kubernetes.
Selezionare Sì, desidero creare una copia tramite fork del repository e quindi Autorizza. Se viene visualizzata una finestra, concedere l'autorizzazione per accedere all'account di GitHub.
Importante
L'abilitazione di questa opzione è necessaria per connettere il modello al repository GitHub. Sceglierlo anche se si è già creata una copia tramite fork del repository Space Game perché il modello userà il fork esistente.
Selezionare Crea progetto e attendere il completamento dell'esecuzione del modello, che potrebbe richiedere alcuni minuti.
Selezionare Passa al progetto per accedere al proprio progetto in Azure DevOps.
Importante
L'unità Pulire l'ambiente Azure DevOps in questo modulo include passaggi cruciali per la pulizia. È consigliabile eseguire questi passaggi per evitare di esaurire i minuti di compilazione gratuiti. Anche se non si completa il modulo, è essenziale seguire i passaggi per la pulizia.
Impostare la visibilità del progetto
Inizialmente, la copia tramite fork del repository Space Game in GitHub è impostata su pubblica mentre il progetto creato dal modello Azure DevOps è impostato su privato. Un repository pubblico in GitHub può essere accessibile da chiunque, mentre un repository privato è accessibile solo all'utente e alle persone con cui si sceglie di condividerlo. Analogamente, in Azure DevOps, i progetti pubblici forniscono l'accesso in sola lettura agli utenti non autenticati, mentre i progetti privati richiedono l'accesso e l'autenticazione degli utenti per accedere ai servizi.
Al momento, non è necessario modificare alcuna di queste impostazioni ai fini di questo modulo. Tuttavia, per i progetti personali, è necessario determinare la visibilità e l'accesso che si desidera concedere ad altri utenti. Ad esempio, se il progetto è open source, è possibile rendere pubblici il repository GitHub e il progetto Azure DevOps. Se il progetto è closed source, probabilmente si preferirà che il repository GitHub e il progetto DevOps di Azure siano privati.
Più avanti, è possibile trovare le risorse seguenti utili per determinare quale opzione è migliore per il progetto:
- Usare progetti privati e pubblici
- Avvio rapido: rendere pubblico il progetto privato
- Setting repository visibility (Impostazione della visibilità del repository)
Passare l'elemento di lavoro allo stato In corso
In questo passaggio, si assegna un elemento di lavoro a sé stessi in Azure Boards e lo si sposta nello stato In corso. Negli scenari reali, insieme al team si creano elementi di lavoro all'inizio di ogni sprint o iterazione di lavoro.
L'assegnazione degli elementi di lavoro offre un elenco di controllo su cui lavorare e agli altri membri del team visibilità sullo stato di avanzamento e sul lavoro rimanente. Consente inoltre di applicare limiti al lavoro in corso (WIP) per evitare al team di accettare una quantità eccessiva di lavoro in una sola volta.
Passare a Boards in Azure DevOps e quindi scegliere Boards dal menu.
Assegnare a sé stessi l’elemento di lavoro Crea versione multi-contenitore del sito Web orchestrato con Kubernetes selezionando la freccia giù situata nella parte inferiore della scheda.
Trascinare la selezione dell'elemento di lavoro dalla colonna Da fare alla colonna In corso. L'attività verrà spostata nella colonna Completato alla fine di questo modulo dopo averlo completato.
Creare l'ambiente del servizio Azure Kubernetes
In questo passaggio si creano le risorse necessarie servizio Azure Kubernetes per distribuire la nuova versione del contenitore del sito Web.
Nel modulo precedente Creare una pipeline di versione con Azure Pipelines, è stato usato il portale di Azure per creare risorse di Azure. Anche se il portale è utile per esplorare le funzionalità di Azure ed eseguire attività di base, la creazione di componenti come servizio Azure Kubernetes può essere un processo che richiede tempo.
In questo modulo si usa l'interfaccia della riga di comando di Azure per creare le risorse necessarie per distribuire ed eseguire l'applicazione scelta nel servizio Azure Kubernetes. È possibile accedere all'interfaccia della riga di comando di Azure da un terminale o tramite Visual Studio Code. In questo modulo, tuttavia, si accede all'interfaccia della riga di comando di Azure da Azure Cloud Shell. Cloud Shell è un'esperienza shell basata su browser ospitata nel cloud, che viene preconfigurata tramite l'interfaccia della riga di comando di Azure per l'uso con la sottoscrizione di Azure.
Importante
Per completare gli esercizi in questo modulo, è necessaria una sottoscrizione di Azure.
Avviare Cloud Shell
Passare al portale di Azure ed eseguire l'accesso.
Selezionare l’opzione Cloud Shell dal menu e quindi scegliere l'esperienza Bash quando richiesto.
Nota
Cloud Shell richiede una risorsa di archiviazione di Azure per rendere persistenti i file creati in Cloud Shell. Alla prima apertura, Cloud Shell chiede di creare un gruppo di risorse, un account di archiviazione e una condivisione di File di Azure. Questa configurazione viene usata automaticamente per tutte le sessioni di Cloud Shell future.
Selezionare un'area di Azure
Un'area si riferisce a uno o più data center di Azure situati in un'area geografica. Le aree come Stati Uniti orientali, Stati Uniti occidentali e Europa settentrionale sono esempi di tali aree geografiche. A ogni risorsa di Azure, inclusa un'istanza del servizio app, viene assegnata un'area.
Per semplificare l'esecuzione dei comandi, iniziare impostando un'area predefinita. Dopo aver impostato un'area predefinita, i comandi successivi usano tale area per impostazione predefinita, a meno che non si specifichi in modo esplicito un'area diversa.
Da Cloud Shell, eseguire il comando seguente per elencare le aree disponibili nella sottoscrizione di Azure:
az account list-locations \ --query "[].{Name: name, DisplayName: displayName}" \ --output table
Selezionare un'area geografica dalla colonna Nome nell'output geograficamente vicino all'utente. Ad esempio, è possibile scegliere eastasia o westus2.
Eseguire il comando seguente per impostare l'area geografica predefinita. Sostituire REGION con il nome dell'area geografica scelta in precedenza.
az configure --defaults location=<REGION>
Questo esempio imposta
westus2
come area predefinita.az configure --defaults location=westus2
Creare variabili bash
Usando le variabili Bash è possibile rendere il processo di configurazione più semplice e meno soggetto a errori. Questo approccio consente di evitare errori di digitazione accidentali definendo stringhe di testo condivise come variabili che possono essere usate in tutto lo script.
In Cloud Shell, generare un numero casuale, per semplificare la creazione di nomi univoci globali per determinati servizi nel passaggio successivo.
resourceSuffix=$RANDOM
Creare nomi univoci globali per il Registro Azure Container e l'istanza del servizio Azure Kubernetes. Si noti che questi comandi usano le virgolette doppie, che indicano a Bash di interpolare le variabili usando la sintassi inline.
registryName="tailspinspacegame${resourceSuffix}" aksName="tailspinspacegame-${resourceSuffix}"
Creare un'altra variabile Bash per archiviare il nome del gruppo di risorse.
rgName='tailspin-space-game-rg'
Trovare la versione più recente del servizio Azure Kubernetes.
az aks get-versions
Prendere nota della versione più recente.
Creare risorse Azure
Nota
In questa esercitazione, vengono usate le impostazioni di rete predefinite a scopo di apprendimento. Queste impostazioni consentono l'accesso al sito Web da Internet. In pratica, è tuttavia possibile configurare una rete virtuale di Azure che colloca il sito Web in una rete non instradabile su Internet e accessibile solo all'utente e al team. Successivamente, è possibile riconfigurare la rete per rendere disponibile il sito Web agli utenti.
Eseguire il comando seguente per creare un gruppo di risorse usando il nome definito in precedenza:
az group create --name $rgName
Eseguire il comando
az acr create
per creare un registro Azure Container con il nome definito in precedenza:az acr create \ --name $registryName \ --resource-group $rgName \ --sku Standard
Eseguire il comando
az aks create
per creare un’istanza del servizio Azure Container con il nome definito in precedenza. Sostituire<latest-AKS-version>
con la versione annotata in precedenza.az aks create \ --name $aksName \ --resource-group $rgName \ --enable-addons monitoring \ --kubernetes-version <latest-AKS-version> \ --generate-ssh-keys
Nota
Il completamento della distribuzione del servizio Azure Kubernetes può richiedere da 10 a 15 minuti.
Creare una variabile per archiviare l'ID dell'entità servizio configurata per l'istanza del servizio Azure Kubernetes:
clientId=$(az aks show \ --resource-group $rgName \ --name $aksName \ --query "identityProfile.kubeletidentity.clientId" \ --output tsv)
Creare una variabile per archiviare l'ID del Registro Azure Container:
acrId=$(az acr show \ --name $registryName \ --resource-group $rgName \ --query "id" \ --output tsv)
Eseguire il comando
az acr list
per recuperare l'URL del server di accesso per l'istanza di Registro Azure Container:az acr list \ --resource-group $rgName \ --query "[].{loginServer: loginServer}" \ --output table
Assicurarsi di prendere nota del server di accesso per il registro contenitori. Queste informazioni sono necessarie in un secondo momento durante la configurazione della pipeline. Ecco un esempio:
LoginServer -------------------------------- tailspinspacegame4692.azurecr.io
Eseguire il comando
az role assignment create
per creare un'assegnazione di ruolo per autorizzare il cluster del servizio Azure Kubernetes a connettersi al Registro Azure Container:az role assignment create \ --assignee $clientId \ --role AcrPull \ --scope $acrId
Importante
L'unità Pulire l'ambiente Azure DevOps in questo modulo include passaggi cruciali per la pulizia. È consigliabile eseguire questi passaggi per evitare di esaurire i minuti di compilazione gratuiti. Anche se non si completa il modulo, è essenziale seguire i passaggi per la pulizia.
Creare un gruppo di variabili
In questa sezione si aggiungerà una variabile alla pipeline per archiviare il nome del Registro Azure Container. È consigliabile definire il nome dell'istanza di Registro Azure Container come variabile nella configurazione della pipeline tramite codifica rigida. Ciò rende la configurazione più riutilizzabile e, nel caso in cui il nome dell'istanza venga modificato, è possibile aggiornare facilmente la variabile e attivare la pipeline senza dover modificare la configurazione.
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline e quindi Libreria nel riquadro di spostamento a sinistra.
Selezionare Gruppi di variabili poi+ Gruppo di variabili per aggiungere un nuovo gruppo di variabili.
Nella sezione Proprietà, immettere Versione come nome del gruppo di variabili.
Nella sezione Variabili, selezionare Aggiungi.
Immettere RegistryName come nome della variabile e immettere il server di accesso del Registro Azure Container, ad esempio tailspinspacegame4692.azurecr.io.
Nella parte superiore della pagina, selezionare Salva per salvare la variabile della pipeline. Questo è un esempio dell'aspetto del gruppo di variabili
Creare connessioni al servizio
Nel prossimo passaggio, si creano connessioni al servizio che consentono ad Azure Pipelines di accedere alle istanze del Registro Azure Container e del servizio Azure Kubernetes. Creando queste connessioni al servizio, Azure Pipelines può eseguire il push dei contenitori, nonché indicare al cluster del servizio Azure Kubernetes di eseguire il pull per aggiornare il servizio distribuito.
Importante
Assicurarsi di aver eseguito l'accesso al portale di Azure e ad Azure DevOps con lo stesso account Microsoft.
Creare una connessione al servizio Registro Docker
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Impostazioni progetto nell'angolo inferiore della pagina.
Selezionare Connessioni al servizio nella sezione Pipeline.
Selezionare Nuova connessione al servizio, quindi selezionare Registro Docker e poi Avanti.
Nella parte superiore della pagina, selezionare Registro Azure Container poi selezionare Entità servizio per il tipo di autenticazione.
Immettere i valori seguenti per ogni impostazione:
Impostazione Valore Subscription la propria sottoscrizione di Azure Registro Azure Container Selezionare la connessione creata in precedenza Nome connessione al servizio Connessione al registro Container Assicurarsi che sia selezionata la casella di controllo per Concedi l'autorizzazione di accesso a tutte le pipeline.
Al termine, seleziona Salva.
Creare una connessione al servizio Azure Resource Manager
Si creerà ora una connessione al servizio Azure Resource Manager per l'autenticazione con il cluster del servizio Azure Kubernetes. Viene usata una connessione al servizio ARM anziché Kubernetes perché i token di lunga durata non vengono più creati per impostazione predefinita a partire da Kubernetes 1.24. Per altre informazioni, vedere questo post di blog di DevOps: Linee guida per la connessione al servizio per i clienti del servizio Azure Kubernetes che usano le attività di Kubernetes.
Selezionare Nuova connessione al servizio, selezionare Azure Resource Manager poi selezionare Avanti.
Selezionare Entità servizio (automatico) poi selezionare Avanti.
Selezionare Sottoscrizione per il livello di ambito.
Immettere i seguenti valori per ogni impostazione.
Impostazione Valore Subscription la propria sottoscrizione di Azure Gruppo di risorse Selezionare la connessione creata in precedenza Nome connessione al servizio Connessione al cluster Kubernetes Assicurarsi che sia selezionata la casella di controllo per Concedi l'autorizzazione di accesso a tutte le pipeline.
Al termine, seleziona Salva.
Creare un ambiente pipeline
Selezionare Pipeline poi Ambienti.
Selezionare Crea ambiente per creare un nuovo ambiente.
Nel campo Nome file immettere Dev.
Selezionare Nessuno nella sezione Risorsa e quindi selezionare Crea per creare l'ambiente della pipeline.
Aggiornare il manifesto della distribuzione Kubernetes.
In questa sezione si aggiornerà il file manifesto Kubernetes deployment.yml in modo che punti al registro contenitori creato in precedenza.
Passare all'account GitHub e selezionare il repository copiato tramite fork per questo modulo: mslearn-tailspin-spacegame-web-kubernetes.
Aprire il file manifests/deployment.yml in modalità di modifica.
Modificare i riferimenti all'immagine del contenitore per usare il server di accesso del Registro Azure Container. Il manifesto seguente usa tailspinspacegame2439.azurecr.io come esempio.
apiVersion : apps/v1 kind: Deployment metadata: name: web spec: replicas: 1 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: tailspinspacegame4692.azurecr.io/web ports: - containerPort: 80 apiVersion : apps/v1 kind: Deployment metadata: name: leaderboard spec: replicas: 1 selector: matchLabels: app: leaderboard template: metadata: labels: app: leaderboard spec: containers: - name: leaderboard image: tailspinspacegame4692.azurecr.io/leaderboard ports: - containerPort: 80
Eseguire il commit delle modifiche nel ramo
main
.