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