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


一:配置openstack 的节点

1.1 控制节点和计算节点安装 ceph

1. 做好ceph的节点与openstack 节点的无密钥登录认证


2. 检查 OpenStack 的控制节点和计算节点是否已经安装 Ceph 软件包。作为 Ceph 客户端,需要在 controller、compute01、compute02 上执行以下步
骤在 controller、compute01、compute02 安装 ceph 软件包

# yum -y install ceph ceph-radosgw

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_cephOpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_02

注意:
如果提示没有相关软件包,则检查离线 yum 源配置,此处列出阿里云源,在公网环境下可直接复制使用,配置如下
vim /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64
enabled=1
gpgcheck=0
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=0
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=0

1.2 创建 OpenStack 所需的存储池

在 ceph01 上创建所需的存储池,根据实际 OSD 数量修改 PG 数目
# ceph osd pool create volumes 128
# ceph osd pool create images 32
# ceph osd pool create backups 32
# ceph osd pool create vms 128
查看创建的存储池
# ceph osd pool ls
在 ceph01 同步配置文件,将 ceph01 上的配置文件同步到 controller 和 computer01、computer02 节点
cd /etc/ceph-cluster
ceph-deploy --overwrite-conf admin ceph01 controller compute01 compute02

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_03OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_04

1.3 创建 openstack 各组件需要的 ceph 用户并授权

在 ceph01 上为 cinder、glance、cinder-backup 用户创建密钥,允许其访问 Ceph 存储池
创建用户 client.cinder,对 volumes 存储池有 rwx 权限,对 vms 存储池有 rwx 权限,对 images 池有 rx 权限


在 ceph01 上为 cinder、glance、cinder-backup 用户创建密钥,允许其访问 Ceph 存储池
创建用户 client.cinder,对 volumes 存储池有 rwx 权限,对 vms 存储池有 rwx 权限,对 images 池有 rx 权限

ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images'

保存key

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_05

创建用户 client.glance,对 images 存储池有 rwx 权限
# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'

创建用户 client.cinder-backup,对 backups 存储池有 rwx 权限
# ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups'

将 glance 的 keyring 保存到 controller(glance 服务所在节点)上
# ceph auth get-or-create client.glance | ssh controller tee /etc/ceph/ceph.client.glance.keyring
# ssh controller chown glance:glance /etc/ceph/ceph.client.glance.keyring

将 cinder 的 keyring 保存到(控制节点、计算节点、存储节点 服务所在节点)上

# ceph auth get-or-create client.cinder | ssh controller tee /etc/ceph/ceph.client.cinder.keyring

# 还有 computer0{1..n}上

# ssh controller chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring # 还有 computer0{1..n}上

/*
说明:节点多,可以使用 for 循环完成
for h in controller compute01 compute02
do
ceph auth get-or-create client.cinder | ssh $h tee /etc/ceph/ceph.client.cinder.keyring
ssh $h chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
done
*/

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_06OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_07OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_08OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_09

将 cinder-backup 的 keyring 保存到 (cinder-backup 服务所在节点,此处是 controller/computer01/computer02)上
# ceph auth get-or-create client.cinder-backup | ssh controller tee /etc/ceph/ceph.client.cinder-backup.keyring # 还有 computer0{1..n}上
# ssh controller chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring # 还有 computer0{1..n}上 # 查看
# ceph auth get-key client.cinder | ssh controller tee client.cinder.key

/*


说明:节点多,可以使用 for 循环完成
for h in controller compute01 compute02
do
ceph auth get-or-create client.cinder-backup | ssh $h tee /etc/ceph/ceph.client.cinder-backup.keyring
ssh $h chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring
ceph auth get-key client.cinder | ssh $h tee client.cinder.key
done


不要直接用 admin 的 key,因为不同用户要读到该密钥文件,要修改属组和属主,否则没有权限(当然可以将 ceph.client.admin.keyring 文件改为 775
允许 cinder/glance 用户读取,但不推荐)
cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQCyTYZheH+KKhAAw227TN1qho/8OMhGTyL+UA==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
*/

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_10

1.4 添加密钥到 libvirt

在计算节点(compute01、compute02)上向 libvirt 添加秘钥,先在计算节点 compute01 上操作,生成密钥。
# UUID=$(uuidgen)

