Esercizio - Creare un'azione GitHub da distribuire nel servizio Azure Kubernetes
In questo esercizio si completeranno le seguenti attività:
- Migliorare l'azione GitHub esistente per includere un processo di distribuzione.
- Verificare che le modifiche vengano distribuite nel cluster servizio Azure Kubernetes.
- Eseguire il rollback della distribuzione.
Aggiornare il manifesto Kubernetes per il servizio dei prodotti
Per distribuire nuove versioni del servizio dei prodotti eShop, modificare il file product.yml in modo che punti al Registro Azure Container usato nell'unità precedente.
Nel repository di cui è stata creata una copia tramite fork, selezionare la code tab e quindi selezionare il file product.yml.
Per modificare il file, selezionare l'icona di modifica (matita).
Modificare la riga:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
Sostituire
[replace with your ACR name]
con il nome del Registro Azure Container, ad esempio, acseshop186748394.In alto a destra selezionare Commit delle modifiche e quindi nella finestra di dialogo selezionare Commit delle modifiche.
Creare l'azione di distribuzione
Il codice YAML aggiunge un passaggio GitHub che:
Include un passaggio che distribuisce nuove immagini. Ecco i passaggi di uno strumento di esecuzione ubuntu-latest
:
- Estrae il repository in cui si trova questo file.
- L'account di accesso d Azure accede ad Azure utilizzando le credenziali dell'entità servizio.
- La configurazione di kubelogin per l'accesso non interattivo configura il file kubeconfig per l'autenticazione di Azure.
- Il passaggio di recupero del contesto K8 imposta le credenziali del servizio Azure Kubernetes nel file dello strumento di esecuzione .kube/config.
- Il passaggio di distribuzione dell'applicazione distribuisce l'applicazione nel servizio Azure Kubernetes, usando l'immagine compilata nel passaggio precedente e il file manifesto di Kubernetes modificato in precedenza.
Completare la procedura seguente per creare un'azione GitHub che distribuisce il servizio di gestione dei coupon:
Nel repository di cui è stata creata una copia tramite fork, nella scheda code tab selezionare la scheda .github/workflows.
Selezionare azure-kubernetes-service.yml.
Per modificare il file, selezionare l'icona di modifica (matita).
Alla fine del file, incollare il codice YAML seguente nell'editor:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: false
In alto a destra selezionare Commit delle modifiche e quindi nella finestra di dialogo selezionare Commit delle modifiche.
Attivare una distribuzione
L'aggiornamento del file azure-kubernetes-service.yml e il commit delle modifiche attiva automaticamente un'altra distribuzione. Vedremo ora come apportare una modifica del codice attiva un'altra distribuzione.
Si supponga di disporre di un nuovo prodotto che il team di marketing vuole aggiungere al catalogo.
Nel repository di cui è stata creata una copia tramite fork, nella code tab selezionare la cartella Products.
Selezionare la cartella Data .
Selezionare il file ProductDataContext.c.
Per modificare il file, selezionare l'icona di modifica (matita).
Alla fine del file aggiungere un nuovo prodotto alla matrice products:
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },
In alto a destra selezionare Commit delle modifiche e quindi nella finestra di dialogo selezionare Commit delle modifiche.
Monitorare la distribuzione
Per monitorare lo stato di avanzamento della distribuzione, selezionare la scheda Actions.
Selezionare l'esecuzione del flusso di lavoro più recente elencata per il flusso di lavoro Build and deploy an app to AKS. Il nome dell'esecuzione è il messaggio di commit usato nel passaggio precedente.
Selezionare il processo deploy per visualizzare i dettagli di questa esecuzione del flusso di lavoro.
Nel terminale, eseguire il comando seguente per monitorare i pod del servizio di gestione dei coupon nel cluster del servizio Azure Kubernetes. Il flag
--selector
filtra l'elenco solo in base ai pod per il servizio di gestione dei coupon e il flag--watch
indica akubectl
di controllare le modifiche.kubectl get pods --selector=app=productservice --watch
Durante la distribuzione viene visualizzata una variante dell'output seguente:
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19m
Nell'output precedente, osservare che è stato creato un nuovo pod productservice. Quando il nuovo pod è pronto, quello precedente viene terminato. Questo processo semplifica al massimo il passaggio alla nuova versione.
Verificare l'app
Completare i passaggi seguenti per verificare che l'app funzioni ancora:
Visualizzare l'app eShop distribuita eseguendo questo comando nel terminale:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
Il comando precedente restituisce l'indirizzo IP esterno per l'app Web. Tenere premuto CTRL e selezionare il collegamento per aprire l'app in una nuova scheda.
Passare alla pagina dei prodotti per visualizzare la nuova tenda elencata nella parte inferiore della pagina.
Eseguire il rollback della distribuzione
Una mitigazione comune per i problemi di produzione è il ripristino di una versione della distribuzione riuscita nota. Kubernetes mantiene aggiornata una cronologia delle distribuzioni che è possibile usare per eseguire il rollback a una versione precedente dell'app.
Nel terminale eseguire questo comando per rimuovere la nuova tenda appena aggiunta al sito Web:
kubectl rollout undo deployment/productservice
Verrà visualizzato questo messaggio della console:
deployment.apps/productservice rolled back
Aggiornare la pagina dei prodotti nel browser. La nuova tenda non dovrebbe più essere elencata.
Nota
In uno scenario reale, si distribuiscono gli artefatti della compilazione in più ambienti. Ad esempio potranno essere presenti ambienti di sviluppo, test e gestione temporanea. È possibile attivare i flussi di lavoro di distribuzione in base a eventi quali l'unione di richieste pull. Per evitare distribuzioni impreviste nell'ambiente di produzione, è possibile aggiungere soglie di qualità o approvazione, ad esempio l'approvazione della richiesta pull da parte di uno stakeholder.