部署 Kolla-Ansible 使用 External Ceph

Ceph logo

在部署 Kolla-Ansible 時,雖然能夠同時部署 Ceph Cluster,但是在一些情況下,維運人員會希望將 Ceph 跟 OpenStack 分開管理,可是又想要利用 Ceph 當儲存的 Backend。這時可不用擔心,Kolla-Ansible 可以運用之前提過的 config override 的功能來使用 External Ceph Cluster。本篇文章將會介紹如何使用 Kolla-Ansible 和其 config override 的功能部署 OpenStack 並使用外部的 Ceph。

事前準備

既然要使用外部的 Ceph Cluster,首相需要部署出一個 Ceph 集群。部署 Ceph 的方法有很多選擇,也可以參考之前介紹過的 Ceph-Ansible 進行部署。

另外我們也需要一些使用 Kolla-Ansible 的基礎跟相關知識,可以參考這篇文章:透過 Kolla-Ansible 跟 Container 部署 OpenStack

Ceph 設定

RBD Pool

OpenStack Nova, Cinder (Cinder Backup), Glance 都可以使用 RBD 作為儲存 Backend,所以需要為這三個 service 創建其使用的 RBD Pool。

sudo ceph osd pool create images 128
sudo ceph osd pool create vms 128
sudo ceph osd pool create volumes 128

Ceph Keyring 設定

Ceph 是透過 Keyring 做認證的,所以同樣會需要為三個 service 創建相對應的 Keyring,並且給予其所使用的 Pool 權限。

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

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

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

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

Kolla-Ansible 設定

globals.yml

globals.yml 中我們必須將透過部署 Kolla-Ansible Ceph 的選項設為 no,不過將 Nova, Cinder, Glance 使用 Ceph 作為儲存 backend 的選項設為 yes。

enable_ceph: "no"
glance_backend_ceph: "yes"
cinder_backend_ceph: "yes"
nova_backend_ceph: "yes"

Glance 設定

設定 Glance 使用 external Ceph 基本上包含三個步驟:

  1. glance-api.conf 設定使用 rbd backend
  2. /etc/ceph/ceph.conf 新增 Ceph 的設定
  3. 新增 /etc/ceph/ceph.client.images.keyring

第一步是需要透過 config override 實現的,首先在建立 /etc/kolla/config/glance/glance-api.conf 並新增以下內容

[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf

接下來在第二步同樣在 /etc/kolla/config/glance/ceph.conf 加入 Ceph 的設定

[global]
fsid = 88a8ea91-df1d-4f67-b78b-52bb2f04df4d
mon_initial_members = ceph01, ceph02, ceph03
mon_host = 192.168.113.10,192.168.113.11,192.168.113.10
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

最後將上面已經創建好的 keyring 放到 /etc/kolla/config/glance/ceph.client.glance.keyring

sudo cp /etc/ceph/ceph.client.glance.keyring /etc/kolla/config/glance/ceph.client.glance.keyring

Kolla-Ansible 會將資料夾下所有 ceph* 的檔案放到 container 內的 /etc/ceph 下。

Cinder 設定

Cinder 設定的步驟跟 Glance 雷同,先建立 /etc/kolla/config/cinder/cinder-volume.conf 並新增以下內容

[DEFAULT]
enabled_backends=rbd-1

[rbd-1]
rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=cinder
backend_host=rbd:volumes
rbd_pool=volumes
volume_backend_name=rbd-1
volume_driver=cinder.volume.drivers.rbd.RBDDriver
rbd_secret_uuid = {{ cinder_rbd_secret_uuid }}

接下來設定 Cinder-Backup,創建 /etc/kolla/config/cinder/cinder-backup.conf 並加入以下內容

[DEFAULT]
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user=cinder-backup
backup_ceph_chunk_size = 134217728
backup_ceph_pool=backups
backup_driver = cinder.backup.drivers.ceph
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true

接下來一樣將 ceph.conf 放到 /etc/kolla/config/cinder/

最後需要 copy 所有的 keyring。

sudo cp /etc/ceph/ceph.client.cinder.keyring /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder.keyring
sudo cp /etc/ceph/ceph.client.cinder.keyring /etc/kolla/config/cinder/cinder-volume/ceph.client.cinder.keyring
sudo cp /etc/ceph/ceph.client.cinder-backup.keyring /etc/kolla/config/cinder/cinder-backup/ceph.client.cinder-backup.keyring

Nova 設定

Nova 設定也很相似,基本上會是一樣的步驟

根據下面內容建立 /etc/kolla/config/nova/nova-compute.conf

[libvirt]
images_rbd_pool=vms
images_type=rbd
images_rbd_ceph_conf=/etc/ceph/ceph.conf
rbd_user=nova

ceph.conf 放到 /etc/kolla/config/nova/

最後 copy keyring

sudo cp /etc/ceph/ceph.client.nova.keyring /etc/kolla/config/nova/ceph.client.nova.keyring

實際部署

關於實際部署的指令想要暸解更多可以看 透過 Kolla-Ansible 跟 Container 部署 OpenStack

cd kolla-ansible
tools/generate_passwords.py
tools/kolla-ansible -i ansible/inventory/multinode bootstrap-servers
tools/kolla-ansible -i ansible/inventory/multinode prechecks
tools/kolla-ansible -i ansible/inventory/multinode deploy

Playbook 順利跑完的後,可以試著使用各個 service,確認能夠正常運作。

Reference

Kolla-Ansible External Ceph
How to integrate Ceph with OpenStack


Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.