Azure Nested Virtualization

Neste artigo vamos ver como rodar um Hyper-V em uma VM no Azure e comando em PowerShell para ativação da Feature do Hyper-V, Inicialização e formatação de um disco novo em um Windows, criação de switch virtual e configurações para a VM poder acessar a internet, tudo via PowerShell.

Já faz algum tempo onde existe a possibilidade de se usar o Hyper-V dentro de uma Máquina Virtual que roda no Azure. Esse processo é chamado de Nested Virtualization – lembrando que isso já tinha no Hyper-V normal antes de ter no Azure.

Basicamente, digamos que seja preciso fazer testes de alguma coisa, pode-se usar esse recurso no Azure para criarmos máquinas virtuais da maneira requerida, sem ter que usar os tamanhos do azure. Claro que, este recurso rodando dentro de uma VM do Azure ela será limitada pelo tamanho da Azure VM criada.

Por exemplo, digamos que você queira implantar um ambiente com System Center e quer um ambiente de testes. Pode-se criar uma VM no Azure, habilitar o Hyper-V nela e usar como se fosse um servidor de Hyper-V que se tenha dentro de casa. Com isso será possível fazer alguns testes de deployment que no Azure seriam diferentes por n motivos.

O Link abaixo tem todas as informações necessárias:

https://docs.microsoft.com/en-us/azure/virtual-machines/windows/nested-virtualization

Eu vou seguir com o artigo para compartilhar alguns detalhes. Se você tem pressa e quer apenas os comandos, siga o link acima que vai ser mais rápido! Eu tenho algumas poucas considerações:

O primeiro ponto são as versões de VMs com suporte. Basicamente precisamos de VMs v3 para que isso possa ocorrer.

O segundo ponto é que isso pode não ser a melhor escolha caso se queira usar em produção. Funciona, mas não é o ideal, o ideal é usar as VMs do Azure (Azure VMs) para rodar os workloads. Nas VMs dos Azure temos muitos recursos interessantes e fáceis de usar como Backup e Disaster Recovery. Ok, se eu tiver o backup da Azure VM onde rodam VMs com Nested Virtualization, essas VMs terão backup, mas o tempo de restauração pode ser alto.

Outro ponto importante é que para uma Nested VM no Hyper-v se comunicar com uma Azure VM que não o próprio Host do Hyper-V é necessário que tenha um NAT (vamos ver mais abaixo) ou ainda um roteamento, o que deixa o cenário um pouco mais complexo (isso fica para um próximo artigo).

Basicamente vamos fazer a instalação do Hyper-V, Configuração de um disco para as VMs, criar, configurar e iniciar uma VM e depois vamos testar o acesso para a internet.

O Requisito para fazer as configurações é uma Azure VM, qualquer instância, desde que v3. Eu estou usando uma Standard D4s v3 (4 vcpus, 16 GiB memory)

Instalação da Feature do Hyper-V

Observação: Várias das etapas podem ser feitas via console. Eu vou fazer a maior parte via PowerShell pois é mais divertido!

Uma vez iniciada a VM a primeira ação é instalar o serviço do Hyper-V. O comando a ser usado é:

Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

Abaixo um erro de quando tentamos rodar o comando num servidor que não tem suporte:

Esse comando vai instalar a feature do Hyper-V e depois vai reiniciar o servidor. Basicamente é o mesmo processo executado num Windows Server normal quando se instala o Hyper-V.

Quando o servidor reiniciar pode-se abrir a console do Hyper-V.

Nessa VM que eu criei no Azure, tenho um disco do Sistema Operacional (Standard HDD) e outro disco para dados de 256 GiB em Premium SSD que eu acabei de atachar na VM.

Os próximos passos podem ser pulados caso você já tenha uma pasta ou volume para as VMs do Hyper-V.

Inicialização e Formatação de Disco

O próximo passo que vou fazer é criar uma pasta para as ISOs que vou baixar e outra para as VMs, isso no disco dos dados que eu acabei de atachar. Para poder usar o disco, vou dar os seguintes comandos:

Primeiro passo dar um get-disk e ver se o disco apareceu corretamente.

Get-Disk

Nesse caso o disco número 2 é o disco de dados que acabei de apresentar para a VM.

Podemos ver que a partição dele está como RAW. Para listar todos os discos nessa situação poderíamos usar o comando:

Get-Disk | Where partitionstyle -eq ‘raw’

Podemos ver que temos o mesmo resultado!

O próximo passo é inicializar o disco. Claro que se abrirmos o Disk Management, nossa vida fica muito mais simples.

Caso queira simplificar, apenas digite no PowerShell: diskmgmt.msc

Como aqui vamos fazer via PowerShell vamos dar o seguinte comando para inicializar o disco:

Initialize-Disk -Number 2 -PartitionStyle GPT

Nesse momento o disco foi inicializado, mas ainda não temos uma partição neste disco. O espaço estará como não alocado. Abrindo o Disk Management podemos ver como está:

Agora se rodarmos o primeiro comando, o Get-Disk podemos observar que mudou:

Com o disco inicializado podemos criar o volume desejado (ou volumes, caso seja a necessidade). Para isso usamos o comando:

Get-Volume

Com esse comando podemos ver as unidades já usadas.

Para as VMs quero usar a unidade V com todo o tamanho disponível no disco 2, o disco que acabou de ser inicializado.

Para criar uma nova partição no disco, usando o tamanho total e atribuindo a letra V vamos usar o seguinte comando:

New-Partition -DiskNumber 2 -UseMaximumSize -DriveLetter V

Rodado o comando, vamos ver uma mensagem dizendo que para usar o disco, precisamos formatar com um sistema de arquivos.

