• 沒有找到結果。

而不是用來回朔虛擬機狀態。

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 模式