CloudStack 作為開源雲端平台,其原始碼建置及模擬環境的搭建對深入理解系統運作至關重要。本篇將著重於原始碼建置流程,並介紹 Marvin 模擬器和 DevCloud 沙盒環境的使用,最後會簡述 Vagrant 的整合方式,提供更進階的測試佈署選項。首先,準備 Ubuntu 或 CentOS 環境,並安裝 JDK、Maven、Git 和 MySQL。接著,從 GitHub 或 Apache 儲存函式庫取得 CloudStack 原始碼,使用 Maven 進行編譯,並設定資料函式庫。編譯完成後,利用 Jetty 啟動管理伺服器,即可在瀏覽器中存取 CloudStack 管理介面。
對於缺乏硬體資源的開發者,CloudStack 模擬器提供虛擬化資料中心體驗。安裝 Marvin 框架後,設定模擬器資料函式庫,並使用模擬器 Profile 啟動管理伺服器。利用 Marvin 佈署虛擬資料中心,即可開始探索 CloudStack 的功能。更進一步,DevCloud 提供更接近真實環境的沙盒,允許在本機執行 Xen 架構的 Hypervisor,並在其中啟動虛擬機器。安裝 VirtualBox、設定 Host-Only 介面,並下載及匯入 DevCloud 映像檔。透過 SSH 連線測試後,即可將 DevCloud 加入 CloudStack 環境,並使用 Marvin 佈署資料中心。
最後,Vagrant 結合 Chef 提供更彈性且可組態的 CloudStack 開發環境。利用 Vagrant Box 作為 Hypervisor、NFS 和 MySQL 伺服器,並在本機執行管理伺服器,連線遠端資料函式庫。透過 Chef Recipe 組態 NFS 和 MySQL 伺服器,以及 NAT 路由,並使用 Marvin 組態資料中心,即可完成 Vagrant 環境的搭建。
玄貓:手把手教你從原始碼建置與執行 CloudStack
身為一個熱愛開源技術的工程師,我(玄貓)經常需要深入研究各種專案的原始碼。最近,我在研究 CloudStack 這個雲端管理平台時,發現從原始碼建置並執行它,對於理解其內部運作原理非常有幫助。這篇文章將分享我如何從原始碼建置 CloudStack,並使用模擬器來快速體驗其功能。
為何選擇從原始碼建置?玄貓的經驗分享
或許你會問,為什麼不直接使用預先編譯好的套件呢?原因很簡單:
- 深入理解: 透過編譯原始碼,你可以更深入地瞭解 CloudStack 的架構和元件。
- 客製化: 如果你需要修改 CloudStack 的功能,或者為其新增新的特性,從原始碼建置是必經之路。
- 除錯: 當你遇到問題時,能夠直接檢視原始碼可以幫助你更快地找到問題的根源。
環境準備:開發你的 CloudStack 開發環境
在開始之前,你需要確保你的系統滿足以下條件:
- 作業系統: Ubuntu 或 CentOS 都可以,我個人偏好 Ubuntu,因為它的套件管理比較方便。
- Java 開發工具包(JDK): CloudStack 是用 Java 寫的,所以你需要安裝 JDK。建議使用 Oracle JDK 8 或 OpenJDK 8。
- Maven: CloudStack 使用 Maven 來管理專案的建置。
- Git: 用於從 Apache 儲存函式庫或 GitHub 取得原始碼。
- MySQL: CloudStack 使用 MySQL 作為資料函式庫。
下載原始碼:從 Apache 或 GitHub 取得 CloudStack
你可以從 Apache 的 Git 儲存函式庫或 GitHub 映象站下載 CloudStack 的原始碼。我個人建議使用 GitHub 映象站,因為速度通常比較快:
git clone -b 4.4 https://github.com/apache/cloudstack.git
這裡的 -b 4.4 是指定分支,4.4 是 CloudStack 的版本號。你可以根據需要選擇不同的版本。
編譯原始碼:將原始碼變成可執行檔
進入 CloudStack 原始碼目錄,使用 Maven 編譯原始碼:
cd cloudstack
mvn -Pdeveloper,systemvm clean install
這個指令會執行以下操作:
clean:清除之前的編譯結果。install:編譯原始碼並將編譯後的檔案安裝到本地 Maven 儲存函式庫。-Pdeveloper,systemvm:指定 Maven Profile,用於啟用開發者和系統虛擬機器相關的設定。
玄貓小提示: 如果你不想執行單元測試,可以加上 -DskipTests 引數,例如:
mvn -Pdeveloper,systemvm -DskipTests clean install
設定資料函式庫:建立 CloudStack 需要的資料表
編譯完成後,你需要建立 CloudStack 需要的資料表:
mvn -Pdeveloper -pl developer -Ddeploydb
這個指令會使用 Maven Profile developer,並執行 deploydb 目標,在 MySQL 資料函式庫中建立 CloudStack 需要的資料表。
啟動管理伺服器:用 Jetty 執行 CloudStack
最後,你可以啟動 CloudStack 管理伺服器。這裡我們使用 Jetty 作為 Web 伺服器:
mvn -pl :cloud-client-ui jetty:run
這個指令會啟動 Jetty,並將 CloudStack 管理介面佈署到 Jetty 上。你可以在瀏覽器中輸入 http://localhost:8080/client 來存取 CloudStack 管理介面。
玄貓經驗分享: 在我第一次執行 CloudStack 時,發現 Jetty 預設使用 8080 埠,這可能會與其他應用程式衝突。你可以修改 pom.xml 檔案中的 Jetty 設定,來更改 Jetty 使用的埠。
使用 CloudStack 模擬器:快速體驗 CloudStack 功能
如果你沒有實際的硬體資源來佈署 CloudStack,可以使用 CloudStack 模擬器來模擬一個虛擬的資料中心。
準備模擬器環境:安裝 Marvin
CloudStack 模擬器使用 Marvin 這個 Python 測試框架。你需要先安裝 Marvin:
sudo apt-get -y install python-dev
sudo pip install --allow-external mysql-connector-python mysql-connector-python
sudo pip install tools/marvin/dist/Marvin-0.1.0.tar.gz
設定模擬器資料函式庫:建立模擬器需要的資料表
除了 CloudStack 需要的資料表外,你還需要建立模擬器需要的資料表:
mvn -Pdeveloper -pl developer -Ddeploydb-simulator
啟動管理伺服器:用模擬器 Profile 執行 CloudStack
啟動 CloudStack 管理伺服器,並使用模擬器 Profile:
mvn -pl client jetty:run -Dsimulator
佈署模擬資料中心:使用 Marvin 建立虛擬環境
使用 Marvin 佈署一個基本的虛擬資料中心:
python ./tools/marvin/marvin/deployDatacenter.py -i setup/dev/basic.cfg
現在,你可以使用 admin/password 這個預設的帳號密碼登入 CloudStack 管理介面,體驗 CloudStack 的各種功能了。
## 利用 CloudStack 沙箱:DevCloud 開發你的虛擬雲端實驗室
在產品環境中,系統操作通常受到嚴格限制。為了測試新功能、API 客戶端或執行整合測試,模擬器是一個不錯的選擇。但有時,你可能需要更接近真實環境的測試平台。這時,DevCloud 就派上用場了!
### 為何選擇 DevCloud?告別模擬,擁抱真實虛擬化
模擬器雖然方便,但始終無法完全模擬真實的硬體環境。如果你想利用巢狀虛擬化技術,在本機執行 Xen 架構的 Hypervisor,並使用 CloudStack 在這個 Hypervisor 中啟動虛擬機器,DevCloud 會是你的理想選擇。
DevCloud 就像一個 CloudStack 沙箱,讓你可以在本機輕鬆搭建一個包含一個區域、一個 Pod、一個叢集和一個主機的迷你雲端環境。
### 準備好了嗎?DevCloud 的事前準備
在開始之前,請確保你的環境滿足以下條件:
1. **安裝 VirtualBox:** 這是執行 DevCloud 映像檔的基礎。
2. **設定 Host-Only 介面:** 在 VirtualBox 的偏好設定中,建立一個 Host-Only 介面,並停用 DHCP 伺服器。
3. **下載 DevCloud 映像檔:** 從官方網站下載最新的 DevCloud 映像檔。
4. **匯入 Appliance:** 在 VirtualBox 中,選擇「檔案」→「匯入 Appliance」,匯入 DevCloud 映像檔。
5. **檢查設定:** 確認虛擬機器的設定,並在處理器選單中啟用 "enable PAE" 選項。
6. **SSH 連線測試:** 啟動虛擬機器後,嘗試使用 `root/password` 憑證透過 SSH 連線到 `ssh root@192.168.56.10`。
如果成功連線,表示你已經準備好在執行管理伺服器的機器上組態一個包含一個區域、一個 Pod、一個叢集和一個 Hypervisor 的基本區域:DevCloud。
### 將 DevCloud 加入為 Hypervisor:步驟拆解
為了讓管理伺服器順利執行,我們需要進行一次乾淨的建置。但在設定資料函式庫時,我們會使用一些 DevCloud 特定的 Maven Profile,這些 Profile 會用符合此特定設定的值來填充一些資料表:
```bash
mvn -Pdeveloper,systemvm clean install
mvn -Pdeveloper -pl developer,tools/devcloud -Ddeploydb
完成後,按照 Recipe 1.4 的方式安裝 Marvin:
pip install tools/marvin/dist/Marvin-0.1.0.tar.gz
接著,使用 Jetty 啟動管理伺服器:
mvn -pl client jetty:run
此時,你會擁有一個正在執行的 CloudStack 管理伺服器,但基礎架構是空的。接下來,你需要組態 CloudStack,定義一個包含單一 Hypervisor 的資料中心。
為此,我們將使用 Marvin 目錄中的一個 Python 指令碼 deployDataCenter.py。這個指令碼接受一個 JSON 檔案作為輸入,並呼叫必要的 CloudStack API 來建立單一 Hypervisor 資料中心的區域、Pod、叢集、主機和儲存元件。以下是如何操作:
cd tools/devcloud
python ../marvin/marvin/deployDataCenter.py -i devcloud.cfg
如果你好奇,可以檢視 devcloud.cfg 檔案,瞭解資料中心是如何以 JSON 格式定義的。
現在,你可以登入管理伺服器 http://localhost:8080/client 並開始使用 UI 進行實驗。如果組態順利,你應該可以在儀錶板的「Infrastructure」標籤中看到定義好的基礎架構。在啟用區域並設定所有元件後,你可以前往「Instances」標籤並啟動一個執行個體。預設範本是一個 ttylinux 範本,你可以透過 SSH 連線進入。
DevCloud 的多種可能性:不只是一個 Hypervisor
管理伺服器在本機執行,而 DevCloud 僅用作 Hypervisor。但你也可以選擇在 DevCloud 內部執行管理伺服器,甚至在記憶體允許的情況下,執行多個 DevCloud。
使用 DevCloud 是開始使用 CloudStack 並啟動真實執行個體的好方法。你可以用它來學習 API 和 CloudStack 網路設定。
玄貓提醒: 截至撰寫本文時,DevCloud 無法與尚未發布的 CloudStack 4.4 一起使用。DevCloud 應在 4.4 發布時修復。Google Summer of Code 2014 專案正在開發替代解決方案(參見 Recipe 1.6)。
Vagrant 加持:更彈性的 CloudStack 測試佈署
告別 DevCloud?Vagrant 提供更多可能性
如果你喜歡 Recipe 1.5 的 DevCloud,但想要使用一個根據 Vagrant (Recipe 5.4) 和 Chef (Recipe 5.9) 的、更可組態和可管理的解決方案來啟動 CloudStack 開發環境,那麼這個根據 Vagrant 的專案會是你的新選擇。
解決方案:Vagrant + Chef,開發你的雲端實驗室
這個透過 Google Summer of Code (GSoC) 開發的專案,使用 Vagrant Box 作為 Hypervisor 以及 NFS 和 MySQL 伺服器。你將在本機執行 CloudStack 管理伺服器,並連線到遠端資料函式庫伺服器。你將使用 Marvin 組態資料中心,就像使用 DevCloud (Recipe 1.5) 一樣。
玄貓小提示: 這個 Recipe 假設你對 Vagrant 有一定的瞭解。如果沒有,請先閱讀 Recipe 5.4。NFS 和 MySQL 伺服器的組態,以及 NAT 路由,都是透過 Chef Recipe 完成的。這個 GSoC 專案旨在提供完整的 Chef Recipe 來安裝 CloudStack。
總結來說,DevCloud 和 Vagrant-based CloudStack 提供了不同的方式來建立 CloudStack 測試環境。DevCloud 簡單易用,適合快速上手;而 Vagrant 則更具彈性和可組態性,適合進階使用者。選擇哪種方式取決於你的需求和經驗。
玄貓(BlackCat)的技術文章:
從原始碼到套件:開發個人化 CloudStack 發布版本
在技術的世界裡,有時候我們不滿足於現成的解決方案,而是渴望深入底層,開發完全符合自己需求的工具。CloudStack,這個強大的雲端管理平台,也不例外。雖然社群提供了方便的二進位套件,但從原始碼編譯出自己的版本,不僅能客製化功能,還能確保安全性與合規性。身為玄貓,我將分享如何從原始碼開發 CloudStack 套件,讓你的雲端環境更貼近你的心。
準備工作:開發 CloudStack 的實驗環境
首先,你需要一個乾淨的實驗環境。VirtualBox 是個不錯的選擇,搭配 Vagrant 可以快速建立虛擬機器。以下是一些準備步驟:
-
安裝 VirtualBox: 確保你的機器上已安裝 VirtualBox。
-
設定 Host-Only 網路: 在 VirtualBox 中設定一個 Host-Only 網路介面,並停用 DHCP 伺服器。
-
取得原始碼: 從 GitHub 上克隆 CloudStack 的原始碼。這裡有個小技巧,使用
--recursive選項可以同時下載 Git 子模組:git clone --recursive https://github.com/imduffy15/GSoC-2014.git -
啟動虛擬機器: 使用 Vagrant 啟動管理機器和 XenServer 機器:
cd GSoC-2014 cd MySql_NFS_XenServer vagrant up這會建立一個根據 CentOS 6.5 的管理機器,並使用 Chef 進行組態。同時,也會啟動一個 XenServer 機器作為 Hypervisor。
-
編譯 CloudStack: 回到 CloudStack 目錄,編譯並執行管理伺服器。如果需要協助,可以參考之前的文章。
wget http://download.cloud.com.s3.amazonaws.com/tools/vhd-util \ -P scripts/vm/hypervisor/xenserver/ chmod +x scripts/vm/hypervisor/xenserver/vhd-util mvn -P developer,systemvm clean install -DskipTests=true mvn -P developer -pl developer,tools/devcloud -Ddeploydb mvn -pl :cloud-client-ui jetty:run -
佈署 DevCloud: 安裝 Marvin 並佈署 DevCloud 組態:
pip install tools/marvin/dist/Marvin-0.1.0.tar.gz python tools/marvin/marvin/deployDataCenter.py -i ../devcloud.cfg
從原始碼建置 CloudStack 套件:客製化的力量
當你修改了 CloudStack 的原始碼,想要將這些變更封裝成可安裝的套件時,該怎麼做呢?玄貓將分享如何在 Ubuntu 和 CentOS/RHEL 系統上建置 CloudStack 套件。
Ubuntu 系統:
-
安裝額外套件: 建置 Debian 套件需要一些額外的套件:
apt-get -y install python-mysqldb apt-get -y install debhelper apt-get -y install tomcat6 -
建置套件: 使用
dpkg-buildpackage命令建置套件:dpkg-buildpackage -uc -us建置完成後,你可以在 CloudStack 根目錄的上一層目錄找到以下檔案:
cloudstack_4.4.0_amd64.changes cloudstack_4.4.0.dsc cloudstack_4.4.0.tar.gz cloudstack-agent_4.4.0_all.deb cloudstack-awsapi_4.4.0_all.deb cloudstack-cli_4.4.0_all.deb cloudstack-common_4.4.0_all.deb cloudstack-docs_4.4.0_all.deb cloudstack-management_4.4.0_all.deb cloudstack-usage_4.4.0_all.deb
CentOS/RHEL 系統:
-
安裝額外套件: 在 CentOS/RHEL 系統上,你需要安裝以下套件:
yum -y install rpm-build yum -y install tomcat6 yum -y install ws-commons-util yum -y install gcc yum -y install glibc-devel yum -y install MySQL-python -
建置套件: 執行
packaging/centos63/package.sh指令碼來建置套件:./packaging/centos63/package.sh建置完成後,RPM 檔案會位於
./dist/rpmbuild/RPMS/x86_64目錄下。
從套件到基礎架構:快速佈署 CloudStack 雲端環境
如果不想從原始碼編譯,也可以直接使用社群提供的套件函式庫。但玄貓更喜歡自己動手,因為這樣可以完全掌握每個細節。接下來,玄貓將示範如何使用套件快速佈署一個 CloudStack 雲端環境。
準備工作:
- 硬體需求: 至少需要兩台機器:一台作為管理伺服器,另一台作為 KVM Hypervisor。
- 作業系統: 這裡以 Ubuntu 14.04 為例,其他作業系統可能需要調整指令。
設定管理伺服器:
-
安裝 CloudStack 管理伺服器套件:
apt-get update apt-get install cloudstack-management -
設定 MySQL 資料函式庫: CloudStack 需要一個 MySQL 資料函式庫來儲存組態資訊。
-
設定 NFS 伺服器: NFS 伺服器用於儲存虛擬機器的映像檔。
設定 KVM Hypervisor:
-
安裝 KVM 相關套件:
apt-get update apt-get install qemu-kvm libvirt-bin bridge-utils -
設定 Linux Bridge: 建立一個 Linux Bridge,讓虛擬機器可以連線到網路。
-
掛載 NFS 分享: 將管理伺服器上的 NFS 分享掛載到 KVM Hypervisor 上。
設定基本網路區域:
- 登入 CloudStack 管理介面: 預設網址是
http://localhost:8080/client。 - 建立區域: 建立一個基本網路區域,使用分享 Layer 3 網路。
- 設定安全性群組: 使用安全性群組來隔離租戶,而不是 VLAN 或其他 Layer 2 隔離方法。
玄貓認為,這種基本設定方式與 DevCloud (參考 Recipe 1.5) 類別似,但使用套件安裝,並以 KVM 取代 Xen Hypervisor。
玄貓觀點:掌握 CloudStack 的力量
無論是從原始碼編譯,還是使用現成套件,CloudStack 都是一個強大的雲端管理平台。身為玄貓,我鼓勵大家深入研究 CloudStack 的底層機制,開發最適合自己的雲端環境。掌握 CloudStack 的力量,你就能在雲端世界中自由翱翔。