Waar te starten?
Een interessant startpunt is het gebruik van oplossingen als Azure Migrate.
Azure Migrate is een dienst die je helpt bij het beoordelen en migreren naar Azure van je on-premises apps. Deze dienst ondersteunt verschillende migratiescenario's, onder andere rehosting, refactoring, herstructurering en heropbouw. Een van de scenario's waarmee Azure Migrate je kan ondersteunen, is het containeriseren van je bestaande apps, draaiend op VMs.
Containers bieden veel voordelen, zoals snellere implementatie, grotere schaalbaarheid, lager resource verbruik en verbeterde betrouwbaarheid. Het containeriseren van een app kan echter aanpassingen vereisen in de code, de architectuur of in het implementatieproces. En dat kan wel uitdagend zijn.
Azure Migrate biedt een eenvoudige en geautomatiseerde manier om je bestaande applicaties te containeriseren zonder aanpassingen. Hierbij wordt gebruik gemaakt van Azure Migrate App Containerisation. Deze tool analyseert je app, identificeert afhankelijkheden, maakt een dockerfile en Helm-chart, bouwt een containerimage en plaatst deze in een containerregister. Met Azure Migrate kan je daarna je je gecontaineriseerde app implementeren in Azure Kubernetes Service (AKS). Dat is een volledig beheerde service die je containerworkloads orchestreert en beheert.
Azure Migrate voor containerisatie is een goede eerste stap omdat het een eerste ervaring biedt om op voort te bouwen. Zo helpt het je snel en gemakkelijk bestaande apps naar containers te migreren en ze op Azure te laten draaien. Ook kun je hiermee ‘best practices’ en tools als Docker en Helm leren. Vervolgens kun je de gegenereerde artefacten aanpassen of uitbreiden om je gecontaineriseerde applicaties aan te passen aan jouw behoeften.
Waarom dit als ‘tussenstap’?
Azure Migrate biedt je waarschijnlijk niet de kant-en-klare-oplossing die je zoekt, maar het zal je journey zeker een goede kick-start geven!
De beslissing is genomen en je bent begonnen. Hoe nu verder?
Ten eerste is het cruciaal om de eigenschappen van containers te begrijpen en snappen hoe deze zich verhouden tot je huidige oplossing. Denk hierbij aan eigenschappen als:
- Schaalbaarheid: Containers zijn schaalbaar. Een verandering in vraag / workload kan daarom sneller opgevangen worden. Containers kunnen binnen enkele seconden worden gecreëerd, geïmplementeerd en verwijderd, waardoor je snel kunt opschalen of afschalen. Containers delen ook hetzelfde onderliggende besturingssysteem en resources, wat de overhead vermindert en de efficiëntie verbetert.
- Portability: Een ander voordeel van containers is hun draagbaarheid. Dit betekent dat ze kunnen draaien op elk platform dat container-runtime ondersteunt. Containers bevatten alle afhankelijkheden en configuraties van een app, waardoor ze eenvoudig te verplaatsen zijn tussen verschillende omgevingen, zoals ontwikkeling, testen en productie. Containers zorgen ook voor consistente en betrouwbare implementaties, waarbij de applicatie overal op dezelfde manier werkt, ongeacht waar deze draait.
- State: Een andere eigenschap van containers is dat ze verschillende staten kunnen hebben, wat betekent dat ze data intern of extern kunnen opslaan. Containers die data intern opslaan, worden stateful containers genoemd en behouden data zelfs nadat de container is gestopt of verwijderd. Containers die data extern opslaan, worden stateless containers genoemd en vertrouwen op externe services of volumes om data op te slaan. Stateless containers zijn meer geschikt voor schaalbaarheid en draagbaarheid omdat ze niet afhankelijk zijn van de staat van de container zelf.
- Orchestratie: In grotere omgevingen met meerdere draaiende containers hebben containers nodig, wat betekent dat ze tools nodig hebben om meerdere containers over meerdere nodes te beheren en coordineren. Orchestrators zoals Azure Kubernetes Service (AKS) bieden functies zoals service discovery, load balancing, health monitoring, configuration management en beveiliging voor containers. Orchestrators automatiseren ook de implementatie, schaling en herstel van containers, waardoor het gemakkelijker wordt om complexe en gedistribueerde applicaties te beheren.
Je oplossing dient bovenstaande eigenschappen te ondersteunen. Als we kijken naar schaalbaarheid, dan rijst de vraag: wil je optimale beschikbaarheid met meerdere replica’s van je backend-API? Dat is een goede keuze, maar wordt het ondersteund? Zit er geen legacy-code die voorkomt dat je meerdere instanties kunt draaien, wat dubbele database-invoeren tot gevolg heeft?
Dit zijn aspecten die getest en aangepast moeten worden. Het belangrijkste is om te accepteren dat bij het refactoren van je applicatie om binnen containers te draaien in plaats van een traditionele virtual machine, je niet meteen alle best practices zult implementeren. In plaats daarvan zul je de infrastructuur aanpassen om beperkingen te overwinnen en mogelijk zelfs stateful containers gebruiken, wat in het begin minder schaalbaarheid biedt.
Je zult nog steeds profiteren van de voordelen van containers, zoals snelle implementaties en zelfherstellende concepten van Kubernetes, maar niet van allemaal tegelijk, en dat is oké. Het biedt je een duidelijke roadmap.
Wrapping up:
In dit artikel bespraken we VM's en containers en wat er komt kijken bij de overstap van VM's naar containers. Met deze korte introductie in containerisatie, de voordelen die het biedt en de aanpassingen die je in je achterhoofd dient te houden om succesvol te migreren, hopen we je een stukje op weg hebben geholpen.