Esercizio - Creare un'azione GitHub per la distribuzione su AKS
- 10 minuti
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 del servizio Azure Kubernetes.
- Eseguire il rollback della distribuzione.
Aggiornare il manifesto di Kubernetes per il servizio del prodotto
Per distribuire nuove versioni del servizio prodotto eShop, modificare il file product.yml in modo che punti al Registro Azure Container usato nell'unità precedente.
Nel repository forkato, selezionare code tab, 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:latestSostituisci
[replace with your ACR name]con il nome dell'Azure Container Registry, ad esempio acseshop186748394.In alto a destra, selezionare Commit changes e quindi nella finestra di dialogo selezionare Commit changes.
Creare l'azione di distribuzione
Il codice YAML aggiunge una fase di GitHub che comprende un passaggio per distribuire nuove immagini. Ecco i passaggi di uno strumento di esecuzione ubuntu-latest:
- Estrae il repository in cui si trova questo file.
- Azure Login accede ad Azure con le credenziali del principal del servizio.
- Configurare 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.
- Distribuisce l'applicazione nel servizio AKS, usando l'immagine creata nel passaggio precedente e il file manifesto Kubernetes modificato in precedenza.
Completare i passaggi seguenti per creare un'azione GitHub che distribuisce il servizio coupon:
Nel repository di cui è stata creata una copia tramite fork, nella scheda code tab selezionare la scheda .github/workflows.
Seleziona azure-kubernetes-service.yml.
Per modificare il file, selezionare l'icona di modifica (matita).
Nella parte inferiore 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: falseIn alto a destra, selezionare Commit changes e quindi nella finestra di dialogo selezionare Commit changes.
Attivare una distribuzione
L'aggiornamento del file e delle modifiche effettuate con il commit azure-kubernetes-service.yml attivano automaticamente un altro rilascio. Vedere ora come apportare una modifica del codice attiva un'altra distribuzione.
Si dispone 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).
Nella parte inferiore del file aggiungere un nuovo prodotto alla matrice di prodotti :
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 changes e quindi nella finestra di dialogo selezionare Commit changes.
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 deploy job per visualizzare i dettagli dell'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
--selectorfiltra l'elenco solo in base ai pod per il servizio di gestione dei coupon e il flag--watchindica akubectldi controllare le modifiche.kubectl get pods --selector=app=productservice --watchDurante 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 19mNell'output precedente si noti che viene creato un nuovo pod productservice . Quando il nuovo pod è pronto, quello precedente viene terminato. Questo processo rende più fluida possibile la transizione alla nuova versione.
Verificare l'app
Completare i passaggi seguenti per verificare che l'app funzioni ancora:
Visualizzare l'eShop distribuito 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 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 consiste nel ripristinare una nota distribuzione valida. Kubernetes gestisce una cronologia di distribuzione 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 e la nuova tenda non dovrebbe più essere elencata.
Annotazioni
In uno scenario reale, si distribuiscono gli artefatti della compilazione in più ambienti. Ad esempio, potrebbero essere presenti ambienti di sviluppo, test e pre-produzione. È 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.
