Windows iSCSI volume driver

Windows iSCSI volume driver

Windows Server 2012 and Windows Storage Server 2012 offer an integrated iSCSI Target service that can be used with OpenStack Block Storage in your stack. Being entirely a software solution, consider it in particular for mid-sized networks where the costs of a SAN might be excessive.

The Windows Block Storage driver works with OpenStack Compute on any hypervisor. It includes snapshotting support and the boot from volume feature.

This driver creates volumes backed by fixed-type VHD images on Windows Server 2012 and dynamic-type VHDX on Windows Server 2012 R2, stored locally on a user-specified path. The system uses those images as iSCSI disks and exports them through iSCSI targets. Each volume has its own iSCSI target.

This driver has been tested with Windows Server 2012 and Windows Server R2 using the Server and Storage Server distributions.

Install the cinder-volume service as well as the required Python components directly onto the Windows node.

You may install and configure cinder-volume and its dependencies manually using the following guide or you may use the Cinder Volume Installer, presented below.

Installing using the OpenStack cinder volume installer

In case you want to avoid all the manual setup, you can use Cloudbase Solutions’ installer. You can find it at https://www.cloudbase.it/downloads/CinderVolumeSetup_Beta.msi. It installs an independent Python environment, in order to avoid conflicts with existing applications, dynamically generates a cinder.conf file based on the parameters provided by you.

cinder-volume will be configured to run as a Windows Service, which can be restarted using:

PS C:\> net stop cinder-volume ; net start cinder-volume

The installer can also be used in unattended mode. More details about how to use the installer and its features can be found at https://www.cloudbase.it.

Windows Server configuration

The required service in order to run cinder-volume on Windows is wintarget. This will require the iSCSI Target Server Windows feature to be installed. You can install it by running the following command:

PS C:\> Add-WindowsFeature
FS-iSCSITarget-ServerAdd-WindowsFeatureFS-iSCSITarget-Server

Note

The Windows Server installation requires at least 16 GB of disk space. The volumes hosted by this node need the extra space.

For cinder-volume to work properly, you must configure NTP as explained in Configure NTP.

Next, install the requirements as described in Requirements.

Getting the code

Git can be used to download the necessary source code. The installer to run Git on Windows can be downloaded here:

https://git-for-windows.github.io/

Once installed, run the following to clone the OpenStack Block Storage code:

PS C:\> git.exe clone https://git.openstack.org/openstack/cinder

Configure cinder-volume

The cinder.conf file may be placed in C:\etc\cinder. Below is a configuration sample for using the Windows iSCSI Driver:

[DEFAULT]
auth_strategy = keystone
volume_name_template = volume-%s
volume_driver = cinder.volume.drivers.windows.WindowsDriver
glance_api_servers = IP_ADDRESS:9292
rabbit_host = IP_ADDRESS
rabbit_port = 5672
sql_connection = mysql+pymysql://root:Passw0rd@IP_ADDRESS/cinder
windows_iscsi_lun_path = C:\iSCSIVirtualDisks
rabbit_password = Passw0rd
logdir = C:\OpenStack\Log\
image_conversion_dir = C:\ImageConversionDir
debug = True

The following table contains a reference to the only driver specific option that will be used by the Block Storage Windows driver:

Description of Windows configuration options
Configuration option = Default value Description
[DEFAULT]  
windows_iscsi_lun_path = C:\iSCSIVirtualDisks (String) Path to store VHD backed volumes

Run cinder-volume

After configuring cinder-volume using the cinder.conf file, you may use the following commands to install and run the service (note that you must replace the variables with the proper paths):

PS C:\> python $CinderClonePath\setup.py install
PS C:\> cmd /c C:\python27\python.exe c:\python27\Scripts\cinder-volume" --config-file $CinderConfPath

Reference material

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:

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.

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

  1. Download and install Python 2.7 using the MSI installer from here:

    python-2.7.3.msi download

    PS C:\> $src = "https://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
    
  2. Make sure that the Python and Python\Scripts paths are set up in the PATH environment variable.

    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
https://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
https://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
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:

[build]
compiler = mingw32

As a last step for setting up MinGW, make sure that the MinGW binaries’ directories are set up in PATH.

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.