Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

第6章 実例

本章では、Red Hat OpenStack Platform の一部としてベンダーのソリューションを統合する実例を取り上げて説明します。

6.1. Cisco Nexus 1000V

Cisco Nexus 1000V は、仮想マシンアクセス用に設計されたネットワークスイッチです。また、VXLAN、ACL、IGMP スヌーピングを使用した高度なスイッチおよびセキュリティー機能を提供します。Cisco Nexus 1000V の ml2 ドライバーは networking-cisco リポジトリーに含まれており、Neutron サービスと共にインストールできます。

オーバークラウドのイメージには Neutron Puppet モジュール (puppet-neutron) が含まれており、このモジュールに、Neutron が Cisco Nexus 1000V を使用するように設定するためのクラス (neutron::plugins::ml2::cisco::nexus1000v) が含まれます。このクラスは、モジュールの manifests/plugins/ml2/cisco/nexus1000v.pp マニフェストに配置されています。このクラスは、デフォルトのパラメーターセットを使用しますが、このデフォルトパラメーターを上書きして neutron_plugin_ml2 ライブラリーを使用し、m2 プラグインが Cisco Nexus 1000V を使用するように設定することができます。

neutron_plugin_ml2 {
  'ml2/extension_drivers'                          : value => $extension_drivers;
  'ml2_cisco_n1kv/n1kv_vsm_ips'                    : value => $n1kv_vsm_ip;
  'ml2_cisco_n1kv/username'                        : value => $n1kv_vsm_username;
  'ml2_cisco_n1kv/password'                        : value => $n1kv_vsm_password;
  'ml2_cisco_n1kv/default_policy_profile'          : value => $default_policy_profile;
  'ml2_cisco_n1kv/default_vlan_network_profile'    : value => $default_vlan_network_profile;
  'ml2_cisco_n1kv/default_vxlan_network_profile'   : value => $default_vxlan_network_profile;
  'ml2_cisco_n1kv/poll_duration'                   : value => $poll_duration;
  'ml2_cisco_n1kv/http_pool_size'                  : value => $http_pool_size;
  'ml2_cisco_n1kv/http_timeout'                    : value => $http_timeout;
  'ml2_cisco_n1kv/sync_interval'                   : value => $sync_interval;
  'ml2_cisco_n1kv/max_vsm_retries'                 : value => $max_vsm_retries;
  'ml2_cisco_n1kv/restrict_policy_profiles'        : value => $restrict_policy_profiles;
  'ml2_cisco_n1kv/enable_vif_type_n1kv'            : value => $enable_vif_type_n1kv;
}

director の Heat テンプレートコレクションには、Cisco Nexus 1000V の Hiera データを設定するための環境ファイルと登録済みのテンプレートが含まれています。環境ファイルは、environments/cisco-n1kv-config.yaml に配置されており、以下のデフォルトの内容が含まれます。

resource_registry:
  OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/cisco-n1kv.yaml
  OS::TripleO::ComputeExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/cisco-n1kv.yaml

parameter_defaults:
  N1000vVSMIP: '192.0.2.50'
  N1000vMgmtGatewayIP: '192.0.2.1'
  N1000vVSMDomainID: '100'
  N1000vVSMHostMgmtIntf: 'br-ex'

resource_registry は、コントローラーとコンピュートノード (OS::TripleO::ControllerExtraConfigPre および OS::TripleO::ComputeExtraConfigPre) の事前設定リソースが puppet/extraconfig/pre_deploy/controller/cisco-n1kv.yaml を事前設定用のテンプレートとして使用するように設定します。parameter_defaults のセクションには、これらのリソースに渡すパラメーターの一部が含まれます。

デプロイメントにこの環境ファイルを追加すると Hiera データが定義され、設定中に Puppet が Neutron Puppet モジュールのパラメーターにこのデータを使用します。

