puppet-manila

  1. 基础知识 - 快速了解 manila 服务
  2. 先睹为快 - 一言不合,立马动手?
  3. 核心代码讲解 - 如何管理 manila 服务?
  4. 小结
  5. 动手练习

本节作者:周维宇
阅读级别:选读
阅读时间: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。

  1. # 请根据你的实际部署情况修改参数
  2. class { 'manila':
  3. sql_connection => 'mysql://manila:secret_manila_password@openstack-controller.example.com/manila',
  4. rpc_backend => 'rabbit',
  5. rabbit_password => 'secret_rpc_password_for_manila',
  6. rabbit_host => 'openstack-controller.example.com',
  7. verbose => true,
  8. }
  9. class {'manila::api':
  10. keystone_password => $keystone_password,
  11. keystone_auth_host => $keystone_auth_host,
  12. os_region_name => 'DEFAULT'
  13. }
  14. class {'manila::scheduler':
  15. scheduler_driver => 'manila.scheduler.filter_scheduler.FilterScheduler',
  16. }
  17. class {'::manila::share':
  18. package_ensure => $package_ensure
  19. }
  20. manila::backend::glusternfs {'nfs':
  21. glusterfs_target => [remoteuser@]<volserver>:/<volid>,
  22. glusterfs_mount_point_base => '/nfs',
  23. glusterfs_nfs_server_type => 'Gluster',
  24. glusterfs_path_to_private_key => 'ssh_private_key_path',
  25. glusterfs_ganesha_server_ip, => 'ganesha_server_ip',

核心代码讲解

class manila

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

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

  1. # SSL Options
  2. if $use_ssl {
  3. manila_config {
  4. 'DEFAULT/ssl_cert_file' : value => $cert_file;
  5. 'DEFAULT/ssl_key_file' : value => $key_file;
  6. }
  7. if $ca_file {
  8. manila_config { 'DEFAULT/ssl_ca_file' :
  9. value => $ca_file,
  10. }
  11. } else {
  12. manila_config { 'DEFAULT/ssl_ca_file' :
  13. ensure => absent,
  14. }
  15. }
  16. } else {
  17. manila_config {
  18. 'DEFAULT/ssl_cert_file' : ensure => absent;
  19. 'DEFAULT/ssl_key_file' : ensure => absent;
  20. 'DEFAULT/ssl_ca_file' : ensure => absent;
  21. }
  22. }

class manila::db

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

  1. validate_re($database_connection_real,
  2. '^(sqlite|mysql(\+pymysql)?|postgresql):\/\/(\S+:\S+@\S+\/\S+)?')
  3. # 根据不同的数据库后端来执行不同的操作
  4. if $database_connection_real {
  5. case $database_connection_real {
  6. /^mysql(\+pymysql)?:\/\//: {
  7. require 'mysql::bindings'
  8. require 'mysql::bindings::python'
  9. if $database_connection_real =~ /^mysql\+pymysql/ {
  10. $backend_package = $::manila::params::pymysql_package_name
  11. } else {
  12. $backend_package = false
  13. }
  14. }
  15. /^postgresql:\/\//: {
  16. $backend_package = false
  17. require 'postgresql::lib::python'
  18. }
  19. /^sqlite:\/\//: {
  20. $backend_package = $::manila::params::sqlite_package_name
  21. }
  22. default: {
  23. fail('Unsupported backend configured')
  24. }
  25. }

class manila::api

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

class manila::scheduler

同上

class manila::share

同上

class manila::backends

配置开启哪些存储后端

  1. class manila::backends (
  2. $enabled_share_backends = undef
  3. ) {
  4. # Maybe this could be extented to dynamicly find the enabled names
  5. manila_config {
  6. 'DEFAULT/enabled_share_backends': value => join($enabled_share_backends, ',');
  7. }
  8. }

define manila::backend::glusternfs

  1. # 通过manila_config来修改manila配置
  2. manila_config {
  3. "${share_backend_name}/share_backend_name": value => $share_backend_name;
  4. "${share_backend_name}/share_driver": value => $share_driver;
  5. "${share_backend_name}/glusterfs_target": value => $glusterfs_target;
  6. "${share_backend_name}/glusterfs_mount_point_base": value => $glusterfs_mount_point_base;
  7. "${share_backend_name}/glusterfs_nfs_server_type": value => $glusterfs_nfs_server_type;
  8. "${share_backend_name}/glusterfs_path_to_private_key": value => $glusterfs_path_to_private_key;
  9. "${share_backend_name}/glusterfs_ganesha_server_ip": value => $glusterfs_ganesha_server_ip;
  10. }

小结

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

动手练习

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