terça-feira, 10 de março de 2015

Quer implantar máquinas virtuais com pressa? PowerShell é seu amigo


Às vezes, você só precisa fazer as coisas rápido. Ser capaz de implantar novas máquinas virtuais rapidamente é uma necessidade quando você está prototipagem prova de conceitos, correndo implementações de desktops virtuais ou quando você só precisa para a implantação de novas máquinas virtuais em um ambiente de laboratório.


Vamos enfrentá-lo, a menos que você tenha escrito scripts do PowerShell para substituir todos os trabalhos ainda essenciais chatos que você faz todos os dias, então você está nem perto de bom o suficiente em automação.





Então, vamos dar uma olhada em como você pode obter melhor em uma pressa por script a criação de suas máquinas virtuais Hyper-V.


Começando


Este artigo contém um código e conceitos moderadamente complexo. Ele também requer que você ative PowerShell para configurar os servidores - ou clientes - remotamente após a implantação deles.


Windows Server 2012 tem PowerShell comunicação remota ativada por padrão, mas se você estiver executando 2008r2 então você vai precisar para o Google como ativá-lo manualmente.


Para implantar esses scripts em seu ambiente você vai precisar de:



  • Pelo menos um Windows Server 2012 com o Hyper-V 3

  • Um controlador de domínio totalmente configurado (DC)

  • Dynamic Host Configuration Protocol (DHCP) (quer no seu DC ou encaminhamento / equipamentos de comutação)

  • Um arquivo no disco rígido Hyper-V VHDX que atuará como a estátua de ouro para implantações

  • Um conhecimento básico da linguagem de script PowerShell


Passo 1: Fazendo sua imagem dourada


Esta é a etapa mais longa e mais envolvidos no processo. (Atualmente, a capacidade de suportar os clientes Windows em IaaS para Azure está disponível apenas em teste dev e somente para assinaturas MSDN.)


As chances são de que as primeiras vezes que você fizer isso você não vai conseguir exatamente certo, mas fazê-lo direito é importante. A imagem de ouro bem trabalhada significa que a implantação da pós você pode simplesmente lançar a máquina virtual.


A imagem de ouro é, basicamente, apenas uma máquina virtual que contém o sistema operacional e qualquer outra coisa que você precisa. Depois de ter terminado a instalação e configuração que você precisa para prepará-la para a clonagem usando SysPrep.exe.


Eu tenho atualmente sete soldados em meu cache máquina virtual pronto para implantar, conforme necessário.


1.Windows 7 x64 [baunilha]: a imagem base que só teve AV e atualizações do Windows instalado.


2. Windows 7 x64 [VDI]: minha imagem base de testes VDI com o Office e aplicativos de produtividade variados pré-instalado e configurado.


3. O Windows 8.1 x64 [baunilha]: a imagem base que tem apenas AV e atualizações do Windows instalado.


4. O Windows 8.1 x64 [VDI]: minha imagem base de testes VDI com o Office e aplicativos de produtividade variados pré-instalado e configurado.


5. Servidor 2012r2 [baunilha]: a imagem de base com as atualizações do Windows instalado, mas não há outros serviços.


6. Servidor 2012r2 [armazenamento]: a 2012 instância do Servidor pré-configurado para funcionar como um servidor de armazenamento.


7. Servidor 2012r2 [RDSH]: a instância Server 2012 pré-configurado para RDSH.


Alguns administradores de sistemas I se deparam acreditam que a imagem de ouro deve ser simples e não contêm mais do que o sistema operacional além de atualizações e conta administrativa.


Eu gosto simples e usar meus baunilha máquinas virtuais como muitas vezes os meus personalizados, mas fora de um laboratório de teste não faz muito sentido para mim para implementar rapidamente uma máquina virtual e, em seguida, tem que ir sobre a instalação de tudo que eu preciso.


Meus laboratórios de teste refletem meus ambientes do mundo real para que as máquinas virtuais eu rapidamente implantar são geralmente as mesmas que eu preciso para implantar na produção.


Se o seu armazenamento de laboratório de teste é especialmente constrangida, então você pode gostar de manter apenas imagens de baunilha douradas e o uso PowerShell para adicionar funções - ou software adicional - mais tarde. Ele só se resume ao que funciona no seu ambiente.


Eu tenho uma nova pasta payload I transferir para cada máquina virtual como um dos primeiros passos no meu processo de configuração. Ele contém, entre outras coisas, uma série de arquivos de script PowerShell (.ps1).