Puppet 設定を実際に適用するのは、自動で開始されます。Heat テンプレートコレクションには、コントローラーとコンピュートノードを設定するコアの Puppet マニフェストセットが含まれます。これらのファイルには、Cisco Nexus 1000V Hiera データが設定されていることを検出するためのロジックが含まれます。デプロイメントに cisco-n1kv.yaml を含めることで、マニフェストに neutron::plugins::ml2::cisco::nexus1000v クラスと Cisco Nexus 1000V の VEM と VSM エージェントが追加されます。

  if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
    include neutron::plugins::ml2::cisco::nexus1000v

    class { 'neutron::agents::n1kv_vem':
      n1kv_source          => hiera('n1kv_vem_source', undef),
      n1kv_version         => hiera('n1kv_vem_version', undef),
    }

    class { 'n1k_vsm':
      n1kv_source       => hiera('n1kv_vsm_source', undef),
      n1kv_version      => hiera('n1kv_vsm_version', undef),
    }
  }

これは、オーバークラウドが Cisco Nexus 1000V のみを使用するように設定するには以下のステップが必要であるという意味です。

  1. environments/cisco-n1kv-config.yaml ファイルを編集できるように、ローカルの場所にコピーします。

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/cisco-n1kv-config.yaml ~/templates/.
  2. cisco-n1kv-config.yaml ファイルを編集します。

    • cisco-n1kv.yaml を参照する絶対パスを使用するように resource_registery セクションを変更します。
    • Cisco Nexus 1000V パラメーターを追加するように parameter_defaults セクションを変更します。参考として cisco-n1kv.yaml を参照してください。

      例:

      resource_registry:
        OS::TripleO::ControllerExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/controller/cisco-n1kv.yaml
        OS::TripleO::ComputeExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/controller/cisco-n1kv.yaml
      
      parameter_defaults:
        N1000vVSMIP: '192.0.2.50'
        N1000vMgmtGatewayIP: '192.0.2.1'
        N1000vVSMDomainID: '100'
        N1000vVSMHostMgmtIntf: 'br-ex'
        N1000vVSMUser: admin
        N1000vVSMPassword: p@55w0rd!
  3. デプロイメントに cisco-n1kv-config.yaml ファイルを追加します。

    $ openstack overcloud deploy --templates -e ~/templates/cisco-n1kv-config.yaml

これは、オーバークラウドの Hiera データの一部として Cisco Nexus 1000V 設定を定義します。次に、オーバークラウドはこの Hieradata を使用して、コアの設定中に Neutron の Nexus 1000V ml2 ドライバーを設定します。

このセクションでは、director が認定済みのベンダーからのネットワークコンポーネントとオーバークラウドの Neutron サービスを統合する方法について、実例を挙げて説明しました。

6.2. NetApp ストレージ

NetApp は、OpenStack ストレージのコンポーネントに統合するソリューションを複数提供します。以下の例では、ブロックストレージのバックエンドを提供するためにどのように NetApp Storage と Cinder を統合するかを示します。

Cinder のドライバーは、プロジェクト自体に含まれており、GitHub https://github.com/openstack/cinder で公開されています。NetApp のドライバーは、リポジトリーの cinder/volume/drivers/netapp/ ディレクトリーに配置されています。これは、ドライバーが Red Hat OpenStack Platform に自動で追加されることを意味します。

NetApp の設定は、オーバークラウドのイメージにも含まれる Cinder の Puppet モジュール (puppet-cinder) の中にあります。この設定が含まれる Puppet モジュールのマニフェストは manifests/backend/netapp.pp に配置されています。このマニフェストは cinder_config ライブラリーを使用して、netapp の設定を Cinder 設定ファイルに追加します。