Nesse momento o Disk Management está assim:

Basicamente o que precisa ser feito neste momento para usar o disco é formatar. Para isso usamos o seguinte comando:

Format-Volume -DriveLetter V -FileSystem NTFS -NewFileSystemLabel “HyperVData” -Confirm:$false

Nesse momento podemos acessar a partição e começar a usar. O Disk Manager no final ficou assim:

Claro que fizemos os scripts passo a passo. Tudo poderia ser simplificado dessa maneira (desde que soubesse o nro do disco):

Get-Disk -Number 3 | Initialize-Disk -PartitionStyle GPT

Get-Disk -Number 3 | New-Partition -UseMaximumSize -DriveLetter V | Format-Volume -FileSystem NTFS -NewFileSystemLabel “HyperVData” -Confirm:$false

Com o disco devidamente pronto, vou criar duas pastas, uma para as ISOs que vou usar e outra para as VMs.

O comando, ultra simples é:

md v:\ISO, v:\VMs

Criação de Virtual Switch

Agora com o devido disco, podemos criar um Virtual Switch:

New-VMSwitch -Name “Virtual Switch InternalNAT” -SwitchType Internal

O Virtual Switch é criado como Internal pois não adiantaria criar como um disco externo. Como um Switch do tipo Interno a rede das VMs vai conseguir se comunicar com o Host do Hyper-V, uma vez que uma interface de rede é criada no Host quando criamos o Virtual Switch.

Podemos ver as interfaces de rede com o comando:

Get-NetAdapter | ft -AutoSize

A interface de nome Ethernet é a interface padrão da VM do Azure. A outra interface, vEthernet (Virtual Switch InternalNAT) é a interface criada para utilização com o Virtual Switch criado acima.

Criação do NAT

Nesse exemplo que estamos criando, uma VM criada dentro do Host vai conseguir interagir com outras VMs (dentro do Host) e com o próprio Host. Porém, ela não poderá receber uma conexão de outras VMs que estejam criadas no Azure, por exemplo. Por padrão nem acessar um serviço rodando em outra VM do Azure uma VM criada dentro do Host, ou mesmo acessar uma página na internet, seria possível. É como se nosso computador em casa ou na empresa não tivesse acesso a internet, só se comunicaria dentro da rede local…

Para resolver essa questão, usamos uma configuração de NAT no Host do Hyper-V, assim as VMs criadas dentro dele podem se comunicar com a Internet ou outras VMs criadas no Azure. Porém, novamente, ela pode iniciar uma conexão, mas não pode receber uma conexão. Voltando a analogia da rede de casa, o Host faz o papel do NAT, que para nós normalmente é realizado pelo roteador, que hoje, normalmente está integrado ao modem. Agora ninguém na internet consegue acessar nossa estação sem um DNAT. Em outro post vamos ver como uma VM no Azure (ou dispositivo na rede local da empresa) pode se comunicar com uma VM rodando dentro de outra VM no Azure. Para isso é preciso mexer em tabelas de roteamento e fica para outra explicação.

Para este exemplo, então, vamos trabalhar com NAT, assim a VM poderá acessar a internet ou outras VMs rodando no Azure.

O primeiro passo é pagar o ifindex da interface de rede criada anteriormente. Podemos ver na imagem acima que o ifindex da interface padrão é 4 e que o ifindex que queremos, o da interface vEthernet (Virtual Switch InternalNAT), é 12.

Também podemos rodar o seguinte comando:

Get-NetIPAddress | where {$_.AddressFamily -eq “IPv4” -and $_.IPAddress -ne “127.0.0.1”} | ft InterfaceAlias, InterfaceIndex, IPAddress

Esse comando é interessante pois mostra os endereços de IP das duas interfaces. Podemos ver um endereço APIPA na interface recém criada.

Antes de efetivamente criar a NAT o que vamos fazer é dar um endereço de IP para a interface. Esse endereço vai servir como base para os endereços das VMs que serão criadas. Se uma VM for criada num endereço diferente do usado aqui ela não vai conseguir se conectar com nada, a não ser alguma outra VM que possa estar no mesmo range.

Para isso vamos usar o seguinte endereçamento: 192.168.64.0/24.

O primeiro passo que vamos fazer é colocar um IP na interface usando o primeiro endereço válido do range acima escolhido e usando o ifindex para saber em qual interface aplicar:

New-NetIPAddress -IPAddress 192.168.64.1 -PrefixLength 24 -InterfaceIndex 12

Se rodarmos o comando para vermos as informações de IP das interfaces teremos:

Get-NetIPAddress | where {$_.AddressFamily -eq “IPv4” -and $_.IPAddress -ne “127.0.0.1”} | ft InterfaceAlias, InterfaceIndex, IPAddress

Agora criamos uma NAT para que as VMs criadas no Host possam se comunicar para fora dele (sempre que iniciarem a conexão). O comando para criar a NAT é:

New-NetNat -Name “InternalNat” -InternalIPInterfaceAddressPrefix 192.168.64.0/24

Com isso, uma VM criada neste Host e usando um endereço do Range 192.168.64.0/24 e usando como gateway o IP 192.168.64.1 vai conseguir navegar na Internet ou acessar outros servidores fora dessa VM no Azure que é nosso host Hyper-V.

Criação de VM

Feitas as configurações, o próximo passo é criar uma VM e testar se funciona. Vamos criar uma Nova VM chamada VMAD01-01. Vamos criar um VHD (do tipo dinâmico) de 40GB para essa VM. Ela terá 40 GB e 1 vCPU.

O comando que cria a VM e cria um VHDx novo é:

