CloudStack 作為一個成熟的開源雲端平台,其 API 的豐富性和靈活性一直備受推崇。對於想要實作雲端自動化管理的開發者來說,深入理解 CloudStack API 的使用至關重要。本文將從實戰角度出發,帶領讀者探索 CloudStack API 的各種用法,並結合 CloudMonkey 這個強大的 Python 工具,示範如何更有效率地管理雲端資源。

CloudStack API 採用根據 HTTP 的查詢式設計,支援 XML 和 JSON 格式的資料交換,並提供全面的功能覆寫,從虛擬機器管理到網路組態,幾乎所有操作都可以透過 API 完成。這使得開發者能夠輕鬆地將 CloudStack 整合到自己的自動化流程中。

在實際應用中,使用 CloudMonkey 可以簡化與 CloudStack API 的互動。CloudMonkey 是一個根據 Python 的命令列工具,提供了一套簡潔易用的指令,可以快速執行各種 CloudStack 操作。例如,要列出所有可用的虛擬機器,只需執行 list virtualmachines 指令即可。

更進一步地,CloudMonkey 支援 Python 指令碼的執行,這意味著你可以將複雜的雲端管理任務自動化。例如,你可以編寫一個 Python 指令碼,自動建立、組態和佈署虛擬機器,並根據需要進行擴充或縮減。

以下是一個使用 CloudMonkey 建立虛擬機器的 Python 指令碼範例:

from cloudmonkey import cloudmonkey

cloudmonkey.config('config') # 載入 CloudStack 設定

vm_name = "my_vm"
service_offering_id = "12345678-90ab-cdef-0123-456789abcdef"
template_id = "87654321-0fed-cba9-8765-43210fedcba9"
zone_id = "fedcba98-7654-3210-fedc-ba9876543210"

cloudmonkey.run('deploy virtualmachine name=%s serviceofferingid=%s templateid=%s zoneid=%s' % (vm_name, service_offering_id, template_id, zone_id))

這個指令碼使用了 cloudmonkey.run 函式來執行 CloudStack API 指令。透過傳遞不同的引數,可以控制虛擬機器的名稱、服務組態、範本和區域等屬性。

除了 CloudMonkey 之外,還有許多其他的 CloudStack API 客戶端可供選擇,例如 Java 的 jclouds 和 Ruby 的 StackerBee。開發者可以根據自己的技術堆疊選擇最合適的工具。

總之,CloudStack API 為雲端自動化管理提供了強大的支援。透過結合 CloudMonkey 等工具,開發者可以更輕鬆地管理和控制雲端資源,提升效率並降低維運成本。

玄貓解密:在 Ubuntu 14.04 上從零開發 CloudStack 管理伺服器

前言:為何選擇社群套件函式庫?

在架設 CloudStack 管理伺服器時,我個人偏好從社群套件函式庫開始,這能讓我們更深入瞭解每個環節,並在客製化上擁有更大的彈性。這次,我將分享如何在乾淨的 Ubuntu 14.04 伺服器上,一步步安裝 CloudStack 管理伺服器,並避開一些常見的坑。

準備工作:伺服器環境與網路設定

首先,確保你的 Ubuntu 14.04 伺服器是乾淨的,並且具備基本的網路連線能力。以下是我建議的步驟:

  1. 更新系統:保持系統在最新狀態是良好的習慣。

    apt-get update
    
  2. 安裝 NTP:時間同步對於分散式系統至關重要,確保所有節點時間一致。

    apt-get -y install openntpd
    
  3. 安裝 SSH 伺服器:方便遠端管理,強烈建議安裝。

    apt-get -y install openssh-server
    
  4. 安裝 MySQL 伺服器:CloudStack 需要資料函式庫來儲存組態和狀態資訊。

    apt-get -y install mysql-server
    
  5. 安裝 libmysql-java:這個套件在 CloudStack 4.3.0 版本中是必需的,但在後續版本已修復。

    apt-get -y install libmysql-java
    

網路設定:讓管理伺服器與 Agent 溝通無礙