cinder_config {
  "${name}/nfs_mount_options":            value => $nfs_mount_options;
  "${name}/volume_backend_name":          value => $volume_backend_name;
  "${name}/volume_driver":                value => 'cinder.volume.drivers.netapp.common.NetAppDriver';
  "${name}/netapp_login":                 value => $netapp_login;
  "${name}/netapp_password":              value => $netapp_password, secret => true;
  "${name}/netapp_server_hostname":       value => $netapp_server_hostname;
  "${name}/netapp_server_port":           value => $netapp_server_port;
  "${name}/netapp_size_multiplier":       value => $netapp_size_multiplier;
  "${name}/netapp_storage_family":        value => $netapp_storage_family;
  "${name}/netapp_storage_protocol":      value => $netapp_storage_protocol;
  "${name}/netapp_transport_type":        value => $netapp_transport_type;
  "${name}/netapp_vfiler":                value => $netapp_vfiler;
  "${name}/netapp_volume_list":           value => $netapp_volume_list;
  "${name}/netapp_vserver":               value => $netapp_vserver;
  "${name}/netapp_partner_backend_name":  value => $netapp_partner_backend_name;
  "${name}/expiry_thres_minutes":         value => $expiry_thres_minutes;
  "${name}/thres_avl_size_perc_start":    value => $thres_avl_size_perc_start;
  "${name}/thres_avl_size_perc_stop":     value => $thres_avl_size_perc_stop;
  "${name}/nfs_shares_config":            value => $nfs_shares_config;
  "${name}/netapp_copyoffload_tool_path": value => $netapp_copyoffload_tool_path;
  "${name}/netapp_controller_ips":        value => $netapp_controller_ips;
  "${name}/netapp_sa_password":           value => $netapp_sa_password, secret => true;
  "${name}/netapp_storage_pools":         value => $netapp_storage_pools;
  "${name}/netapp_eseries_host_type":     value => $netapp_eseries_host_type;
  "${name}/netapp_webservice_path":       value => $netapp_webservice_path;
}

director の Heat テンプレートコレクションには、NetApp Storage バックエンドの Hiera データを設定するための環境ファイルと登録済みのテンプレートが含まれています。環境ファイルは、environments/cinder-netapp-config.yaml に配置されており、以下のデフォルトの内容が含まれます。

resource_registry:
  OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml

parameter_defaults:
  CinderEnableNetappBackend: true
  CinderNetappBackendName: 'tripleo_netapp'
  CinderNetappLogin: ''
  CinderNetappPassword: ''
  CinderNetappServerHostname: ''
  CinderNetappServerPort: '80'
  CinderNetappSizeMultiplier: '1.2'
  CinderNetappStorageFamily: 'ontap_cluster'
  CinderNetappStorageProtocol: 'nfs'
  CinderNetappTransportType: 'http'
  CinderNetappVfiler: ''
  CinderNetappVolumeList: ''
  CinderNetappVserver: ''
  CinderNetappPartnerBackendName: ''
  CinderNetappNfsShares: ''
  CinderNetappNfsSharesConfig: '/etc/cinder/shares.conf'
  CinderNetappNfsMountOptions: ''
  CinderNetappCopyOffloadToolPath: ''
  CinderNetappControllerIps: ''
  CinderNetappSaPassword: ''
  CinderNetappStoragePools: ''
  CinderNetappEseriesHostType: 'linux_dm_mp'
  CinderNetappWebservicePath: '/devmgr/v2'

resource_registry は、コントローラーノード (OS::TripleO::ControllerExtraConfigPre) の事前設定リソースが puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml を事前設定用のテンプレートとして使用するように設定します。parameter_defaults のセクションには、これらのリソースに渡すパラメーターの一部が含まれます。

デプロイメントにこの環境ファイルを追加すると Hiera データが定義され、設定中に Puppet が Cinder Puppet モジュールのパラメーターにこのデータを使用します。