New-VM -Name VMAD01-01 -MemoryStartupBytes 4GB -BootDevice VHD -Path v:\VMs\VMData -NewVHDPath v:\VMs\VHDs\VMAD01-01-SO.vhdx -NewVHDSizeBytes 40GB -Generation 2 -Switch “Virtual Switch InternalNAT”

Agora que a VM foi criada, vou colocar a ISO do 2019 (versão de avaliação) e vou iniciar a VM:

Add-VMDvdDrive -VMName VMAD01-01 -Path v:\ISO\17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso -ControllerNumber 0 -ControllerLocation 1

Após Adicionar a ISO para instalarmos o Sistema Operacional, podemos ver com está a ordem do Boot, usando o comando Get-VMFirmware:

(Get-VMFirmware vmad01-01).bootorder

Nesse caso, o ideal seria trocar a ordem. Do jeito que está precisamos esperar o boot de rede para depois ir para o DvdDrive. Precisamos mudar a ordem deixando esse DvdDrive em segundo lugar. Para isso usamos o comando:

Set-VMFirmware -vmname VMAD01-01 -BootOrder (get-vmfirmware vmad01-01).bootorder[0],(get-vmfirmware vmad01-01).bootorder[2],(get-vmfirmware vmad01-01).bootorder[1]

O comando acima seta a ordem nova baseada no get da ordem atual. Após o comando, podemos ver que a ordem foi alterada. Se o comando for rodado de novo, a ordem vai ser alterada novamente.

E por último, mas não menos importante, iniciamos a VM com o comando:

Start-VM -Name VMAD01-01

Testes

Com o Windows Instalado, vamos setar o endereço IP da VM como: 192.168.64.10, máscara de subrede 255.255.255.0, gateway 192.168.64.1 e DNS 8.8.8.8.

O próximo teste será testar o acesso a alguma coisa.

O acesso na VM é realizado através do console.

Primeiro vamos tentar um ping no 8.8.8.8.

Vendo que não dá, vamos dar um Get-NetAdapter isso vai nos dizer o nome da interface e a interface index.

Após vamos ver o IP dela com o DNS.

Os comando são:

Get-NetIPAddress -InterfaceAlias Ethernet | Where AddressFamily -ne “IPv6” | fl interfacealias, interfaceindex, ipaddress

Get-DnsClientServerAddress -InterfaceAlias Ethernet

Agora vamos setar o endereço IP, o DNS e criar uma rota padrão. Os comandos são (na ordem):

New-NetIPAddress –InterfaceAlias Ethernet –IPAddress “192.168.64.10” –PrefixLength 24 -DefaultGateway 192.168.64.1

Set-DnsClientServerAddress -InterfaceAlias Ethernet -ServerAddresses 8.8.8.8

Então vamos setar o IP e o DNS e vamos tentar pingar o 8.8.8.8 novamente.

Feito isso a VM pode acessar a internet e outras Azure VMs. Em um dos próximos artigos vamos mostrar como fazer uma VM rodando dentro de um Hyper-V no Azure se comunicar com Azure VMs ou rede local.

Publicando a VM

O acesso para a VM, neste momento, somente é possível através do Host Hyper-V. Para poder acessar de outra Azure VM ou rede que tenha acesso ao IP do Host vamos fazer uma publicação. Esse é um procedimento muito parecido ao que fizemos uma publicação de um serviço.

A desvantagem desse modelo é a questão de portas que não podem se sobrepor na publicação. Esse é outro motivo para evitar usar esse serviço em produção. O ideal para uma situação em que várias VMs tenham serviços que precisam ser acessados é através de roteamento de rede (coberto em um próximo host)

Como temos uma VM dentro do Hyper-V com o IP 192.168.64.12, vamos fazer a para acesso remoto da VM no Host Hyper-V. Porém, como também usamos essa porta (3389) no Hyper-V, vamos fazer a publicação com a porta 3390.

Para isso usamos o comando:

Add-NetNatStaticMapping -NatName “InternalNat” -Protocol “TCP” -ExternalIPAddress 0.0.0.0 -ExternalPort 3390 -InternalIPAddress “192.168.64.12” -InternalPort 3389

De outra Azure VM que tem acesso no meu Host Hyper-V uso o comando: mstsc /v 10.0.3.4:3390.

Com isso consigo acessar a VM IP 192.168.64.12 que foi criada dentro do Hyper-V. o IP 10.0.3.4 é o IP do Host Hyper-V dentro da rede do Azure.

Até a próxima!

Hyper-V Server – Dos comandos iniciais ao Cluster

Nesse post será mostrado as configurações iniciais em um host com Hyper-V Server 2012 R2 até a configuração de um cluster entre dois nós.

Para isso serão usados dois nós com Hyper-V Server 2012 R2 e quatro interfaces de rede para as seguintes funções:

1 – Gerenciamento do Servidor – Nome: MANAGEMENT;
2 – Rede Pública – Utilizada para a rede das VMs – Nome: PUBLIC_NETWORK;
3 – Live Migration – Rede utilizada para a migração de VMs entre os dois nós – Nome: LIVE_MIGRATION;
4 – Heartbeat – Rede utilizada para comunicações do Cluster – Nome: HEARTBEAT.
Teremos três discos compartilhados, um vai ficar como quórum e os outros dois ficarão para as VMs.

Alguns passos como instalação serão pulados. Vou mostrar a configuração de apenas um host.

Tela inicial após instalação:
Após instalar o SO e logar no servidor a seguinte tela aparecerá:

1401

Instalação de drivers de rede:
Detalhe interessante foi que o servidor não reconheceu os drivers de rede. Esse será o primeiro passo, fazer a instalação dos drivers de rede.
A instalação dos drivers de rede é muito simples, basta inserir um pendrive com os executáveis no servidor e pelo Prompt de Comando executar.