Embora você pode executar o comando sysprep manualmente, a partir de um arquivo de lote ou no prompt do CMD, eu gosto de manter tudo PowerShell sempre que posso.


O PowerShell comandos para conseguir isso é:


Comece-Process -FilePath C: \ Windows \ System32 \ Sysprep \ Sysprep.exe -ArgumentList '/ generalize / oobe / shutdown / quiet'


Se a sua máquina virtual está usando expansão dinâmica arquivos VHDX seguida, depois de ter concluído o estágio sysprep de sua criação imagem de ouro que é uma boa idéia para executar um comando de contração em todo o arquivo VHDX. O código de conseguir isso é extremamente simples e uma das últimas etapas manuais que você vai correr:


Param ([string] $ Path = $ (Throw '-Path é necessária')) eco "A tentativa de Mount $ Path" Mount-vhd -path $ Path -readonly Otimizar-vhd -path $ Path -mode cheio de eco "Tentar desmontar $ Path "Desmontar-vhd -path $ Path


Depois de concluída, você pode começar a próxima fase. A partir daí você vai precisar apenas o arquivo drive virtual .vhdx, assim você pode manter a máquina virtual ou excluí-lo para fora do Hyper-V Management Console uma vez que você tem certeza de que você é feito. Se você está mantendo-lo, certifique-se de desligá-lo.


Passo 2: Implantação de nossa imagem de ouro


A próxima etapa é criar discos virtuais para o novo servidor (s). Você pode criar um disco diferencial com base na imagem de ouro, mas eu prefiro para copiar todo o disco virtual para criar um disco independente para a nova máquina virtual usando o cmdlet PowerShell Copy-Item.


Copy-Item -Path "E: \ VMs \ GoldenImages \ $ ($ OriginatingVMName) .VHDX" -Destination "E: \ VMs \ $ ($ NewComputerName) _Disk.vhdx" | Out-Null


Você pode definir o parâmetro de destino para apontar para uma pasta local ou um caminho convenção de nomenclatura universal.


Uma vez que o VHDX acabar de copiar nós, então, criar uma nova máquina virtual no Hyper-V usando o cmdlet New-VM.


New-VM -Nome $ NewComputerName -VHDPath "E: \ VMs \ $ ($ NewComputerName) _Disk.vhdx" -SwitchName $ vSwitchName | Out-Null


O comando acima cria uma máquina virtual, atribui o nosso disco virtual recém copiado e atribui a máquina virtual de um switch virtual para usar. Uma vez que isso tenha sido feito, podemos atribuir valores memória RAM e processador.


p> Set-VMMemory -VMName Server1 -DynamicMemoryEnabled $ True -StartupBytes 2GB -MinimumBytes 2GB -MaximumBytes 4GB Set-VMProcessor -VMName Server1 -Count 2 -RESERVA 0 -Máxima 100 -RelativeWeight 100


Agora que temos todos os nossos passos individuais com script, vamos colocá-los juntos e adicionar alguns parâmetros para que não seja necessário editar o script de cada vez que deseja implantar uma nova máquina virtual.


Nosso roteiro completo será algo parecido com isto:


Param ([Parâmetros (obrigatório = $ true)] [String] $ NewComputerName, [Parâmetro (obrigatório = $ true)] [TEXTO] $ OriginatingVMName, [Parâmetro (Obrigatório = $ true)] [String] $ vSwitchName #Adicione parâmetros adicionais tais como configurações de memória)


Faça-verboso "Criação e configuração de VM $ NewComputerName" Copy-Item -Path "E: \ VMs \ GoldenImages \ $ ($ OriginatingVMName) .VHDX" Destino "E: \ VMs \ $ ($ NewComputerName) _Disk.vhdx" | Fora -Null


New-VM -Nome $ NewComputerName -VHDPath "E: \ VMs \ $ $ NewComputerName) _Disk.vhdx" -SwitchName $ vSwitchName | Out-Null


Set-VMMemory -VMName Server1 -DynamicMemoryEnabled $ True -StartupBytes 2GB -MinimumBytes 2GB -MaximumBytes 4GB


Set-VMProcessor -VMName Server1 -Count 2 -RESERVA 0 -Máxima 100 -RelativeWeight 100 Write-Verbose "Concluir"


Agora só precisamos para iniciar a máquina virtual.


Passo 3: personalização


Até agora, temos o nosso arquivo copiado .VHDX, acrescentou uma nova máquina virtual para o console de gerenciamento do Hyper-V e atribuiu CPU, RAM e recursos de rede. Agora que temos uma máquina virtual powered-on podemos começar a personalizá-lo.


Há quatro etapas claras para levar com o nosso script pós-implantação.


1. Defina a máquina virtual para usar um IP estático. Alternativamente, poderíamos deixar a máquina virtual usando DHCP, mas eu prefiro muito mais ter todas as minhas máquinas virtuais em IPs estáticos.


2. credenciais de abastecimento para a máquina virtual para que PowerShell comunicação remota irá funcionar. Para salvar ter que digitá-los toda vez que eles são necessários, vamos guardá-los como uma variável.


3. Use o cmdlet Add-Computador para se juntar ao servidor ao domínio e defina seu nome do computador.


4. Use o cmdlet Install-WindowsFeature para instalar qualquer Windows Server não características já pré-instalado.


Eu tentei várias vezes para fazer um script que faz todas essas tarefas remotamente. Francamente, se você pode fazê-lo funcionar, então parabéns a você. Infelizmente para o momento de iniciar esta etapa no meu laboratório me obriga a iniciar a máquina virtual, faça login com a conta de administrador e, em seguida, executar o script.


Nosso roteiro para atingir esses objetivos parece com isso:


# Intialise seu Parâmetros Param ([Parameter (Obrigatório = $ true)] [String] $ NewComputerName, [Parameter (Obrigatório = $ true)] [String] $ vSwitchName, [Parâmetro (obrigatório = $ true)] [string] $ IPAddress , [Parâmetro (obrigatório = $ false)] [string] $ SubnetMask, [parâmetros (obrigatório = $ true)] [string] $ DefaultGateway, [parâmetros (obrigatório = $ true)] [matriz] $ DNSservers #Adicione parâmetros adicionais aqui )


# Colete Necessário Credenciais Faça-verboso "Get as credenciais para o computador local e do domínio" $ LocalCred = Get-Credential -username Administrator -Mensagem "credenciais computador local" $ DomainCred = Get-Credential -username Administrator@labrat.wigginsix.com -Mensagem "credenciais de domínio" # atribuir o especificado IP estático para o VM Write-Verbose "Atribuir um estático (não-DHCP atribuído) endereço IP" Get-WmiObject -Classe Win32_NetworkAdapterConfiguration -Filter "IPEnabled = TRUE" |% {Faça-host "Tentando definir o endereço IP em $ ($ _ Description.)" $ _ EnableStatic ($ IPAddress, $ Subnetmask) |. out-nulo $ _ $ (SetGateways DefaultGateway) |.. out-nulo $ _ SetDNSServerSearchOrder ($ DNSServers) | out-null} if ($?) {write-host "Endereço IP definida com sucesso"} else {


write-host "IP estático atribuição falhou"} # Junte-se ao VM para o domínio, Alterar o nome do computador e Restart Faça-verboso "VM $ NewComputerName ingressar no domínio" Renomear-Computer -NewName $ NewComputerName sono 5 Add-Computer -DomainName labrat .wigginsix.com -Credential $ DomainCred -Opções JoinWithNewName -restart # De acordo com a M $ documentação esta declaração é suposto trabalho. Deixando esta aqui para referência futura. PS: ele não funciona # Add-Computer -DomainName labrat.wigginsix.com -ComputerName $ env: computername -newname $ NewComputerName -Credential -Restart


Então, você tem isso: dois roteiros de trabalho que implantar e configurar as nossas máquinas virtuais; e um roteiro de trabalho que você pode usar para implantar rapidamente e personalizar a máquina virtual.


Implantando no Azure


Esses scripts são ótimos e eu adoro-los em pedaços. Eles automatizar um monte de tarefas manuais que eu faço quando o teste no meu laboratório e economizar uma enorme quantidade de tempo.


Há um pouco grande elefante na sala, no entanto. Estou regularmente convidado para testar implantações e migrações para Azure também. Felizmente, acontece que eu tenho um script PowerShell para isso também.