CinderEnableNetappBackend パラメーターにより、Puppet 設定の適用が実際に開始されるかが決まります。Heat テンプレートコレクションには、コントローラーノードを設定するコアの Puppet マニフェストセットが含まれます。これらのファイルには、cinder_enable_netapp_backend Hiera データが設定されているかどうかを検出するロジックが含まれます。Hiera データは、事前設定の CinderEnableNetappBackend パラメーターを使用して設定されます。デプロイメントに cinder-netapp-config.yaml を追加して CinderEnableNetappBackend: true をそのままにすると、コントローラーの Puppet マニフェストには cinder::backend::netapp クラスが追加され、環境ファイルからの Hiera データの値を渡します。

  if hiera('cinder_enable_netapp_backend', false) {
    $cinder_netapp_backend = hiera('cinder::backend::netapp::title')

    cinder_config {
      "${cinder_netapp_backend}/host": value => 'hostgroup';
    }

    if hiera('cinder::backend::netapp::nfs_shares', undef) {
      $cinder_netapp_nfs_shares = split(hiera('cinder::backend::netapp::nfs_shares', undef), ',')
    }

    cinder::backend::netapp { $cinder_netapp_backend :
      netapp_login                 => hiera('cinder::backend::netapp::netapp_login', undef),
      netapp_password              => hiera('cinder::backend::netapp::netapp_password', undef),
      netapp_server_hostname       => hiera('cinder::backend::netapp::netapp_server_hostname', undef),
      netapp_server_port           => hiera('cinder::backend::netapp::netapp_server_port', undef),
      netapp_size_multiplier       => hiera('cinder::backend::netapp::netapp_size_multiplier', undef),
      netapp_storage_family        => hiera('cinder::backend::netapp::netapp_storage_family', undef),
      netapp_storage_protocol      => hiera('cinder::backend::netapp::netapp_storage_protocol', undef),
      netapp_transport_type        => hiera('cinder::backend::netapp::netapp_transport_type', undef),
      netapp_vfiler                => hiera('cinder::backend::netapp::netapp_vfiler', undef),
      netapp_volume_list           => hiera('cinder::backend::netapp::netapp_volume_list', undef),
      netapp_vserver               => hiera('cinder::backend::netapp::netapp_vserver', undef),
      netapp_partner_backend_name  => hiera('cinder::backend::netapp::netapp_partner_backend_name', undef),
      nfs_shares                   => $cinder_netapp_nfs_shares,
      nfs_shares_config            => hiera('cinder::backend::netapp::nfs_shares_config', undef),
      netapp_copyoffload_tool_path => hiera('cinder::backend::netapp::netapp_copyoffload_tool_path', undef),
      netapp_controller_ips        => hiera('cinder::backend::netapp::netapp_controller_ips', undef),
      netapp_sa_password           => hiera('cinder::backend::netapp::netapp_sa_password', undef),
      netapp_storage_pools         => hiera('cinder::backend::netapp::netapp_storage_pools', undef),
      netapp_eseries_host_type     => hiera('cinder::backend::netapp::netapp_eseries_host_type', undef),
      netapp_webservice_path       => hiera('cinder::backend::netapp::netapp_webservice_path', undef),
    }
  }

これは、オーバークラウドが NetApp Storage のみを使用するように設定するには以下のステップが必要であるという意味です。

  1. environments/cinder-netapp-config.yaml ファイルを編集できるように、ローカルの場所にコピーします。

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/cinder-netapp-config.yaml ~/templates/.
  2. cinder-netapp-config.yaml ファイルを編集します。

    • cinder-netapp.yaml を参照する絶対パスを使用するように resource_registery セクションを変更します。
    • NetApp パラメーターを追加するように parameter_defaults セクションを変更します。参考として cinder-netapp.yaml を参照してください。

      例:

      resource_registry:
        OS::TripleO::ControllerExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
      
      parameter_defaults:
        CinderEnableNetappBackend: true
        CinderNetappBackendName: 'tripleo_netapp'
        CinderNetappLogin: 'admin'
        CinderNetappPassword: 'p@55w0rd!'
        CinderNetappServerHostname: 'netapp.example.com'
        CinderNetappServerPort: '80'
        CinderNetappSizeMultiplier: '1.2'
        CinderNetappStorageFamily: 'ontap_cluster'
        CinderNetappStorageProtocol: 'nfs'
        CinderNetappTransportType: 'http'
        CinderNetappNfsShares: '192.168.1.200:/storage1,192.168.1.200:/storage2'
        CinderNetappNfsSharesConfig: '/etc/cinder/shares.conf'
        CinderNetappEseriesHostType: 'linux_dm_mp'
        CinderNetappWebservicePath: '/devmgr/v2'

      CinderEnableNetappBackendtrue 設定のままにしておいてください。

  3. デプロイメントに cinder-netapp-config.yaml ファイルを追加します。

    $ openstack overcloud deploy --templates -e ~/templates/cinder-netapp-config.yaml

これは、オーバークラウドの Hiera データの一部として NetApp Storage 設定を定義します。次に、オーバークラウドはこの Hieradata を使用して、コアの設定中にCinder の NetApp バックエンドを設定します。

このセクションでは、director が認定済みのベンダーからのストレージコンポーネントとオーバークラウドの Cinder サービスを統合する方法について、実例を挙げて説明しました。