CloudStack 環境中的網路設定至關重要。在這個範例中,管理伺服器和 KVM hypervisor 都有兩個網路介面:一個連線公共網路(10.0.0.0/0),另一個連線私有網路(192.168.38.0/0)。

  • 管理伺服器在私有網路上的 IP 是 192.168.38.100
  • KVM hypervisor 的 IP 則是 192.168.38.101

為了方便管理,編輯 /etc/hosts 檔案,設定主機名稱:

# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 server
192.168.38.100 server server.cloud
192.168.38.101 agent agent.cloud

這樣設定後,你就可以在各個機器上透過 ping serverping agent 來測試連線。

網路介面的設定也很重要。以下是一個範例 /etc/network/interfaces 檔案:

# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
dns_nameservers 8.8.8.8 8.8.4.4
post-up route add default gw 10.0.0.1

auto eth1
iface eth1 inet static
address 192.168.38.100
gateway 192.168.38.1
netmask 255.255.255.0

在這個設定中,eth0 從 DHCP 伺服器取得 IP,並提供連線到公共網路的路由。eth1 則被靜態分配 IP 位址。

設定 CloudStack 社群套件函式庫

接下來,我們要設定 CloudStack 社群套件函式庫,這樣才能取得所需的套件。

  1. 新增套件函式庫:編輯 /etc/apt/sources.list.d/cloudstack.list 檔案,加入以下內容:

    deb http://cloudstack.apt-get.eu/ubuntu precise 4.3
    

    請注意,4.3 是 CloudStack 的版本號碼,請根據你想要的版本進行調整。

  2. 新增公鑰:將公鑰加入信任金鑰,並更新 apt 快取。

    wget -O - http://cloudstack.apt-get.eu/release.asc|apt-key add -
    apt-get update
    

安裝 CloudStack 管理伺服器套件

現在,你可以安裝 CloudStack 管理伺服器套件了:

apt-get install cloudstack-management

這個指令會下載並安裝所有必要的檔案,為設定 CloudStack 管理伺服器做好準備。

玄貓提醒:安全設定與後續步驟

請記住,這只是一個基本的測試設定。在生產環境中,強烈建議設定更安全的 MySQL 密碼,並限制 root 使用者的 SSH 存取。

完成這些步驟後,你就可以繼續設定資料函式庫,並啟動 CloudStack 管理伺服器了。在後續的文章中,我會分享如何設定 KVM hypervisor,讓你的 CloudStack 環境真正運作起來。

雲端堆積疊資料函式庫組態:快速啟動

在完成相依性安裝後,下一步是設定資料函式庫。雖然雲端堆積疊支援在獨立節點上執行資料函式庫,但為了簡化快速啟動流程,我們將在本機完成所有設定。

執行以下命令來組態資料函式庫:

cloudstack-setup-databases cloud:<dbpassword>@localhost \
--deploy-as=root:<password> \
-e <encryption_type> \
-m <management_server_key> \
-k <database_key> \
-i <management_server_ip>

如果像先前建議的那樣,以無密碼的 root 身分佈署,且不使用加密,則執行此設定命令的輸出應類別似於以下內容:

# cloudstack-setup-databases cloud:cloud@localhost --deploy-as=root
Mysql user name:cloud [ OK ]
Mysql user password:****** [ OK ]
Mysql server ip:localhost [ OK ]
Mysql server port:3306 [ OK ]
Mysql root user name:root [ OK ]
Mysql root user password:****** [ OK ]
Checking Cloud database files ... [ OK ]
Checking local machine hostname ... [ OK ]
Checking SELinux setup ... [ OK ]
Detected local IP address as 185.19.28.99,
will use as cluster management server node IP[ OK ]
Preparing /etc/cloudstack/management/db.properties [ OK ]
Applying /usr/share/cloudstack-management/setup/create-database.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/create-schema.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/create-database-premium.sql[ OK ]
Applying /usr/share/cloudstack-management/setup/create-schema-premium.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/server-setup.sql [ OK ]
Applying /usr/share/cloudstack-management/setup/templates.sql [ OK ]
Processing encryption ... [ OK ]
Finalizing setup ... [ OK ]
CloudStack has successfully initialized database, you can check your database
configuration in /etc/cloudstack/management/db.properties

