OpenStack 对接 Ceph

[TOC]

1. 对接前提

  • OpenStack 处于正常工作状态
  • Ceph 集群正常工作
  • OpenStack 各节点与 Ceph 集群各节点网络互通

OpenStack 部署情况

IP 节点名称 组件 对应存储池 说明
192.168.0.121 controller Glacne images 控制节点
192.168.0.122 compute Nova vms 计算节点
192.168.0.123 blockstorage Cinder volumes 存储节点

Ceph 部署情况

IP 节点名称
192.168.0.131 node1
192.168.0.132 node2
192.168.0.133 node3

2. 安装 Ceph 客户端

在 OpenStack 的所有节点配置好 Ceph 安装包 yum 源,在 /etc/yum.repos.d/ 目录下编辑 ceph.repo

[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

然后安装 Ceph 客户端

yum install -y ceph

将任意一个 Ceph 集群节点的 Ceph 配置文件和 ceph.client.admin.keyring 拷贝到所有 OpenStack 节点

scp {ceph-node-ip}:/etc/ceph/ceph.conf {openstack-node-ip}:/etc/ceph
scp {ceph-node-ip}:/etc/ceph/ceph.client.admin.keyring {openstack-node-ip}:/etc/ceph

3. 创建存储池

创建 Glance、Nova、Cinder 对应存储池:

ceph osd pool create images {pg_num}
ceph osd pool create vms {pg_num}
ceph osd pool create volumes {pg_num}

4. 配置存储池鉴权

在控制节点创建 Ceph 客户端及存储池的鉴权,生成相应的 key 文件:

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' -o /etc/ceph/ceph.client.cinder.keyring

ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images' -o /etc/ceph/ceph.client.glance.keyring

将生成的 key 文件拷贝到其他所有 OpenStack节点:

scp *.keyring 192.168.0.122:/etc/ceph/
scp *.keyring 192.168.0.123:/etc/ceph/

在 OpenStack 控制节点修改密钥文件拥有者为对应的组件用户:

chown glance:glance /etc/ceph/ceph.client.glance.keyring
chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

在运行 nova-compute 的节点上,将密钥添加到 libvcirt,删除临时的密钥文件:

ceph auth get-key client.cinder | tee client.cinder.key
uuidgen
ae3d9d0a-df88-4168-b292-c07cdc2d8f02
// 注:uuidgen 只需要运行一次即可,所有涉及 uuid 的地方都共用这个生成的 uuid

cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>ae3d9d0a-df88-4168-b292-c07cdc2d8f02</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF
// 注:以上 cat 段落是整个拷贝一次执行

virsh secret-define --file secret.xml
生成 secret ae3d9d0a-df88-4168-b292-c07cdc2d8f02

virsh secret-set-value --secret ae3d9d0a-df88-4168-b292-c07cdc2d8f02 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
// 注:出现删除提示,输入y,回车

5. 修改配置 OpenStack 配置文件

5.1. 配置 Glance

Glance 有多种后端用于存储镜像,如果默认使用 Ceph 块设备,则需要在 Glance 组件所在节点进行配置:

openstack-config --set /etc/glance/glance-api.conf DEFAULT "show_image_direct_url" "True"
openstack-config --set /etc/glance/glance-api.conf glance_store "default_store" "rbd"
openstack-config --set /etc/glance/glance-api.conf glance_store "rbd_store_user" "glance"
openstack-config --set /etc/glance/glance-api.conf glance_store "rbd_store_pool" "images"
openstack-config --set /etc/glance/glance-api.conf glance_store "stores" "glance.store.filesystem.Store, glance.store.http.Store, glance.store.rbd.Store"
openstack-config --set /etc/glance/glance-api.conf paste_deploy "flavor" "keystone"

5.2. 配置 Cinder

使 Cinder 组件访问 Ceph 块设备,需要配置 Cinder 对应的块设备驱动及其他选项,在 Cinder 组件所在节点进行配置:

openstack-config --set /etc/cinder/cinder.conf DEFAULT "enabled_backends" "ceph"
openstack-config --set /etc/cinder/cinder.conf ceph "volume_driver" "cinder.volume.drivers.rbd.RBDDriver"
openstack-config --set /etc/cinder/cinder.conf ceph "volume_backend_name" "ceph"
openstack-config --set /etc/cinder/cinder.conf ceph "rbd_pool" "volumes"
openstack-config --set /etc/cinder/cinder.conf ceph "rbd_ceph_conf" "/etc/ceph/ceph.conf"
openstack-config --set /etc/cinder/cinder.conf ceph "rbd_flatten_volume_from_snapshot" "false"
openstack-config --set /etc/cinder/cinder.conf ceph "rbd_max_clone_depth" "5"
openstack-config --set /etc/cinder/cinder.conf ceph "rados_connect_timeout" "-1"
openstack-config --set /etc/cinder/cinder.conf ceph "glance_api_version" "2"
openstack-config --set /etc/cinder/cinder.conf ceph "rbd_user" "cinder"
openstack-config --set /etc/cinder/cinder.conf ceph "rbd_secret_uuid" "ae3d9d0a-df88-4168-b292-c07cdc2d8f02"

5.3. 配置 Nova

Nova 组件访问 Ceph 的块设备,需要在运行 Nova 的各节点上进行配置:

openstack-config --set /etc/nova/nova.conf libvirt "images_type" "rbd"
openstack-config --set /etc/nova/nova.conf libvirt "images_rbd_pool" "vms"
openstack-config --set /etc/nova/nova.conf libvirt "images_rbd_ceph_conf" "/etc/ceph/ceph.conf"
openstack-config --set /etc/nova/nova.conf libvirt "rbd_user" "cinder"
openstack-config --set /etc/nova/nova.conf libvirt "rbd_secret_uuid" "ae3d9d0a-df88-4168-b292-c07cdc2d8f02"
openstack-config --set /etc/nova/nova.conf libvirt "inject_password" "false"
openstack-config --set /etc/nova/nova.conf libvirt "inject_key" "false"
openstack-config --set /etc/nova/nova.conf libvirt "inject_partition" "-2"
openstack-config --set /etc/nova/nova.conf libvirt "live_migration_flag" "VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST"

6. 重启 OpenStack 各服务

在控制节点,重启各服务:

sudo service openstack-glance-api restart
sudo service openstack-nova-api restart
sudo service openstack-cinder-api restart
sudo service openstack-cinder-scheduler restart

在计算节点,重启 Nova 服务:

sudo service openstack-nova-compute restart

在存储节点,重启 Cinder 服务:

sudo service openstack-cinder-volume restart

7. 验证对接有效性

graph LR A[mirror] -->|glance image-create| B(image) B --> |cinder create|C(volume) C --> |nova boot|D(VM)

7.1. Ceph 客户端验证

在各 OpenStack 节点上运行命令:

ceph status
ceph -s

如果能顺利执行,则证明客户端安装成功。

7.2. Glance 组件对接验证

在控制节点上,先获取key:

source /root/keystone_admin

然后通过 Glance 上传一个镜像:

glance image-create --name cirros --disk-format raw --container-format ovf --f {your-image-path}

通过查询 Glance存储池信息,查看镜像是否已经上传:

rbd ls images

如果查看到镜像信息,则证明 Glance 组件对接成功。

7.3. Cinder 组件对接验证

首先在控制节点通过 Cinder 创建一个空白云盘:

cinder create --display-name {volume-name} {volume-size}

然后通过 Cinder 创建一个镜像云盘:

cinder create --display-name {volume-name} --image-id ${image-id} {volume-size}

通过查询 Cinder 存储池信息,查看空白云盘及镜像云盘是否已经承载在 Ceph:

rbd ls volumes

如果查询到云盘信息,则证明 Cinder 组件对接成功。

7.4. Nova 组件对接验证

首先通过 Dashboard 创建一个 VM,从刚才创建的镜像云盘启动(前提:有可用网络):

nova boot --image {image-id} --flavor {flavor-id} --nic net-id={net-id} {instance-name}

然后查询 VM 是否创建成功:

nova list | grep {instacne-name}

如果创建的 VM 为 Active 状态,则证明 Nova 组件对接成功。

猜你喜欢

转载自www.cnblogs.com/zengzhihua/p/9995456.html