Dans ce blogpost je présente les étapes nécessaires pour intégrer OpenStack Ussuri et un noeud individuel Hyper-V compute avec réseau Open vSwitch provider+VXLAN. Open vSwitch est obligatoire quand tu voudrais utiliser le réseau VXLAN.
Mise en oeuvre des composants suivants n'est pas couverte par cet article de blog.
Version de Windows Server
Cet article de blog est écrit en utilisant la version anglaise du Windows Server Core 2019 Datacenter Evaluation.
Je recommande Windows Server Core 2019 ou Hyper-V Server 2019. Tu peux quand même installer Windows Server 2019 Desktop Experience si tu préfère le bureau complet Windows. L'installation par défaut est Server Core avec une interface graphique focusé sur la ligne de commande.
Les différents éditions logiciels serveurs, prix, restrictions et licensing invité sont résumés dans le tableau suivant. La comparison est basée sur la page Comparison of Standard and Datacenter editions of Windows Server 2019.
Version Windows | Licence | Max VMs | Licence pour VMs |
---|---|---|---|
Windows Server 2019 Standard | licence payant | 2 par licence | non |
Windows Server 2019 Datacenter | licence payant | illimité | oui (AVMA) |
Hyper-V Server 2019 | gratuit | illimité | non |
Les versions localisées Windows Server (ou Hyper-V Server) peuvent être affecté par des problèmes d'incompatibilités différents, donc je recommande gentillement de préférer les versions anglaises.
Configuration de base
Se connecter au serveur installé frâiche, change le mot de pass et démarre la configuration en utilisant la ligne de commande.
Tu peux installer les pilots en utilisant pnputil si c'est nécessaire.
Server Core et Hyper-V Server peuvent être configurer en utilisant l'outil sconfig.
Microsoft (R) Windows Script Host Version 5.812 Copyright (C) Microsoft Corporation. All rights reserved. Inspecting system... =============================================================================== Server Configuration =============================================================================== 1) Domain/Workgroup: Domain: example.net 2) Computer Name: OSHV2K19 3) Add Local Administrator 4) Configure Remote Management Enabled 5) Windows Update Settings: DownloadOnly 6) Download and Install Updates 7) Remote Desktop: Enabled (all clients) 8) Network Settings 9) Date and Time 10) Telemetry settings Unknown 11) Windows Activation 12) Log Off User 13) Restart Server 14) Shut Down Server 15) Exit to Command Line Enter number to select an option:
Configurer NTP si le serveur n'est pas le membre d'un domain Windows.
net stop w32time w32tm /config "/manualpeerlist:pool.ntp.org,0x8" /syncfromflags:MANUAL net start w32time
Le pare-feu peut être éteindre en cas d'un environnement laboratoire.
netsh advfirewall set allprofiles state off
Lancer PowerShell dans une nouvelle fenêtre.
start powershell
Il est nécessaire d'installer le rôle Hyper-V sur Windows Server 2019. Hyper-V Server 2019 contient ce rôle déjà.
PS > Add-WindowsFeature Hyper-V PS > Add-WindowsFeature Hyper-V-PowerShell
Activer PowerShell à distance pour le management Hyper-V.
PS > Enable-PSRemoting
Cloudbase fournit Open vSwitch builds for Windows signé, mais la version stable dernière est 2.10.0 au moment de la rédaction. C'est une vieille version et j'ai trouvé perte de paquets importante avec ça.
Finalement, j'ai compilé un paquet MSI Open vSwitch moi-même et j'ai installer cela. Heureusement, je ne doit pas installer un plateforme Windows build complet mais j'ai utilisé le service AppVeyor autobuild service. Tout simplement fork le répo ovs repository sous ton compte GitHub, lier ce repo à ton compte AppVeyor, crée un nouveau build et enfin télécharger l'installateur MSI. Le dernier commit était f0e4a73 dans le repo quand mon installateur MSI est préparé.
Tu peut lire les dépendances nécessaires ce-que doit être installer sur le serveur Hyper-V dans le fichier appveyor.yml.
Installer Visual Studio 2013/2019 runtime.
vcredist_x64.exe
Installer OpenSSL 1.0.2u.
Win64OpenSSL-1_0_2u.exe
Les paquets AppVeyor Open vSwitch ne sont pas signés, donc tu dois configurer Windows pour ce qu'il accepte les pilots Open vSwitch non-signés. Lancer les commandes suivantes dans ligne de commande et redémarrer Windows.
bcdedit /set LOADOPTIONS DISABLE_INTEGRITY_CHECKS bcdedit /set TESTSIGNING ON bcdedit /set nointegritychecks ON shutdown /r
Installer ton paquet Open vSwitch. Activer les journeaux d'installateur (/l*v ovs-install-log.txt) n'est pas obligatoire mais cela peut être utile plus tard.
msiexec /i OpenvSwitch-Release.msi /qr /l*v ovs-install-log.txt
Activer le port TCP/6640 dans la configuration Open vSwitch.
PS > sc.exe config ovsdb-server binPath= --% "\"C:\Program Files\Open vSwitch\bin\ovsdb-server.exe\" --log-file=\"C:\Program Files\Open vSwitch\logs\ovsdb-server.log\" --pidfile --service --service-monitor --unixctl=\"C:\ProgramData\openvswitch\ovsdb-server.ctl\" --remote=punix:\"C:\ProgramData\openvswitch\db.sock\" --remote=ptcp:6640 \"C:\Program Files\Open vSwitch\conf\conf.db\"" PS > sc.exe stop ovs-vswitchd PS > sc.exe stop ovsdb-server PS > sc.exe start ovsdb-server PS > sc.exe start ovs-vswitchd
Déconnecte-toi et reconnecte-toi pour prendre en compte la nouvelle valuer de la variable %PATH%.
Créer VMswitch. Open vSwitch a une extension commutateur virtuelle Hyper-V.
Get-NetAdapter | select "Name" Name ---- management Ethernet New-VMSwitch -Name vSwitchOVS -NetAdapterName "Ethernet" -AllowManagementOS $true Get-VMSwitchExtension -VMSwitchName vSwitchOVS -Name "Open vSwitch Extension" Enable-VMSwitchExtension -VMSwitchName vSwitchOVS -Name "Open vSwitch Extension"
Créer la configuration Open vSwitch de base.
ovs-vsctl.exe add-br br-ext ovs-vsctl.exe add-port br-ext Ethernet
Configurer un addresse IP de point de terminaison VXLAN sur br-ext.
Enable-NetAdapter br-ext New-NetIPAddress -IPAddress <VXLAN_IPaddr> -InterfaceAlias br-ext -PrefixLength <example: 24>
Installer l'agent OpenStack Nova compute Hyper-V. C'est installer contient Neutron OVS agent aussi. Activer les journeaux d'installateur (/l*v nova-compute-install-log.txt) n'est pas obligatoire mais cela peut être utile plus tard.
msiexec /i HyperVNovaCompute_Ussuri_21_0_0.msi /l*v nova-compute-install-log.txt
Suivre les pas de l'assistant d'installation.
Alternativement, silent or unattended install est également disponible. Le processus d'installation manuelle peut être trouver dans le document OpenStack Hyper-V virtualization platform.
Le branchement de l'interface réseau virtuelle des VM n'est pas géré correctement dans mon environnement de laboratoire. Apres le lancement d'un VM, il n'a pas de connection réseau et ovs-vsctl show montre des erreurs.
ovs-vsctl show ... Port "932cb602-8ec0-43be-bed5-b690a8b1d99a" Interface "932cb602-8ec0-43be-bed5-b690a8b1d99a" error: "could not open network device 932cb602-8ec0-43be-bed5-b690a8b1d99a (No such device)" ...
Le code correspondant se trouve dans C:\Program Files\Cloudbase Solutions\OpenStack\Nova\Python\Lib\site-packages\compute_hyperv\nova\vmops.py. Deux fonctions, spawn() et power_on() initient le branchement de vif. Selon le code, l'interface réseau virtuel est ajoutée au pont OVS avant qu'Hyper-V ne la crée lors de la mise sous tension de la VM. Mais le bon comportement est que l'agent nova compute doit attendre la mise sous tension de la VM (pas seulement attendre la création de la VM) avant le branchement de l'interface réseau virtuel au point OVS.
J'ai écris un petit correctif ce qui mis sous tension de la VM d'abord, puis ajoute l'interface réseau virtuel au point OVS. Appliquer le correctif suivant sur vmops.py et redémarrer le service nova-compute.
--- orig/vmops.py 2020-10-06 02:15:08.000000000 +0200 +++ updated/vmops.py 2021-11-08 08:46:11.044979827 +0100 @@ -312,13 +312,10 @@ self._create_ephemerals(instance, block_device_info['ephemerals']) try: - with self.wait_vif_plug_events(instance, network_info): - # waiting will occur after the instance is created. - self.create_instance(context, instance, network_info, - block_device_info, vm_gen, image_meta) - # This is supported starting from OVS version 2.5 - self.plug_vifs(instance, network_info) - + LOG.debug("Creating instance") + self.create_instance(context, instance, network_info, + block_device_info, vm_gen, image_meta) + LOG.debug("Updating device metadata") self.update_device_metadata(context, instance) if configdrive.required_by(instance): @@ -337,6 +334,11 @@ self.power_on(instance, network_info=network_info, should_plug_vifs=False) + self.pause(instance) + with self.wait_vif_plug_events(instance, network_info): + LOG.debug("Plugging vifs") + self.plug_vifs(instance, network_info) + self.unpause(instance) except Exception: with excutils.save_and_reraise_exception(): self.destroy(instance, network_info, block_device_info) @@ -1018,9 +1020,18 @@ self._volumeops.fix_instance_volume_disk_paths(instance.name, block_device_info) + self._set_vm_state(instance, os_win_const.HYPERV_VM_STATE_ENABLED) if should_plug_vifs: + LOG.debug("Pause instance", instance=instance) + self._set_vm_state(instance, + os_win_const.HYPERV_VM_STATE_PAUSED) + LOG.debug("Unplug instance vif(s)", instance=instance) + self.unplug_vifs(instance, network_info) + LOG.debug("Plug instance vif(s)", instance=instance) self.plug_vifs(instance, network_info) - self._set_vm_state(instance, os_win_const.HYPERV_VM_STATE_ENABLED) + LOG.debug("Unpause instance", instance=instance) + self._set_vm_state(instance, + os_win_const.HYPERV_VM_STATE_ENABLED) def _set_vm_state(self, instance, req_state): instance_name = instance.name
L'installateur MSI ne configure pas l'accès réseau fournisseur du pont. Éditer C:\Program Files\Cloudbase Solutions\OpenStack\Nova\etc\neutron_ovs_agent.conf selon ce qui suit.
[ovs] ... bridge_mappings = 'provider:br-ext' ...
Installer FreeRDP WebConnect ce qui est un RDP-HTML5 proxy qui permet d'accéder à un console machine virtuelle à partir d'un navigateur web.
Suivre les pas de l'assistant d'installation.
Le fichier de configuration générée se trouve sous C:\Program Files\Cloudbase Solutions\FreeRDP-WebConnect\etc\wsgate.ini.
L'URL console VM peut être obtenu dans ligne de commande OpenStack.
nova get-rdp-console <VM instance> rdp-html5
Découvrez de nouveau noeud hyperviseur sur le contrôleur.
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Les interfaces réseaux virtuelles orphelines et erronées peuvent être supprimées du pont OVS après le redémarrage du système ou le redémarrage de l'agent neutron à l'aide de l'extrait de code PowerShell suivant.
$interfaces = ovs-vsctl --format=csv find interface ofport="-1" | ConvertFrom-Csv | Select "name" Foreach($i in $interfaces) { ovs-vsctl del-port br-int "$($i.name)" }