1402

Isso pode ser realizado tanto para a instalação de drivers que não foram reconhecidos pelo SO quanto para atualização.
Com os drivers de rede reconhecidos o próximo passo é configurar o adaptador de rede que será usado para o gerenciamento do servidor e então continuar as configurações através do acesso remoto e não mais pela console.

Configuração de endereços IP e nomenclatura nas interfaces:

A configuração do IP na interface de rede pode ser realizada pelo Server Configuration ou via PowerShell. Se for o caso de fazer via powershell, basta no prompt de comando digitar Powershell.

1403

Configurando a interface via PowerShell:
1º Passo é identificar as interfaces de rede do servidor. Para isso usar o comando:
Get-NetAdapter
No meu caso sei qual interface vai fazer o que através do MAC Address. Para ver qual o MAC de cada placa basta digitar:
Get-NetAdapter | ft Name, MacAddress
Identificada a placa vamos dar o nome para ela. Nesse caso o nome será MANAGEMENT e a placa correspondente está com o nome “Ethernet 4”
Rename-NetAdapter -name “Ethernet 4” -NewName “MANAGEMENT”
Caso exista um DHCP entregando IP para essa interface de rede não será preciso fazer nenhuma configuração. Caso contrário para setar as configurações de IP podem ser usados os comandos:
New-NetIPAddress -InterfaceAlias “MANAGEMENT” -IPAddress 10.10.0.222 -PrefixLength “24” -DefaultGateway 10.10.0.254
Set-DnsClientServerAddress -InterfaceAlias “MANAGEMENT” -ServerAddresses “10.10.0.209”,”10.10.0.202″
No caso acima será configurado o IP 10.10.0.222 com máscara 255.255.255.0, gateway 10.10.0.254 e DNS 10.10.0.209 e 10.10.0.202.

Feita essa configuração pelo PS é possível voltar até o Server Manager e visualizar as alterações usando a opção 8: “Network Settings”
Como as configurações para as outras três redes são iguais, não vou mostrar aqui.

Configuração de VLAN em uma interface de rede:
Caso seja preciso adicionar uma VLAN em alguma placa:
O seguinte comando mostra as placas e VLANs:
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID
Para alterar a Vlan de uma placa basta usar o seguinte comando:
Set-NetAdapter –Name “LIVE_MIGRATION” -VlanID 618
O comando acima coloca a VLAN 618 na placa de nome “LIVE_MIGRATION”.
Caso ocorra um erro será preciso ver se no registro da placa existe o campo de VLANID.

Para acrescentar no registro:
Precisamos do Interface Guid da placa. No caso vamos usar a “LIVE_MIGRATION”:
Get-NetAdapter -name “LIVE_MIGRATION” | ft InterfaceGuid

1404

Feito isso será preciso abrir o Registro (basta digitar regedit no Prompt de comando ou PowerShell) e procurar pelo InterfaceGuid dentro de:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet0001\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}

1405

Quando encontrar será preciso criar uma nova string chamada VlanId e colocar o número da Vlan:

1406

Após podemos verificar no powershell:
Get-NetAdapter | ft Name, Status, Linkspeed, VlanID

1407

Um dado importante, após essa alteração no registro será preciso reiniciar o servidor.

Habilitando o Acesso Remoto:
Com o IP da interface de gerenciamento configurado o próximo passo é habilitar o acesso remoto ao servidor para continuarmos as configurações. Para isso no server manager basta escolher a opção 7: “Remote Desktop” que vem desabilitada por padrão.
Será perguntado o que fazer e deverá ser inserido E para habilitar.

1408

Então será perguntado o nível de autenticação e pode ser escolhido o 1. Então vira a mensagem que o Remote Desktop foi habilitado:

1409

Liberando o Firewall para Acesso Remoto:
Com o Remote Desktop habilitado pode-se acessar o servidor como qualquer conexão RDS.
Caso o acesso não seja possível será preciso verificar o firewall do Hyper-V. Para verificar as regras de Acesso remoto precisamos do comando:
Get-NetFirewallRule | where DisplayName -Match “Remote Desktop” | ft DisplayName, Enabled
ou
Get-NetFirewallRule -Group “@FirewallAPI.dll,-28752” | ft DisplayName, Enabled
E habilitamos:
Enable-NetFirewallRule -Group “@FirewallAPI.dll,-28752”
Feito isso o acesso remoto deve funcionar.

Configurando o Nome do Servidor:
Acessando o servidor remotamente, o próximo passo pode ser acertar o nome.
Pelo Server Configuration escolher a opção 2 e digitar o novo nome. Será pedido para reiniciar o servidor.

Ingressando no Domínio:
Após o servidor reiniciar e acessar remotamente, um passo interessante é colocar no domínio para ele poder entrar nas políticas da organização.
Para ingressar o servidor no domínio basta escolher a opção 1 no Server Configuration.
Para ingressar no domínio deve-se apertar D e então será pedido o nome do domínio. Após digitar o nome do domínio será pedido o nome do usuário que tenha permissão para ingressar o servidor no domínio. Quando o usuário for adicionado, uma nova janela abrirá para que seja colocada a senha. Nessa janela não vai aparecer nenhum caractere quando a senha for digitada. Ao final basta dar Enter. Será pedido se queremos trocar o nome do servidor e de ser escolhido não e então o servidor será reiniciado.

Atualização de todos os drivers:
Com o servidor reiniciado algumas coisas precisam ser finalizadas.
Os drivers devem ser atualizados e as interfaces de rede devem ser configuradas.
As instruções para atualização de drivers podem ser encontradas no seguinte link:
http://technet.microsoft.com/en-us/library/jj647787.aspx

