标签(空测试用例格分隔):OpenStack Train 系列


一:cinder 组件介绍

块存储服务(Block Storage Service)cinder,作为 OpenStack 的块存储服务,为 Instance 提供虚拟磁盘,其类似 AWS 的 EBS(Elastic Block Storage),
它们之间的区别在于存储卷暴露给虚拟机实例的方式。在 OpenStack 中,通过 iSCSI 暴露 LVM 卷组(VG)对卷进行管理,所以使用 cinder 的存储节点都会
有 VG。
cinder 在控制节点上需要安装 openstack-cinder,对应要启动的服务有:cinder-api、cinder-scheduler。修改好配置后,需要启动:
openstack-cinder-api.service openstack-cinder-scheduler.service

cinder 在存储节点上需要安装 openstack-cinder lvm2 device-mapper-persistent-data openstack-cinder targetcli python-keystone

cinder 在存储节点上运行的服务是:cinder-volume,当然还需启动其依赖的 LVM、target 服务。修改好配置后,需要启动:
lvm2-lvmetad.service、 openstack-cinder-volume.service target.service

/*
说明:cinder-api 用来接收 api 请求,然后将请求消息加工后放到 MQ 里,cinder-scheduler 从 MQ 中消费消息,通过调度算法选择相应的存储节点,然
后将消息放到 MQ 里,cinder-volume 收到 scheduler 消息后,开始对卷进行操作。cinder-volume 用来管理卷 volume 生命令周期,cinder-volume 是运
行在存储节点上。
没有安装 cinder 服务时,Openstack Dashboard 是不能对外提供卷服务操作的
控制节点和存储节点的 cinder.conf 配置可以相同,前提是当控制节点不具备对应的 VG 时,不要启动 openstack-cinder-volume.service,否则会报错找
不到 VG。 */

二:cinder 组件安装控制节点

在控制节点(controller)安装配置 Cinder 块存储服务
1、登录数据库创建 cinder 数据库
MariaDB [(none)]> CREATE DATABASE cinder default character set utf8;
创建并授予 cinder 用户完全操作 cinder 库权限
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'openstack';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'openstack';
2、创建用户和 API 服务端点
# source /etc/keystone/admin-openrc.sh
创建 cinder 用户,密码设置为:openstack2022
# openstack user create --domain default --password openstack2022 cinder
密码:openstack2022

image.png
image.png

将 cinder 加入到 service 项目以及 admin 角色
# openstack role add --project service --user cinder admin
创建 cinderv2 和 cinderv3 服务实体
# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
创建 Block Storage API 服务端点
# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s

image.png
image.png
image.png
image.png

3、安装 cinder 软件包并修改配置文件
# yum -y install openstack-cinder
修改配置文件/etc/cinder/cinder.conf
# cd /etc/cinder/ && mv cinder.conf cinder.conf.source && cat cinder.conf.source |grep -Ev "^#|^$" > cinder.conf && chown cinder:root cinder.conf
# vi /etc/cinder/cinder.conf
在[DEFAULT]部分,配置认证信息
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
auth_strategy = keystone
# 配置 my_ip 选项以使用控制器节点的管理接口 IP 地址
my_ip = 172.16.10.11
# 指定存储类型,否则在创建卷时,类型为 __DEFAULT__
# default_volume_type = hdd  创建卷如果失败可以不加这个条件

在[database]部分,配置数据库
[database]
connection = mysql+pymysql://cinder:openstack@controller/cinder
在[keystone_authtoken]部分,配置认证信息
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = openstack2022
在[oslo_concurrency]配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp

image.png
image.png
image.png

修改配置文件 /etc/nova/nova.conf,让计算服务支持块存储
# vi /etc/nova/nova.conf
在[cinder]部分,增加如下配置
[cinder]
os_region_name = RegionOne

image.png

4、同步 cinder 数据库
# su -s /bin/sh -c "cinder-manage db sync" cinder

说明:忽略带有“Deprecated: Option...” 输出

5、重启服务并设置成开机自启动

重启 nova-api 服务

# systemctl restart openstack-nova-api.service

启动 cinder-api、cinder-scheduler 服务并将其设置为开机自启动。

# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service && systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service

# systemctl status openstack-cinder-api.service openstack-cinder-scheduler.service

6、验证控制节点 cinder-scheduler,状态为 up 即正常
# openstack volume service list

image.png
image.png

三:在存储节点(compute01、compute02)安装配置 Cinder 服务

cinder 在存储节点上运行的服务是:cinder-volume,当然其依赖 LVM、target 服务。 
修改好配置后,需要启动的服务有:lvm2-lvmetad.service、openstack-cinder-volume.service target.service 
1、在存储节点安装和配置 LVM 并设置为开机自启动 
# yum -y install lvm2 device-mapper-persistent-data 
# systemctl enable lvm2-lvmetad.service 
# systemctl start lvm2-lvmetad.service

/*
说明:系统安装时就采用的 lvm,所以操作可以忽略
*/

image.png
image.png

