0. 环境信息
请注意, 本文档假设 Ceph 和 OpenStack 环境已经可用, 在此基础上, 配置 OpenStack 使用 Ceph RBD 作为镜像和卷的后端存储.
Ceph + OpenStack
软件版本
OpenStack 版本: Pike release
Ceph 版本: 12.2.7 luminous
虚拟机系统: Ubuntu 16.04
虚拟机信息:
一共用到六台虚拟机, 三台用作 OpenStack 的控制节点, 三台用作 OpenStack 的计算节点.
六台虚拟机信息:
- hostname:controller-1,IP:10.0.0.1
- hostname:controller-2,IP:10.0.0.2
- hostname:controller-3,IP:10.0.0.3
- hostname:compute-1,IP:10.0.0.4
- hostname:compute-2,IP:10.0.0.5
- hostname:compute-3,IP:10.0.0.6
1. 升级内核
要升级内核的原因是 Ubuntu 16.04 使用的内核版本是 4.4, 而 ceph RBD image 默认打开的功能包括: layering, exclusive-lock, object-map, fast-diff, deep-flatten, 除了 layering, 其他 Linux kernel 4.4 均不支持, 但也不是必须通过升级内核来解决该问题, 也可以修改 RBD 参数 rbd_default_features, 关闭不支持的特性来解决: sudo ceph daemon mon.<monitor-hostname> config set rbd_default_features 1 (该命令需要在 Ceph 的控制节点上执行)
接下来讲一下升级 Linux kernel 的方法, Linux kernel 全部可用版本的下载地址为:
http://kernel.ubuntu.com/~kernel-ppa/mainline/
本文选用了 4.15 最新的分支:, 需要下载两个文件:
- $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.18/linux-headers-4.15.18-041518_4.15.18-041518.201804190330_all.deb
- $ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15.18/linux-image-4.15.18-041518-generic_4.15.18-041518.201804190330_amd64.deb
- $ sudo dpkg -i Linux-headers-4.15.18-041518_4.15.18-041518.201804190330_all.deb
- $ sudo dpkg -i Linux-image-4.15.18-041518-generic_4.15.18-041518.201804190330_amd64.deb
安装完成后需要重启服务器才能生效
$ sudo reboot
重新启动后查询 kernel 版本, 新安装的 kernel 已经生效
- $ sudo uname -r
- 4.15.18-041518-generic
2. Ceph 的准备工作
首先要为 glance 和 cinder 先创建好 pool, 后面的数字是 pool 中包含的 pg 数量, pg 数量可以根据需求修改, 大的原则是里面存储的数据越多, pg 数量也要越大.
- $ ceph osd pool create volumes 128
- $ ceph osd pool create images 128
- $ ceph osd pool create backups 128
- $ ceph osd pool create vms 128
然后初始化 pool, 将其应用类型设置为 RBD:
- $ rbd pool init volumes
- $ rbd pool init images
- $ rbd pool init backups
- $ rbd pool init vms
接下来为 glance 和 cinder 生成连接 ceph 所用的 密钥:
- $ ceph auth get-or-create client.glance mon 'profile rbd' osd 'profile rbd pool=images'
- $ ceph auth get-or-create client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'
- $ ceph auth get-or-create client.cinder-backup mon 'profile rbd' osd 'profile rbd pool=backups'
最后全部六台 OpenStack 服务器都需要 ceph 的配置文件, 需要注意, 下面这条命令需要在 OpenStack 服务器上需要能够无需密码即可以 sudo 权限执行命令, 如果不满足这个条件的话, 手动 SSH 登录, 再填内容吧.
- $ SSH {
- your-openstack-server
- } sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf
- 3. Glance
首先在安装 glance-API 的 OpenStack 服务器上安装 RBD python 客户端:
$ sudo apt-get install python-rbd
Glance 要连接 Ceph 就需要 Ceph 的密钥, 所以 keyring 文件也必不可少, 并且需要修改文件的 owner 改为 glance.
- $ ceph auth get-or-create client.glance | SSH {
- your-glance-API-server
- } sudo tee /etc/ceph/ceph.client.glance.keyring
- $ SSH {
- your-glance-API-server
- } sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring
Ceph 相关的配置已经准备就绪了, 接下来需要修改 glance 的配置文件.
- $ sudo VIM /etc/glance/glance-API.conf
- [DEFAULT]
- show_image_direct_url = True
- hw_scsi_model=virtio-scsi
- hw_disk_bus=scsi
- hw_qemu_guest_agent=yes
- os_require_quiesce=yes
- ......
- [glance_store]
- stores = rbd
- default_store = rbd
- rbd_store_pool = images
- rbd_store_user = glance
- rbd_store_ceph_conf = /etc/ceph/ceph.conf
- rbd_store_chunk_size = 8
- [paste_deploy]
- flavor = keystone
修改完成后, 重启 glance-API 服务就完成了镜像相关的配置.
$ sudo service openstack-glance-API restart
4. 计算节点
全部三台 compute 节点, 都需要安装 ceph-common, 另外要注意, ceph 要指定版本, 下面命令里的头两句就是通过环境变量指定安装 luminous 版本.
- $ CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/debian-luminous
- $ CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc
- $ sudo apt update
- $ sudo apt-get install ceph-common
接下来因为 libvirt 需要连接 RBD 来挂载远程块存储, 所以 libvirt 需要 RBD 的密钥, 具体做法如下,
- # 在 Ceph 节点上执行, 并将输出结果写入到计算节点的任意目录下的 client.cinder.key 文件中, 作为暂存.
- $ ceph auth get-key client.cinder | SSH {your-compute-node} tee client.cinder.key
- # 产生 UUID
- $ uuidgen
- 457eb676-33da-42ec-9a8c-9293d545c337
- # 生成 libvert 注入文件
- $ cat> secret.xml <<EOF
- <secret ephemeral='no' private='no'>
- <uuid>457eb676-33da-42ec-9a8c-9293d545c337</uuid>
- <usage type='ceph'>
- <name>client.cinder secret</name>
- </usage>
- </secret>
- EOF
- # 注入 secret.xml 文件
- $ sudo virsh secret-define --file secret.xml
- Secret 457eb676-33da-42ec-9a8c-9293d545c337 created
- # 关联注入的 secret 和 ceph 密钥, 并删除暂存的 client.cinder.key 文件.
- $ sudo virsh secret-set-value --secret 457eb676-33da-42ec-9a8c-9293d545c337 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
修改 /etc/ceph/ceph.conf 文件:
- $ VIM /etc/ceph/ceph.conf
- ...
- [client]
- rbd cache = true
- rbd cache writethrough until flush = true
- admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
- log file = /var/log/qemu/qemu-guest-$pid.log
- rbd concurrent management ops = 20
创建虚拟机挂载磁盘的日志输出目录, 并修改权限.
- $ sudo mkdir -p /var/run/ceph/guests/ /var/log/qemu/
- $ sudo chown libvirt-qemu:kvm /var/run/ceph/guests /var/log/qemu/
重启 nova compute 服务.
- $ sudo systemctl restart openstack-nova-compute
- 5. Cinder
最后完成块存储的配置, 首先也要和计算节点一样, 在所有运行 cinder 的节点上安装 ceph-common, 在本文中就是全部三台 controller 节点.
- $ CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/debian-luminous
- $ CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc
- $ sudo apt update
- $ sudo apt-get install ceph-common
修改 cinder 配置文件:
rbd_user 要使用之前在 Ceph 上创建的账户, rbd_secret_uuid 要使用之前在 libvirt 中添加的 secret 的 UUID.
- $ VIM /etc/cinder/cinder.conf
- [DEFAULT]
- ...
- enabled_backends = ceph
- glance_api_version = 2
- ...
- [ceph]
- volume_driver = cinder.volume.drivers.rbd.RBDDriver
- volume_backend_name = ceph
- rbd_pool = volumes
- rbd_ceph_conf = /etc/ceph/ceph.conf
- rbd_flatten_volume_from_snapshot = false
- rbd_max_clone_depth = 5
- rbd_store_chunk_size = 4
- rados_connect_timeout = -1
- rbd_user = cinder
- rbd_secret_uuid = 457eb676-33da-42ec-9a8c-9293d545c337
全部搞好后, 重启 cinder 相关服务.
- $ sudo service openstack-cinder-volume restart
- $ sudo service openstack-cinder-backup restart
6. 参考文档
BLOCK DEVICES AND OPENSTACK
Ubuntu 16.04 Linux 系统内核升级方法
OpenStack: Compute service https://docs.openstack.org/nova/pike/install/
来源: http://www.jianshu.com/p/e56d3b909ec0