6.2. NetApp ストレージ
NetApp は、OpenStack ストレージコンポーネントと統合するための複数のソリューションを提供します。この例は、NetApp Storage を Cinder と統合して、ブロックストレージのバックエンドを提供する方法を示しています。
Cinder のドライバーはプロジェクト自体に含まれており、https://github.com/openstack/cinder の GitHub で公開されます。NetApp Storage 用のドライバーは、リポジトリーの cinder/volume/drivers/netapp/ ディレクトリーにあります。これは、ドライバーが Red Hat OpenStack Platform に自動的に含まれることを意味します。
NetApp の設定は、cinder (puppet-cinder)の Puppet モジュールに含まれています。このモジュールには、オーバークラウドイメージも含まれます。設定を含む Puppet モジュールのマニフェストは manifests/backend/netapp.pp にあります。このマニフェストは、cinder_config ライブラリーを使用して、Cinder 設定ファイルに netapp 設定を追加します。
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 ストレージバックエンド用の 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 は、事前設定で使用するテンプレートとして puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml を使用するように、コントローラーノードの事前設定リソース(OS::TripleO::ControllerExtraConfigPre)を設定します。parameter_defaults セクションには、これらのリソースに渡すパラメーターが含まれています。
デプロイメントにこの環境ファイルを含めると、Puppet が設定中に Cinder Puppet モジュールのパラメーターに使用する Hiera データを定義します。
Puppet 設定の実際のアプリケーションを起動するには、CinderEnableNetappBackend パラメーターにより異なります。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 を使用するようにオーバークラウドを設定するには、いくつかのステップのみが必要となります。
environments/cinder-netapp-config.yamlファイルをローカルの場所にコピーし、編集できるようにします。$ cp /usr/share/openstack-tripleo-heat-templates/environments/cinder-netapp-config.yaml ~/templates/.cinder-netapp-config.yamlファイルを編集します。-
resource_registeryセクションを変更して、cinder-netapp.yamlを参照する絶対パスを使用します。 parameter_defaultsセクションを変更して NetApp パラメーターを追加します。詳細は、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'CinderEnableNetappBackendはtrueに設定したままにしてください。
-
デプロイメントに
cinder-netapp-config.yamlファイルを追加します。$ openstack overcloud deploy --templates -e ~/templates/cinder-netapp-config.yaml
これは、オーバークラウドの Hiera データの一部として NetApp ストレージ設定を定義します。次に、オーバークラウドはこの Hieradata を使用して、コアの設定中に Cinder の NetApp バックエンドを設定します。
以下の例で、director が認定されたベンダーのストレージコンポーネントをオーバークラウドの Cinder サービスと統合する方法を実証します。