OpenStack(Pike)连接 Ceph RBD

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 最新的分支:v4.15.18,需要下载两个文件:

$ 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. 参考文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343