I had a long Saturday this weekend. If you are not living in a cave you probably heard about Microsoft’s new Hybrid cloud approach AzureStack.
I’m not going to discuss the architecture or the benefits that AzureStack brings because there are bunch of good resources available:
Last week Microsoft announced that AzureStack first technical preview (TP1) will be available on 29th of Jan.
Also couple of weeks ago, hardware requirements are announced to deploy TP1. TP1 just focuses for POC deployments and available to install all components on a single server if you meet below requirements:
I’m sure most of you were expecting to install AzureStack on your laptop or home desktop PC to test basic functionalities but if you look at the requirements, that’s a bit challenging for a giant like Azure Stack.
Here are the couple req:
- Windows Server 2016 Datacenter (TP4)
That one easy and can be installed on your lab server/desktop easily.
- One available port on a switch for the POC machine
Shouldn’t be a problem
- Microsoft Active Directory accounts
To deploy Azure Stack POC, you must have a valid Microsoft Azure AD account that is the directory administrator for at least one Azure Active Directory.
You can use your existing Azure subscription or create one for free.
To be honest I don’t have a home lab that meets that requirement so we need to find a way for that one. Because deployment script will create bunch of virtual machines probably require around 96GM of RAM.
If you were planning to use a virtual machine to test AzureStack, that’s another challenge as well because POC machine should have Hyper-V role installed.
Minimum configuration requires 4 disks; each disk provides a minimum of 140 GB of capacity. Also these disks should be visible in disk management as online – RAW – not in use
So like me, if you were planning to use your home lab to test AzureStack, there are couple of challenges we need to deal with.
Actually I was planning to use my home Windows 10 desktop machine which has following configurations:
- 32 GB RAM
- I7-6700K CPU
- SSD System Drive
- 1TB HDD
I know it’s not a good idea to use this system to run a giant like AzureStack but that was all I had this weekend J
So first thing first, we need to deal with Hyper-V requirement. You can always install Windows Server 2016 Datacenter edition on a dedicated partition and boot but also you can use Windows 10 latest insider version to have nested Hyper-Vs.
Currently I’m running:
So I simply enabled Hyper-V on it and then followed below instructions/scripts to install a nested Windows Server 2016 TP4 Hyper-V server as a virtual machine.
Enable-NestedVM.ps1 script does all required checks for you and at the end of the steps you will have a fully working Nested 2016TP4 Hyper-V server.
So our Hyper-V server is ready – I hope.
Next thing we need to find a way to deal with hardware requirements.
For the data disk requirements, I simply created 4 VHD on my physical Windows 10 HDD with required sizes:
$i = 1..4
foreach ($a in $i)
New-VHD -Path G:\DATA_DISKS\VHD0$a.vhdx -Fixed -SizeBytes 140GB
Then simply added these disks to my nested Hyper-V server.
If you follow official AzureStack deployment guide, you will realize that we are booting nested Hyper-V server with WindowsServer2016Datacenter.vhdx disk using following command:
bcdboot <mounted drive letter>:\windows
and then we need to run
command to start the deployment. Before changing anything I just wanted to see what this command is actually doing so just run it once and realized all prerequisites are checked before deployment.
We don’t have a problem with data disks but I got error messages for the RAM as I only have 32 GB of RAM and set my nested Hyper-V to use around 24 GB out of it.
So I just opened DeployAzureStack.ps1 script to see what’s going on. First thing I realized that script is mounting $PoCVHD
‘MicrosoftAzureStackPOC.vhdx’ using below command.
So you have two options:
You can fire the deploy script and wait for vhdx to be mounted and then find the requirement definitions and change it. I tried this method but faced another problem.
As you may see on the above script, VHD is mounted as read-only which makes impossible to change any content in VHD.
I actually found the precheck script to change the required RAM settings but once I tried to save it gave below error:
So you can simply edit the first script and remove (-access ReadOnly) parameter. That will mount the disk in a normal state and you can hijack any file you found.
But I believe second option is much easier. Before running DeployAzureStack script you can simply mount the disk (MicrosoftAzureStackPOC.vhdx) manually, edit the files you need and then eject it. Then you can simply start the deployment with an updated VHDX.
Here is the file I found when I mounted VHDX.
That script includes all functions which actually checks your infrastructure. I changed CheckRAM function to lower the memory requirements for my host machine:
And then I started the deployment and forgot an important thing…
Yes my host now meets requirements for the installation but once the installation starts, it will create 10 different virtual machines with different Vcpu and memory settings. And first 3 or 4 VMs already filled my memory. You can try the ugly way and change the VM settings after the deployment of each machine. But probably you need to spend couple of hours to check each and every VM and that could also break the installation.
So we also need to find VM memory and CPU definition files.
That file is POCFabricSettings.XML
You can simply edit processor count and RAM settings according to your current infrastructure:
I simple used “1” for Processor count and “2” for the RAM. These are quite low settings to run these machines but helps you to finish installation without any problem.
You need to save changes and then eject VHD before starting deployment.
And you are ready to go!
I had two issues during the deployment.
Turning of IE enhanced mode on Nested 2016TP4 resolved the problem.
Second issue is whole installation took around 9 hours to complete. I know this is not a recommended way of installing AzureStack and probably I may face serious performance issues but will help you to test some basic functionalities before you find a real gear.
Hope that helps you.