美文网首页工具癖Ceph系统运维专家
OpenStack(Pike)连接 Ceph RBD

OpenStack(Pike)连接 Ceph RBD

作者: blackpiglet | 来源:发表于2018-11-12 21:16 被阅读44次

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

    相关文章

      网友评论

        本文标题:OpenStack(Pike)连接 Ceph RBD

        本文链接:https://www.haomeiwen.com/subject/eelhfqtx.html