內容解密

  1. cloud:<dbpassword>@localhost: 指定 CloudStack 資料函式庫的使用者名稱和密碼,以及資料函式庫伺服器的位置。
  2. --deploy-as=root:<password>: 使用 root 使用者身分佈署資料函式庫,並設定 root 使用者的密碼。
  3. -e <encryption_type>: 設定加密型別。
  4. -m <management_server_key>: 設定管理伺服器金鑰。
  5. -k <database_key>: 設定資料函式庫金鑰。
  6. -i <management_server_ip>: 設定管理伺服器的 IP 位址。

現在,您可以完成設定並啟動管理伺服器。以下命令將正確設定 iptables、提供 sudoers 存取權,並重新啟動管理伺服器:

cloudstack-setup-management

您可以使用以下命令檢查狀態或重新啟動管理伺服器:

service cloudstack-management <status|restart>

現在,您應該可以透過 http://localhost:8080/client 登入管理伺服器 UI(如果需要,請將 localhost 替換為適當的 IP 位址)。預設登入帳號是 admin,預設密碼是 password。點選「I have used CloudStack before」圖示,直接進入主儀錶板。此時,您已成功執行 CloudStack 管理伺服器,但尚未組態任何 hypervisor 和儲存。

建立映像目錄並使用 SystemVM 範本進行初始化

在雲端環境中,所有 Hypervisor 都需要存取映像目錄。本文將說明如何建立映像目錄,並使用 CloudStack 系統虛擬機器 (SVM) 的範本來初始化它。這些 SVM 在雲端中執行,並由 CloudStack 用於協調快照、主控台代理和網路服務等功能。

解決方案

設定 NFS 伺服器,並將 NFS 分享匯出到您的 Hypervisor。使用在管理伺服器設定期間安裝的 CloudStack 指令碼,以提取 SVM 的範本並將其儲存在 NFS 分享中。

討論

CloudStack 有兩種儲存型別:主要儲存和次要儲存。主要儲存在叢集層級定義,並且在組成叢集的 Hypervisor 上可用。在本次安裝中,我們將使用本機儲存作為主要儲存。次要儲存是整個區域分享的,並託管映像範本和快照。在本次安裝中,我們將使用與執行管理伺服器相同的節點上執行的 NFS 伺服器。

安裝 NFS 套件:

apt-get install nfs-kernel-server portmap
mkdir -p /export/secondary
chown nobody:nogroup /export/secondary

基礎架構中的 Hypervisor 以及次要儲存 VM 將掛載此次要儲存。編輯 /etc/exports,以便這些節點可以掛載分享。例如:

/export/secondary 192.168.38.0/24(rw,async,fsid=0,no_root_squash)

然後為您的匯出建立 NFS 表格,並啟動 NFS 伺服器服務:

exportfs -a
service nfs-kernel-server start

目前我們沒有為 NFS 伺服器設定任何防火牆規則。

現在,我們需要使用 SystemVM 範本來初始化此次要儲存。SystemVM 是在基礎架構的其中一個 Hypervisor 上執行的小型裝置,有助於協調雲端。我們有管理映像放置和快照的次要儲存 VM;處理與例項的 VNC 連線的代理 VM;以及提供網路服務的虛擬路由器。若要在 Ubuntu 上為 KVM Hypervisor 使用系統 VM 範本來初始化次要儲存:

# /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt \
-m /export/secondary \
-u http://download.cloud.com/templates/4.3 \
/systemvm64template-2014-01-14-master-kvm.qcow2.bz2 \
-h kvm -s <optional-management-server-secret-key> -F

