oracle rac openstack,利用 Chef 实现 OpenStack 块存储多节点的自动化部署

定制和开发 Chef cookbook 实现部署多 Cinder LVM 节点

ICM 4.1 提供了方便快捷的方式允许用户定制自己的节点部署策略,同时也支持更新现有的配置策略到已经部署的节点上。 默认安装完 ICM 4.1 后,可以在 /opt/ibm/cmwo/chef-repo 目录找到 Chef 的 cookbook、role、recipe 以及 attribute 等相关目录。

ICM 4.1 的目前自带的 Cinder cookbook 支持用户创建一个指定大小的 Loop Device 作为 Cinder 的卷组。这个方法无法满足我们想将本地的整个硬盘或者整个分区作为目标卷,同时 Loop Device 的读写性能也无法和直接访问本地硬盘相比。

为了满足以上的需求,用户可以到目录/opt/ibm/cmwo/chef-repo/cookbooks/openstack-block-storage/下更改 attributes/default.rb 文件增加属性定义;然后在 recipes/volume.rb 文件中增加实现使用磁盘或者分区的处理逻辑。

首先我们需要定义两个默认的属性值。

use_local_disk: 指定是否采用 LVM 物理卷并指定本地硬盘的策略来创建 Cinder 卷组

local_disk: 指定具体利用哪个分区作为 Cinder 物理卷。

请参看如下代码改动:

.......

default['openstack']['block-storage']['volume']['create_volume_group'] = false

default['openstack']['block-storage']['volume']['iscsi_helper'] = 'tgtadm'

default['openstack']['block-storage']['volume']['iscsi_ip_address'] = node['ipaddress']

default['openstack']['block-storage']['volume']['iscsi_port'] = '3260'

default['openstack']['block-storage']['volume']['use_local_disk'] = false

default['openstack']['block-storage']['volume']['local_disk'] = nil

# Ceph/RADOS options

default['openstack']['block-storage']['rbd_pool'] = 'rbd'

default['openstack']['block-storage']['rbd_user'] = 'cinder'

default['openstack']['block-storage']['rbd_secret_uuid'] = nil

.......

接下来完善现有 cookbook 里面关于 LVM 部分的处理逻辑。 原来的逻辑指明当使用 LVMISCSIDriver 时,创建一个指定大小 (volume_size) 的 loop 设备文件。这点不符合我们的需求,我们的目标是希望指定磁盘或者分区做为 Cinder 的存储卷组。通过 local_disk_name 来指定磁盘或者分区信息,利用 pvcreate 命令来创建一个卷组,作为 Cinder 的存储卷组。

具体实现参考如下代码:

......

when 'cinder.volume.drivers.lvm.LVMISCSIDriver'

if node['openstack']['block-storage']['volume']['use_local_disk']

vg_name = node['openstack']['block-storage']['volume']['volume_group']

local_disk_name = node['openstack']['block-storage']['volume']['local_disk']

execute 'Create Cinder volume group' do

command "pvcreate #{local_disk_name}; vgcreate #{vg_name} #{local_disk_name}"

action :run

not_if "vgs #{vg_name}"

end

end

if node['openstack']['block-storage']['volume']['create_volume_group']

volume_size = node['openstack']['block-storage']['volume']['volume_group_size']

.......

如上 cookbook 更新完毕后,接下来,我们需要在/opt/ibm/cmwo/chef-repo/roles 目录定义一个新的 role 文件 ibm-os-block-storage-node.rb。通过定义新的 role,可以帮助我们通过指定 role 快速部署 Cinder LVM 节点。在这个文件中,我们会使用到上面更改后的 cookbook。具体内容如下:

name 'ibm-os-block-storage-node'

description 'IBM OpenStack storage node role

run_list(

'role[ibm-os-base]',

'role[os-base]',

'role[ibm-os-database-client-node]',

'role[os-block-storage-volume]',

'role[os-telemetry-agent-compute]'

)

将修改后的 cookbook 和 role 更新到 Chef 服务器中。

#knife cookbook upload openstack-block-storage

#knife role from file ibm-os-block-storage-node.rb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值