Nano Server na Infraestrutura de Containers

By | 5 de julho de 2016
Print Friendly, PDF & Email

O Windows Server 2016 TP5 vem com suporte a containers do Windows e já conta com melhorias de desempenho, gerenciamento de rede simplificada.
Neste artigo eu quero usar va´rios recursos novos do Windows Server 2016. Suporte a Containers, Docker e um recurso novo bem legal chamado de Aninhamento (Nest) de virtualização.

Para rodar esse recurso é necessário que seu processador suporte  a tecnologia Intel VT-x e EPT. Descubra no site da própria Intel http://ark.intel.com/

No meu cenários eu tenho um servidor físico rodando o Windows Server 2016 com Hyper-V, rodando o Nano Server que também está com Hyper-V e no Hyper-V do Nano Server teremos im container do Nano Server.

Ok. Eu sei que ficou confuso. Eu mesmo parei várias vezes pra entender o que eu estava fazendo.

Containers oferecem virtualização de sistema permitindo que vários aplicativos isolados possam ser executados em um único sistema. Existem dois tipos diferentes de contêiner , cada um com um diferente grau de isolamento de aplicativos.

  • Windows Server Container onde o isolamento ocorre através de namespace e isolamento do processo. O Windows Server Container compartilha o Kernel com o container host e todos os containers em execução.
  • Hyper-V Containers encapsula cada recipiente em uma máquina virtual muito leve. Nesta configuração o kernel do Server não é compartilhada com os containers do Hyper-V.

De maneira resumida um container é um lugar onde as aplicações pode ser executadas sem afetar o resto do sistema e sem o sistema afetar as aplicações.

Para ficar bem claro e facil o entendimento é necessário compreender a nomeclatura relacionada:

  • Container Host – Computador físico ou virtual configurado com o recurso de “Windows Container”
  • Container OS Image – O ambien’te de sistema operacional do container. (Containers são criados a partir de imagens).
  • Container Image – A imagem de um container que possui SO, aplicação, e todas as dependências necessárias para sua execução.
  • Arquivos Docker – São usados para automatizar o processo de criação de imagens de container.

Nada melhor que a execução para o bom entendimento, então vamos criar um infraestrutura e colocar em pratica esses conceitos.

Atenção Eu estou usando os endereços IPs e Nomes do meu ambiente. 

Criar um Servidor do Nano Server com suporte ao Hyper-V

Eu já tenho o Windows Server 2016 com Hyper-V, o que eu quero é criar um Nano Server com suporte ao Hyper-V.

Import-Module D:\NanoServer\NanoServerImageGenerator\NanoServerImageGenerator.psm1
New-NanoServerImage -EnableRemoteManagementPort `
 –MediaPath D:\ `
 -TargetPath C:\NanoServer\NanoSRVHV.VHDX `
 –ComputerName “NanoHV” `
 -DomainName mcsesolution.local `
 -DeploymentType Guest ` `
 -Edition Standard `
 -InterfaceNameorIndex "Ethernet" `
 -Ipv4Address "192.168.0.207" `
 -Ipv4SubnetMask "255.255.255.0" `
 -Ipv4Dns "192.168.0.200" `
 -Ipv4Gateway "192.168.0.1" `
 -Package Microsoft-NanoServer-Compute-Package `
 -AdministratorPassword (ConvertTo-SecureString -String ‘P@ssw0rd’ -AsPlainText -Force)

Depois de criar o Vhd crie um registro no DNS

*Abaixo uma linha para adicionar um registro do tipo A no DNS usando powershell.

Add-DnsServerResourceRecordA -ComputerName WS2012R2 -Name NanoHV -ZoneName “Mcsesolution.local” -IPv4Address “192.168.0.207” -PassThru

Depois basta copiar o VHD para o servidor do Hyper-V e criar uma maquina virtual para ele. Mas Atenção, não inicie a máquina virtual. Pois queremos ter um Hyper-V rodando dentro de um outro Hyper-V, e por isso temos que fazer algumas configurações:

Configurar o Nano Server Host de Hyper-V

Será necessário definir configurações de processador , memoria e ainda habilitar o modo de comunicação.

É possível configurar dois métodos para a VMs rodando no Hyper-V host virtualizado possa se comunicar de dentro de um Hyper-V. Ou MacAddress Spoofing ou o NAT. 

Saiba mais em https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/user_guide/nesting

Neste exemplo vou usar o Mac Address Spoofing que é mais simples.

