1. 背景說明
nova負責虛擬機的生命週期管理,包括創建,刪除,重建,開機,關機,重啓,快照等,作爲openstack的核心,nova負責IaaS中計算重要的職責,其中nova的存儲格外重要,默認情況下,nova將instance的數據存放在/var/lib/nova/instances/%UUID目錄下,使用本地的存儲空間。使用這種方式帶來的好處是:簡單,易實現,速度快,故障域在一個可控制的範圍內。然而,缺點也非常明顯:compute出故障,上面的虛擬機down機時間長,沒法快速恢復,此外,一些特性如熱遷移live-migration,虛擬機容災nova evacuate等高級特性,將無法使用,對於後期的雲平臺建設,有明顯的缺陷。
2.關於分佈式存儲
使用openstack時,是否使用分佈式文件系統,是一個非常值得思考和深思的問題,使用本地的優點非常明顯,同時帶來的缺點也顯而易見,使用分佈式存儲,技術上的空白和技術上的難度,也是值得思考的一個問題。同時,分佈式存儲又改如何選擇,應該選擇簡單的gluserfs還是呼聲較高的ceph,這些都是構建雲平臺需要考慮的地方,同時openstack和ceph都存在一些坑,需要在技術上有足夠的積累底蘊才能夠控制起來。如果有需要通過openstack在生產環境下構建雲平臺,我建議初期使用本地的存儲,充分利用KVM和本地文件系統的穩定,性能,後續有足夠的技術可以逐步灰度至分佈式存儲glusterfs或者ceph中。建議使用ceph,如果基於技術層面的考慮,可以考慮使用glusterfs,glusterfs以其簡單,易管理。
3.nova與ceph結合
1、ceph中創建存儲池pool
[root@controller_10_1_2_230 ~]# ceph osd pool create vms 128 #創建一個pools,名字爲vms,128個pg pool 'vms' created [root@controller_10_1_2_230 ~]# ceph osd lspools #查看pools創建的情況 0 rbd,1 images,2 vms, [root@controller_10_1_2_230 ~]# ceph osd pool stats pool rbd id 0 nothing is going on pool images id 1 nothing is going on pool vms id 2 nothing is going on
2、nova-compute節點安裝和配置客戶端
[root@compute1_10_1_2_232 ~]# yum install python-rbd ceph -y #安裝客戶端包 [root@controller_10_1_2_230 ~]# scp /etc/ceph/ceph.conf [email protected]:/etc/ceph/ceph.conf #拷貝ceph配置文件
3、配置ceph認證,讓nova用戶能夠訪問vms池、images池
[root@controller_10_1_2_230 ~]# ceph auth get-or-create client.nova mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=images' [client.nova] key = AQBLXqpWB8HsChAA6hGUBT5JNrFGD116uy+nmg== #查看ceph的認證信息 [root@controller_10_1_2_230 ~]# ceph auth list installed auth entries: osd.0 key: AQDsx6lWYGehDxAAGwcYP9jDvH2Zaa8JlGwj1Q== caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQD1x6lWQCYBERAAjIKO1LVpj8FvVefDvNQZSA== caps: [mon] allow profile osd caps: [osd] allow * client.admin key: AQCexqlWQL6OGBAA2v5LsYEB5VgLyq/K2huY3A== caps: [mds] allow caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQCexqlWUMNRMRAAZEp/UlhQuaixMcNy5d5pPw== caps: [mon] allow profile bootstrap-mds client.bootstrap-osd key: AQCexqlWQFfpJBAAfPCx4sTLNztBESyFKys9LQ== caps: [mon] allow profile bootstrap-osd client.bootstrap-rgw key: AQAR7alWok0SGhAAFtOo0PFsZuVzczMvJox1Wg== caps: [mon] allow profile bootstrap-rgw client.glance key: AQAl76lWHMySHxAANTfXv3JQ70GCEBOZI5abcQ== caps: [mon] allow r caps: [osd] allow class-read object_prefix rbd_children, allow rwx pool=images client.nova key: AQBLXqpWB8HsChAA6hGUBT5JNrFGD116uy+nmg== caps: [mon] allow r caps: [osd] allow class-read object_prefix rbd_children, allow rwx pool=vms, allow rwx pool=images #添加了nova用戶的認證信息
4、將ceph認證的key拷貝至計算節點
a、查看client.nova的key [root@controller_10_1_2_230 ~]# ceph auth get-or-create client.nova [client.nova] key = AQBLXqpWB8HsChAA6hGUBT5JNrFGD116uy+nmg== b、將key拷貝至遠端 [root@controller_10_1_2_230 ~]# scp ceph.client.nova.kering [email protected]:/etc/ceph/ ceph.client.nova.kering c、生成nova臨時的key [root@controller_10_1_2_230 ~]# ceph auth get-key client.nova | ssh [email protected] tee client.nova.key
5、計算節點的libvirt使用ceph的key
a、生成uuid號 [root@compute1_10_1_2_232 ~]# uuidgen 0d154ad2-ec21-4200-952f-7551503da8a1 b、生成加密文件 vim secret.xml <secret ephemeral='no' private='no'> <uuid>0d154ad2-ec21-4200-952f-7551503da8a1</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> c、加載加密文件 [root@compute1_10_1_2_232 ~]# virsh secret-define --file secret.xml Secret 0d154ad2-ec21-4200-952f-7551503da8a1 created d、配置libvirt加密,使用client.nova.key [root@compute1_10_1_2_232 ~]# virsh secret-set-value --secret 0d154ad2-ec21-4200-952f-7551503da8a1 --base64 $(cat /root/client.nova.key) Secret value set e、查看libvirt定義的key [root@compute1_10_1_2_232 ~]# virsh secret-list UUID Usage ----------------------------------------------------------- 0d154ad2-ec21-4200-952f-7551503da8a1 Unused