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
Donda. Parabéns!!