# cd /etc/ceph

# cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>${UUID}</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF

# cat secret.xml
<secret ephemeral='no' private='no'>
<uuid>d7ac31ad-22dc-42d9-b53e-7d000ab3f03e</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>

添加密钥到 libvirt
# virsh secret-define --file secret.xml
----
生成 secret d7ac31ad-22dc-42d9-b53e-7d000ab3f03e
----
# virsh secret-set-value --secret ${UUID} --base64 $(cat /etc/ceph/ceph.client.cinder.keyring | grep key | awk -F ' ' '{ print $3 }')
-----
secret 值设定

-----

/*
说明:保存此处生成的 UUID 的值,后面 Cinder 以及 Nova 的配置中需要用到,本示例中的 UUID 为:585e1823-adc0-4c25-b368-3ec81300fac2
如果添加错误,需要删除,则执行如下命令
# virsh secret-undefine d7ac31ad-22dc-42d9-b53e-7d000ab3f03e
如果控制节点也当计算点用,则也要添加密钥
*/

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_11OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_12OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_13

查看添加后的密钥
# virsh secret-list
# virsh secret-get-value d7ac31ad-22dc-42d9-b53e-7d000ab3f03e

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_14OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_15

再在其他(compute)计算节点上操作:
1、将 secret.xml 拷贝到其他计算节点
# scp secret.xml controller:/etc/ceph/
# scp secret.xml compute02:/etc/ceph/

在 controller 节点上操作(因为 controller 也当计算节点在用)
# UUID=d7ac31ad-22dc-42d9-b53e-7d000ab3f03e
# virsh secret-define --file secret.xml
# virsh secret-set-value --secret ${UUID} --base64 $(cat /etc/ceph/ceph.client.cinder.keyring | grep key | awk -F ' ' '{ print $3 }')

在 compute02 节点上操作
# UUID=d7ac31ad-22dc-42d9-b53e-7d000ab3f03e
# virsh secret-define --file secret.xml
# virsh secret-set-value --secret ${UUID} --base64 $(cat /etc/ceph/ceph.client.cinder.keyring | grep key | awk -F ' ' '{ print $3 }')
# virsh secret-list

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_16OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_17OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_18

1.5 配置 Glance 集成 Ceph 作为后端存储并验证

在控制节点(controller)上修改 Glance 的配置文件。
# vim /etc/glance/glance-api.conf
[DEFAULT]部分添加如下内容
[DEFAULT]
show_image_direct_url = True
[glance_store]部分添加如下内容,需要注释原来的 stores 和 default_store
[glance_store]
#stores = file,http
#default_store = file
filesystem_store_datadir = /var/lib/glance/images/
stores = rbd,file,http
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
# rbd_store_user = admin # 直接用 admin,当在 ceph 中没有创建 glance 用户时,同时还要修改/etc/ceph/ceph.client.admin.keyring 文件权限为 775
rbd_store_ceph_conf = /etc/ceph/ceph.conf
# 镜像存储在 ceph 中会被分割成多个对象,单个对象大小,单位是 MB,该值最好是 2 的幂次方,默认是 8,chunk_size 不能太大,当镜像小于 chunk_size 时会上传失败。
rbd_store_chunk_size = 8
[paste_deploy]部分添加如下内容,避免 images 缓存到/var/lib/glance/image-cache 目录下
[paste_deploy]
flavor = keystone
在控制节点(controller)重启 glance-api 服务。
# systemctl restart openstack-glance-api.service
验证镜像上传
# source /etc/keystone/admin-openrc.sh
# openstack image create "cirros-0.4.0-x86_64" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
# rbd ls images
# rbd info images/936920b3-1cdb-4e74-9cbc-dc63f62b6396

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_19OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_20OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_21OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_22OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_23

1.6 配置 Cinder 集成 Ceph 作为后端存储并验证

a、在 Cinder 控制节点(controller)上,修改配置文件/etc/cinder/cinder.conf
[DEFAULT]部分,将默认 volume 设置为 ceph
# vim /etc/cinder/cinder.conf
[DEFAULT]
#default_volume_type = hdd
default_volume_type = ceph

修改 default_volume_type 会重新往 cinder 库中 volume_types 表中增加一条名为 ceph 的记录
在控制节点重启 cinder-api 和 cinder-scheduler 服务

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