Atualização do Servidor:
Após a atualização dos drivers e acerto de todas as interfaces de rede o ideal é atualizar o servidor. Em Server Configuration escolher a opção 6. Um novo prompt vai surgir perguntando se é para procurar todos os downloads ou somente os recomendados. Pode-se escolher todos pressionando A.

1410

Quando o servidor terminar de verificar os updates disponíveis ele pedirá qual a opção de instalação, se todos, nenhum ou algum update em específico. Nesse caso vamos escolher todos, para isso pressionamos A novamente.

1411

1412

Após será pedido para reiniciar o servidor.

1413

Configurações de disco:

Com o servidor atualizado, com drivers corretos, ingressado no domínio e com as interfaces de rede funcionando chegou a hora de configurar os discos.
Para usar o Disk Management o ideal é utilizar outro computador. Antes de acessar é preciso de uns poucos comandos:
No host hyper-v, dentro do Powershell utilizar os comandos:
Add-WindowsFeature -Name File-Services
Enable-NetFirewallRule -DisplayGroup “Remote Volume Management”
Start-Service vds
Nesse momento devemos reiniciar o servidor.

1414

Na estação ou servidor que vai ser usado para acessar o servidor remotamente usar os comandos:
cmdkey /add:”IP Hyper-V Host” /user:domínio\usuário /pass
Exemplo: cmdkey /add:”10.10.0.222” /user:contoso\administrator /pass
Vai ser requerida a senha.
netsh advfirewall firewall set rule group=”Remote Volume Management” new enable=yes

Acessando o Disk Management Remotamente:
Feito isso será possível abrir o Disk Management do host Hyper-V através do Computer Management da estação ou servidor remoto.
Após abrir o Computer Management ir em Action e Connect to Another computer …

1415

Instalação do MPIO:
Acessando o disk manager do servidor podemos fazer as ações necessárias. Nesse caso vou instalar o Multi-Path IO. Para isso vou usar o comando no PowerShell:
Add-WindowsFeature -name multipath-io

1416

Para acessar o MPIO basta digitar:
mpiocpl
As configurações do MPIO podem mudar conforme o vendor.

CLUSTER:
Adicionando a feature de Cluster:
O próximo passo é configurar o cluster. Nos hosts adicionar a feature:
Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools

1417

Teste dos nós do Cluster:
Instalada a feature, será preciso testar se será possível criar o host entre os nós:
Test-Cluster -Node hc01b10, hc01b11

1418

Como é possível observar ocorreu um aviso. Abrindo o documento é possível ver que o aviso é sobre rede. Esse aviso se deve ao fato de ter algumas interfaces de rede que não vou usar ativas. Para isso vou desabilitar as interfaces de rede que não vou usar. Para executar o comando pode-se usar o seguinte comando em PS:
Get-NetAdapter | where status -eq disconnected | Disable-NetAdapter (será preciso dar um Y para confirmar cada interface)

Criando o Cluster:
Para criar efetivamente o cluster usar:
New-Cluster -Name CONTOSOCLUSTER -Node HC01B10, HC01B11 -StaticAddress 10.10.0.30

11419

Acessando o Cluster Remotamente:
Nesse momento já é possível usar a interface gráfica em outro servidor ou estação para acessar o cluster criado e fazer o gerenciamento. Apenas um detalhe importante, apesar de o gerenciamento abrir através de um WS 2012 (abre mas não vai ser possível administrar corretamente), deve-se usar um WS 2012 R2 ou o RSAT para Windows 8.1 para o gerenciamento.

Renomeando as interfaces de rede do Cluster:
Depois de criado, será preciso nomear as interfaces de rede no cluster, para facilitar o gerenciamento.
Para isso vamos usar o comando:
Get-ClusterNetworkInterface

1420

Com isso vamos renomear as interfaces de rede do cluster. A rede de nome “Cluster Network 1” é na realidade a rede Heartbeat nos servidores, então vou renomear a rede do cluster para esse nome:
(Get-ClusterNetwork | where name -eq “Cluster Network 1”).Name = “HEARTBEAT”
Usar Get-ClusterNetwork para ver como ficou.

1421

Após alterar os nomes, será preciso verificar as métricas, tendo a HEARTBEAT como mais baixa:
Get-ClusterNetwork | ft Name, Metric, AutoMetric, Role
O commando acima verifica as métricas e o comando abaixo altera a métrica da rede Heartbeat:
(Get-ClusterNetwork “HEARTBEAT”).Metric=900
A alteração da métrica pode ser feita em apenas um servidor, já que é um comando de cluster.
Para finalizar a configuração vamos criar um Virtual Switch usando a rede Public_Network. Esse comando poderia ser executado antes da criação do cluster:
Para criar um Switch Virtual chamado “Public_Network – Virtual Switch” usando a interface de nome Public_Network usamos o seguinte comando:
New-VMSwitch –Name “Public_Network – Virtual Switch” –NetAdapterName “Public_Network” –AllowManagementOS $false

Configurando os discos do Cluster:
Finalizando a configuração do cluster temos os discos:
Para mostrar os discos do cluster basta usar o seguinte comando:
Get-ClusterResource | where ResourceType -eq “Physical Disk”

1422

Para saber se o cluster já indicou um disco de quórum basta usar o seguinte comando:
Get-ClusterQuorum
Para adicionar os outros dois discos como Cluster Shared Volume:
Add-ClusterSharedVolume “Cluster Disk 3”

1423

Renomeando os discos do Cluster:
Finalmente para renomear um cluster disk podemos usar o seguinte comando:
(Get-ClusterSharedVolume -Name “Cluster Disk 2”).Name = “POC_2”

