Xylos brands

Hoe automatiseer je de uitrol van containers met Azure DevOps?

In de vorige blogpost uit onze serie “In 6 stappen naar de cloud”, bespraken we ARM-templates en Kubernetes-manifesten. In deze blogpost gebruiken we de templates om zowel de Kubernetes-infrastructuur als onze toepassingen in Azure uit te rollen. We gebruiken hiervoor de volgende Azure componenten:

  • Azure Virtual Network: de servers die deel uitmaken van de Kubernetes-cluster bevinden zich in dit netwerk.
  • Azure Load Balancer: de load balancer verdeelt het verkeer tussen de twee containers van onze webtoepassing en wordt automatisch door Kubernetes aangemaakt en geconfigureerd.
  • Azure Kubernetes Service (AKS): Kubernetes als een dienst.
  • Azure Container Registry (ACR): een plaats om container images te bewaren.

1. Wat is Azure DevOps?

Azure DevOps biedt een brede waaier van diensten aan. Die staan ter ondersteuning van zowel ontwikkelaars als operations teams. In deze post gebruiken we Azure DevOps voor de volgende taken:

  • De opslag van de code van de toepassing in een systeem voor versiebeheer.
  • De bouw van een nieuwe container image.
  • De uitrol van de nieuwe container image zonder impact op de eindgebruikers.

Als voorbeeld gebruiken we een interne toepassing van Xylos die iets complexer is dan de webtoepassing uit de vorige blogposts. Maar geen zorgen: de stappen die we beschrijven zijn generiek en toepasbaar in vrijwel alle scenario’s.

2. Wat met het versiebeheer van onze code?

Azure DevOps laat ons toe code op te slaan in o.a. git repositories. Onderstaande afbeelding toont de inhoud van de xci-fe repository. De repository bevat de code van de frontend van de toepassing, geschreven in Javascript met behulp van Angular. Een andere repository, xci-be, bevat de code voor de backend, geschreven in Node.js.

Het is meteen duidelijk: we bevinden ons op het terrein van de ontwikkelaar. Ze kan de toepassing op haar eigen werkstation schrijven en zal geregeld de wijzigingen aan de code uploaden naar de git repository. Ze gebruikt hiervoor het git commit en git push commando of haar favoriete code editor.

De Kubernetes-manifesten bevinden zich samen met de code in de repository (charts/xcife folder). Dat is niet altijd het geval. Alhoewel we Kubernetes-manifesten gebruiken, zoals besproken in de vorige post, worden de manifesten in dit geval uitgerold met Helm. Helm laat ons o.a. toe om parameters mee te geven aan Kubernetes-manifesten, zoals bijvoorbeeld de naam en de versie van de container image.

De ARM-template om Azure Kubernetes Service uit te rollen, bevindt zich in een andere repository.

Je kan de ARM-template gebruiken om AKS uit te rollen en aan te passen.

2.1 Build pipelines

Als de code van de applicatie wijzigt, is er een nieuwe container image vereist. De Dockerfile met het recept om de image te bouwen, wordt samen bewaard met de code en ziet er als volgt uit:

Via een build pipeline geven we Azure DevOps instructies om de image te bouwen. Een pipeline bevat een of meerdere stappen. De pipeline voer je in dit geval automatisch uit als je haar code op een bepaalde wijze opslaat. Je kan ook om goedkeuring vragen, bijvoorbeeld aan de eigenaar van de applicatie of een release manager.

Onderstaande afbeelding bevat de stappen om de front-end image te bouwen.

De eerste twee stappen zijn duidelijk: we bouwen de image en bewaren die in een Azure Container Registry genaamd xyloscloudincentive. Later zal Kubernetes de image downloaden van deze registry omdat de naam en versie van de image in het Kubernetes manifest zal staan.

In de laatste stappen bouwen we een Helm-package. Een Helm-package is een archief (denk zip) dat de Kubernetes-manifesten bevat volgens de Helm-specificaties. De Helm-package wordt gepubliceerd in een artefact.

Een actie, zoals het bouwen van een image, moet je ergens uitvoeren. Voor deze applicatie gebruiken we build servers die Microsoft als een dienst aanbiedt. Azure DevOps biedt je uiteraard de mogelijkheid om je eigen build servers te gebruiken. Die kunnen zich zowel in de cloud als on-premises bevinden.

We hebben nu een nieuwe container image en een Helm-package. De vraag is nu hoe we die onderdeeltjes kunnen gebruiken om de applicatie uit te rollen. Een release pipeline biedt het antwoord.

2.2 Aan de slag met release pipelines

Een release pipeline is verantwoordelijk voor de uitrol van infrastructuur en applicaties in verschillende omgevingen zoals development, test en productie. Onderstaande afbeelding toont de release pipeline die de eerder gebouwde applicatie uitrolt.

Omdat we Helm gebruiken, is de release pipeline vrij eenvoudig. We gebruiken de Helm package uit de build pipeline en voeren een upgrade uit. Werd de applicatie nog nooit eerder uitgerold? Dan wordt ze voor de eerste keer geïnstalleerd. Een belangrijk aspect bij de uitrol zijn de parameters. De helm-upgrade stap gebruikt de volgende parameters in de Set Values textbox:

  • image.repository=xyloscloudincentive.azurecr.io/$(Build.Repository.Name)
  • image.tag=$(Build.BuildId)
  • azure.clientsecret=$(dns-secret)
  • ingress.loadbalancerip=$(ip)

Azure DevOps geeft je allerlei mogelijkheden om variabelen en parameters te definiëren. $(dns-secret) en $(ip) zijn zelfgemaakte variabelen. Met $(Build.Repository.Name) en $(Build.BuildId) halen we de naam van ACR en de image tag op uit de build pipeline. Daarna injecteren we de naam van de image in het Kubernetes-manifest. Kubernetes weet nu dat het een nieuwe container image moet gebruiken.

3. Conclusie

Azure DevOps is een krachtige as-a-service-oplossing om een brede waaier van infrastructuur en applicaties uit te rollen, zowel in de cloud als on-premises. In deze post gebruikten we Azure DevOps om een container image te bouwen en uit te rollen in Azure Kubernetes Service. Op basis van de principes in deze post, raadt Xylos zijn klanten aan om zoveel mogelijk te automatiseren. Dit werkt ook zonder containers. Zo vermijd je fouten, verhoog je de kwaliteit en verbeter je de veiligheid.

In de volgende en laatste blogpost van de reeks “In 6 stappen naar de cloud” bespreken we nog een laatste aspect: veiligheid.
 

Deel dit blogbericht

Laat een antwoord achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd.

Breng jouw kennis en skills naar een hoger niveau

Schrijf nu in voor onze nieuwsbrief en krijg maandelijks:

  • Uitnodigingen voor Xylos' events & webinars
  • De laatste blogposts en cases
  • Nieuwste IT-trends