內容解密

  1. /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt: 這是 CloudStack 提供的用於安裝系統範本的指令碼路徑。
  2. -m /export/secondary: 指定次要儲存的掛載點,也就是 NFS 分享的路徑。
  3. -u http://download.cloud.com/templates/4.3: 指定範本下載的 URL。
  4. /systemvm64template-2014-01-14-master-kvm.qcow2.bz2: 這是要下載和安裝的具體範本檔案名稱。
  5. -h kvm: 指定 Hypervisor 型別為 KVM。
  6. -s <optional-management-server-secret-key>: 指定管理伺服器的金鑰(如果有的話)。
  7. -F: 強制安裝,覆寫現有範本。

在本設定中,我們未使用管理伺服器金鑰,因此您不需要指定 -s 選項。

準備 KVM Hypervisor

在成功設定 CloudStack 管理伺服器後,下一步是準備 KVM Hypervisor。本文將說明如何在 Ubuntu 14.04 伺服器上設定 KVM Hypervisor,並將其連線到 CloudStack 環境。

問題

您已成功執行管理伺服器,但仍需要設定 Hypervisor。CloudStack 與 Hypervisor 無關,因此支援 VMware Esxi、Hyper-V、XenServer、LXC 和 KVM。若要使用 CloudStack 設定 KVM Hypervisor,您需要掛載次要儲存並在其上安裝 CloudStack 代理程式。

解決方案

在全新的 Ubuntu 14.04 伺服器上,安裝 NFS 客戶端並掛載在 Recipe 2.3 中設定的次要儲存。在設定 CloudStack 套件儲存函式庫 (Recipe 2.2) 之後,您將安裝 KVM CloudStack 代理程式,並最終正確設定主機名稱和本機 DNS 名稱。

討論

在本文中,我們將設定 Ubuntu 14.04 KVM Hypervisor。在 Recipe 2.3 中設定的次要儲存需要掛載在此節點上。讓我們先進行掛載。首先,在此伺服器上安裝 openntpd(用於時間同步的服務)以及 NFS 客戶端套件。然後掛載從管理伺服器匯出的次要儲存 NFS 檔案系統:

apt-get install openntpd nfs-common
mount <management-server-ip>:/export/secondary /mnt

內容解密

  1. apt-get install openntpd nfs-common: 安裝 NTP 用於時間同步,以及 NFS 客戶端工具。
  2. mount <management-server-ip>:/export/secondary /mnt: 掛載管理伺服器上的 NFS 分享到本機的 /mnt 目錄。

完成上述步驟後,您的 KVM Hypervisor 應該已成功設定並連線到 CloudStack 環境。

總結來說,本文探討瞭如何快速組態 CloudStack 資料函式庫、建立映像目錄、初始化 SystemVM 範本,以及準備 KVM Hypervisor。這些步驟是成功佈署 CloudStack 環境的關鍵,並為後續的雲端資源管理和虛擬機器佈署奠定基礎。透過這些組態,玄貓希望能幫助讀者更輕鬆地建立和管理自己的雲端基礎架構。

KVM Hypervisor 準備:玄貓的基礎組態

在架設 CloudStack 環境時,KVM hypervisor 的準備是至關重要的一步。玄貓將分享如何正確組態你的 KVM hypervisor,確保它能與 CloudStack 管理伺服器順利溝通。

儲存設定:NFS 與本地儲存的選擇

首先,你需要設定儲存。在這裡,我們將使用 NFS 作為輔助儲存。

apt-get install openntpd
apt-get install nfs-common portmap
mkdir -p /mnt/export/secondary
mount -t nfs 192.168.38.100:/export/secondary /mnt/export/secondary

玄貓解密

  • apt-get install openntpd: 安裝 NTP client,確保時間同步。
  • apt-get install nfs-common portmap: 安裝 NFS client 工具。
  • mkdir -p /mnt/export/secondary: 建立掛載點。
  • mount -t nfs 192.168.38.100:/export/secondary /mnt/export/secondary: 掛載 NFS 分享目錄。

掛載完成後,使用 df -hmount 命令確認掛載是否成功。接著,建立一個測試檔案:

touch /mnt/export/secondary/foobar

確認可以從管理伺服器編輯這個檔案。為了確保重新啟動後仍然掛載,編輯 /etc/fstab 並加入以下這行:

192.168.38.100:/export/secondary /mnt/export/secondary nfs auto 0 0

至於主要儲存,我們將使用本地儲存。這需要在設定基礎架構時組態。你需要設定 systemvm.use.local.storageTrue,然後重新啟動管理伺服器。

主機名稱與 DNS 設定:玄貓的標準組態

設定主機名稱和本機 DNS 名稱也是重要步驟。編輯 /etc/hostname/etc/hosts 檔案:

# cat /etc/hostname
agent
# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 agent
192.168.38.100 server server.cloud
192.168.38.101 agent agent.cloud

玄貓提示:請根據你的環境修改 IP 位址。

安裝 CloudStack KVM Agent:讓管理伺服器與 Hypervisor 溝通

管理伺服器和 KVM hypervisor 之間的互動透過在 hypervisor 上執行的 agent 進行。這個 agent 使用 Java 撰寫,並利用 libvirt-java bindings 管理在主機上啟動的執行個體。

首先,加入 CloudStack repository:

echo deb http://cloudstack.apt-get.eu/ubuntu precise 4.3 \
> /etc/apt/sources.list.d/cloudstack.list
wget -O - http://cloudstack.apt-get.eu/release.asc|apt-key add -
apt-get update

然後安裝 CloudStack KVM agent:

apt-get -y install cloudstack-agent

玄貓提醒:先別急著啟動 agent,讓我們先設定 libvirt

設定 libvirt:玄貓的安全考量

CloudStack agent 使用 libvirt Java bindings,因此需要正確設定 libvirt

編輯 /etc/libvirt/libvirt.conf 並加入:

listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0

此外,編輯 /etc/init/libvirt-bin.conf 修改 libvirt 選項:

env libvirtd_opts="-d -l"

然後重新啟動 libvirt

service libvirt-bin restart

為了確保安全策略正確設定,檢查 apparmor 是否正在執行:

dpkg --list 'apparmor'

如果 apparmor 正在執行,執行以下命令停用 libvirt 的安全策略:

ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/
ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/
apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd
apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper

基本網路組態與 NAT Router 設定:玄貓的網路考量

設定網路,使虛擬機器可以透過 CloudStack 進行佈建。假設所有虛擬機器分享相同的 Layer 2 網路。設定一個 Linux bridge(虛擬交換器),讓虛擬介面可以連線到這個交換器,並正確轉發流量。

首先,在管理伺服器上設定 IPv4 轉發:

# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

編輯 /etc/sysctl.conf 以在重新啟動後設定它(取消註解 net.ipv4.ip_forward=1 行)。

設定 iptables 轉發並儲存規則:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

網路橋接設定:KVM Hypervisor 的網路連線

在 KVM hypervisor 上設定網路橋接,目的是讓在這個 hypervisor 上執行的虛擬機器能夠連上網路。設定方式會根據你的網路介面數量,以及是否使用 VLAN 而有所不同。在只有一個網路介面的情況下,設定會相對簡單。

一開始,我們在 KVM hypervisor 上設定了兩個網路介面,方便在設定機器時連上公共網路。但從 CloudStack 的角度來看,只需要使用私有網路介面。因此,CloudStack 只會看到一個實體網路,只需要在 hypervisor 上設定一個 Linux 橋接。

當然,你也可以設定多個實體網路。在這種情況下,你需要設定多個橋接,並使用 KVM 流量標籤在 CloudStack 內區分它們。

設定網路橋接

你可以透過編輯 /etc/network/interfaces 檔案來設定橋接:

# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them.  For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The secondary network interface
auto eth1
iface eth1 inet manual

# Private bridge
auto cloudbr1
iface cloudbr1 inet static
address 192.168.38.101
dns_nameservers 8.8.8.8 8.8.4.4
netmask 255.255.255.0
gateway 192.168.38.100
bridge_ports eth1
bridge_fd 5
bridge_stp off
bridge_maxwait 1

