I assume you have heard the news that Windows Server and System Center 2016 TP3 is publicly
available by now.
This means you can download and play around with the bits
in order to get some early hands-on experience on the available scenarios and features.
One of the key scenarios that’s available in this preview
is the following:
·
Nano Server (enhanced – and covered in this blog
post)
·
Storage Spaces Direct (enhanced – and covered
here very soon)
·
Network Controller (new – and covered here in detail very very soon J )
So, let us start to talk about Nano Server.
During Ignite earlier this year, Nano Server was
introduced by the legend himself, Mr. Snover.
Let us be very clear: Nano Server is not even comparable
to Server Core, that Microsoft has
been pushing since the release of it, where you run a full Windows Server without
any graphical user interface. However, some of the concepts are the same and
applicable when it comes to Nano.
Some of drivers for Nano Server was based on customer
feedback, and you might be familiar with the following statements:
-
Reboots
impact my business
Think about Windows Server in general, not just Hyper-V
in a cluster context – which more or less deals with reboots.
Very often you would find yourself in a situation where
you had to reboot a server due to an update – of a component you in fact wasn’t
using, nor aware of was installed on the server (that’s a different topic, but
you get the point).
-
What’s up
with the server image? It’s way too big!
From a WAP standpoint, using VMM as the VM Cloud
Provider, you have been doing plenty of VM deployments. You normally have to
sit and wait for several minutes just for the data transfer to complete. Then there’s
the VM customization if it’s a VM Role, and so on and so forth. Although thing
has been improving over the last years with Fast-File-Copy and support of ODX,
the image size is very big. And don’t forget - this affects backup, restore and
DR scenarios too, in addition to the extra cost on our networking fabric
infrastructure.
-
Infrastructure
requires too many resources
I am running and operating a large datacenter today,
where I have effectively been able to standardize on the server roles and
features I only need. However, the cost per server is too high when it comes to
utilization, and really make an impact on the VM density.
Higher VM density lower my costs and increases my
efficiency & margins.
I just want the
components I need….and nothing more… please
So speaking of which components we really need.
Nano Server is designed for the Cloud, which means it’s
effective and goes along with a “Zero-footprint” model. Server Roles and
optional features live outside of the Nano Server itself, and we have
stand-alone packages that we adds to the image by using DISM. More about that
later.
Nano Server is a “headless”, 64-bit only, deployment
option for Windows Server that according to Microsoft marketing is refactored
to focus on “Cloud OS Infrastructure” and “Born-in-the-cloud applications”.
The key roles and features we have today is the
following:
-
Hyper-V
Yes, this is (If you ask me) the key – and the flagship
when it comes to Nano Server. You might remember the stand-alone Hyper-V server
that was based on the Windows Kernel but only ran the Hyper-V Role? Well, the
Nano Server is much smaller and only
is based on Hyper-V, sharing the exact same architecture as the Hypervisor we
know from the GUI based Windows Server edition.
-
Storage
(SOFS)
As you probably know already, compute without storage is
quite useless, given the fact that Virtual Machines is nothing but a set of
files on a disk J
With a package for storage, we are able to instantiate
several Nano Servers with the storage role to act as storage nodes based on
Storage Spaces Direct (shared-nothing storage). This is very cool and will of
course qualify for its own blog post in the near future.
-
Clustering
Both Hyper-V and Storage (SOFS) relies (in many
situations) on the Windows Failover Cluster feature. Luckily, the cluster
feature servers as its own package for Nano Server and we can effectively
enable critical infra roles in a HA configuration using clustering.
-
Windows
Container
This is new in TP3 – and I suggest you read Aidan’s blog
about the topic. However, you won’t be able to test/verify this package on Nano
Server in this TP, as it is missing several of its key requirements and dependencies.
-
Guest
Package
Did you think that you had to run Nano Server on your
physical servers only? Remember that Nano is designed for the “born-in-the-cloud
applications” too, so you can of course run them as virtual machines. However,
you would have to add the Guest Package to make them aware that they are
running on top of Hyper-V.
In addition, we have packages for OEM Drivers (package of
all drivers in Server Core), OneCore ReverseForwarders and Defender.
Remote Management
Nano Server is all about being effective, leverage the
cloud computing attributes, being effective, scalable and achieve more. In order
to do so, we must understand that Nano Server is all about remote management.
With a subset of Win32 support, PowerShell Core, ASP.NET5,
we aren’t able to use Nano Server for everything.
But that is also the point here.
Although Nano is refactored to run on CoreCLR, we have
full PowerShell language compatibility and remoting. Examples here are
Invoke-Command, New-PSSession, Enter-PSSession etc.
Getting started
with Nano Server for Compute
Alright, so let us get over to some practical examples on
how to get started with Nano Server for Compute, and how to actually do the configuration.
Originally, this blog post was a bit longer than it is
now, since Microsoft just published some new content over at TechNet. Here you
will find a good guidance on how to deploy Nano: https://technet.microsoft.com/en-us/library/mt126167.aspx
I must admit, that the experience of installing and configuring
Nano wasn’t state of the art in TP2.
Now, in TP3, you can see that we have the required
scripts and files located on the media itself, which simplifies the process.
1.
Mount the media and dot-source the ‘convert-windowsimage.ps1’
and ‘new-nanoserverimage.ps1’ script in a PowerShell ISE session
2.
Next, see the following example on how to create
a new image for your Nano server (this will create a VHD that you could either upload to a WDS if you want to
deploy it on a physical server, or mount it to a virtual machine
3.
By running the cmdlet, you should have a new
image
In our example, we uploaded the vhd to our WDS (Thanks
Flemming Riis for facilitating this).
If you pay close attention to the paramhash table, you
can see the following:
$paramHash = @{
MediaPath
= 'G:\'
BasePath
= 'C:\nano\new'
TargetPath
= 'C:\Nano\compute'
AdministratorPassword
= $pass
ComputerName
= 'nanohosttp3'
Compute
= $true
Clustering
= $true
DriversPath
= "c:\drivers"
EnableIPDisplayOnBoot
= $True
EnableRemoteManagementPort
= $True
Language
= 'en-us'
DomainName
= 'drinking.azurestack.coffee'
}
Compute = $true and Clustering = $true.
This means that both the compute and the clustering package will be added to the image. In addition,
since we are deploying this on a physical server, we learned the hard way
(thanks again Flemming) that we needed some HP drivers for networks and storage
controller. We are therefore pointing to the location (DriversPath = “c:\drivers” ) where we extracted the drivers so they
get added to the image.
Through this process, we are also pre-creating the
computer name object in Active Directory as we want to domain join the box to “drinking.azurestack.coffee”.
If you pay attention to the guide at Technet, you can see
how you can set a static IP address on your Nano Server. We have simplified the
deployment process in our fabric as we are rapidly deploying and decommissioning
compute on the fly, so all servers get their IP config from a DHCP server.
Once the servers were deployed (this took literally under
4 minutes!), we could move forward and very that everything was as we desired.
1)
Nano Servers were joined to domain
2)
We had remote access to the nano servers
Since Nano Server is all about remote management, we used
the following PowerShell cmdlets in order to configure the compute nodes,
create the cluster etc.
# Preparing your mgmt server
Install-WindowsFeature -Name RSAT-Hyper-V-Tools, Hyper-V-Tools, Hyper-V-PowerShell, RSAT-Clustering, RSAT-Clustering-MGMT, RSAT-AD-PowerShell
-Verbose
# Creating Nano Compute Cluster
$clustername = "nanocltp3"
$nodes = "hvtp301, hvtp302"
$ip = "10.0.0.50"
New-Cluster -Name $clustername -Node
$nodes -StaticAddress
$ip -NoStorage
-Verbose
# Connecting to storage server and create SMB share with
proper permissions
$storage = "nanostor"
Enter-PSSession -ComputerName nanostor
MD D:\VMS
ICACLS.EXE D:\VMS
--% /Grant
drinking\knadm:(CI)(OI)F
ICACLS.EXE D:\VMS
--% /Grant
drinking\hvtp301$:(CI)(OI)F
ICACLS.EXE D:\VMS
--% /Grant
NTDEV\benarm-zeta$:(CI)(OI)F
ICACLS.EXE D:\VMS
/Inheritance:R
New-SmbShare -Name VMS -Path D:\VMS –FullAccess
drinking\knadm,
drinking\hvtp301$,
drinking\hvtp302$
# Configuring Constrained Delegation
Enable-SmbDelegation –SmbServer $storage
–SmbClient hvtp301
-Verbose
Enable-SmbDelegation –SmbServer $storage
-SmbClient hvtp302
-Verbose
# Configure Hyper-V settings for Cluster usage
$vmhosts =@("hvtp301",
"hvtp302")
$vhdpath = "\\nanostor\vms\"
$vmconfigpath = "\\nanostor\vms\"
$lmsettings = "5"
foreach ($vmhost
in $vmhosts)
{
Set-VMHost
-ComputerName $vmhost
-MaximumVirtualMachineMigrations $lmsettings -VirtualHardDiskPath
$vhdpath -VirtualMachinePath
$vmconfigpath -VirtualMachineMigrationAuthenticationType
Kerberos -Verbose
}
# Create VM based on Nano Image
$vm = "nanovm1"
$nanohost = "hvtp301"
New-VM -ComputerName
$nanohost -Name
$vm -MemoryStartupBytes
512mb -VHDPath
\\nanostor\vms\blank1.vhd -SwitchName VMSwitch
-Generation 1
-Verbose
# Make the VM highly available
Add-ClusterVirtualMachineRole -VMName $vm -Cluster $clustername
-Verbose
# Start the VM
Start-VM -ComputerName
hvtp301 -Name
$vm -Verbose
As you can see, we are also creating a virtual machine
here that is obviously based on a vhd with the guest drivers installed. We tested
on how to do this manually by using DISM on an empty image.
The following example can be used in order to service
your Nano vhd.
# Nano servicing
# Create a mountpoint
md mountpoint
# Mount the image into the mountpoint you just created
dism /Mount-Image
/ImageFile:.\blank.vhd /Index:1 /MountDir:.\mountpoint
# Add your package. In this example, we will add packages for
Storage, Cluster and Virtual Guest Services
dism /Add-Package
/PackagePath:G:\NanoServer\Packages\Microsoft-NanoServer-Guest-Package.cab
/Image:.\mountpoint
dism /Add-Package
/PackagaPath:G:\NanoServer\Packages\Microsoft-NanoServer-FailoverCluster-Package.cab
/Image:.\mountpoint
dism /Add-Package
/PackagePath:G:\NanoServer\Packages\Microsoft-NanoServer-Storage-Package.cab
/Image:.\mountpoint
# Commit and dismount
dism /Unmount-Image
/MountDir:.\mountpoint /commit
# Copy the vhd over to the smb share for the compute cluster
Copy-Item -Path .\blank.vhd -Destination
\\nanostor\vms -Verbose
The following screen shot shows the Nano Cluster that is running
a virtual machine with Nano Server installed:
NB: I am aware
that my PowerShell cmdlets didn’t configure any VMswitch as part of the
process. In fact, I have reported that as a bug as it is not possible to do so
using the Hyper-V module. The VM switch was created successfully using the
Hyper-V Manager console.
Happy Nano’ing, and I will cover more later.
(I also hope that I will see you during our SCU session
on this topic next week)