Change-Id: Ib80d95431d2b953ea7fee0c74be4abc619f6d5c5 backport: mitaka Closes-Bug: #1517303
452 lines
15 KiB
ReStructuredText
452 lines
15 KiB
ReStructuredText
===============================
|
||
Hyper-V virtualization platform
|
||
===============================
|
||
|
||
It is possible to use Hyper-V as a compute node within an OpenStack
|
||
Deployment. The ``nova-compute`` service runs as ``openstack-compute``,
|
||
a 32-bit service directly upon the Windows platform with the Hyper-V
|
||
role enabled. The necessary Python components as well as the
|
||
``nova-compute`` service are installed directly onto the Windows
|
||
platform. Windows Clustering Services are not needed for functionality
|
||
within the OpenStack infrastructure.
|
||
The use of the Windows Server 2012 platform is recommend for the best
|
||
experience and is the platform for active development.
|
||
The following Windows platforms have been tested as compute nodes:
|
||
|
||
Windows Server 2012 and Windows Server 2012 R2
|
||
Server and Core (with the Hyper-V role enabled), and Hyper-V Server
|
||
|
||
Hyper-V configuration
|
||
~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
The only OpenStack services required on a Hyper-V node are ``nova-compute``
|
||
and ``neutron-hyperv-agent``. Regarding the resources needed for this
|
||
host you have to consider that Hyper-V will require 16 GB - 20 GB of
|
||
disk space for the OS itself, including updates. Two NICs are required,
|
||
one connected to the management network and one to the guest data network.
|
||
|
||
The following sections discuss how to prepare the Windows Hyper-V
|
||
node for operation as an OpenStack compute node. Unless stated otherwise,
|
||
any configuration information should work for the Windows 2012 and
|
||
2012 R2 platforms.
|
||
|
||
Local storage considerations
|
||
----------------------------
|
||
|
||
The Hyper-V compute node needs to have ample storage for storing the
|
||
virtual machine images running on the compute nodes. You may use a single
|
||
volume for all, or partition it into an OS volume and VM volume.
|
||
|
||
.. _configure-ntp-windows:
|
||
|
||
Configure NTP
|
||
-------------
|
||
|
||
Network time services must be configured to ensure proper operation
|
||
of the OpenStack nodes. To set network time on your Windows host you
|
||
must run the following commands:
|
||
|
||
.. code-block:: bat
|
||
|
||
C:\>net stop w32time
|
||
C:\>w32tm /config /manualpeerlist:pool.ntp.org,0x8 /syncfromflags:MANUAL
|
||
C:\>net start w32time
|
||
|
||
Keep in mind that the node will have to be time synchronized with
|
||
the other nodes of your OpenStack environment, so it is important to use
|
||
the same NTP server. Note that in case of an Active Directory environment,
|
||
you may do this only for the AD Domain Controller.
|
||
|
||
Configure Hyper-V virtual switching
|
||
-----------------------------------
|
||
|
||
Information regarding the Hyper-V virtual Switch can be located here:
|
||
http://technet.microsoft.com/en-us/library/hh831823.aspx
|
||
|
||
To quickly enable an interface to be used as a Virtual Interface the
|
||
following PowerShell may be used:
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> $if = Get-NetIPAddress -IPAddress 192* | Get-NetIPInterface
|
||
PS C:\> New-VMSwitch -NetAdapterName $if.ifAlias -Name YOUR_BRIDGE_NAME -AllowManagementOS $false
|
||
|
||
.. note::
|
||
|
||
It is very important to make sure that when you are using a Hyper-V
|
||
node with only 1 NIC the -AllowManagementOS option is set on ``True``,
|
||
otherwise you will lose connectivity to the Hyper-V node.
|
||
|
||
Enable iSCSI initiator service
|
||
------------------------------
|
||
|
||
To prepare the Hyper-V node to be able to attach to volumes provided by
|
||
cinder you must first make sure the Windows iSCSI initiator service is
|
||
running and started automatically.
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> Set-Service -Name MSiSCSI -StartupType Automatic
|
||
PS C:\> Start-Service MSiSCSI
|
||
|
||
Configure shared nothing live migration
|
||
---------------------------------------
|
||
|
||
Detailed information on the configuration of live migration can be found
|
||
here: http://technet.microsoft.com/en-us/library/jj134199.aspx
|
||
|
||
The following outlines the steps of shared nothing live migration.
|
||
|
||
#. The target host ensures that live migration is enabled and properly
|
||
configured in Hyper-V.
|
||
#. The target host checks if the image to be migrated requires a base
|
||
VHD and pulls it from the Image service if not already available on
|
||
the target host.
|
||
#. The source host ensures that live migration is enabled and properly
|
||
configured in Hyper-V.
|
||
#. The source host initiates a Hyper-V live migration.
|
||
#. The source host communicates to the manager the outcome of the operation.
|
||
|
||
The following three configuration options are needed in order to support
|
||
Hyper-V live migration and must be added to your ``nova.conf`` on the Hyper-V
|
||
compute node:
|
||
|
||
* This is needed to support shared nothing Hyper-V live migrations.
|
||
It is used in ``nova/compute/manager.py``.
|
||
|
||
.. code-block:: ini
|
||
|
||
instances_shared_storage = False
|
||
|
||
* This flag is needed to support live migration to hosts with different CPU
|
||
features. This flag is checked during instance creation in order to limit
|
||
the CPU features used by the VM.
|
||
|
||
.. code-block:: ini
|
||
|
||
limit_cpu_features = True
|
||
|
||
* This option is used to specify where instances are stored on disk.
|
||
|
||
.. code-block:: ini
|
||
|
||
instances_path = DRIVELETTER:\PATH\TO\YOUR\INSTANCES
|
||
|
||
Additional Requirements:
|
||
|
||
* Hyper-V 2012 R2 or Windows Server 2012 R2 with Hyper-V role enabled
|
||
* A Windows domain controller with the Hyper-V compute nodes as domain members
|
||
* The instances_path command-line option/flag needs to be the same on all hosts
|
||
* The ``openstack-compute`` service deployed with the setup must run with
|
||
domain credentials. You can set the service credentials with:
|
||
|
||
.. code-block:: bat
|
||
|
||
C:\>sc config openstack-compute obj="DOMAIN\username" password="password"
|
||
|
||
How to setup live migration on Hyper-V
|
||
--------------------------------------
|
||
|
||
To enable 'shared nothing live' migration, run the 3 PowerShell
|
||
instructions below on each Hyper-V host:
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> Enable-VMMigration
|
||
PS C:\> Set-VMMigrationNetwork IP_ADDRESS
|
||
PS C:\> Set-VMHost -VirtualMachineMigrationAuthenticationTypeKerberos
|
||
|
||
.. note::
|
||
|
||
Please replace the ``IP_ADDRESS`` with the address of the interface
|
||
which will provide live migration.
|
||
|
||
Additional Reading
|
||
------------------
|
||
|
||
This article clarifies the various live migration options in Hyper-V:
|
||
|
||
http://ariessysadmin.blogspot.ro/2012/04/hyper-v-live-migration-of-windows.html
|
||
|
||
Install nova-compute using OpenStack Hyper-V installer
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
In case you want to avoid all the manual setup, you can use Cloudbase
|
||
Solutions' installer. You can find it here:
|
||
|
||
https://www.cloudbase.it/downloads/HyperVNovaCompute_Beta.msi
|
||
|
||
The tool installs an independent Python environment in order to avoid
|
||
conflicts with existing applications, and dynamically generates a
|
||
``nova.conf`` file based on the parameters provided by you.
|
||
|
||
The tool can also be used for an automated and unattended mode for
|
||
deployments on a massive number of servers. More details about how
|
||
to use the installer and its features can be found here:
|
||
|
||
https://www.cloudbase.it
|
||
|
||
.. _windows-requirements:
|
||
|
||
Requirements
|
||
~~~~~~~~~~~~
|
||
|
||
Python
|
||
------
|
||
|
||
Python 2.7 32bit must be installed as most of the libraries are not
|
||
working properly on the 64bit version.
|
||
|
||
**Setting up Python prerequisites**
|
||
|
||
#. Download and install Python 2.7 using the MSI installer from here:
|
||
|
||
http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> $src = "http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi"
|
||
PS C:\> $dest = "$env:temp\python-2.7.3.msi"
|
||
PS C:\> Invoke-WebRequest –Uri $src –OutFile $dest
|
||
PS C:\> Unblock-File $dest
|
||
PS C:\> Start-Process $dest
|
||
|
||
#. Make sure that the ``Python`` and ``Python\Scripts`` paths are set up
|
||
in the ``PATH`` environment variable.
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> $oldPath = [System.Environment]::GetEnvironmentVariable("Path")
|
||
PS C:\> $newPath = $oldPath + ";C:\python27\;C:\python27\Scripts\"
|
||
PS C:\> [System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::User
|
||
|
||
Python dependencies
|
||
-------------------
|
||
|
||
The following packages need to be downloaded and manually installed:
|
||
|
||
setuptools
|
||
http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11.win32-py2.7.exe
|
||
|
||
pip
|
||
https://pip.pypa.io/en/latest/installing/
|
||
|
||
PyMySQL
|
||
http://codegood.com/download/10/
|
||
|
||
PyWin32
|
||
http://sourceforge.net/projects/pywin32/files/pywin32/Build%20217/pywin32-217.win32-py2.7.exe
|
||
|
||
Greenlet
|
||
http://www.lfd.uci.edu/~gohlke/pythonlibs/#greenlet
|
||
|
||
PyCryto
|
||
http://www.voidspace.org.uk/downloads/pycrypto26/pycrypto-2.6.win32-py2.7.exe
|
||
|
||
The following packages must be installed with pip:
|
||
|
||
* ecdsa
|
||
* amqp
|
||
* wmi
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> pip install ecdsa
|
||
PS C:\> pip install amqp
|
||
PS C:\> pip install wmi
|
||
|
||
Other dependencies
|
||
------------------
|
||
|
||
``qemu-img`` is required for some of the image related operations.
|
||
You can get it from here: http://qemu.weilnetz.de/.
|
||
You must make sure that the ``qemu-img`` path is set in the
|
||
PATH environment variable.
|
||
|
||
Some Python packages need to be compiled, so you may use MinGW or
|
||
Visual Studio. You can get MinGW from here:
|
||
http://sourceforge.net/projects/mingw/.
|
||
You must configure which compiler is to be used for this purpose by using the
|
||
``distutils.cfg`` file in ``$Python27\Lib\distutils``, which can contain:
|
||
|
||
.. code-block:: ini
|
||
|
||
[build]
|
||
compiler = mingw32
|
||
|
||
As a last step for setting up MinGW, make sure that the MinGW binaries'
|
||
directories are set up in PATH.
|
||
|
||
Install nova-compute
|
||
~~~~~~~~~~~~~~~~~~~~
|
||
|
||
Download the nova code
|
||
----------------------
|
||
|
||
#. Use Git to download the necessary source code.
|
||
The installer to run Git on Windows can be downloaded here:
|
||
|
||
https://github.com/msysgit/msysgit/releases/download/Git-1.9.2-preview20140411/Git-1.9.2-preview20140411.exe
|
||
|
||
#. Download the installer. Once the download is complete,
|
||
run the installer and follow the prompts in the installation wizard.
|
||
The default should be acceptable for the purposes of this guide.
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> $src = "https://github.com/msysgit/msysgit/releases/download/Git-1.9.2-preview20140411/Git-1.9.2-preview20140411.exe"
|
||
PS C:\> $dest = "$env:temp\Git-1.9.2-preview20140411.exe"
|
||
PS C:\> Invoke-WebRequest –Uri $src –OutFile $dest
|
||
PS C:\> Unblock-File $dest
|
||
PS C:\> Start-Process $dest
|
||
|
||
#. Run the following to clone the nova code.
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> git.exe clone https://git.openstack.org/openstack/nova
|
||
|
||
Install nova-compute service
|
||
----------------------------
|
||
|
||
To install ``nova-compute``, run:
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> cd c:\nova
|
||
PS C:\> python setup.py install
|
||
|
||
Configure nova-compute
|
||
----------------------
|
||
|
||
The ``nova.conf`` file must be placed in ``C:\etc\nova`` for running
|
||
OpenStack on Hyper-V. Below is a sample ``nova.conf`` for Windows:
|
||
|
||
.. code-block:: ini
|
||
|
||
[DEFAULT]
|
||
auth_strategy = keystone
|
||
image_service = nova.image.glance.GlanceImageService
|
||
compute_driver = nova.virt.hyperv.driver.HyperVDriver
|
||
volume_api_class = nova.volume.cinder.API
|
||
fake_network = true
|
||
instances_path = C:\Program Files (x86)\OpenStack\Instances
|
||
glance_api_servers = IP_ADDRESS:9292
|
||
use_cow_images = true
|
||
force_config_drive = false
|
||
injected_network_template = C:\Program Files (x86)\OpenStack\Nova\etc\interfaces.template
|
||
policy_file = C:\Program Files (x86)\OpenStack\Nova\etc\policy.json
|
||
mkisofs_cmd = C:\Program Files (x86)\OpenStack\Nova\bin\mkisofs.exe
|
||
allow_resize_to_same_host = true
|
||
running_deleted_instance_action = reap
|
||
running_deleted_instance_poll_interval = 120
|
||
resize_confirm_window = 5
|
||
resume_guests_state_on_host_boot = true
|
||
rpc_response_timeout = 1800
|
||
lock_path = C:\Program Files (x86)\OpenStack\Log\
|
||
rpc_backend = nova.openstack.common.rpc.impl_kombu
|
||
rabbit_host = IP_ADDRESS
|
||
rabbit_port = 5672
|
||
rabbit_userid = guest
|
||
rabbit_password = Passw0rd
|
||
logdir = C:\Program Files (x86)\OpenStack\Log\
|
||
logfile = nova-compute.log
|
||
instance_usage_audit = true
|
||
instance_usage_audit_period = hour
|
||
use_neutron = True
|
||
[neutron]
|
||
url = http://IP_ADDRESS:9696
|
||
auth_strategy = keystone
|
||
admin_tenant_name = service
|
||
admin_username = neutron
|
||
admin_password = Passw0rd
|
||
admin_auth_url = http://IP_ADDRESS:35357/v2.0
|
||
[hyperv]
|
||
vswitch_name = newVSwitch0
|
||
limit_cpu_features = false
|
||
config_drive_inject_password = false
|
||
qemu_img_cmd = C:\Program Files (x86)\OpenStack\Nova\bin\qemu-img.exe
|
||
config_drive_cdrom = true
|
||
dynamic_memory_ratio = 1
|
||
enable_instance_metrics_collection = true
|
||
[rdp]
|
||
enabled = true
|
||
html5_proxy_base_url = https://IP_ADDRESS:4430
|
||
|
||
The table :ref:`nova-hyperv` contains a reference of all options for hyper-v.
|
||
|
||
Prepare images for use with Hyper-V
|
||
-----------------------------------
|
||
|
||
Hyper-V currently supports only the VHD and VHDX file format for virtual
|
||
machine instances. Detailed instructions for installing virtual machines
|
||
on Hyper-V can be found here:
|
||
|
||
http://technet.microsoft.com/en-us/library/cc772480.aspx
|
||
|
||
Once you have successfully created a virtual machine, you can then upload
|
||
the image to glance using the native glance-client:
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> glance image-create --name "VM_IMAGE_NAME" --is-public False
|
||
--container-format bare --disk-format vhd
|
||
|
||
.. note::
|
||
|
||
VHD and VHDX files sizes can be bigger than their maximum internal size,
|
||
as such you need to boot instances using a flavor with a slightly bigger
|
||
disk size than the internal size of the disk file.
|
||
To create VHDs, use the following PowerShell cmdlet:
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> New-VHD DISK_NAME.vhd -SizeBytes VHD_SIZE
|
||
|
||
Inject interfaces and routes
|
||
----------------------------
|
||
|
||
The ``interfaces.template`` file describes the network interfaces and routes
|
||
available on your system and how to activate them. You can specify the
|
||
location of the file with the ``injected_network_template`` configuration
|
||
option in ``/etc/nova/nova.conf``.
|
||
|
||
.. code-block:: ini
|
||
|
||
injected_network_template = PATH_TO_FILE
|
||
|
||
A default template exists in ``nova/virt/interfaces.template``.
|
||
|
||
Run Compute with Hyper-V
|
||
------------------------
|
||
|
||
To start the ``nova-compute`` service, run this command from a console
|
||
in the Windows server:
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> C:\Python27\python.exe c:\Python27\Scripts\nova-compute --config-file c:\etc\nova\nova.conf
|
||
|
||
Troubleshoot Hyper-V configuration
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
* I ran the :command:`nova-manage service list` command from my controller;
|
||
however, I'm not seeing smiley faces for Hyper-V compute nodes,
|
||
what do I do?
|
||
|
||
Verify that you are synchronized with a network time source.
|
||
For instructions about how to configure NTP on your Hyper-V compute node,
|
||
see :ref:`configure-ntp-windows`.
|
||
|
||
* How do I restart the compute service?
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> net stop nova-compute && net start nova-compute
|
||
|
||
* How do I restart the iSCSI initiator service?
|
||
|
||
.. code-block:: powershell
|
||
|
||
PS C:\> net stop msiscsi && net start msiscsi
|