Showing posts with label SMA. Show all posts
Showing posts with label SMA. Show all posts
Thursday, April 30, 2015
VM Checkpoints in Windows Azure Pack
Fresh from the factory, Update Rollup 6 has been released
and shipped by Microsoft.
This isn’t a blog post that will point out all the bug
fixes and the amazing work all of the teams has been doing, but rather point
you towards a highly requested feature, that finally made its way to the tenant
portal in Windows Azure Pack.
With Update Rollup 6, we now supports creation and restore of Hyper-V
checkpoints on virtual machines, provided by the VM Cloud Resource Provider.
Tenants that have deployed virtual machines may now
create checkpoints and restore them on their own, without any interaction from
the cloud provider.
Let us have a closer look at how this actually works, how
to configure it and what additional steps you might want to take as part of
this implementation.
Enabling create,
view and restore of virtual machine checkpoints at the Hosting Plan level
Once the UR6 is installed for WAP and the underlying
resource provider, you will notice some changes in the admin portal.
First, navigate to a Hosting Plan of yours – that contains
the VM Cloud Resource Provider.
When you scroll down, you can see that we have some
settings related to checkpoints.
Create, view and
restore virtual machine checkpoints – will let the tenants that has
subscriptions based on this hosting plan, be able to perform these actions on their
virtual machines.
View and restore
virtual machine checkpoints – let the tenants view and restore virtual
machine checkpoints, but not create them. This can for example be performed by
the cloud provider on an agreed schedule.
When you enable either of these options, an update job is
taking place at the plan level and communicates the changes back to VMM,
ensuring that the tenants will have permissions to take these actions in the
tenant portal once it has completed.
If we switch over to the tenant portal, we can see that
when we drill into one of the existing VMs (click on the VMàDashboard) we have some
new actions available.
If you would manage
checkpoints for your VM Roles, you can of course do that too, but you then have
to drill into each specific instance, as the VM role potentially can
have multiple instances when supporting scale-out.
To create a new checkpoint, simply click on Checkpoint and
type the name of the checkpoint and eventually a description.
If we switch back to the fabric and VMM, we can see that
a VMM job has completed with details about the checkpoint process for this
specific tenant, with the name and description we typed.
If we would like to perform the same operation again,
creating an additional checkpoint on the same virtual machine, we get a message
telling us that the existing checkpoint will be deleted.
This is because that the current checkpoint integration
in WAP will only keep one checkpoint, and avoid the scenario where you could
potentially have a long chain of differential disks.
When we create the second checkpoint, we can switch back
to VMM to see what’s actually happening:
First, a new checkpoint is created.
Second, the previous checkpoint is deleted.
When we explore the checkpoints settings on the VM itself
afterwards, we see that we only have the latest checkpoint listed.
Regarding the restore
process, we can also perform this from the same view in the tenant portal.
Once you click on the restore button, the tenant portal
will show you the metadata of the available checkpoint, such as name,
description and when it was created. Once you click the confirm button, the
restore process will start in VMM.
Now what?
If you are familiar with how checkpoints in Hyper-V
works, then you know that each static disk will be either .vhd or .vhdx –
depending on the format you are using (.vhdx was introduced with Windows Server
2012 and should be the preferred format, but Azure is still using .vhd).
Once you create a checkpoint, a new disk (.avhd or
.avhdx) will be created– a differential disk, containing all the new write
operations, while read operations will occur on both the parent disk (vhdx) and
the newly created differential disk.
To summarize, this might not be an ideal situation when
it comes to performance, life-cycle management and storage optimization.
Since we don’t have any action in the tenant portal to
perform a delete operation, this can be scary in some scenarios.
The fact that the VM will always run on a checkpoint once
a checkpoint is created, means you will always be able to restore to your
latest checkpoint from the portal.
In order to solve this challenge, we can leverage the
integration of Service Management Automation in Azure Pack.
One of the best things with Azure Pack and the VM Cloud
resource provider, is that we can extend it and create valued added solutions
and services by linking certain actions happening in the tenant portal, to
automated tasks that are executed by a SMA runbook in the backend.
The following screenshot shows that there’s an event
related to creation of VMM Checkpoints performed by the tenant, which can
easily be linked to a runbook.
Here’s an example of a runbook that will check for
checkpoints created on VMs belonging to a specific VMM Cloud that is used in a
Hosting Plan in WAP. If there’s any checkpoints that exists, they will be
deleted and the VMs will have their disks merged back to a static disk
(.vhd/.vhdx).
<#
.SYNOPSIS
Wokflow to check for - and eventually delete old VM
checkpoints
#>
workflow delete-scvmcheckpoint
{
# Connection
to access VMM server.
$VmmConnection
= Get-AutomationConnection
-Name 'SCVMM'
$VmmServerName
= $VmmConnection.ComputerName
inlinescript
{
# Import VMM
module.
Import-Module virtualmachinemanager
# Connect to VMM server.
Get-SCVMMServer -ComputerName $Using:VmmServerName
$vms = Get-SCVirtualMachine |
Where-Object {$_.Cloud -like "*Copenhagen IaaS*" -and $_.VMCheckpoints
}
foreach
($vm in
$vms)
{
Get-SCVMCheckpoint -VM $vm | Remove-SCVMCheckpoint
-RunAsynchronously
}
}-PSComputerName $VmmServerName
-PSCredential $VmmCredential
}
This simple code can so be added to a schedule that will
execute this runbook on a daily basis – as an example, ensuring that no VMs in
the cloud will run on a checkpoint on a long term.
Thanks for reading!
Hyper-V
Hyper-V,
PowerShell,
SCVMM 2012 R2,
Service Management API,
SMA,
WAP,
WAPack
Wednesday, April 15, 2015
Why I am investing in DSC
In order to get a good grasp on something new, like a
technology, it is always important to find a use case.
Once you have a use case, I can ensure you that the
learning process is much more interesting, fun – and perhaps easier too.
That is what I did when I went deep into Desired State
Configuration. I found a use case.
My use case was to leverage DSC as part of VM Roles in
Azure Pack in a way that would be valid for the future too.
Here comes some reasons for my decision.
Powershell has been around for some time now, and one of
the best benefits by learning and using the shell is the amount of work you are
able to do, combining modules, components, technologies and much more through
the same API. Considering that everything that MS builds and do – regardless of
cloud, will be accessible and manageable through Powershell in addition to
other options, ensures that this is a real no-brainer.
With Windows Management Framework 4.0, we also got
Powershell Desired State Configuration added to our table.
Powershell Desired State Configuration is Microsoft’s way
to implement an idempotent configuration that ensures that the “desired state”
will be reached by applying the entire configuration, regardless of the current
state.
-But, what does this really mean? Aren’t we able
to do everything using native Powershell scripts already?
That is correct. There’s no “limits” by using Powershell
natively today.
However, with native Powershell scripts you are
responsible for building all the error handling and logic into your scripts. And
as you probably know, that can be both very time consuming and challenging.
Desired State Configuration handles this automatically
for you, letting you make and deploy any incremental changes to your configuration
over time without risking the system to be put in a bad state.
If you have any configuration drift? Depending on how the
Local Configuration Manager is
configured – the engine that’s responsible for applying the configuration and
follow the instructions, the system can heal itself by enforcing the desired
state.
Think of Powershell Desired State Configuration as a
contract between you and your nodes (manageable objects).
In order to create and deliver this “contract”, Desired
State Configuration is based on CIM – and use WinRM for communicating. CIM uses
a language called Manaed Object Format – often referred to as “MOF”. Powershell
Desired State Configuration is a way to create and distribute MOF files that
can be applied to systems supporting this standard.
The way it’s applied to the node(s) is either through “Push”
or “Pull”.
(The difference
between Push and Pull is out of scope right now and deserves a dedicated blog
post later on. I promise).
To put it short, the Pull mechanism requires some
infrastructure in order to work, where the node(s) are talking to the Pull
server – either through SMB, Http or Https.
The Push method is pretty straight forward and what you
can start using right out of the box. DSC requires that WinRM listeners are
configured so that the CIM can push the configuration to the remote systems.
Here’s an example of how a Powershell DSC Configuration looks like:
configuration DNS
{
node kndsc006
{
WindowsFeature
DNS
{
Name =
"DNS"
Ensure =
"Present"
IncludeAllSubFeature = $true
}
}
}
DNS
Start-DscConfiguration -wait -force -Verbose .\DNS
As you can see, the format here is quite easy to read.
We can easily see that we will install (Ensure = "Present") DNS (Name = "DNS") on the target node (kndsc006).
Actually,
it is so easy to read that Powershell newbies like me are able to manage J
Hopefully this gave you some more context about the “why”,
but we are not done yet.
In Azure today, we are able to leverage DSC as part of
the VM extension, meaning we can create – upload – and apply our DSC
configuration to Azure IaaS virtual machines. The method of applying the config
for these VMs are “Push”.
As you probably know, we don’t have the exact same
capabilities on-prem in order to leverage DSC as part of Azure Pack. However,
we are able to simulate the same experience at some extent, by using the
combination of DSC, SMA and VM Roles (http://kristiannese.blogspot.no/2015/03/application-modeling-with-vm-roles-dsc.html
)
Moving forward, we know that the consistency across clouds
will be as near as 1:1 with the introduction of Azure Resource Manager that
will introduce us for a complete new way to interact with our cloud services –
regardless of location. Also worth to note, the Azure Resource Manager itself
will be idempotent.
What about your existing DSC scripts?
Exactly, that is the main point here. These
configurations will be valid using Azure Resource Manager too J
So in essence, you invest in DSC now and use it both for
Azure Pack (VM Roles + SMA) and Azure (VM Extension), and later on you can
reuse the investment you’ve made into the era of Azure Resource Manager.
Hopefully this gave you some inspiration to start
learning Desired State Configuration, available in Windows Management Framework
4.0 – but also available in 5.0 (which is in Preview).
Please note that everything you do in Azure when using
the DSC VM Extension there is based on the 5.0 version.
Monday, March 16, 2015
Application Modeling with VM Roles, DSC and SMA
Earlier this year, I started to go deep into DSC to learn
more about the concept, possibilities and most important, how we can improve
what we already have and know, using this new approach of modeling.
For more information
and as an introduction to this blog post, you can read my former blog post on
the subject: http://kristiannese.blogspot.no/2015/03/dsc-with-azure-and-azure-pack.html
Desired State Configuration is very interesting indeed –
and to fully embrace it you need to be comfortable with Powershell. Having that
said, Desired State Configuration can give you some of what you are requiring today, but not everything.
Let me spend some minutes trying to explain what I am
actually saying here.
If you want to use DSC as your primary engine, the
standard solution to configure and deploy applications and services across
clouds throughout the life cycle, there is nothing there to stop you from doing
so.
However, given the fact that in many situations, you
won’t be the individual who’s ordering the application, server and
dependencies, it is important that we can make this available in a world full
of tenants with a demand for self-servicing.
Looking back at how we used to do things before to handle
the life-cycle management of applications and infra, I think it is fair to say
it was something like this (in context of System Center):
1)We
deployed a Virtual Machine based on a VM Template using SCVMM
We either
a)Manually
installed and configured applications and services within the guest post VM
deployment
b)Used
SCCM to install agents, letting the admin interact with the OS to install and
configure applications using a central management solution
2)If
we wanted to provide monitoring, we then used SCOM to roll out the agents to
our servers and configured them to report to their management group
3)Finally
yet importantly, we also wanted to be secure and have a reliable set of data. That’s
why we also added backup agents to our servers using SCDPM
In total, we are talking about 4 agents here (SCVMM,
SCCM, SCOM and SCDPM).
That is a lot.
Also note that I didn’t specify any version of System
Center, so this was probably even before we started to talk about Private
Clouds (introduced with System Center 2012).
And that’s the next
topic, all of this in the context of cloud computing.
If we take a walk down the memorial lane, we can see some
of Microsoft’s least proud moments, all the attempts in order to bring the
private cloud a fully functional self-service portal.
-We’ve had several self-service portals for VMM
that later was replaced by different solutions, such as Cloud Service Process
Pack and App Controller
-Cloud Service Process Pack – which was
introduced with SC 2012 – where all the components were merged into a single
license, giving you out-of-the-box functionality related to IaaS.
The solution was one of the
worst we have seen, and the complexity to implement it was beyond what we have
seen ever since.
-AppController was based on Silverlight and gave
us the “single-pane of glass” vision for cloud management. With a connector to
Azure subscriptions (IaaS) and to private and service provider clouds (using
SPF), you could deploy and control your services
and virtual machines using this console
Although it is common knowledge that AppController will
be removed in vNext of System Center (https://technet.microsoft.com/en-us/library/dn806370.aspx?f=255&MSPPError=-2147217396
), AppController introduced us to a very interesting thing: self-service of
service templates.
The concept of service templates was introduced in System
Center 2012 – Virtual Machine Manager, and if we go back to my list of actions
we needed to perform, we could say that service templates at some point would
replace the need of SCCM.
Service Templates was an extension to the VM template. It
gave us the possibility to design, configure and deploy multi-tier applications
– and deploy it to our private clouds.
However, I have to admit that back then; we did not see
much adoption of service templates. Actually, we did not see some serious
adoption before Microsoft started to push some pre-configured service templates
on their own, and that happened last year – at the same time as their Gallery
Items for Azure Pack was released.
To summarize, the service template concept (which was
based on XML) gave the application owners and the fabric administrators a chance
to interact to standardize and deploy complex applications into the private
clouds, using AppController. In the same sentence there we found AppController
(Silverlight) and XML.
If we quickly turn to our “final destination”, Microsoft
Azure, we can see that those technologies aren’t the big bet in any
circumstances.
VM Roles are
replacing service templates in the private cloud through Windows Azure Pack.
A VM Role is based on JSON – and define a virtual machine
resource that tenants can instantiate and scale according to their
requirements.
We have in essence two JSON files. One for the resource
definition (RESDEF) and one for the resource extension (RESEXT).
The resource definition describes the virtual machine
hardware and instantiation restrictions, while the resource extension definition
describes how a resource should be provisioned.
In order to support user input in a user friendly way, we
also have a third JSON file – the view definition (VIEWDEF), which provides the
Azure Pack details about how to let the user customize the creation of a VM
Role.
These files are contained in a package, along with other
files (custom resources, logo’s etc) that describe the entire VM Role.
You might ask yourself why I am introducing you to
something you already know very well, or why I am starting to endorse JSON. The
answer lays in the clouds.
If you have every played around with the Azure preview
portal, you have access to the Azure Resource Manager.
ARM introduced an entirely new way of thinking about you
resources. Instead of creating and managing individual resources, you are
defining a resource model of your
service – to create a resource group with different resources that are
logically managed throughout the entire life cycle.
-And guess
what?
The Azure Resource Manager Templates is based on JSON,
which describes the resources and associated deployment parameters.
So to give you a short summary so far:
Service Templates was great when it came with SCVMM 2012.
However, based on XML and AppController for self-service, it wasn’t flexible
enough, nor designed for the cloud.
Because of a huge focus on consistency as part of the
Cloud OS vision by Microsoft, Windows Azure Pack was brought on-premises and
should help organizations to adopt the cloud at a faster cadence. We then got
VM Roles that should be more aligned with the public cloud (Microsoft Azure),
compared to service templates.
So we might (so far) end up with a conclusion that VM
Roles is here to stay, and if you are focusing too much on service templates
today, you need to reconsider that investment.
The good, the bad
and the ugly
So far, the blog post has been describing something
similar to a journey. Nevertheless, we have not reached the final destination
yet.
I promised you a blog post about DSC, SMA and VM Roles,
but so far, you have only heard about the VM Roles.
Before we proceed, we need to be completely honest about
the VM Roles to understand the requirement of engineering here. To better
understand what I am talking about, I am comparing a VM Role with a stand-alone
VM based on a VM Template:
As you can see, the VM Role gives us very much more
compared to a stand-alone VM from a VM template. A VM Role is our preferred
choice when we want to deploy applications in a similar way as a service
template, but only as single tiers. We can also service the VM Role and scale
it on demand.
A VM on the other hand, lacks all these fancy features.
We can purely base a stand-alone VM on a VM Template, giving us a pre-defined
HW template in VMM with some limited settings at the OS level.
However, please note that the VM supports probably the
most important things for any production scenarios: backup and DR.
That is correct. If you use backup and DR together with a
VM Role, you will end up in a scenario where you have orphaned objects in Azure
Pack. This will effectively break the relationship between the VM Role
(CloudService in VMM) and its members. There is currently no way to recover
from that scenario.
This got me
thinking.
How can we leverage the best from both worlds? Using VM
Role as the engine that drives and creates the complexity here, supplemented by
SMA and Desired State Configuration to perform the in-guest operations into
normal VM templates?
I ran through the scenario with a fellow MVP, Stanislav
Zhelyazkov and he nodded and agreed. “-This
seems to be the right thing to do moving forward, you have my blessing” he
said.
The workflow
This is where it all makes sense. To combine the beauty
of VM Roles, DSC and SMA to achieve the following scenario:
1)A
tenant logs on to the tenant portal. The subscription includes the VM Cloud
resource provider where the cloud administrator has added one or more VM Roles.
2)The
VM Role Gallery shows these VM Roles and provides the tenant with instructions
on how to model and deploy the application.
3)The
tenant provides some input during the VM Role wizard and the VM Role deployment
starts
4)In
the background, a parent runbook (SMA) that is linked to the event in the
portal kicks in, and based on the VM Role the tenant chose, it will invoke the
correct child runbook.
5)The
child runbook will deploy the (stand-alone) VMs necessary for the application
specified in the VM Role, join them to the proper domain (if specified) and
automatically add them to the tenant subscription.
6)Once
the stand-alone VMs are started, the VM Role resource extension kicks in (which
is the DSC configuration, using push) that based on the parameters and inputs
from the tenant is able to deploy and model the application entirely.
7)Once
the entire operation has completed, the child runbook will clean-up the VM Role
and remove it from the subscription
In a nutshell, we have achieved the following with this
example:
1)We
have successfully been able to deploy and model our applications using the
extension available in VM Roles, where we are using Desired State Configuration
to handle everything within the guests (instead of normal powershell scripts).
2)We
are combining the process in WAP with SMA Runbooks to handle everything outside
of the VM Role and the VMs.
3)We
are guaranteed a supported life-cycle management of our tenant workloads
Here you can see
some screenshots from a VM Role that will deploy Windows Azure Pack on 6
stand-alone VMs, combining DSC and SMA.
In an upcoming blog
post, we will start to have a look at the actual code being used, the challenges and workarounds.
I hope that this blog post showed you some interesting things
about application modeling with VM Roles, SMA and DSC, and that the times are
a-changing compared to what we used to do in this space.
Hyper-V
ARM,
Azure Resource Manager,
DSC,
SCVMM 2012 R2,
SMA,
VM Roles,
WAP,
WAPack
Subscribe to:
Comments (Atom)