Param ([Parameter (Obrigatório = $ true)] [String] $ subscriptionName, [Parameter (Obrigatório = $ true)] [String] $ storageAccountName, [Parameter (Obrigatório = $ False)] [String] $ região, [Parameter ( Obrigatório = $ False)] [String] $ instanceSize, [Parameter (Obrigatório = $ False)] [String] $ serviceName, [Parameter (Obrigatório = $ False)] [String] $ vmname, [Parameter (Obrigatório = $ False) ] [String] $ localosvhdname, [Parameter (Obrigatório = $ False)] [String] $ localdatavhdname #Adicione parâmetros adicionais, tais como configurações de memória) NOTAS: # # Recuperar $ região com Get-AzureLocation Se você está inseguro Opções $ região: West EUA, Central dos EUA, Leste dos Estados Unidos, North Central dos EUA, South Central dos Estados Unidos, Europa do Norte, Europa Ocidental, Ásia Oriental, Sudeste Asiático, Japão Médio, Japão Ocidental, Brasil Sul, Austrália Médio, Austrália Sudeste


# $ Opções instanceSize: Extra, pequeno, médio, grande, ExtraLarge # $ serviceName tem que ser um nome único. Verifique com Test-AzureService #> # Especifique o local conta de armazenamento para armazenar os VHDs recém-criado-AzureSubscription -SubscriptionName $ subscriptionName -CurrentStorageAccount $ storageAccountName


#set Fonte VHD Caminhos de arquivos $ vhdfilepath = 'E: \ VMs \ MigrateToAzure \' + $ vmname + '\' + $ localosvhdname + '_Disk.vhdx' $ datavhdfilepath = 'E: \ VMs \ MigrateToAzure \' + $ vmname + ' \ '+ $ localdatavhdname +' _Disk.vhdx '


# Set Target Carregar Localização $ destinationOS = 'http: //' + $ storageAccountName + '.blob.core.windows.net / uploads /' + $ ($ localosvhdname) + '_Disk.vhdx' $ destinationData = 'http: / / '+ $ storageAccountName +' .blob.core.windows.net / uploads / '+ $ ($ localdatavhdname) +' _Disk.vhdx 'Add-AzureVhd -LocalFilePath $ vhdfilepath -Destination $ destinationOS Add-AzureVhd -LocalFilePath $ datavhdfilepath - Destino $ destinationData Add-AzureDisk -OS o Windows -MediaLocation $ destinationOS -DiskName $ localosvhdname Add-AzureDisk -MediaLocation $ destinationData -DiskName $ localdatavhdname $ migratedVM = New-AzureVMConfig -Nome $ vmname -DiskName "$ ($ localosvhdname) .VHDX" - InstanceSize $ instanceSize | Add-AzureDataDisk -Importação -DiskName "$ ($ localdatavhdname) .vhdx" -LUN 0 | Adicionar-AzureEndpoint -Nome 'Área de Trabalho Remota "-LocalPort 3389 -protocol tcp Nova AzureVM -ServiceName $ serviceName -Local $ local -VMs $ migratedVM


Para este script para funcionar com sucesso você terá que já se inscreveram uma conta Azure, instalado e configurado Azure PowerShell (detalhes aqui ) e estar preparado para esperar enquanto seus VHDXs upload para Azure.


O fluxo de trabalho para este script é diferente também. Com nossos scripts locais estávamos trabalhando com máquinas virtuais imagem de ouro que tínhamos criado especificamente para implantação rápida. Azure já tem de implantação rápida de imagens dourado pronto para ir.


Durante os testes, o mais longo que eu já tive que esperar por Azure a disposição de um dos seus próprios imagens de ouro foi de cerca de 30 minutos. Ele leva muito menos tempo para a prestação Azure uma de suas imagens de ouro própria baunilha e para nós, em seguida, personalizá-lo do que para carregar o nosso próprio, conforme necessário.


Muito parecido com o Hyper-V local, em Azure também podemos salvar nossas próprias versões personalizadas das imagens douradas Azure pré-configurados para uso em vez dos baunilha.


Uma vez que você provavelmente não iria usar o script de migração Azure upload de suas próprias imagens de ouro este script não é uma característica em um cenário de rápida implantação. Eu visualizo a usá-lo em meu laboratório de teste para um backup mensal de máquinas virtuais de infra-estrutura ou como parte de um projeto de migração em grande escala.


Conclusão


PowerShell é uma ferramenta muito poderosa que muitos administradores não está usando para qualquer lugar perto de seu pleno potencial.


Usando PowerShell Scripting para automatizar a implantação de máquina virtual rápida no Hyper-V é realmente muito simples de configurar. Depois de ter conseguido que vai, você vai saber porque você nunca fez isso de outra maneira. ®



Nenhum comentário:

Postar um comentário