Dynamisch schalen van Azure DevOps virtual machine scale set agents
Als specialisten van Azure DevOps zien wij dat organisaties veel noodzakelijke tijd kwijt zijn in het onderhoud van hun self-hosted agents. Agents zijn machines die het builden, testen en deployen voor hun rekening nemen. Ze voeren de taken binnen de pipelines daadwerkelijk uit.
Azure DevOps biedt de optie om gebruik te maken van Azure Virtual Machine Scale Sets om dynamisch agents te creëren en te verwijderen, dit aan de hand van de behoefte. Zie deze pagina van Microsoft Learn voor meer informatie. Zodoende vervalt een groot nadeel van het beheren van self-hosted-agents. Omdat met scale sets de agents geïnstalleerd worden vanaf een voor gedefinieerde image zien we de self-hosted agents als cattle en niet meer als pet.
Binnen een Azure virtual machine scale set agent pool geef je als beheerder een drietal belangrijke beheer parameters op:
- ‘Maximum number of virtual machines in the scale set’
- ‘Number of agents to keep on standby’
- ‘Delay in minutes before deleting excess idle agents’
Deze parameters geven aan hoeveel agents er gestart zijn, zodat kosten worden beperkt. Het nadeel van deze settings is dat deze altijd hetzelfde zijn terwijl de demand op de agents van moment tot moment anders is. Het is vanzelfsprekend dat binnen kantoortijden, als developers actief werken aan hun software, de behoefte groter is op het gebied van het aantal agents als je deze vergelijkt met in de avonduren of in het weekend.
Om geautomatiseerd de drie beheerparameters te beheren hebben wij een Azure Function ontwikkeld. Deze Function past automatisch op basis van vooraf ingestelde tijdstippen, de instellingen aan van de Azure Virtual Machine Scale Set Agent Pool. Je geeft op wat de kantoortijden zijn en wat de waarde van de maximale capaciteit en idle capaciteit dient te zijn binnen de kantoortijden, buiten de kantoortijden en in het weekend. Per Azure Virtual Machine Scale Set Agent Pool wordt er een Azure function gedeployed. Deze kijkt elke 15 minuten of de Agent Pool aangepast dient te worden.
Onderdeel van de Azure Function is het rapporteren naar Application Insights. Wanneer de Agent Pool niet aangepast kan worden, wordt er een notificatie verstuurd naar een Microsoft Teams kanaal.
De code kun je vinden op GitHub.
Joost Voskuil, DevOps Consultant