內容解密

  • auto loiface lo inet loopback: 設定迴路網路介面。
  • auto eth0iface eth0 inet dhcp: 設定第一個網路介面 eth0 使用 DHCP 自動取得 IP 位址。
  • auto eth1iface eth1 inet manual: 設定第二個網路介面 eth1 手動設定 IP 位址。
  • auto cloudbr1iface cloudbr1 inet static: 設定名為 cloudbr1 的橋接介面,並使用靜態 IP 位址。
  • address 192.168.38.101: 設定橋接介面的 IP 位址。
  • dns_nameservers 8.8.8.8 8.8.4.4: 設定 DNS 伺服器。
  • netmask 255.255.255.0: 設定子網路遮罩。
  • gateway 192.168.38.100: 設定預設閘道。
  • bridge_ports eth1: 設定橋接介面連線到 eth1
  • bridge_fd 5: 設定橋接轉發延遲。
  • bridge_stp off: 關閉 Spanning Tree Protocol。
  • bridge_maxwait 1: 設定橋接介面啟動時的最大等待時間。

請注意,cloudbr1 上的閘道設定為伺服器。重新啟動 agent 以套用這些變更。重新啟動後,請檢查路由是否正確設定,以及你是否可以 ping 到伺服器並連上公共網路:

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         server          0.0.0.0         UG    0      0        0 cloudbr1
10.0.0.0        *               255.255.255.0   U     0      0        0 eth0
192.168.38.0    *               255.255.255.0   U     0      0        0 cloudbr1
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

最後一個步驟是啟動 CloudStack agent:

service cloudstack-agent start

設定基本區域:CloudStack 的核心組態

設定好管理伺服器、KVM hypervisor、映像目錄和網路後,就可以透過管理儀錶板設定 CloudStack 雲。這包括設定節點、儲存伺服器、IP 位址等,讓 CloudStack 知道如何在這個基礎架構中協調虛擬機器的佈建。

透過儀錶板設定基本區域

  1. 前往儀錶板,選擇「Infrastructure」標籤。
  2. 點選「Zone」圖示,然後選擇「Add Zone」。
  3. 按照精靈的指示操作。

啟用區域後,所有元件都顯示綠色,且系統 VM 正在執行,就可以開始建立執行個體。

CloudStack 區域設定詳解

CloudStack 就像 AWS EC2 一樣,具有可用性區域的概念。首先,你需要建立一個區域,然後按照儀錶板精靈的指示操作。這個精靈會引導你建立 pod、叢集和主機,以及定義主要和次要儲存。

  1. 登入管理伺服器 UI:使用 http://192.168.38.100:8080/client 登入。將 IP 位址替換為你的管理伺服器的 IP 位址。
  2. 使用管理員帳號登入:使用者名稱為 admin,密碼為 password
  3. 跳過引導:點選「I have used CloudStack before, skip this guide」按鈕,跳過引導。
  4. 進入管理檢視:你會看到儀錶板的管理員檢視。
  5. 新增區域:點選左側的「Infrastructure」標籤。點選「View Zones」圖示,然後找到並點選右上角的「Add Zone」圖示。

接著,你會看到一系列視窗,你必須在其中輸入描述區域的資訊。

區域設定範例

我們的區域是一個基本區域,主要 DNS 為 8.8.8.8,內部 DNS 為 8.8.4.4。Hypervisor 型別為 KVM,我們使用本機儲存(捲動到精靈視窗的底部)。

保留的 IP 位址是系統 VM 使用的 IP 位址。將你的私有網路的一部分分配給它(例如,192.168.38.10192.168.38.20),並指定閘道和網路遮罩(192.168.38.100255.255.255.0)。

客體網路將是這個私有網路的另一個部分(例如,192.168.38.150192.168.38.200,閘道為 192.168.38.100,網路遮罩為 255.255.255.0)。

