From 812e03f75e0ccc2c588b8918d0ad2bcaf1d7fb23 Mon Sep 17 00:00:00 2001 From: alecorps Date: Mon, 13 Sep 2021 14:38:48 +0200 Subject: [PATCH] Add support for VMware First Class Disk (FCD) An FCD, also known as an Improved Virtual Disk (IVD) or Managed Virtual Disk, is a named virtual disk independent of a virtual machine. Using FCDs for Cinder volumes eliminates the need for shadow virtual machines. This patch adds Kolla support. Change-Id: Ic0b66269e6d32762e786c95cf6da78cb201d2765 --- ansible/group_vars/all.yml | 1 + ansible/roles/cinder/defaults/main.yml | 2 + ansible/roles/cinder/tasks/precheck.yml | 1 + ansible/roles/cinder/templates/cinder.conf.j2 | 11 ++++- doc/source/reference/compute/vmware-guide.rst | 47 +++++++++++++++++-- etc/kolla/globals.yml | 1 + ...d-vmware-fcd-support-11a23ffc28bd541b.yaml | 4 ++ 7 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/add-vmware-fcd-support-11a23ffc28bd541b.yaml diff --git a/ansible/group_vars/all.yml b/ansible/group_vars/all.yml index e1dc86f0e9..0613bf15b5 100644 --- a/ansible/group_vars/all.yml +++ b/ansible/group_vars/all.yml @@ -933,6 +933,7 @@ gnocchi_metric_datadir_volume: "gnocchi" ################################# cinder_backend_ceph: "no" cinder_backend_vmwarevc_vmdk: "no" +cinder_backend_vmware_vstorage_object: "no" cinder_volume_group: "cinder-volumes" cinder_target_helper: "{{ 'lioadm' if ansible_facts.os_family == 'RedHat' else 'tgtadm' }}" # Valid options are [ '', redis, etcd ] diff --git a/ansible/roles/cinder/defaults/main.yml b/ansible/roles/cinder/defaults/main.yml index c750672876..7e07a72511 100644 --- a/ansible/roles/cinder/defaults/main.yml +++ b/ansible/roles/cinder/defaults/main.yml @@ -218,6 +218,8 @@ cinder_backends: enabled: "{{ enable_cinder_backend_hnas_nfs | bool }}" - name: "vmwarevc-vmdk" enabled: "{{ cinder_backend_vmwarevc_vmdk | bool }}" + - name: "vmware-vstorage-object" + enabled: "{{ cinder_backend_vmware_vstorage_object | bool }}" - name: "QuobyteHD" enabled: "{{ enable_cinder_backend_quobyte | bool }}" diff --git a/ansible/roles/cinder/tasks/precheck.yml b/ansible/roles/cinder/tasks/precheck.yml index 810bbaff26..9c937ffc31 100644 --- a/ansible/roles/cinder/tasks/precheck.yml +++ b/ansible/roles/cinder/tasks/precheck.yml @@ -35,6 +35,7 @@ - not enable_cinder_backend_nfs | bool - not cinder_backend_ceph | bool - not cinder_backend_vmwarevc_vmdk | bool + - not cinder_backend_vmware_vstorage_object | bool - not enable_cinder_backend_quobyte | bool - name: Checking LVM volume group exists for Cinder diff --git a/ansible/roles/cinder/templates/cinder.conf.j2 b/ansible/roles/cinder/templates/cinder.conf.j2 index c4d99c6adc..f1b1d571ca 100644 --- a/ansible/roles/cinder/templates/cinder.conf.j2 +++ b/ansible/roles/cinder/templates/cinder.conf.j2 @@ -175,7 +175,6 @@ hnas_svc0_hdp = {{ hnas_nfs_svc0_hdp }} {% if cinder_backend_vmwarevc_vmdk | bool %} [vmwarevc-vmdk] -volume_backend_name=vmwarevc-vmdk volume_driver = cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver vmware_host_ip = {{ vmware_vcenter_host_ip }} vmware_host_username = {{ vmware_vcenter_host_username }} @@ -184,6 +183,16 @@ vmware_cluster_name = {{ vmware_vcenter_cluster_name }} vmware_insecure = True {% endif %} +{% if cinder_backend_vmware_vstorage_object | bool %} +[vmware-vstorage-object] +volume_driver = cinder.volume.drivers.vmware.fcd.VMwareVStorageObjectDriver +vmware_host_ip = {{ vmware_vcenter_host_ip }} +vmware_host_username = {{ vmware_vcenter_host_username }} +vmware_host_password = {{ vmware_vcenter_host_password }} +vmware_cluster_name = {{ vmware_vcenter_cluster_name }} +vmware_insecure = True +{% endif %} + {% if enable_cinder_backend_quobyte | bool %} [QuobyteHD] volume_driver = cinder.volume.drivers.quobyte.QuobyteDriver diff --git a/doc/source/reference/compute/vmware-guide.rst b/doc/source/reference/compute/vmware-guide.rst index b03fd8f286..a2b6540ebc 100644 --- a/doc/source/reference/compute/vmware-guide.rst +++ b/doc/source/reference/compute/vmware-guide.rst @@ -29,7 +29,18 @@ For VMware DVS: * neutron-metadata-agent Kolla can deploy the Glance and Cinder services using VMware datastore as their -backend. Ceilometer metering for vSphere is also supported. +backend. +You can create Cinder volumes as VMDKs or as First Class Disks (FCDs). + +An FCD, also known as an Improved Virtual Disk (IVD) or Managed Virtual Disk, +is a named virtual disk independent of a virtual machine. +Using FCDs for Cinder volumes eliminates the need for shadow virtual machines. + +The FCD backend is offered in addition to the default VMDK backend. +If you use FCD as the backend driver for Cinder, you can use both FCD and +VMDK volumes in the same deployment. + +Ceilometer metering for vSphere is also supported. Because the `vmware-nsx `__ drivers for neutron use completely different architecture than other types of @@ -152,6 +163,16 @@ If you want to set VMware datastore as cinder backend, enable it in cinder_backend_vmwarevc_vmdk: "yes" vmware_datastore_name: "TestDatastore" +If you want to set VMware First Class Disk (FCD) datastore +as VMware vStorage Object backend, enable it in +``/etc/kolla/globals.yml``: + +.. code-block:: yaml + + enable_cinder: "yes" + cinder_backend_vmware_vstorage_object: "yes" + vmware_datastore_name: "TestDatastore" + If you want to set VMware datastore as glance backend, enable it in ``/etc/kolla/globals.yml``: @@ -295,7 +316,7 @@ Enable VMware nova-compute plugin and NSX-V neutron-server plugin in * enable_neutron_vpnaas: "yes" * enable_neutron_fwaas: "yes" -If you want to set VMware datastore as cinder backend, enable it in +If you want to set VMware VMDK datastore as cinder backend, enable it in ``/etc/kolla/globals.yml``: .. code-block:: yaml @@ -304,6 +325,16 @@ If you want to set VMware datastore as cinder backend, enable it in cinder_backend_vmwarevc_vmdk: "yes" vmware_datastore_name: "TestDatastore" +If you want to set VMware First Class Disk (FCD) datastore +as VMware vStorage Object backend, enable it in +``/etc/kolla/globals.yml``: + +.. code-block:: yaml + + enable_cinder: "yes" + cinder_backend_vmware_vstorage_object: "yes" + vmware_datastore_name: "TestDatastore" + If you want to set VMware datastore as glance backend, enable it in ``/etc/kolla/globals.yml``: @@ -397,7 +428,7 @@ Enable VMware nova-compute plugin and NSX-V neutron-server plugin in nova_compute_virt_type: "vmware" neutron_plugin_agent: "vmware_dvs" -If you want to set VMware datastore as Cinder backend, enable it in +If you want to set VMware VMDK datastore as cinder backend, enable it in ``/etc/kolla/globals.yml``: .. code-block:: yaml @@ -406,6 +437,16 @@ If you want to set VMware datastore as Cinder backend, enable it in cinder_backend_vmwarevc_vmdk: "yes" vmware_datastore_name: "TestDatastore" +If you want to set VMware First Class Disk (FCD) datastore +as VMware vStorage Object backend, enable it in +``/etc/kolla/globals.yml``: + +.. code-block:: yaml + + enable_cinder: "yes" + cinder_backend_vmware_vstorage_object: "yes" + vmware_datastore_name: "TestDatastore" + If you want to set VMware datastore as Glance backend, enable it in ``/etc/kolla/globals.yml``: diff --git a/etc/kolla/globals.yml b/etc/kolla/globals.yml index 59c74a745d..9ea3907990 100644 --- a/etc/kolla/globals.yml +++ b/etc/kolla/globals.yml @@ -521,6 +521,7 @@ # Enable / disable Cinder backends #cinder_backend_ceph: "no" #cinder_backend_vmwarevc_vmdk: "no" +#cinder_backend_vmware_vstorage_object: "no" #cinder_volume_group: "cinder-volumes" # Valid options are [ '', redis, etcd ] #cinder_coordination_backend: "{{ 'redis' if enable_redis|bool else 'etcd' if enable_etcd|bool else '' }}" diff --git a/releasenotes/notes/add-vmware-fcd-support-11a23ffc28bd541b.yaml b/releasenotes/notes/add-vmware-fcd-support-11a23ffc28bd541b.yaml new file mode 100644 index 0000000000..aa46d371f5 --- /dev/null +++ b/releasenotes/notes/add-vmware-fcd-support-11a23ffc28bd541b.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Adds support for the VMware FCD as Cinder volumes.