L’infrastructure des Techdays 2010 : Déploiement et Virtualisation
Dans les activités de mon deuxième métier chez Microsoft :-), je suis en charge du déploiement des systèmes et des réseaux pour les événements, dont le setup de la plate forme des TECHDAYS. Voici un résumé de la préparation.
La préparation de la plate-forme des Techdays 2010, c’est environ 100 postes à déployer : du poste simple (Windows 7 / Office 2010 / Internet) aux machines des Workshop Windows (2008 R2 + Hyper-V) en passant évidement par des serveurs d’infrastructure Windows 2008 R2 + TMG 2010 ….
C’est aussi un réseau Hot-Spot Wifi à mettre en place et à configurer, ce point ne sera cependant pas traité.
Dans le monde de la PME vous pouvez être amené à déployer ce genre de plate-forme. Voici la méthode que nous avons utilisée pour le faire en moins de quinze jours à trois personnes en partant de zéro, uniquement avec des technologies Microsoft ! :-)
Nous pouvons décomposer cette préparation en 7 étapes :
- Préparation du serveur de déploiement WDS.
- Création d’une image de boot et d’une image de capture.
- Capture des images à déployer (Windows Serveur 2008 R2 avec Hyper-V et Windows 7 avec Office 2010).
- Elaboration des fichiers réponses.
- Déploiement des machines.
- Déploiement des VM.
- Création du script PowerShell pour manager Hyper-V à distance.
1. Le Serveur WDS
C’est un rôle à installer sur un serveur Windows 2008 R2 (Foundation/Standard/Entreprise).
Il est nécessaire d’avoir installé au préalable Active Directory et les rôles serveur DHCP et DNS.
Ce rôle peut être installé sur un contrôleur de domaine ou sur un serveur membre. Dans notre cas, nous l’avons installé sur un serveur membre d’un domaine. Il peut aussi s’installer sur le deuxième serveur de SBS 2008 Premium J
Nous avons dû rajouter sur la console DHCP : l’option 66 (spécifier le FQDN du serveur WDS) et l’option 67 (spécifier le nom de l’image de boot) du serveur DHCP.
Il ne reste plus qu’à lancer l’installation du rôle WDS.
Une fois le rôle WDS installé et paramétré (il suffit de suivre l’assistant), nous pouvons passer à la création de l’image de capture et de l’image de boot.
2. Création de l’image de capture et de l’image de boot
L’image de boot correspond à l’image que va utiliser WDS pour permettre aux machines clientes de booter en WinPE et de lancer l’installation.
Pour créer une image de boot, allez sur la console WDS et faites un clic droit sur Image de démarrage et sélectionnez Ajouter image de démarrage. Suivez l’assistant et sélectionnez le fichier boot.wim (vous pouvez trouver ce fichier sur votre DVD de Windows 7 ou de Windows 2008 R2).
L’image de boot se trouve alors sur votre console WDS dans le répertoire Image de Démarrage :
L’image de capture permet de capturer l’image disque de la machine que l’on souhaite déployer (master). Cette image disque sera au format « .wim » et sa taille dépendra du nombre d’applicatifs que vous avez installé sur la machine (notre version de Windows 7 Entreprise avec Office 2010 et quelques autres applications faisait environ 10 Go).
Pour réaliser une image de capture, vous devez faire un clic droit sur l’image de boot réalisée précédemment et cliquer sur « Créer image de capture » . Rentrez le nom, la description et l’emplacement ou vous voulez sauvegarder votre image. N’oubliez pas de cocher la case « Ajouter cette image au serveur WDS » à la fin de l’assistant.
Après cette manipulation, nous avons les 2 images de démarrage dans la console :
3. Capture des images à déployer
Dans notre cas, nous avions deux images à réaliser : une pour les postes Windows 7 avec Office 2010 et l’autre pour les postes des Workshops avec Windows 2008 R2 et Hyper-V.
Il est donc nécessaire de faire les deux « master » et d’exécuter la commande «c:\windows\system32\Sysprep.exe /oobe /generalize» sur ces masters.
Une fois les « masters » réalisés, veillez à ce qu’il n’y ait que l’image de capture qui soit active sur la console WDS (clic droit sur l’image / désactiver pour désactiver l’image de boot).
Démarrez en PXE (touche F12) et suivez l’assistant
Vous avez alors 2 choix possibles :
1) Soit Vous enregistrez votre image sur votre disque dur local (choix de l’emplacement dans l’assistant) et vous transférez ensuite l’image sur votre serveur WDS via un disque dur externe par exemple. Vous devrez ensuite ajouter cette image en faisant un clic droit sur la console WDS sur la rubrique Image d’installation et sélectionner Ajout d’une image d’installation. Il n’y a plus qu’à suivre l’assistant.
Temps nécessaire sur notre plateforme : 60 min
2) Ou vous enregistrez l’image sur votre disque local et vous envoyez l’image sur votre serveur WDS.
Vous devrez ensuite saisir vos informations de connexion (login / mot de passe Active Directory)
Dans cette option l’image est directement rajoutée à la console WDS. Il s’avère également que cette solution est la plus rapide (il n’y a pas de transfert à effectuer avec un disque dur USB)
Temps nécessaire sur notre plateforme : 45 min
4. Elaboration des fichiers réponses
Pour automatiser l’installation, nous avons dû créer 2 fichiers réponses :
Le premier, que nous avons appelé WdsUnattend.xml, sert à formater / créer les disques et partitions. Nous spécifions également sur quel disque et sur quelle partition sera installé le système d’exploitation. Pour finir, il est indispensable de rentrer le login / mot de passe Active Directory pour pouvoir se connecter au serveur WDS.
Le deuxième est propre à l’image disque : on choisit, entre autre, la langue d’installation, les paramètres réseaux, le nom du poste, la création des sessions utilisateurs, …
Voici un petit exemple de deux fichiers réponses (proposés par Christine Guezennec de la société ExpertTeam) :
Vous pouvez également télécharger le kit WAIK pour pouvoir modifier facilement les champs dont vous avez besoin sur vos fichiers réponses (voir rajouter des rubriques si nécessaire) à l’adresse suivante :
Une fois les fichiers réponses crées, nous devons les intégrer à WDS :
Le premier fichier (WdsUnattend.xml) se rajoute en faisant un clic droit au niveau du serveur de la console WDS (onglet Client).
Le deuxième (Image_Windows.xml) se rajoute en faisant un clic droit au niveau de l’image (cocher la case « Autoriser l’image à s’installer avec un fichier réponse » et spécifier le chemin du fichier réponse)
5. Déploiement des machines
Pour déployer plusieurs machines il y a deux possibilités avec WDS, « l’unicast » ou le « multicast ». Ayant un besoin de déployer des PC en batterie (~ 60 postes Windows 7 et ~ 40 postes Windows 2008 R2) et n’ayant pas de problème de bande passante, nous avons choisi le multicast. De plus, il permet de planifier et de lancer une session au nombre de clients ...
Nous avons atteint les temps suivants : 40 PC (Windows Windows 2008 R2) déployés en 12 minutes ….
Pour les postes Windows 7 / Office 2010 / Internet le déploiement est terminé :-)
6. Déploiement des VM
Pour les 40 machines Windows 2008 R2 + Hyper-V des Workshops, il restera à déployer les VMs en fonction des sujets traités. Certain sujets avaient jusqu’à 5 VM. Les VM auraient pu être déployées dans l’image avec WDS mais pour des questions pratiques (gestion du dernier moment) nous avons préféré les déployer à l’aide de scripts (Power Shell + Robocopy) à partir d’une machine distante Windows 2008 R2 avec HyperV « machine maître ».
Voici la base du script en PS : « je créé les répertoires à distance sur mes 40 machines »
for ($num=1; $num –le 40; $num=$num+1) {
mkdir \\serv-0$num\c$\mes-vms
}
Voici la base du script en PS : « je copie les VM sur les 40 machines » (dans cet exemple nous nous servons de Robocopy qui n’est pas à l’origine une commande PS)
for ($num=1; $num –le 40; $num=$num+1) {
Robocopy c:\mes-vhd\mes-sujets\ \\srv-0$num\c$\VMs
}
7. Création du script PowerShell pour manager Hyper-V à distance
Une fois toutes les VM copiées au bon endroit sur tous les serveurs, nous avons géré les 40 serveurs Hyper-V à l’aide de scripts PowerShell à distance à partir de notre serveur maitre, à savoir :
- Création de réseau virtuel sur chaque serveur (réseau interne/ réseau privé/ réseau externe)
- Création de machines virtuelles en leur attachant les VHD copiés précédemment
- Création de cartes réseau en les attachant aux réseaux virtuels précédemment créés
- Démarrer les machines virtuelles
- Faire des snapshots
- Appliquer les snapshots
- Arrêter les machines virtuelles
- Etc etc
Pour cela il suffit de télécharger les « PowerShell Management Library for Hyper-V » ici : https://pshyperv.codeplex.com/.
Ce sont des cmdlet Powershell (module HyperV) à installer sur la machine « maître ».
Voici quelques exemples de scripts que nous avons utilisés (avec la participation de Samy Girard, Microsoft France) :
Création d’un Switch dans Hyper-V (local ou à distance) :
#Pour un switch interne
import-module -Name HyperV
New-VMInternalSwitch “Mon-Switch-Interne” –server localhost
#Pour un switch privé
import-module -Name HyperV
New-VMPrivateSwitch ” Mon-Switch-Prive” –server localhost
#Pour un switch Externe “bindé” sur une NIC (carte réseau)
import-module -Name HyperV
New-VMExternalSwitch -VirtualSwitchName "Mon-Switch-Externe" -ext "Broadcom" -Server localhost
Création d’une VM (locale ou à distance) avec création du VHD en lui attachant disquette, CD + ISO, NIC sur le bon switch, avec le nombre de CPU + mémoire ….
import-module -name hyperv
new-VM -name "ma-vm" -path f:\vm\ma-vm -server localhost
set-VMCPUCount -vm "ma-vm" -CPUcount 2 -server localhost
set-VMmemory -vm "ma-vm" -memory 1024 -server localhost
add-VMNewHardDisk -vm "ma-vm" -vhdpath "f:\vm\ma-vm\Virtual Hard Disks\ma-vm.vhd" -ControllerID 0 -LUN 0 -server localhost
add-VMNic -vm "ma-vm" -VirtualSwitch "Mon-Switch-Interne" -server localhost
add-VMFloppyDisk -vm "ma-vm" -path "f:\vm\diskette.vfd" -server localhost
add-vmdisk -vm "ma-vm" -opticaldrive -ControllerID 1 -LUN 0 -vhdPath "c:\mes-image-iso\mon-iso.iso" -server localhost
La même chose que ci-dessus mais avec une VM (locale ou à distance) en lui attachant un VHD existant :
import-module -name hyperv
new-VM -name "ma-vm" -path f:\vm\ma-vm -server localhost
set-VMCPUCount -vm "ma-vm" -CPUcount 2 -server localhost
set-VMmemory -vm "ma-vm" -memory 1024 -server localhost
add-VMDisk -vm "ma-vm" -vhdpath "f:\vm\ma-vm\Virtual Hard Disks\ma-vm.vhd" -ControllerID 0 -LUN 0 -server localhost
add-VMNic -vm "ma-vm" -VirtualSwitch "Mon-Switch-Interne" -server localhost
Création d’un Snapshot (local ou à distance) :
import-module -Name HyperV
New-VMSnapshot -vm “ma-vm” -wait -force -server localhost
J’applique un Snapshot (local ou à distance) :
import-module -Name HyperV
Select-vmsnapshot -vm “ma-vm” -server localhost | Apply-Snapshot -force
Je démarre/off/shutdown les VMs (local ou à distance) :
import-module -Name HyperV
start-vm -vm “ma-vm” -server localhost
stop-vm -vm “ma-vm” -server localhost
Invoke-VMShutdown -vm “ma-vm” -server localhost
Si l’on veut gagner du temps, il est possible, de récupérer les GUIDs des NIC sans faire d’import/export de VM, avec la commande :
get-Vmnic –vm «ma-vm » -server localhost
Et de créer une NIC avec le GUID récupéré :
add-VMNic -vm "ma-vm" -VirtualSwitch "Mon-Switch-Interne" –guid “monguid” -server localhost
Ces scripts peuvent être réunis dans un programme principal en les chargeant en tant que « librairies » : le but est alors de créer une interface pour pouvoir les exécuter rapidement en passant des paramètres :
“Screenshot” de l’interface :
Cette interface a été développée par Fabien Duchêne (Microsoft France) que l’on remercie pour sa collaboration.