主機是我們設定的 KVM hypervisor。輸入其 IP 位址:192.168.38.101 及其 root 密碼。請確保你可以使用該密碼以 root 身分 SSH 連線到主機。

最後,新增次要儲存。在我們的例子中,它是我們在管理伺服器上設定的 NFS 伺服器(即 192.168.38.100,路徑為 /export/secondary)。

完成輸入資訊後,啟動區域,CloudStack 將會設定所有內容。如果一切順利,所有步驟都應該變成綠色。

使用本機儲存的額外設定

我們在 hypervisor 上使用本機儲存,因此需要前往「Global Settings」標籤進行設定。在設定階段,我們看到了一個警告。在搜尋圖示(右上角)中,輸入 system。你會看到設定 system.vm.use.local.storage。將其設定為 true,然後重新啟動管理伺服器服務 cloudstack-management restart。在這個階段,CloudStack 將會嘗試執行系統 VM,你會看到一個類別似於圖 2-2 所示的儀錶板。

常見問題與解決方案

你可能會遇到你的第一個疑難排解問題,尤其是如果你的 hypervisor 沒有足夠的 RAM。你可以定義一些過度佈建因子來解決這個問題。在「Global Settings」中,尋找 mem.overprovisioning.factor 變數,並將其設定為大於 1 的值。你可以對 CPU 過度佈建執行相同的操作,使用 cpu.overprovisioning.factor。系統會提示你重新啟動管理伺服器。

如果一切順利,系統 VM 將會啟動,你就可以開始新增範本和啟動執行個體。在 KVM 上,你的範本需要是具有 qcow2 檔案副檔名的 qcow2 映像。你還需要在你的管理伺服器可以連線到的 Web 伺服器上擁有這個映像。但是,為了測試你的設定,你會看到已經有一個預設的 CentOS 5.5 範本。

開發高可用性 Apache CloudStack 環境:我的實戰經驗分享

在雲端運算的世界裡,Apache CloudStack 作為一個成熟的開源解決方案,一直佔有一席之地。但要真正發揮它的潛力,開發一個穩定、高效的 CloudStack 環境,需要的不僅僅是理論知識,更要有實際的經驗積累。今天,玄貓就來分享一些我在實戰中總結出的經驗,希望能幫助大家避開常見的坑,開發出真正可靠的 CloudStack 基礎架構。

告別預設:客製化你的計算資源組態

CloudStack 預設的計算資源組態(Compute Offering)通常是針對通用場景設計的。但如果你的應用對 I/O 效能有特殊要求,例如需要使用本機儲存來降低延遲,那麼就必須客製化計算資源組態。

玄貓經驗分享: 在為某金融科技公司設計分散式系統時,我發現預設的分享儲存方案無法滿足其對交易速度的嚴苛要求。因此,我建立了一個新的計算資源組態,啟用本機儲存,並針對 SSD 進行了最佳化。結果,交易延遲大幅降低,系統效能提升了 30%。

要建立新的計算資源組態,可以按照以下步驟操作:

  1. 登入 CloudStack 管理介面。
  2. 導航至「服務組態」>「計算資源組態」。
  3. 點選「新增計算資源組態」按鈕。
  4. 填寫表單,確保啟用本機儲存,並根據實際需求調整 CPU、記憶體等引數。

安全第一:別忘了設定 Security Group

在使用 CloudStack 預設的 DefaultShareNetworkwithSecurityGroup 網路組態時,有一個非常重要的細節容易被忽略,那就是 Security Group 的設定。如果沒有正確設定 Security Group 的規則,你的虛擬機器將無法接收任何 inbound 流量。

玄貓提醒: 為了確保虛擬機器能夠正常運作,請務必在 Security Group 中新增允許 ICMP Echo Request (type=8, code=0) 的規則,以便能夠 ping 虛擬機器。

啟動你的第一台虛擬機器

當你的系統虛擬機器 (SystemVM) 啟動,並且有一個可用的範本 (Template) 或 ISO 檔案後,就可以開始啟動你的第一台虛擬機器了。

  1. 導航至「執行個體」標籤。
  2. 按照對話方塊的指示完成設定。