Pronto. Agora é só usar o cluster criado no Hyper-V Server 2012 R2.

Para gerenciamento de Cluster com PowerShell existe este post: https://yudicezar.wordpress.com/2013/12/14/comandos-powershell-em-cluster-2012/
Para gerenciamento de VMs com PowerShell existe este post: https://yudicezar.wordpress.com/2013/06/18/gerenciando-vms-no-hyper-v-com-powershell/

Gerenciando VMs no Hyper-V com PowerShell

Outro grande avanço do Windows Server 2012 foi trazer nativamente comandos PowerShell para o Hyper-V. No Windows Server 2008 R2 é possível gerenciar o servidor através de um módulo baixado do Codeplex: http://pshyperv.codeplex.com/

Neste post será mostrado como fazer o gerenciamento básico de uma VM em um servidor com Hyper-V (Windows Server 2012):

Para verificar informações básicas do host como memória e processadores lógicos basta digitar no PowerShell:
Get-vmhost
Para ver informações mais detalhadas:
get-vmhost | fl
Para verificar se já existem VMs rodando no host:
Get-VM
Bom, o primeiro passo é verificar os adaptadores de rede para criar os switches virtuais.
Para verificar os adaptadores presentes no host digitar:
Get-NetAdapter
Para verificar se existe algum Virtual Switch criado, basta digitar:
Get-VMSwitch
Definido o adaptador e o tipo de switch virtual, basta criar com o comando a seguir: (Será criado um Switch chamado Public_Network utilizando a placa de rede chamada Ethernet, onde estará habilitado o gerenciamento do host e será do tipo externo):
New-VMSwitch –Name “Public_Network” –NetAdapterName “Ethernet” –AllowManagementOS $true
Para criar um switch virtual privado chamado VMSwPr1 poderia ser usado o seguinte comando:
New-VMSwitch –Name “VMSwPr1” –switchtype Private
Para criar uma VM nova o comando simples é:
New-VM
Com o comando acima será criada uma VM nova, com 512 MB de memória fixa, um processador virtual, sem um VHDx atribuído utilizando as pastas padrões do Hyper-V. Seu nome será New Virtual Machine Para saber a pasta padrão onde está sendo criada a VM basta digitar:
Get-VMHost | select VirtualMachinePath, VirtualHardDiskPath
Se foi utilizado o comando acima para criar a VM, para visualizar as configurações basta digitar:
Get-vm -Name new* | fl *
Se a ideia é criar uma VM do zero com configurações específicas e em pastas específicas vamos usar o mesmo comando, só que com parâmetros:
New-VM -Name VMT01 -MemoryStartupBytes 1GB -Path d:\vms –NewVHDPath d:\vms\VMT01\VMT01.vhdx -NewVHDSizeBytes 60GB -SwitchName Public_Network
Com o comando acima foi Criada uma nova VM chamada VMT01, com 1 processador virtual (padrão) e memória fixa de 1 GB. Ainda foi configurado um Adaptador de Rede utilizando o Virtual Switch Public_Network. Foi criado um VHDx novo de 60 GB (mas é dinâmico – até 60 GB) na pasta D:\VMs\VMT01\ chamado VMT01 e o caminho da VM foi colocado como D:\VMs. (A VM cria uma pasta com o próprio nome. Quando a VM é criada seu status é desligada.
Nesse momento é interessante verificar o status dessa nova VM criada:
Get-Vm -Name VMT01 | fl *
Criada a VM ainda existem alguns comandos interessantes. Para essa VM, antes de iniciar, vamos fazer as seguintes alterações:
Mudar de 1 processador virtual para 2:
Get-VM VMT01 | Set-VMProcessor -count 2
Mudar de 1 GB de Memória Fixa para memória dinâmica entre 512 MB e 2 GB sendo 1 GB de inicialização;
Get-VM VMT01 | Set-VMmemory –DynamicMemoryEnabled $true –MaximumBytes 2GB –MinimumBytes 512MB –StartupBytes 1GB
Adicionar a ISO do Windows Server 2012 para a instalação do Windows;
Set-VMDvdDrive -vmname VMT01 -Path ‘D:\ISO\Windows Server 2012\Windows_Server_2012_Datacenter_VL.ISO’
Uma vez feita as alterações a VM está pronta para ser inicializada:
Get-VM VMT01 | Start-VM
Pronto a VM está rodando, pronta para ser utilizada.
Agora vamos supor que nós vamos criar mais um VHDx, chamado VMT01_D2 de 20 GB dinâmico na mesma pasta:
New-VHD -path d:\vms\VMT01\VMT01_D2.vhdx -SizeBytes 20GB
Sò que o VHDx criado acima deveria ser fixo. Para transformar de dinâmico para Fixo podemos usar:
Convert-VHD -path d:\vms\VMT01\VMT01_D2.vhdx –DestinationPath “d:\vms\VMT01\VMT01_D3.vhdx” –VHDtype Fixed
E que tal adicionar esse VHDx na VM criada com ela ligada:
Add-VMHardDiskDrive –Vmname VMT01 –ControllerType SCSI –ControllerNumber 0 –Path d:\vms\VMT01\VMT01_D3.vhdx
Para finalizar os comandos básicos:
Desligar a VM:
Get-VM VMT01 | Stop-VM
Para Suspender a VM:
Get-VM VMT01 | Suspend-VM
Reinicia a VM com Shutdown do SO:
Get-VM VMT01 | Restart-VM
Para Verificar os Snapshots da VM:
Get-VM VMT01 | Get-VMSnapshot
Para criar um Snapshot da VM:
Get-VM VMT01 | Checkpoint-VM
Para renomear um Snapshot:
Get-VM VMT01 | Rename-VMSnapshot –name “VMT01 – (6/18/2013 – 4:39:44 PM)” –newname SNAP1
Para voltar o Snapshot de uma VM:
Get-VM VMT01 | Restore-VMSnapshot –name SNAP1
Para Deletar um Snapshot:
Get-VM VMT01 | Remove-VMSnapshot –name SNAP1
Todos os comando podem ser encontrados em:
http://technet.microsoft.com/en-us/library/hh848559(v=wps.620).aspx

Espero que este post possa ser útil no gerenciamento do seu ambiente Hyper-V 3.0.

Até a próxima!!!

Delegando acesso para usuários no Hyper-V

É possível delegar funções para usuários administrarem o ambiente de virtualização com o Hyper-V. A maneira mais fácil é usando o System Center Virtual Machine Manager junto com o System Center App Controller. Caso não exista um gerenciamento do ambiente com a família System Center é possível fazer isso individualmente para os servidores.

Vamos supor o caso de um integrante do time de TI que terá a função de acessar o servidor que contém a role do Hyper-V, remotamente, e fazer um gerenciamento de algumas funções das VMs. Essas funções seriam iniciar, desligar, pausar e reiniciar as VMs e ver as configurações atuais da VM. Além disso o usuário poderia acessar a VM, caso tenha permissão para isso.

Inicialmente se um usuário sem permissões de administrador acessar remotamente um servidor com Hyper-V e abrir a console ele terá a imagem a seguir:0601

Essa mensagem quer dizer que o usuário não tem permissão para se conectar no serviço.
Para resolver essa situação é muito simples e será utilizado o Authorization Manager (AzMan) – em português Gerenciador de Autorização.
Para abrir o AzMan basta digitar, no prompt de comando, azman.msc:0602AzMan é um framework de controle de acesso baseado em regras – role-based access control o famoso RBAC. Ele serve para delegar acesso a diversos recursos em diversos níveis além do Hyper-V.

Uma vez aberto teremos a seguinte tela:0603

Para abrir a parte do Hyper-V deve-se ir em Action e Open Authorization Store…:0604

Vai ser questionado o tipo e caminho do Autorization Store. Selecionar XML file e em Store name colocar: %programdata%\Microsoft\Windows\Hyper-V\Initialstore.xml e clicar em OK:0605

Após isso será aberta a seguinte tela:0606

Nesse momento, dentro de Definitions temos a Role Definitions. É possível observar que existe apenas uma regra criada, que é justamente a que libera acesso completo ao Hyper-V, ou seja, uma role de Administrador. Para criar a role para o caso acima é preciso clicar com o botão direito em Role Definitions e selecionar New Role Definition…

Então será questionado o nome da Role. Nesse caso será chamada de Role 01. Na descrição é interessante colocar as informações sobre a regra. Para essa regra está dito que ela vai permitir que o usuário (que posteriormente será associado a ela) terá permissões de desligar e ligar a VM. Não está explícito na descrição, mas faremos com que o usuário possa pausar e reiniciar a VM. Depois de colocada a descrição deve-se ir em Add… para adicionar as definições da regra:0607

Após clicar em Add… é preciso ir em Operations e especificar as operações habilitadas:06080609

Para este caso teremos as seguintes operações:0610

Detalhando um pouco melhor o que cada uma das sete Definições habilita ao usuário:

  • Allow Input to Virtual Machine – Esse comando vai permitir que o usuário possa fazer as ações sobre a VM, como por exemplo enviar o comando de Ctrl+Alt+Del;
  • Allow Output from Virtual Machine – Esse comando é o que vai habilitar o usuário a ver a tela da VM;
  • Pause and Restart Virtual Machine – Comando que habilita o usuário a dar os comandos de pause e reinicio para a VM;
  • Read Service Configuration – É a definição que habilita o usuário a se conectar ao serviço do Hyper-V;
  • Start Virtual Machine – Comando que habilita o usuário a iniciar uma VM;
  • Stop Virtual Machine – Comando que habilita o usuário a desligar uma VM;
  • View Virtual Machine Configuration – Permite ao usuário ver as configurações da VM.

Algumas considerações:
Na opção para ver as configurações da VM o usuário não conseguirá ver alguns detalhes como o Switch Virtual Associado, isso deve ser habilitado como outra definição.
Muitas definições dependem de outras. Exemplo: O start VM não funciona se o Allow Input to Virtual Machine e ainda é preciso do Allow Output from VM para se poder ver o resultado na tela.
No link abaixo existe um detalhamento sobre os operadores a serem liberados em cada necessidade:
http://technet.microsoft.com/en-us/library/dd282980(v=ws.10).aspx

Finalmente será preciso associar o usuário a esta regra criada. Para isso é preciso ir em Role Assignments clicar com o botão direito e selecionar New Role Assignment…0611

Feito isso deve ser selecionado o nome da regra criada:0612

Após basta clicar com o botão direito no nome da regra em Role Assignments, escolher Assign Users and Groups e escolher From Windows and Active Directory. Feito isso basta escolher o usuário ou grupo.0613

Neste momento o usuário possui acesso ao Hyper-V para as tarefas deste caso. Se o usuário estiver logado no servidor não precisa efetuar um logoff, basta dar um refresh no Hyper-V Manager.

Até a próxima!!

Monitorando Máquinas Virtuais

Resource Metering é uma das novas features do Windows Server 2012. Sua função é monitorar máquinas virtuais (VMs) quanto ao uso de CPU, Memória, espaço em disco e rede.
Sete métricas podem ser coletadas por este recurso:
• Uso médio de CPU por uma VM;
• Uso médio de Memória por uma VM;
• Mínimo de Memória usada por uma VM;
• Máximo de Memória usada por uma VM;
• Máximo de espaço em disco alocado para uma VM;
• Tráfego total de entrada por um adaptador de rede virtual;
• Tráfego total de saída por um adaptador de rede virtual;

Para habilitar o Resource Metering em uma VM (neste caso chamada FTP01) basta digitar no host Hyper-V dessa VM:

Enable-VMResourcemetering –VMName FTP01

0501

Quando este comando é dado para uma VM os contadores começam a rodar. Para mostrar o resultado, basta rodar o seguinte comando:

Measure-VM –Vmname FTP01 ou ainda Measure-VM –Vmname FTP01 | fl

0502

Para demonstrar o tráfego de entrada copiei um arquivo para dentro da VM, pela imagem abaixo é possível ver o tráfego (em magabytes) aumentando.

0503

É interessante dizer que as estatísticas perduram mesmo que a VM seja reiniciada ou desligada. Mesmo se ocorrer um Live Migration ou Storage Migration as estatiscas não são perdidas.

Para resetar as estatísticas deve ser usado o comando:
Reset-VMResourceMetering –VMName FTP01

Para parar a coleta de estatísticas basta dar o comando:
Disable-VMResourcemetering –VMName FTP01

Outra coisa interessante é rodar este comando de um servidor remoto. Do servidor B09 para pegar as estatíscas da VM FTP01 no servidor B10 basta digitar:
Measure-VM –Computername B10 –vmname FTP01

Para saber, dentro de um host Hyper-V, quais VMs estão com os contadores ativados, basta dar o seguinte comando:
Get-VM | format-list name,resourcemeteringenabled

Para salvar as estatísticas da VM FTP01 em um arquivo CSV podemos usar os seguintes comandos:
$repVM = get-vm ftp01 | measure-vm
$repVM | Export-Csv -NoTypeInformation -Path c:\reports\report-ftp01.csv

Para finalizar, também é possível criar um pool de monitoramento juntando várias VMs.
Para ver as estatísticas de uso de memórias de duas VMs devemos fazer o seguinte:

Get-VMResourcePool – Este comando vai mostrar os pools disponíveis.
New-VMResourcePool –Name MemoryPool1 –ResourcePoolType Memory – Este comando vai criar um novo pool de memória chamado MemoryPool1.
Get-VM -name FTP01,TST_01 | Stop-VM – Este comando vai desligar as VMs FTP01 e TST_01 que servirão para mostrar o uso do pool. Elas precisam estar desligadas para o próximo comando.
Set-VMMemory -VMName FTP01,TST_01 – ResourcePoolName MemoryPool1 – Seta as duas VMs para usarem o Pool MemoryPool1, recém criado.
Enable-VMResourcemetering -VMName FTP01,TST_01 – Habilita a coleta de estatísticas das duas VMs.
Get-VM -name FTP01,TST_01 | Start-VM – inicia as VMs.
Measure-VMResourcePool –Name MemoryPool1 – Mostra as estatísticas, neste caso de memória e das duas VMs.

Esses comandos podem ser conferidos na figura abaixo:

0504

Até a próxima!!

Ativando a Feature Hyper-V no Windows 8

Para quem gosta de linha de comando o PowerShell está cada vez melhor. Mesmo para quem não gosta de linha de comando a utilização de scripts prontos ou pré-configurados facilita muito a vida do cidadão.

No Windows 8 (Pro e Enterprise) temos o Hyper-V igual ao do Windows Server 2012.

Para ativar o Hyper-V via PowerShell basta um comando (neste caso dois pois um é explicativo):

O comando Get-WindowsOptionalFeature –online mostra todas as windows features e ainda se estão habilitadas ou desabilitadas. Este comando deve ser rodado como Administrador.

1

Pode-se acrescentar alguns parâmetros no comando para ficar mais fácil a visualização. Exemplos:

Get-WindowsOptionalFeature –online | where state –eq enabled | ft -a

Get-WindowsOptionalFeature –online | where state –eq disabled | ft -a

Uma informação interessante é que o nome da Feature que aparecer é o nome que deve ser utilizado. A opção online é para que seja entendido que está tratando do próprio SO.

O comando acima foi apenas para ilustrar como fazer habilitar uma feature pelo powershell. Claro que se preferir isso pode ser feito pela interface gráfica no Painel de Controle – Programas – Programas e Features e habilitar Windows Feature.

Voltando ao comando para habilitar o hyper-v via powershell vemos como é simples:

 Enable-WindowsOptionalFeature -FeatureName Microsoft-Hyper-V-All –online

2

Essa opção vai habilitar todas as opções de hyper-v.

Para ver quais estão ou não habilitadas, do hyper-v, pode-se digitar o comando:

Get-WindowsOptionalFeature -online | where featurename -match “microsoft-hyper” | ft –a

Caso não vá ser usado o Hyper-V no computador e sim somente a ferramenta da administração para gerenciar outro servidor pode-se optar por instalar somente o necessário.

Após a instalação vai ser perguntado ser gostaria de reiniciar o computador. No caso sim.

3

Uma vez reiniciado o Windows 8 estará pronto para hospedar VMs igual a um Windows Server 2012, Windows Server 2012 Core ou Hyper-V Server.

4

Importante, nem todos os computadores tem suporte ao Hyper-V. Para saber se vai rodar corretamente no seu computador rodar o comando systeminfo no prompt de comando ou PowerShell.

5

Nas próximas semanas vou postar os comandos de gerenciamento do Hyper-V em PowerShell.

Até a próxima!!