深入理解OpenStack自动化部署
  • 前言
  • 初识PuppetOpenstack
    • 相关约定
    • 术语表
    • PuppetOpenstack项目简介
  • Puppet开发基础
    • 关于Puppet
    • Puppet核心概念
    • 理解Hiera
    • 准备开发测试环境
  • OpenStack基础服务模块
    • puppet-apache模块
    • puppet-memcached模块
    • puppet-sysctl模块
    • puppet-rsync模块
    • puppet-xinetd模块
    • puppet-rabbitmq模块
    • puppet-firewall模块
    • puppet-mysql模块
    • puppet-vcsrepo模块
    • puppet-mongodb模块
    • puppet-ceph
  • Openstack服务模块
    • OpenStack模块代码结构
    • puppet-keystone模块
    • puppet-nova
    • puppet-neutron
    • puppet-glance
    • puppet-horizon
    • puppet-ceilometer
    • puppet-cinder
    • puppet-tempest
    • puppet-heat
    • puppet-swift
    • puppet-trove
    • puppet-sahara
    • puppet-manila
    • puppet-rally
    • puppet-designate
    • puppet-aodh模块
  • PuppetOpenstack公共库和工具类模块
    • puppet-oslo
    • puppet-vswitch模块
    • puppet-openstacklib
    • puppet-openstack-integration
    • puppet-openstack-specs
    • puppet-openstack-cookiebutter
    • puppet-modulesync-configs
    • puppet-openstack_spec_helper
    • puppet-stdlib
    • puppet-openstack_extras
  • 最佳实践
    • 模块管理
    • Hiera
    • 提交规范
    • 正确使用环境
    • 转发层规范
    • 代码风格
    • Standalone vs C\/S 模式
    • Puppet版本的选择
    • Puppet4的新特性和变化
    • Puppet的能与不能
  • 其他部署工具
    • Fuel
    • Kolla
    • TripleO
    • Packstack
    • OSA
    • DevStack
    • 编写一个定制化部署工具
  • 结语
Powered by GitBook
On this page
  • 基础知识
  • 先睹为快
  • 核心代码讲解
  • class manila
  • class manila::db
  • class manila::api
  • class manila::scheduler
  • class manila::share
  • class manila::backends
  • define manila::backend::glusternfs
  • 小结
  • 动手练习

Was this helpful?

  1. Openstack服务模块

puppet-manila

Previouspuppet-saharaNextpuppet-rally

Last updated 6 years ago

Was this helpful?

本节作者:周维宇 阅读级别:选读 阅读时间:2h

基础知识

manila 是一个 ''Shared Filesystems as a service” 服务,通过driver不同的后端共享存储系统来给提供共享文件存储

manila 服务有下面这些组件:

  • manila-api,对外提供 REST-ful 的 API

  • manila-scheduler,根据预定的策略选择合适的manila-share节点来处理用户请求

  • manila-share,通过driver处理实际的创建创建共享卷等请求

先睹为快