恭喜!你已經從頭完成了你的第一個 CloudStack 安裝。

CloudStack 佈署問題排查:玄貓的經驗分享

在實際佈署 CloudStack 的過程中,難免會遇到各種各樣的問題。以下是我在實戰中總結出的一些常見問題及解決方案,希望能幫助大家快速排除故障。

問題一:系統虛擬機器無法啟動或範本無法下載

可能原因:

  • Hypervisor 的 RAM 和 CPU 資源不足。
  • 網路組態錯誤,導致無法連線到 secondary storage。

解決方案:

  1. 檢查 Hypervisor 資源: 確保 Hypervisor 有足夠的 RAM 和 CPU 資源來啟動系統虛擬機器。如果資源不足,可以考慮增加 Hypervisor 的數量,或啟用 overprovisioning。
  2. 檢查網路組態: 登入 secondary storage 系統虛擬機器,執行 ssvm-check.sh 指令碼,檢查網路連線是否正常。
ssh -i /root/.ssh/id_rsa.cloud -p 3922 root@169.254.x.x
/usr/local/cloud/systemvm/ssvm-check.sh

程式碼解密:

  • ssh -i /root/.ssh/id_rsa.cloud -p 3922 root@169.254.x.x:使用 SSH 連線到 secondary storage 系統虛擬機器。
    • -i /root/.ssh/id_rsa.cloud:指定 SSH 私鑰檔案。
    • -p 3922:指定 SSH 連線埠。
    • root@169.254.x.x:指定使用者名稱和 IP 位址。
  • /usr/local/cloud/systemvm/ssvm-check.sh:執行系統檢查指令碼。

玄貓經驗: 確保 secondary storage 正確掛載到 Hypervisor 和 secondary storage 虛擬機器上。

問題二:如何調整系統虛擬機器的 RAM 使用量?

解決方案:

  1. 登入 CloudStack 管理伺服器。
  2. 啟動 MySQL shell。
  3. 更新 service_offering 表格。
mysql -u root
mysql> use cloud;
mysql> select * from service_offering;
mysql> update service_offering set ram_size=256 where id=9;

程式碼解密:

  • mysql -u root:使用 root 使用者登入 MySQL。
  • use cloud;:選擇 cloud 資料函式庫。
  • select * from service_offering;:查詢 service_offering 表格的所有資料,找到 secondary storage 和 console proxy 虛擬機器的 id。
  • update service_offering set ram_size=256 where id=9;:更新 service_offering 表格,將 id 為 9 的虛擬機器的 RAM 大小設定為 256MB。

擁抱 CloudStack API:開發你的雲端控制中心

CloudStack 的所有功能都透過 API 伺服器暴露出來。目前在 GitHub 上有超過 20 個 CloudStack 客戶端,支援各種程式語言。

玄貓建議: 選擇一個適合你的程式語言的客戶端,可以大大簡化與 CloudStack API 的互動。

常見的 CloudStack 客戶端

  • CloudMonkey 和 Apache Libcloud: Python 模組。
  • jclouds: Java 程式函式庫。
  • CloStack: Clojure 程式函式庫。
  • StackerBee: Ruby 程式函式庫。

CloudStack API 的運作方式

CloudStack API 是一個根據 HTTP 的查詢式 API,使用 XML 或 JSON 格式傳回結果。它只使用 GET 和 POST 方法,而不使用 DELETE、PATCH 和 UPDATE 等方法。

API 封裝器:連線 CloudStack 與其他雲端平台

除了客戶端之外,還有另一種抽象 CloudStack API 的方式,那就是使用 API 封裝器。API 封裝器提供了一個新的端點,將 inbound API 呼叫對映到適當的 CloudStack API。

玄貓觀察: 如果你已經習慣了 AWS 或 GCE 等公有雲的工具,那麼使用 API 封裝器可以讓你繼續使用相同的工具來管理你的私有 CloudStack 雲。