$VM = 'NanoServer Hyper-v Server'
Set-VMProcessor -VMName $VM -ExposeVirtualizationExtensions $true
Set-VMMemory -VMName $VM -DynamicMemoryEnabled $false
Get-VMNetworkAdapter -VMName $VM | Set-VMNetworkAdapter -MacAddressSpoofing On

Feito isso, podemos ligar o NanoServer e fazer uma conexão nele para executar alguns comandos nele.

#Variaveis
$NanoServerName = "NanoHV"
$cred = Get-Credential 'Administrator'
#Iniciar uma sessão remota para criar uma rede virtual 
$s = New-PSSession -ComputerName $NanoServerName -Credential $cred
Enter-PSSession -Session $s
$ethernet = Get-NetAdapter -Name ethernet
New-VMSwitch -Name externalSwitch -NetAdapterName $ethernet.Name -AllowManagementOS $true

Você irá perder a conexão pois agora o NanoServer terá o IP em uma outra placa de rede. A rede Virtual vEthernet

Depois será necessário alterar o IP diretamente no Nano Server (Defina o mesmo IP que usou no DNS)

Depois desses configurações vem a  parte mais bonita, que é abrir o console do Hyper-V  no Windows Server 2016 e adicionar o Host do NanoServer.

Agora vem o próximo passo:

Criar um Servidor do Nano Server com suporte a containers

Primeiro passo vamos criar uma imagem de VHD do Nano Server com o pacote Microsoft-NanoServer-Containers-Package.

Import-Module D:\NanoServer\NanoServerImageGenerator\NanoServerImageGenerator.psm1

New-NanoServerImage -EnableRemoteManagementPort `
 –MediaPath D:\ `
 -TargetPath C:\NanoServer\NanoSRVDocker.VHDX `
 –ComputerName “NanoDocker” `
 -DomainName mcsesolution.local `
 -DeploymentType Guest ` `
 -Edition Standard `
 -InterfaceNameorIndex "Ethernet" `
 -Ipv4Address "192.168.0.50" `
 -Ipv4SubnetMask "255.255.255.0" `
 -Ipv4Dns "192.168.0.200" `
 -Ipv4Gateway "192.168.0.1" `
 -Package Microsoft-NanoServer-Containers-Package `
 -AdministratorPassword (ConvertTo-SecureString -String ‘P@ssw0rd’ -AsPlainText -Force)
#Adicionar o Host ao DNS
Add-DnsServerResourceRecordA -ComputerName WS2012R2 -Name NanoDocker -ZoneName "Mcsesolution.local" -IPv4Address "192.168.0.50" -PassThru

Esse VHD criado suporta containers agora, temos que copiar esse NanoServer com suporte a container dentro do outro Nano Server que está virtualizado.

Copiar o Nano Server container Host para o Nano Server Hyper-V Host.

$NanoServerName = "NanoHV"
$cred = Get-Credential 'Administrator'
#Iniciar uma sessão remota e copiar o VHD recém criado
$s = New-PSSession -ComputerName $NanoServerName -Credential $cred
Copy-Item -ToSession $s -Path "C:\NanoServer\NanoSRVDocker.vhdx" -Destination "C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks"

Agora vamos criar a maquina virtual usando esse VHD lá no Nano Server Host de Hyper-v.

Selecione a conexão criada anteriormente

Baixar e Executar o Nano Server Container

#Variaveis
$NanoServerName = "NanoDocker"
$cred = Get-Credential 'Administrator'
#Iniciar uma sessão remota
$s = New-PSSession -ComputerName $NanoServerName -Credential $cred
Enter-PSSession -Session $s
#Baixar uma imagem de container do NanoServer
Find-PackageProvider

Install-PackageProvider ContainerImage -Force Find-ContainerImage Install-ContainerImage -Name NanoServer

Depois de baixada a imagem do Nano Server você pode criar um container a partir dela.

New-Container -Name IISContainer -ContainerImageName NanoServer

Segundo passo é iniciar e se conectar no container.

Start-Container IISContainer
Enter-PSSession -ContainerId (Get-Container IISContainer).id -RunAsAdministrator

 

Conclusão. Esse é um container do Nano Server rodando no Nano Server Hyper-V que está rodando como uma VM no Hyper-V do Windows Server 2016.

No próximo artigo vamos trabalhar com o Docker nesse mesmo container. Não sei se esse ambiente seria ideal para termos em produção, mas com certeza é uma boa forma de explorar as novas tecnologias de datacenter do Windows Server 2016.

Forte abraço,
Daniel Donda

Fonte de pesquisa e estudo : https://msdn.microsoft.com/virtualization/windowscontainers