部署 manila 服务需要依赖于其他的 OpenStack 组件,因此建议先部署核心的 OpenStack 组件,最后部署 manila 服务。另外由于我们选用nfs作为存储后端,所以你要先部署一个nfs server。

  # 请根据你的实际部署情况修改参数
  class { 'manila':
    sql_connection  => 'mysql://manila:secret_manila_password@openstack-controller.example.com/manila',
    rpc_backend     => 'rabbit',
    rabbit_password => 'secret_rpc_password_for_manila',
    rabbit_host     => 'openstack-controller.example.com',
    verbose         => true,
  }

  class {'manila::api':
    keystone_password  => $keystone_password,
    keystone_auth_host => $keystone_auth_host,
    os_region_name     => 'DEFAULT'
  }
  class {'manila::scheduler':
    scheduler_driver => 'manila.scheduler.filter_scheduler.FilterScheduler',
  }
  class {'::manila::share':
    package_ensure => $package_ensure
  }
  manila::backend::glusternfs {'nfs':
    glusterfs_target              => [remoteuser@]<volserver>:/<volid>,
    glusterfs_mount_point_base    => '/nfs',
    glusterfs_nfs_server_type     => 'Gluster',
    glusterfs_path_to_private_key => 'ssh_private_key_path',
    glusterfs_ganesha_server_ip,  => 'ganesha_server_ip',

核心代码讲解

class manila

manila 这个类用于安装 openstack-manila 基础包,同时使用 manila_config来管理日志/消息队列/SSL等参数

例如,下面的代码使用 manila_config 配置了SSL相关的参数:

  # SSL Options
  if $use_ssl {
    manila_config {
      'DEFAULT/ssl_cert_file' : value => $cert_file;
      'DEFAULT/ssl_key_file' :  value => $key_file;
    }
    if $ca_file {
      manila_config { 'DEFAULT/ssl_ca_file' :
        value => $ca_file,
      }
    } else {
      manila_config { 'DEFAULT/ssl_ca_file' :
        ensure => absent,
      }
    }
  } else {
    manila_config {
      'DEFAULT/ssl_cert_file' : ensure => absent;
      'DEFAULT/ssl_key_file' :  ensure => absent;
      'DEFAULT/ssl_ca_file' :   ensure => absent;
    }
  }

class manila::db

调用manila_config来进行数据库相关的配置,比较有意思的是下面这段代码

  validate_re($database_connection_real,
    '^(sqlite|mysql(\+pymysql)?|postgresql):\/\/(\S+:\S+@\S+\/\S+)?')

  # 根据不同的数据库后端来执行不同的操作
  if $database_connection_real {
    case $database_connection_real {
      /^mysql(\+pymysql)?:\/\//: {
        require 'mysql::bindings'
        require 'mysql::bindings::python'
        if $database_connection_real =~ /^mysql\+pymysql/ {
          $backend_package = $::manila::params::pymysql_package_name
        } else {
          $backend_package = false
        }
      }
      /^postgresql:\/\//: {
        $backend_package = false
        require 'postgresql::lib::python'
      }
      /^sqlite:\/\//: {
        $backend_package = $::manila::params::sqlite_package_name
      }
      default: {
        fail('Unsupported backend configured')
      }
    }

class manila::api

除了传统的装软件包/改配置/启动服务三板斧,没有别的好讲的

class manila::scheduler

同上

class manila::share

同上

class manila::backends

配置开启哪些存储后端

class manila::backends (
  $enabled_share_backends = undef
) {

  # Maybe this could be extented to dynamicly find the enabled names
  manila_config {
    'DEFAULT/enabled_share_backends': value => join($enabled_share_backends, ',');
  }

}

define manila::backend::glusternfs

  # 通过manila_config来修改manila配置
  manila_config {
    "${share_backend_name}/share_backend_name":            value => $share_backend_name;
    "${share_backend_name}/share_driver":                  value => $share_driver;
    "${share_backend_name}/glusterfs_target":              value => $glusterfs_target;
    "${share_backend_name}/glusterfs_mount_point_base":    value => $glusterfs_mount_point_base;
    "${share_backend_name}/glusterfs_nfs_server_type":     value => $glusterfs_nfs_server_type;
    "${share_backend_name}/glusterfs_path_to_private_key": value => $glusterfs_path_to_private_key;
    "${share_backend_name}/glusterfs_ganesha_server_ip":   value => $glusterfs_ganesha_server_ip;
  }

小结

manila 服务的部署比较简单,使用 puppet 能够方便的部署起 manila 服务起来,如果想进一步学习 manila 服务的使用,可以参考 openstack 官方的文档。

动手练习

  • 部署 manila 服务,创建两台云主机和一个共享卷并挂载

基础知识 - 快速了解 manila 服务
先睹为快 - 一言不合,立马动手?
核心代码讲解 - 如何管理 manila 服务?
class manila
class manila::db
class manila::api
class manila::scheduler
class manila::share
class manila::backends
define manila::backend::glusternfs
小结
动手练习