rabbit_host = controller qpid_host = controller ...
[paste_deploy]
flavor = keystone // 使 用 Keystone 認 證
2. 設定 glance-registry。
1
OpenStack 裡的 Image 或 Snapshot 類似於 VMware 裡的 Template(樣板),是可用來開啟另外的虛擬機,
而不是用來回朔虛擬機狀態。
# vim glance-registry.conf
bind_host = 192.168.100.1 // listen 在 192.168 網 段
#sql_connection = sqlite:////var/lib/glance/glance.sqlite
sql_connection = mysql://root:<<yourglancedbpw>>@controller/glance // 使 用 mysql ...
[paste_deploy]
flavor = keystone // 使 用 Keystone 認 證
3. 設定 glance-api-paste.ini,glance-registry-paste.ini 這兩個檔案。這邊須注意目前官 方的文件仍建議使用 glance_auth_token:filter_factory,這是已過時的寫法,請使用 Ubuntu 內建的設定檔即可。
// 兩 份 檔 案 皆 只 需 修 改 向 Keystone 認 證 的 部 分 即可。
# vim glance-api-paste.ini
# vim glance-registry-paste.ini
service_host = controller // 指 定 要 認 證 的 主 機位置 auth_host = controller
auth_uri = http://controller:5000/
// 這 邊 我 們 使 用 剛 剛 利 用 Keystone 建 立 的 service user(glance) 來 跟 keystone 做 溝 通 即可。
admin_tenant_name = service admin_user = glance
admin_password = <<yourservicepw>>
4. 設定檔已修改完畢,我們可以初始化 glance 的資料庫。
# glance-manage version_control 0
# glance-manage db_sync
5. 重開 Glance 所有服務,然後一樣要設定好環境變數,就可以列出目前 Glance 上的 映像檔,測試看看運作是否正確。Glance 的安裝到這邊告一段落,這邊須注意的 是我們還沒設定好跟 Ceph 整合的部分,所以暫時還不能上傳映像檔。
# service glance-api restart && service glance-registry restart
# vim .glancerc
export OS_AUTH_URL=http://controller:5000/v2.0/
# glance index
ID Name Disk Format Container Format Size
--- --- --- ---
---Glance with Ceph RBD
Glance 服務提供了很多方式存放虛擬機的映像檔,因為映像檔本身就可以看成是 一個大的 object,所以除了可以設定要存放在本地磁碟上,也支援放到常見的 object storage service,如 Swift、Amazon S32,以及,存放到 Ceph 上:
1. 要讓 Glance 使用 Ceph 當儲存後端需要先在 Ceph 端建立一個供 Glance 使用的帳 號與儲存池 (pool),以及將 Ceph 金鑰 (keyring) 複製回 Glance 主機供 Glance 程式 使用。
// 到 Ceph 上 建 立 要 讓 Glance 存 放 映 像 檔 的 pool,名 為 images。
ceph-mon# rados mkpool images
// 建 立 Glance 要 使 用 的 帳 號 (client.glance) 與 金 鑰 檔,設 定 帳 號 權 限 為 只 能 存 取 images pool。
ceph-mon# ceph-authtool --create-keyring image.keyring
ceph-mon# ceph-authtool --gen-key --name client.glance image.keyring
ceph-mon# ceph auth add client.glance mon 'allow r' osd 'allow rwx pool=images' \ -i image.keyring
// 將 金 鑰 檔 拷 貝 回 Glance 主 機,並 設 定 權限。
ceph-mon# scp image.keyring root@glance:/etc/glance/image.keyring glance# chown glance:glance image.keyring
glance# chmod 600 image.keyring
// 定 義 client.glance 這 個 使 用 者 的 金 鑰 位置。
glance# vim /etc/ceph/ceph.conf
[client.glance]
keyring = /etc/glance/image.keyring
2. 接著設定 Glance 使用我們剛剛建立的帳號來存取 Ceph RBD 上的 images 儲存池 (pool)。
# vim /etc/glance/glance-api.conf default_store = rbd
...
rbd_store_ceph_conf = /etc/ceph/ceph.conf // 後 端 使 用 Ceph RBD rbd_store_user = glance
rbd_store_pool = images rbd_store_chunk_size = 8
3. 如此就完成了 Glance 與 Ceph 的整合,重開服務後就可以試著上傳一個映像檔了。
glance# service glance-api restart; service glance-registry restart // 載 入 執 行 glance 指 令 所 需 的 環 境設定
glance# . .glancerc glance# glance index
// 下 載 Ubuntu 12.04 的 雲 端 版 本 映 像檔。
glance# wget
http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-2
可以參考/etc/glance/glance-api.conf。
amd64-disk1.img
// 上 傳 一 個 公 開 的 映 像檔。
glance# glance add name="Ubuntu 12.04 cloud\" is_public=true container_format=ovf \ disk_format=qcow2 < ./precise-server-cloudimg-amd64-disk1.img
glance# glance index
ID Name Disk Format Container Format Size
--- ---- --- ---df23d532-9143-234 Ubuntu 12.04 cloud qcow2 ovf 230752256
4.2.3 Nova-volume 安裝步驟
Nova-volume 服務提供了虛擬機額外的邏輯磁碟,除了可以在虛擬機開機後動態的 增減虛擬機上的磁碟,Essex 版的 OpenStack 也支援使用 volume 來讓虛擬機開機,這個 服務因為相當重要,因此到了 OpenStack 下一個版本 Folsom 將獨立成一個核心專案-
Cinder。我們來介紹他的安裝步驟,以及如何將它處理的 volume 存放到 Ceph 上。
1. 先安裝好 nova-volume 套件,設定檔則修改向 Keystone 認證的部分即可。
# aptitude install nova-volume
# vim /etc/nova/api-paste.ini ...
[filter:authtoken]service_host = controller auth_host = controller
auth_uri = http://controller:5000/
admin_tenant_name = service admin_user = nova
admin_password = <<yourservicepw>>
Nova-volume with Ceph RBD
Nova-volume 預設使用 iSCSI 協定和名為 nova-volumes 的 LVM volume group 來儲存 虛擬磁碟 (volume) 的資料3,但這樣的問題是容易遇到 iSCSI 伺服器的效能瓶頸,而且 得另外維護 iSCSI 伺服器,增加管理上的複雜度。
因為虛擬磁碟與虛擬機的開機映像檔性質類似,皆是一份巨大的檔案 (或者看成一 個物件),因此我們希望統一使用 Ceph RBD 來當作 volume 的儲存後端,以下說明設定 步驟:
1. 在 Ceph 上建立一個名為 volume 的儲存池 (pool) 給 Nova-volume 來存放所有的資 料,並且建立一個使用者 (client.volume) 權限設定成只能存取 volume pool,再把 產生的金鑰 (keyring) 複製回運行 Nova-volume 的機器。
3
在 nova.conf 裡預設 volume_driver=nova.volume.driver.ISCSIDriver,volume_group=nova-volumes。
ceph-mon# rados mkpool volume // 建 立 帳 號 及 設 定 權限。
ceph-mon# ceph-authtool --create-keyring volume.keyring
ceph-mon# ceph-authtool --gen-key --name client.volume volume.keyring
ceph-mon# ceph auth add client.volume mon 'allow r' osd 'allow rwx pool=volume' \ -i volume.keyring
// 複 製 回 nova-volume 主機。
ceph-mon# scp volume.keyring root@volume:/etc/nova/volume.keyring // 回 到 nova-volume 主 機,修 改 金 鑰 權限。
volume# chmod 600 /etc/nova/volume.keyring volume# chown nova:nova /etc/nova/volume.keyring
2. 參考 4.1節加入 Ceph 官方套件庫。
3. 安裝 ceph-common 套件,並建立 ceph.conf 設定檔 [附錄 A.2] 指明 Nova-volume 所 使用的 Ceph client 以及金鑰檔位置。
// 安 裝 操 作 RADOS 所 需指令
volume# aptitude install ceph-common
// 因 為 rados 指 令 預 設 會 讀 取 這 個 位 置 的 設 定 檔,所 以 我 們 在 這 邊 建立。
volume# vim /etc/ceph/ceph.conf
// 指 定 nova-volume 所 使 用 的 帳 號 (client.volume) 及 金 鑰 位置。
[client.volume]
keyring = /etc/nova/volume.keyring // 測 試 可 否 正 常 執 行 rados 指令。
volume# sudo -u nova rados --id volume -p volume ls
4. 接著要稍微修改 nova-volume 的啟動程序,讓 rados 用我們剛剛建立的 client.volume 身分來存取 Ceph[21]。
volume# vim /etc/init/nova-volume.conf
\\ 添 加 env CEPH_ARGS=\"--id volume\"
exec su -s /bin/sh -c "exec env CEPH_ARGS=\"--id volume\" nova-volume --flagfile=/
etc/nova/nova.conf" nova
5. 修改/etc/nova/nova.conf,讓 nova-volume 使用 Ceph RBD(RADOS) 來存放 volume。
# nova-volume use Ceph RBD backend
volume_driver=nova.volume.driver.RBDDriver rbd_pool=volume
rbd_user=volume
6. 接著重啟 nova-volume 就完成了,可以試著建立一個 1G 大小的 volume,並到 Ceph 上看看結果。
volume# service nova-volume restart // 載 入 執 行 nova 指 令 時 所 需 的 環 境設定 volume# . .novarc
volume# nova volume-create --display_name=test-1G-vol 1
volume# nova volume-list ceph-mon# rbd --pool volume ls
volume-00000001
ceph-mon# rbd --pool volume info volume-00000001
rbd image 'volume-00000001':
size 1024 MB in 256 objects order 22 (4096 KB objects) block_name_prefix: rb.0.0 parent: (pool -1)
4.2.4 Compute Workers 安裝步驟
有安裝 nova-compute 服務的機器稱之為運算節點 (compute worker) 負責最重要的任 務-開啟虛擬機。在設定 compute worker 時,除了要指定希望使用的 hypervisor,另外 我們也使用了 PHA 網路模式,讓每台運算節點也負責處理虛擬機的網路活動。
第一段,我們將介紹在每個 compute worker 上都安裝 nova-network 以及 nova-api-metadata,讓所有虛擬機都可以直接靠它所在的宿主機與外界溝通,不用只靠一個中央 的 nova-network 主機來轉送網路封包,避免 single point of failure(如圖 3.4);另外由於 Essex 版本的 OpenStack 在同一個 Zone 下僅能使用相同的 hypervisor,因此我們統一使 用 KVM(Kernel-based Virtual Machine) 來運行虛擬機。
第二段介紹如何讓虛擬機開機後產生的資料存放到共享儲存 (shared storage),讓虛 擬機擁有動態遷移 (live migration) 的能力。
第三段我們提出了一個解決方案 (PHA 模式),修改部分 Nova-network 的程式碼,讓 我們的 compute workers 不用預先綁定公開 IP,在大量擴展運算節點時減少了 IP 的使 用,也增加了安全性。
1. 安裝 compute node 所需套件,除了剛剛說明所需的套件之外,需另外安裝一電源 管理程式讓 libvirt 使用 [21]。
# aptitude install nova-compute nova-compute-kvm
# aptitude install nova-network nova-api-metadata python-keystone
# aptitude install pm-utils
2. 一樣要確認 nova-rootwrap 有無加進 sudoers 裡。
# visudo
nova ALL=(root) NOPASSWD: /sbin/vgs,/usr/bin/nova-rootwrap,/sbin/iptables-restore,/
sbin/iptables-save
3. 確認 api-paste 設定檔,裡與 Keystone 溝通的部分。
# vim /etc/nova/api-paste.ini ...
[filter:authtoken]service_host = controller auth_host = controller
auth_uri = http://controller:5000/
admin_tenant_name = service admin_user = nova
admin_password = <<yourservicepw>>
4. 我們的 hypervisor 使用 KVM,所以要告訴 nova。
# vim /etc/nova/nova-compute.conf --libvirt_type=kvm
5. nova.conf 設定檔說明了虛擬機的網路環境 (Flat DHCP, VLAN 等),VNC(Virtual Network Computing)的運作方式,與 compute worker 息息相關,因此我們將會在 之後 4.3節專門介紹。
# vim /etc/nova/nova.conf
6. 因為 nova 使用自己的 dnsmasq 來替虛擬機指派 IP,我們可以藉由設定 dhcp-option 來告訴虛擬機更多網路設定資訊。
// option=6 為 設 定 domain name server。
# echo "dhcp-option=6,140.113.235.107,8.8.8.8" | sudo tee /etc/nova/nova-dnsmasq.conf
# sudo chown nova:nova /etc/nova/nova-dnsmasq.conf
7. 因為我們的虛擬機網路使用 VLAN 模式,所以需要安裝額外的套件,並開啟 Kernel 的 802.1q module,讓從網卡出去的封包帶有 VLAN Tag,同時也要確定 Kernel 有開啟封包轉送的功能,這樣 computer worker 的安裝即告一段落。
# aptitude install vlan
# echo "8021q" | sudo tee -a /etc/modules // 開 機 自 動 載 入 802.1q 模 組
# modprobe 8021q
# echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward // 開 啟Kernel 封 包 轉 送功能
Compute worker with Ceph FS
預設情形下 nova-compute 在開啟虛擬機時,都是先將使用者指定的映像檔從 Glance 下載到 $instances_path/_base4,並利用該映像檔當作快取,建立一個 copy on write 模式