1. 程式人生 > >OpenStack 對接 Ceph

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 元件對接成功。