So recently I got involved with an ASP.NET project which was build over 10 years ago and over the years Developers and Change Requests came and went. And over the period the Application became quite cumbersome and quite hard to understand and manage, the Application became quite large in terms of functionality, codebase and data.
It was cumbersome and quite hard to understand for a new developer and manage for the Ops team. Lot of technical debts started accumulating because there was no real time spend on optimizing or refactoring the systems. The database was slow and deadlocks were becoming normal. It was hosted on huge on-premise hardware making it a heavy and costly solution.
The management realized this and decided it was a time for a refresh. The plan was made to look at utilizing the cloud technologies. And I joined the project as the software architect for the upgrade/migration.
In this article the focus is on Data and I am putting down my thoughts on what would be the right Cloud Data architecture for this organization.
Let's start with categorizing Data, Use case and the corresponding system.
Datastore can be categorized into two types of system.
And here is the Data Architecture diagram
This article is going to focus on item #3. The SQL Server Container. The others will be visited in future articles. So now we will walk-through on how to
Deploy SQL Server DB Instance into an AKS Cluster.
Databases are stateful. That means it needs storage that can be persisted. So we will first look at storage.
AKS Storage
Applications hosted on Azure Kubernetes Service (AKS) may need to store and retrieve data.
The data storage requirements of many types:
Below we will address four concepts that provides storage to
applications in AKS
Volumes
This is the storage and in Azure it comes in two forms.
For our SQL Server container we will creating an Azure Disk for the data storage requirements.
Persistent Volume
A persistent volume is a storage resource that is managed by the Kubernetes Master API that can exist beyond the lifetime of Pod. It can be statically created by Kubernetes cluster or dynamically provisioned. We will be looking at static provisioning.