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.

Environnement de laboratoire

Mise en oeuvre des composants suivants n'est pas couverte par cet article de blog.

  • Serveur avec deux cartes réseaux. Premier carte réseau est utilisé en tant que management, le second est manié par Open vSwitch.
  • Contrôleur OpenStack, réseau provider, réseau self-service fonctionnants.
  • Infrastructure domaine Windows existante.

Installer Windows Server

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:
  1. Choisir un addresse IP pour l'interface réseau management: 8) Network Settings
  2. Activer la bureau à distance: 7) Remote Desktop
  3. Installer les mises à jour Windows: 6) Download and Install Updates
  4. Rejoindre un domain Windows parce-que le management à distance devient plus facile: 1) Domain/Workgroup

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

Open vSwitch

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>

Installateur OpenStack Nova compute

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.

  1. Custom Setup: Déselecter Neutron Hyper-V Agent. Sélecter OpenStack Nova Compute, Neutron OVS Agent, FreeRDP for Hyper-V.
  2. Virtual Switch (Neutron OVS Agent): Choose existing existing virtual switch: vSwitchOVS
  3. Basic Configuration: RDP console URL est l'hyperviseur-même dans une configuration noeud individuel, AMQP Transport URL montre un serveur RabbitMQ.
  4. Placement API: Compléter le formulaire conformémant à la configuration OpenStack.
  5. Neutron: Compléter le formulaire conformémant à la configuration OpenStack.
  6. Neutron Agents Configuration: OVS Network Type: vxlan, Tunneling local IP: <VXLAN_IPaddr>.

Alternativement, silent or unattended install est également disponible. Le processus d'installation manuelle peut être trouver dans le document OpenStack Hyper-V virtualization platform.

Application de correctifs à l'agent nova compute hyperv

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

Configuration provider network de l'agent neutron

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'
...

Installation du FreeRDP WebConnect

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.

  1. FreeRDP-WebConnect configuration: Tu peux activer Redirect HTTP connections to HTTPS su tu crées un certificat HTTPS approprié et tu écrase C:\Program Files\Cloudbase Solutions\FreeRDP-WebConnect\etc\server.cer avec cela.
  2. OpenStack configuration: Configure l'intégration OpenStack.

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

Paramètres du contrôleur OpenStack

Découvrez de nouveau noeud hyperviseur sur le contrôleur.

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

Nettoyer le pont OVS

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)"
}

Pas suivants

  • Signature du code Open vSwitch.
  • Plusieurs interfaces réseaux: teaming ou bonding.
  • Configuration grape Windows.
  • Configuration de la migration VM en direct.
  • Installation de cinder.