b、在 Cinder 存储节点(compute01、compute02)上,修改配置文件/etc/cinder/cinder.conf
# vim /etc/cinder/cinder.conf
[DEFAULT]部分,注释已经有的 enabled_backends
[DEFAULT]
#enabled_backends = lvm
enabled_backends = ceph,lvm
#在文件末尾添加[ceph]部分
[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
# rbd snapshot 在底层会快速复制一个元信息表,但不会产生实际的数据拷贝,当从 snapshot 创建新卷时,用户可能会期望不要依赖原来的 snapshot,
# 这个选项开启会在创建新卷时对原来的 snapshot 数据进行拷贝来生成一个不依赖于源 snapshot 的卷,默认为 false
rbd_flatten_volume_from_snapshot = false
# 克隆卷的最大嵌套(层)数,设置为 0 表示禁用克隆,降低这个值不会影响克隆深度超过新值的已有卷
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = cinder
# 注意 uuid 后面不要复制空格
rbd_secret_uuid = d7ac31ad-22dc-42d9-b53e-7d000ab3f03e

/*
说明:此处 rbd_secret_uuid 的值即为配置 Ceph 环境保存的 UUID 值
*/
在 Cinder 节点(compute01、compute02)上,重启 cinder-volume 服务

# systemctl restart openstack-cinder-volume.service

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_24OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_25OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_26OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_27OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_28OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_29

c、创建实例验证
i、先创建一个 ceph 的卷类型

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_30

为 ceph 卷类型增加一个元数据 volume_backend_name=ceph

然后创建实例验证:

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_31OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_32OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_33OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_34OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_35OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_36

1.7 配置 cinder_backup 集成 Ceph 作为后端存储并验证

cinder-backup 用于将卷(volume)备份到其他存储系统上,目前支持的备份存储系统有 swift、ceph 以及 IBM Tivoli Storage Manager(TSM),默认为
Swift,但需要配置 swift 组件
a、在存储节点(compute01、compute02)上修改配置文件/etc/cinder/cinder.conf
[DEFAULT]部分,增加如下内容
# vim /etc/cinder/cinder.conf
[DEFAULT]
backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
backup_ceph_conf = /etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 4194304
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_37OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_38

说明:在配置参数 back_driver 时需要注释掉其他 backup_driver 的配置。
另外,在 dashboard 配置(/etc/openstack-dashboard/local_settings)中的 OPENSTACK_CINDER_FEATURES 中增加如下配置
OPENSTACK_CINDER_FEATURES = {
'enable_backup': True,
}
启动 cinder backup 服务进程并设置成开机自启动
# systemctl enable openstack-cinder-backup.service
# systemctl restart openstack-cinder-backup.service
重启 httpd 服务进程。
systemctl restart httpd

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_39OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_40OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_41OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_42OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_43OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_44

1.8 配置 Nova 集成 Ceph

在 Nova 计算节点(compute01、compute02)上,修改配置文件/etc/nova/nova.conf
vim /etc/nova/nova.conf
修改并新增以下内容:
[DEFAULT]
# 支持热迁移
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"

[libvirt]
# 虚拟机模拟 openstack 可能需要将 virt_type 设置为 qemu,否则创建虚拟机后,一直停在 GRUB Loading stage2
# virt_type = qemu
inject_partition=-2
virt_type = kvm
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
disk_cachemodes="network=writeback"
rbd_user = cinder
# 此处 uuid 与 cinder.conf 是同一个
rbd_secret_uuid = d7ac31ad-22dc-42d9-b53e-7d000ab3f03e

在 Nova 计算节点(controller/computer)上,重启 nova-compute 服务。
# systemctl restart openstack-nova-compute.service

说明:nova 集成 ceph,允许从 ceph 卷上启动实例。当 cinder 挂载或者卸载块设备时,libvirt 进程需要有访问 ceph 集群的权限 。

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_45OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_46OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_47OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_48OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_49OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_50OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_51

此时可以在实例中ping www.baidu.com 如果热迁移不产生中断则成功热迁移

OpenStack Train(十二):Openstack 与 Ceph 集群的集成_虚拟化_52OpenStack Train(十二):Openstack 与 Ceph 集群的集成_openstack_53OpenStack Train(十二):Openstack 与 Ceph 集群的集成_ceph_54