6.2. NetApp Storage
NetApp 为与 OpenStack 存储组件集成提供了多个解决方案。本例演示了 NetApp Storage 如何与 Cinder 集成,以便为块存储提供后端。
Cinder 的驱动程序包含在项目本身内,位于 https://github.com/openstack/cinder 的 GitHub 上提供。NetApp 存储的驱动程序位于存储库的 cinder/volume/drivers/netapp/ 目录中。这意味着 Red Hat OpenStack Platform 中自动包含这些驱动程序。
NetApp 的配置包含在 cinder 的 Puppet 模块(puppet-cinder)中,Overcloud 镜像还包含它。包含配置的 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 设置 Controller 节点的预配置资源(OS::TripleO::ControllerExtraConfigPre),以使用 puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml 作为用于预配置的模板。parameter_defaults 部分包含一些要传递给这些资源的参数。
在部署中包含此环境文件会定义层次结构数据,供 Puppet 在配置期间用于 Cinder Puppet 模块的参数。
启动 Puppet 配置的实际应用取决于 CinderEnableNetappBackend 参数。Heat 模板集合包含一组用于配置 Controller 节点的 Puppet 核心清单。这些文件包含检测是否设置了 cinder_enable_netapp_backend Hiera 数据的逻辑。Hiera 数据是使用预配置中的 CinderEnableNetappBackend 参数设置的。在部署中包括 cinder-netapp-config.yaml 并将 CinderEnableNetappBackend: true 保留为 true,这意味着 Controller Puppet 清单包含 cinder::backend::netapp 类,并从环境文件传递 Hiera data 值:
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),
}
}
这意味着将 Overcloud 配置为使用 NetApp 存储只需要几个步骤:
将
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
这会将 NetApp 存储配置定义为 Overcloud 的 Hiera 数据的一部分。然后,Overcloud 使用这个 Hieradata 在核心配置期间配置 Cinder 的 NetApp 后端。
本例演示了 director 如何将来自认证供应商的存储组件与 Overcloud 的 Cinder 服务集成。