2、计算节点 compute01、compute02 分别规划了 1 个 50GB 的硬盘用作虚机存储,在系统上对应是/dev/sdb
创建 PV
# pvcreate /dev/sdb
创建 VG,VG 名称定义为 cinder-volumes
# vgcreate cinder-volumes /dev/sdb
/*
说明:不同存储节点上相同用途的 VG 名称设置成相同,因为 cinder.conf 中需要指定 volume_group,另外 volume_backend_name 也可以设置成相同
*/
3、修改配置文件/etc/lvm/lvm.conf
# vi /etc/lvm/lvm.conf
在 devices 部分中,添加一个接受/dev/sdb 设备的过滤器并拒绝所有其他设备。
devices {
# 在 130 行下方插入以下记录
filter = [ "a/sda/", "a/sdb/", "r/.*/"]
说明:filter 过滤器阵列中的每个项目开头为“a”或者“r”,用于接受或用于拒绝某个设备,如果存储节点在操作系统磁盘上使用 LVM,则还必须将关联的
系统盘设备添加到过滤器。同样,如果计算节点在操作系统磁盘上使用 LVM,也需要修改这些节点上“/etc/lvm/lvm.conf”文件中的过滤器以包括操作系
统磁盘。例如,如果“/dev/sda”设备包含操作系统,则需要将“sda”添加到过滤器。
参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/cinder-storage-install.html

image.png

image.png

4、安装和配置存储节点
/*
说明:存储节点的 cinder.conf 包含了控制节点的 cinder.conf,如果控制节点即是存储节点,可以直接用存储节点的 cinder.conf
*/
安装软件包
# yum -y install openstack-cinder targetcli python-keystone

修改配置文件/etc/cinder/cinder.conf
# cd /etc/cinder/ && mv cinder.conf cinder.conf.source && cat cinder.conf.source |grep -Ev "^#|^$" > cinder.conf && chown cinder:root cinder.conf
# vi /etc/cinder/cinder.conf
在[DEFAULT]部分,配置 RabbitMQ 消息队列 URL 和身份证等信息
[DEFAULT]
transport_url = rabbit://openstack:openstack@controller
auth_strategy = keystone
配置 my_ip 为为存储节点上管理网络接口的 IP 地址,compute01 为 31,compute02 为 32
my_ip = 172.16.10.12
启用 LVM 后端,这里的 lvm 对应下方的[lvm]块名称
enabled_backends = lvm
配置 Image 服务 API 的位置
glance_api_servers = http://controller:9292
在[database]部分,配置数据库访问
[database]
connection = mysql+pymysql://cinder:openstack@controller/cinder
在[keystone_authtoken]部分,配置身份认证服务信息
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = openstack2022
新增[lvm]部分,使用 LVM 驱动程序,cinder-volumes 卷组,iSCSI 协议和相应的 iSCSI 服务配置 LVM 后端。
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
# volume_group 对应前面创建的 VG 名字
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = lioadm
volume_backend_name = cinder-volumes
在[oslo_concurrency]部分,配置锁定路径
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
5、启动 cinder-volume、 target 服务,并设置开机自启动
# systemctl enable openstack-cinder-volume.service target.service
# systemctl restart openstack-cinder-volume.service target.service
同步 compute01 上的 cinder.conf 到 compute02 上,然后在 compute02 上只需要修改 cinder.conf 中的 my_ip 为 13,重启 cinder-volume、 target 并设置为开机自启动即可
在 compute02 上操作
# scp -rp root@172.16.10.12:/etc/cinder/cinder.conf* /etc/cinder/
# sed -i 's/10.12/10.13/g' /etc/cinder/cinder.conf
# systemctl enable openstack-cinder-volume.service target.service
# systemctl restart openstack-cinder-volume.service target.service

image.png

image.png

四:在控制节点(controller)进行验证

1、列出存储服务组件,若状态均为 up 即正常
# source /etc/keystone/admin-openrc.sh
# openstack volume service list

image.png

Cinder 常用命令
a、创建存储卷
# openstack volume create --size 1 volume01
说明:创建一个卷名为 volume01 大小为 1GB 的卷
b、查看存储卷列表
# openstack volume list
c、为存储卷创建快照
# openstack volume snapshot create --volume volume01 snap-volume01
说明:为卷 volume01 创建一个名为 snap-volume01 的快照
d、查看快照列表
# openstack volume snapshot list
e、挂载卷到实例
# nova volume-attach vm01 ead55f47-a0f3-4eb9-854e-9dff638ff534 /dev/vdb
说明:挂载卷时,要指定卷 id,此处要指定卷 volume01 的 id,然后是连接到实例 vm01 的/dev/vdb 上
虚拟机卸载卷
# nova volume-detach vm01 ead55f47-a0f3-4eb9-854e-9dff638ff534
说明:卸载卷时,请先在操作系统层停止正在使用要卸载的应用,umount 掉,然后再执行 volume-detach
删除所选存储卷
# openstack volume snapshot delete snap-volume01
# openstack volume delete volume01
说明:删除卷要具备 2 个条件,第一个是卷状态是可用(available)或其他而非使用中;第二个就是要删除的卷上没有快照,如果有要先删除快照。
# openstack volume show volume01
# 禁用存储节点
# openstack volume service set --disable compute02@lvm cinder-volume
# 启用存储节点
# openstack volume service set --enable compute02@lvm cinder-volume

image.png

image.png

五:创建一个VM

创建一个VM虚拟机 看一下硬盘是不是在卷上面

image.png
image.png
image.png
image.png
image.png
image.png
image.png

六:创建一个卷挂载到VM02

image.png
image.png

image.png
image.png
image.png
image.png

去查看这个5G 的 卷有没有挂载到 VM02 上面

image.png