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;
}
Copy to Clipboard Toggle word wrap

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'
Copy to Clipboard Toggle word wrap

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),
    }
  }
Copy to Clipboard Toggle word wrap

这意味着将 Overcloud 配置为使用 NetApp 存储只需要几个步骤:

  1. environments/cinder-netapp-config.yaml 文件复制到本地位置,以便您可以编辑它:

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/cinder-netapp-config.yaml ~/templates/.
    Copy to Clipboard Toggle word wrap
  2. 编辑 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'
      Copy to Clipboard Toggle word wrap

      确保将 CinderEnableNetappBackend 设置为 true

  3. 在部署中包含 cinder-netapp-config.yaml 文件:

    $ openstack overcloud deploy --templates -e ~/templates/cinder-netapp-config.yaml
    Copy to Clipboard Toggle word wrap

这会将 NetApp 存储配置定义为 Overcloud 的 Hiera 数据的一部分。然后,Overcloud 使用这个 Hieradata 在核心配置期间配置 Cinder 的 NetApp 后端。

本例演示了 director 如何将来自认证供应商的存储组件与 Overcloud 的 Cinder 服务集成。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat