天天看點

搭建類似Amazon EC2的私有雲計算平台

衆說周知Amazon EC2是一個公共的雲計算平台,屬于IaaS(基礎設施即服務)這類.

現在有一款開源的項目Eucalyptus(Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems),同樣實作了Amazon EC2的功能和接口,由于其開源性,注定了搭建一個私有的雲計算平台成為可能. 更友善的是Ubuntu9.10伺服器版已經內建了Eucalyptus這個開源軟體,使的搭建企業私有的雲計算平台變得友善而簡單.

下面我們将一步步來搭建這個私有的雲計算平台.

一 相關資源

1) 至少準備兩台機器, 當然我這裡是用虛拟機軟體(Sun VirtualBox)來虛拟出兩台實際的機器

(如果你也采用Sun VirtualBox,有些注意事項,可以參見後面的附錄一)

2) 底層作業系統: Ubuntu9.10 伺服器版 (http://www.ubuntu.com/cloud)

3) 雲服務環境 : Eucalyptus , ( Ubuntu9.10 伺服器版 内置) http://eucalyptus.com/

4) Eucalyptus 指令行用戶端(Euca2ools)

5) Eucalyptus用戶端: Elastic Fox ,這是一個firefox插件 :http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609

————————————————————————–

二 雲計算服務的搭建(使用Ubuntu自帶的向導,十分簡單的哦)

1) 一台機器, 作為Cluster(Front End) , 命名為: ubuntu-cluster , 它包含了如下部分

Cloud Controller (clc) 

Cluster Controller (cc) 

Walrus (the S3-like storage service) 

Storage Controller (sc)

2) 至少一台機器作為Node, 命名為: ubuntu-node1,它包含了如下部分

Node Controller (nc)

3) 在作為Cluster的機器上 ,安裝基本系統: Ubuntu9.10 伺服器版

1.安裝引導時,要選擇 “Install Ubuntu Enterprise Cloud” 

2. 安裝過程中,如果提示”Cluster” 還是”Node”,一定要選擇Cluster 

3.安裝過程中,提示”Configure postfix” 時 選擇 internetSite

4. 安裝過程中,提示”Name your cluster” 時 ,請取一個合适的名字,比如我取之為: cluster1 

5. 安裝過程中,提示”a list of available IP addresses on your network”, 一定要選擇一個可用的公共IP段.

4) 在作為Node的機器上 ,也安裝基本系統: Ubuntu9.10 伺服器版

1.安裝引導時,要選擇 “Install Ubuntu Enterprise Cloud” 

2. 安裝過程中,如果提示”Cluster” 還是”Node”,一定要選擇Node, (如果Cluster正在運作,這一步可能不會出現,自動會選擇Node 

3.安裝完一個節點後,,後續的節點可以采用克隆方法,參見後面的 附錄二

5) 在Cloud Controller(位于ubuntu-cluster)上注冊所有的Node機器: 在ubuntu-cluster上執行:

sudo euca_conf –no-rsync –discover-nodes

至此,一個私有的雲計算平台的服務端已經搭建好了,下面就開始說如何管理了,很簡單吧!

三 雲計算平台管理之指令行工具(Euca2ools)

1)在 https://YourIP:8443 中注冊個人資訊然後登入下載下傳 證書 euca2-yourname-x509 .zip

2) 在用戶端機器上執行

$ mkdir ~/.euca 

$ cd ~/.euca 

$ unzip euca2-yourname-x509 .zip 

$ chmod 0700 ~/.euca 

$ chmod 0600 ~/.euca/*

3) 在用戶端機器上執行, 安裝 Euca2ools 和 EC2-API-Tools

. ~/.euca/eucarc 

echo “[ -r ~/.euca/eucarc ] && . ~/.euca/eucarc” >> ~/.bashrc 

sudo apt-get install euca2ools 

sudo apt-get install ec2-api-tools 

sudo reboot

4)在用戶端機器,使用 Euca2ools 上傳 Kernel / Ramdisk / FS Image (使用者可注冊 Image,但隻有管理者才可注冊 kernel/ramdisks)

1. 目前 Eucalyptus 系統上沒有 Kernel、Ramdisk 和 FS Image,是以我們使用官方提供的 Image (上傳需要用到三個指令)

euca-bundle-image – 打包好將要上傳的檔案 

euca-upload-bundle – 上傳到 Eucalyptus 

euca-register – 注冊上傳的檔案

2. 上傳Kernel,如(以我用戶端機器的vmlinuz為例):

euca-bundle-image -i /boot/vmlinuz-2.6.31-14-generic-pae –kernel true 

euca-upload-bundle -b kernel -m /tmp/vmlinuz-2.6.31-14-generic-pae.manifest.xml 

euca-register kernel/vmlinuz-2.6.31-14-generic-pae.manifest.xml

3.上傳 Ramdisk, 如(以我用戶端機器的initrd.img為例)

euca-bundle-image -i /boot/initrd.img-2.6.31-14-generic-pae –ramdisk true 

euca-upload-bundle -b ramdisks -m /tmp/initrd.img-2.6.31-14-generic-pae.manifest.xml

euca-register ramdisks/initrd.img-2.6.31-14-generic-pae.manifest.xml

4. 檢視已上傳到檔案:

方法一: https://YourIP:8443/#images

方法二: euca-describe-images

5. 根據檢視的結果,上傳FS Images:(配置設定 Kernel 和 Ramdisks 給 VMs 有三種方法,見附錄三) 

如(以我從Ubuntu官網上下載下傳的Images:karmic-server-uec-i386.tar.gz為例 ):

tar zxvf karmic-server-uec-i386.tar.gz 

euca-bundle-image -i karmic-server-uec-i386.img –kernel eki-977213C6 –ramdisk eri-0CBA157D 

euca-upload-bundle -b images -m /tmp/karmic-server-uec-i386.img.manifest.xml 

euca-register images/karmic-server-uec-i386.img.manifest.xml

5) 申請 key pair,以便 ssh 登入 instance

ec2-add-keypair mykey >mykey.private 

chmod 0600 mykey.private

6) 在用戶端機器,開啟虛拟機.

1.檢視 euca-describe-images ,獲得希望啟動Image的emi

2.啟動一個虛拟機:

euca-run-instances -k mykey -n 1 <emi-XXXX>

3.檢視這個虛拟機的基本資訊,比如IP位址,和 此執行個體id

euca-describe-instances

4.登入這個新啟動的虛拟機

ssh -i mykey.private [email protected]

5.終止這個虛拟機執行個體

euca-describe-instances(獲得instance-id) 

euca-terminate-instances <instance-id>

—————————————————————————————————-

附錄一:

虛拟測試環境的搭建:

1.虛拟機軟體: Sun VirtualBox

2.管理 -> 全局設定 -> 網絡 中 選擇 “Host-Only” 點編輯,然後選擇 “DHCP伺服器”, 禁用”啟用伺服器”

3建立兩台虛拟機, Linux/Ubuntu ,網絡選擇Host-Only方式

4在主控端器上,将可以聯網際網路的 網卡設定為 針對 Host-Only 網卡的共享

說明,這裡之是以采用 , Host-Only + 通過主控端器共享上網 ,而不采用Bridged的聯網方式,是前者可以在離開網絡支援的情況下, 依然可以保證虛拟機的IP在局部可用并且不變.

附錄二: VirtualBox 系統克隆及其可能後續操作:

1) VirtualBox 的虛拟硬碟的克隆指令: VBoxManage clonevdi old.vdi new.vdi

2) Ubuntu 修改主機名:

1. 啟用root使用者: sudo passwd root 

2. .以root使用者身份登入 

3. pico /etc/hosts : 修改對應的舊的主機名 

4. pico /etc/hostname : 删除該檔案的所有内容,添加新的主機名 

5. 執行指令: hostname <新的主機名> 

6. logout 

7. 禁用root使用者: sudo passwd -l root

3)如果找不到網卡,不妨,檢視一下: ifconfig –a ,然後配置 /etc/network/interfaces ,然後重新開機網卡

附錄三: 配置設定 Kernel 和 Ramdisks 給 VMs 有三種方法

1) 在 ‘ec2-bundle-image’ 步驟指定

ec2-bundle-image -i <path/to/my/>vmimage.img –kernel <eki-XXXXXXXX> –ramdisk <eri-XXXXXXXX>

2)在 ‘ec2-run-instances’ 步驟指定

ec2-run-instances <emi-XXXXXXXX> –kernel <eki-XXXXXXXX> –ramdisk <eri-XXXXXXXX>

3) 在 https://YourIP:8443 選擇 ‘Configuration’ 标簽,新增 <eki-xxxxxxxx> 和 <eri-xxxxxxxx> 作為預設的 kernel 和 ramdisk

附錄四: 如何删除Image

1) 先取消注冊

ec2-deregister <emi-XXXXXXXX>

2) 移除位于 bucke 的檔案

ec2-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY –url $S3_URL -b <bucket> -p <file prefix>

3) 移除 image 和 bucke (—clear)

ec2-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY –url $S3_URL -b <bucket> -p <file prefix> –clear

附錄五: Euca2ools常用指令:

euca-describe-availability-zones verbose 察看可用的資源

euca-describe-instances 察看目前正在執行的 虛拟機(VM)

euca-bundle-image 打包好将要上傳到檔案

euca-upload-bundle 上傳檔案到 Eucalyptus

euca-register 組成已經上傳到檔案

euca-describe-images 檢視可用的 images

CentOS6下安裝基于Xen的Eucalyptus 2.0.3

Eucalyptus

  • 官網 http://open.eucalyptus.com/downloads
  • 手冊 http://open.eucalyptus.com/wiki
  • 伺服器角色
    • Cloud controller(CLC),控制排程雲的資源,同時提供web界面以及相容EC2的SOAP服務
    • Walrus,實作了基于桶的存儲,同時提供相容S3的SOAP服務以及REST接口
    • Cluster controller(CC),實作以叢集為機關的排程
    • Storage controller(SC),基于塊的存儲控制器,EBS-style
    • Node controller(NC),虛拟節點,運作xen及虛拟機的機器

版本

  • CentOS 6 Minimal install
  • Xen 4.1.1 NC伺服器上面需要完全安裝,其餘伺服器需要幾個編譯好的rpm,參考 http://blog.csdn.net/phoenixie/article/details/6885313
  • Eucalyptus 2.0.3,下載下傳offline源碼包, http://eucalyptussoftware.com/downloads/releases/eucalyptus-2.0.3-src-offline.tar.gz , 依賴的庫 http://eucalyptussoftware.com/downloads/releases/eucalyptus-2.0.3-src-deps.tar.gz
  • euca2ools 1.3.1, 使用fedora的,下載下傳 http://eucalyptussoftware.com/downloads/releases/euca2ools-1.3.1-fedora-x86_64.tar.gz
  • dhcpd 3.0.5, CC上需要安裝, 使用舊版本rhel5的, eucalyptus 2.0.3對稍微高版本的ISC dhcpd支援有問題, 下載下傳http://ftp.redhat.com/redhat/linux/enterprise/5Server/en/os/SRPMS/dhcp-3.0.5-29.el5_7.1.src.rpm

準備工作

 1. 下載下傳各個軟體包  2. 除了NC以外的伺服器安裝CentOS 6 Minimal方式  3. NC伺服器按照參考文檔安裝配置Xen環境,注意在Xen的核心配置裡面添加一項  max_loop=256  4. 配置好所有機器的NTP,使它們時鐘保持同步

安裝過程

 1. 建立 /etc/yum.repos.d/euca.repo  [plain]  view plain copy

  1. [euca]  
  2. name=Eucalyptus  
  3. baseurl=http://www.eucalyptussoftware.com/downloads/repo/eucalyptus/2.0.3/yum/centos/x86_64  
  4. gpgcheck=0  

 2. 通過yum安裝必須的軟體包 (所有機器上) [plain]  view plain copy

  1. yum -y install perl-Convert-ASN1.noarch scsi-target-utils httpd java-1.6.0-openjdk-devel ant ant-nodeps libvirt-devel curl-devel httpd-devel apr-devel openssl-devel libxml2 libxml2-devel gnutls gnutls-devel libgcrypt-devel zlib-devel perl-Convert-ASN1 perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random chkfontpath fuse-libs swig gcc make patch compat-expat1 compat-db43 lzo2 vblade m2crypto lvm2 rsync ntp vconfig groff rpm-build  

 3. 安裝之前編譯好的Xen的rpm包(給控制伺服器,節點伺服器已經裝過xen的就不需要了) [plain]  view plain copy

  1. rpm -Uvh xen-licenses-*.x86_64.rpm xen-devel-*.x86_64.rpm xen-libs-*.x86_64.rpm   

 4. 安裝dhcpd [plain]  view plain copy

  1. wget http://ftp.redhat.com/redhat/linux/enterprise/5Server/en/os/SRPMS/dhcp-3.0.5-29.el5_7.1.src.rpm  
  2. rpm -i dhcp-3.0.5-29.el5_7.1.src.rpm  
  3. cd ~/rpmbuild/SPECS/  
  4. rpmbuild -bb dhcp.spec  # 如果編譯不過去,可能需要手動去掉-Werror編譯選項  
  5. cd ~/rpmbuild/RPMS/x86_64/  
  6. rpm -Uvh dhcp-3.0.5-29.el6.1.x86_64.rpm # 如果已經裝了dhcp,先手動删除掉原來的  

 5. 安裝Eucalyptus的依賴軟體(eucalyptus-2.0.3-src-deps.tar.gz) [plain]  view plain copy

  1. export EUCALYPTUS=/home/public/eucalyptus-2.0.3  
  2. export APACHE_INCLUDES=/usr/include/httpd/  
  3. export APR_INCLUDES=/usr/include/apr-1/  
  4. export AXIS2C_HOME=${EUCALYPTUS}/packages/axis2c-1.6.0  
  5. mkdir -p ${EUCALYPTUS}/packages/  
  6. tar xzf eucalyptus-2.0.3-src-deps.tar.gz  
  7. cd eucalyptus-src-deps  
  8. tar xzf axis2-1.4.tgz -C ${EUCALYPTUS}/packages/  
  9. cd ${EUCALYPTUS}/packages/  
  10. ln -sf axis2-1.4 axis2  
  11. cd -  
  12. tar xzf axis2c-src-1.6.0.tar.gz  
  13. cd axis2c-src-1.6.0  
  14. CFLAGS="-w" ./configure --prefix=${AXIS2C_HOME} -with-apache2=${APACHE_INCLUDES} --with-apr=${APR_INCLUDES} --enable-multi-thread=no  
  15. make  
  16. make install  
  17. cd -  
  18. rm -rf axis2c-src-1.6.0  
  19. export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib  
  20. tar xzf rampartc-src-1.3.0-0euca2.tar.gz  
  21. cd rampartc-src-1.3.0  
  22. ./configure --prefix=${AXIS2C_HOME} --enable-static=no --with-axis2=${AXIS2C_HOME}/include/axis2-1.6.0/  
  23. make  
  24. make install  
  25. rm -rf rampartc-src-1.3.0  
  26. cd ${EUCALYPTUS}/packages  
  27. ln -sf axis2c-1.6.0 axis2c  
  28. cd -  
  29. sed -i "s;<\!--phase name=\"Security\"/-->;<phase name=\"Security\"/>;g" ${AXIS2C_HOME}/axis2.xml  
  30. cd ..  
  31. rm -rf eucalyptus-src-deps  

 6. 安裝Eucalyptus (eucalyptus-2.0.3-src-offline.tar.gz) [plain]  view plain copy

  1. export EUCALYPTUS=/home/public/eucalyptus-2.0.3  
  2. export AXIS2_HOME=${EUCALYPTUS}/packages/axis2  
  3. export AXIS2C_HOME=${EUCALYPTUS}/packages/axis2c  
  4. export JAVA_HOME="/usr/lib/jvm/java-openjdk/"  
  5. export JAVA="$JAVA_HOME/JRE/bin/java"  
  6. tar xzf eucalyptus-2.0.3-src-offline.tar.gz  
  7. cd eucalyptus-2.0.3-src-offline  
  8. ./configure --with-axis2=${AXIS2_HOME} --with-axis2c=${AXIS2C_HOME} --enable-debug --prefix=${EUCALYPTUS}  
  9. make  
  10. make install  
  11. cd -  
  12. rm -rf eucalyptus-2.0.3-src-offline  
  13. cd /home/public/  
  14. ln -sf eucalyptus-2.0.3 eucalyptus  
  15. export EUCALYPTUS=/home/public/eucalyptus  
  16. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-cloud /etc/init.d/eucalyptus-cloud  
  17. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-cc /etc/init.d/eucalyptus-cc  
  18. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-nc /etc/init.d/eucalyptus-nc  
  19. chkconfig eucalyptus-cloud off  
  20. chkconfig eucalyptus-cc off  
  21. chkconfig eucalyptus-nc off  

 7. 安裝工具(euca2ools-1.3.1-fedora-x86_64.tar.gz) [plain]  view plain copy

  1. tar xzf euca2ools-1.3.1-fedora-x86_64.tar.gz  
  2. cd euca2ools-1.3.1-fedora-x86_64  
  3. rpm -Uvh euca2ools-1.3.1-1.x86_64.rpm  
  4. cd -  
  5. rm -rf euca2ools-1.3.1-fedora-x86_64  

配置

 1. 建立一個專屬使用者  [plain]  view plain copy

  1. adduser eucalyptus  

 2. 初始化 [plain]  view plain copy

  1. export EUCALYPTUS=/home/public/eucalyptus  
  2. $EUCALYPTUS/usr/sbin/euca_conf \  
  3.  -d $EUCALYPTUS \  
  4.  --hypervisor xen \  
  5.  --instances /home/eucalyptus/instances \  
  6.  --user eucalyptus \  
  7.  --setup  
  8. # -d: Eucalyptus路徑  
  9. # --hypervisor: 使用的hypervisor類型,可以是kvm或xen  
  10. # --instances: instance存儲路徑  
  11. # --user: 服務使用的使用者  
  12. # --setup: 初始化  
  13. service eucalyptus-nc start  
  14. chkconfig eucalyptus-nc on  

 3. 編輯 /home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf,按自己的需求修改,其中 VNET_BRIDGE 是xen要使用的bridge名字,其餘的VNET_MODE等請參考配置檔案的說明,裡面寫的很詳細。

 4. 複制eucalyptus安裝目錄到所有機器上,建立init.d的連結,添加service的服務,然後還需要運作一次初始化

 5. 啟動NC [plain]  view plain copy

  1. service eucalyptus-nc start # NC的Web service預設端口8775  
  2. chkconfig eucalyptus-nc on  

 6. 啟動CC [plain]  view plain copy

  1. service eucalyptus-cc start # CC的Web service預設端口8774  
  2. chkconfig eucalyptus-cc on  

 7. 啟動相關服務,不同的服務可以部署在不同機器上面 [plain]  view plain copy

  1. export EUCALYPTUS=/home/public/eucalyptus  
  2. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS --enable cloud  
  3. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS --enable walrus  
  4. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS --enable sc  
  5. service eucalyptus-cloud start # 三個服務都通過這個腳本啟動,http端口8080,https端口8443,Web service端口8773  
  6. chkconfig eucalyptus-cloud on  

 8. 注冊服務 [plain]  view plain copy

  1. $EUCALYPTUS/usr/sbin/euca_conf --register-walrus $IP  
  2. $EUCALYPTUS/usr/sbin/euca_conf --register-cluster OurCloud $IP # 注冊一個Cluster,名字叫OurCloud,預設端口8774  
  3. $EUCALYPTUS/usr/sbin/euca_conf --register-sc OurCloud $IP # 給Cluster添加一個SC  

 9. 注冊節點 [plain]  view plain copy

  1. $EUCALYPTUS/usr/sbin/euca_conf --register-nodes $IP  

 10. 通路Cloud(CLC)所在IP的https://$IP:8443,使用者名admin,密碼admin,第一次登陸成功後會要求馬上修改密碼

 11. 在管理界面的導航欄找到Credentials,進入,點選按鈕"Download Credentials",會下載下傳一個zip檔案

 12. 把zip檔案傳到安裝了euca2ools的伺服器上,建一個目錄解壓進去,以後每次使用euca2ools前需要執行一次下面的指令 [plain]  view plain copy

  1. source eucarc  

 13. 安裝完成

執行個體1: 使用官網提供的Ubuntu image

 1. 下載下傳位址  http://open.eucalyptus.com/wiki/EucalyptusUserImageCreatorGuide  2. 添加 (euca-ubuntu-9.04-x86_64.tar.gz)  [plain]  view plain copy

  1. tar xzf euca-ubuntu-9.04-x86_64.tar.gz  
  2. cd euca-ubuntu-9.04-x86_64  
  3. # 進入運作環境  
  4. source ~/.euca/eucarc  
  5. # 上傳核心,得到一個eki-XXXXXXXX  
  6. euca-bundle-image -d ./tmp/ -i xen-kernel/vmlinuz-2.6.27.21-0.1-xen --kernel true  
  7. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml  
  8. euca-register ubuntu9-bucket/vmlinuz-2.6.27.21-0.1-xen.manifest.xml  
  9. # 上傳ramdisk,得到一個eri-XXXXXXXX  
  10. euca-bundle-image -d ./tmp/ -i xen-kernel/initrd-2.6.27.21-0.1-xen --ramdisk true  
  11. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/initrd-2.6.27.21-0.1-xen.manifest.xml  
  12. euca-register ubuntu9-bucket/initrd-2.6.27.21-0.1-xen.manifest.xml  
  13. # 上傳根分區,用上面兩個指令得到的數字執行  
  14. euca-bundle-image -d ./tmp/ -i ubuntu.9-04.x86-64.img --kernel eki-XXXXXXXX --ramdisk eri-XXXXXXXX  
  15. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/ubuntu.9-04.x86-64.img.manifest.xml  
  16. euca-register ubuntu9-bucket/ubuntu.9-04.x86-64.img.manifest.xml  

 3. 建立一個登入虛拟機用的key [plain]  view plain copy

  1. euca-add-keypair euca-key > ~/euca-key.private  
  2. chmod 0600 ~/euca-key.private  

 4. 使用剛才上傳虛拟機時候得到的emi值啟動一個虛拟機執行個體 [plain]  view plain copy

  1. euca-run-instances -k euca-key -n 1 emi-XXXXXXXX  

 5. 檢視運作狀态,沒有dhcpd的話,這時拿不到IP [plain]  view plain copy

  1. >euca-describe-instances  
  2. RESERVATION r-4F030A57 admin default  
  3. INSTANCE i-35C505C3 emi-XXXXXXXX 0.0.0.0 0.0.0.0 running euca-key 0 m1.small 2011-11-01T10:48:56.831Z OurCloud eki-XXXXXXXX eri-XXXXXXXX  

執行個體2: 使用dhcpd配置設定IP

 0. CC伺服器, IP eth3 192.168.11.3/24; NC伺服器, IP eth3 192.168.11.4/24, Xen的bridge xenbr0; 實作從NC上面運作的虛拟機可以通過CC通路到外面的網絡

 1. 配置CC的/home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf [plain]  view plain copy

  1. VNET_PUBINTER  
  2. VNET_PRIVINTER  
  3. VNET_DHCPDAEMON="/usr/sbin/dhcpd"  
  4. VNET_DHCPUSER="eucalyptus"  
  5. VNET_MODE="MANAGED-NOVLAN"  
  6. VNET_SUBNET="192.168.101.0"  
  7. VNET_NETMASK="255.255.255.0"  
  8. VNET_DNS="192.168.11.2"  
  9. VNET_ADDRSPERNET="16"   # 這個數字如果太大會無法建立虛拟機  
  10. VNET_PUBLICIPS="192.168.11.80-192.168.11.120"  
  11. VNET_CLOUDIP="192.168.11.3"  
  12. #VNET_MODE="SYSTEM"  

 2. 配置NC的/home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf [plain]  view plain copy

  1. VNET_PUBINTER  
  2. VNET_PRIVINTER  
  3. VNET_BRIDGE="xenbr0"  
  4. VNET_MODE="MANAGED_NOVLAN"  
  5. #VNET_MODE="SYSTEM"  

 3. 重新啟動CC [plain]  view plain copy

  1. service eucalyptus-cc cleanrestart  

 4. 建立一個虛拟機看看  [plain]  view plain copy

  1. >euca-run-instances -k euca-key -n 1 emi-XXXXXXXX   
  2. RESERVATION r-502007DA admin admin-default  
  3. INSTANCE i-440907AE emi-XXXXXXXX 0.0.0.0 0.0.0.0 pending euca-key 2011-11-04T11:01:17.656Z eki-XXXXXXXX eri-XXXXXXXX  
  4. >euca-describe-instances   
  5. RESERVATION r-502007DA admin default  
  6. INSTANCE i-440907AE emi-XXXXXXXX 192.168.11.101 192.168.101.131 running euca-key 0 m1.small 2011-11-04T11:01:17.656Z OurCloud eki-XXXXXXXX eri-XXXXXXXX  
  7. >ssh -i ~/euca-key.private 192.168.11.101  
  8. [email protected]:~#  
  9. >ip addr show eth0  
  10. UNKNOWN qlen 1000  
  11.     link/ether d0:0d:44:09:07:ae brd ff:ff:ff:ff:ff:ff  
  12.     inet 192.168.101.131/28 brd 192.168.101.143 scope global eth0  
  13.     inet6 fe80::d20d:44ff:fe09:7ae/64 scope link   
  14.        valid_lft forever preferred_lft forever  
  15. >ping -c 1 192.168.11.2   
  16. PING 192.168.11.2 (192.168.11.2) 56(84) bytes of data.  
  17. 64 bytes from 192.168.11.2: icmp_seq=1 ttl=63 time=1.26 ms  
  18. --- 192.168.11.2 ping statistics ---  
  19. 1 packets transmitted, 1 received, 0% packet loss, time 0ms  
  20. rtt min/avg/max/mdev = 1.264/1.264/1.264/0.000 ms  

執行個體3: 自己建立CentOS6虛拟機

 1. 使用virtinst以minimal模式安裝一個CentOS6虛拟機,硬碟弄一個分區就行了,其他分區都可省,在虛拟機裡面安裝配置好需要的軟體,關掉虛拟機(安裝參數可參考 http://blog.csdn.net/phoenixie/article/details/6885313)  2. 提取虛拟機 / 分區,假設硬碟檔案名為sda.img,2GB [plain]  view plain copy

  1. > parted sda.img  
  2. GNU Parted 2.1  
  3. Using /home/vms/centos6/sda.img  
  4. Welcome to GNU Parted! Type 'help' to view a list of commands.  
  5. (parted) U  
  6. Unit?  [compact]? <span style="color:#ff0000;">b</span>                                                         
  7. (parted) p  
  8. Model:  (file)  
  9. Disk /home/vms/centos6/sda.img: 2147483648B  
  10. Sector size (logical/physical): 512B/512B  
  11. Partition Table: msdos  
  12. Number  Start     End          Size         Type     File system  Flags  
  13.  1      1048576B  2147483647B  2146435072B  primary  ext3         boot  
  14. (parted) quit  
  15. > dd if=sda.img of=rootfs.img bs=1M skip=1 count=2047  
  16. 2047+0 records in  
  17. 2047+0 records out  
  18. 2146435072 bytes (2.1 GB) copied, 37.3425 s, 57.5 MB/s  

 3. 配置根分區檔案 [plain]  view plain copy

  1. # 加載根分區  
  2. mkdir /mnt/rootfs  
  3. mount -o loop rootfs.img /mnt/rootfs/  
  4. # 複制出來kernel和initramfs  
  5. cp /mnt/rootfs/boot/vmlinuz-* ./kernel  
  6. cp /mnt/rootfs/boot/initramfs-* ./ramdisk  
  7. # 配置網卡  
  8. rm udev/rules.d/70-persistent-net.rules  
  9. vi /mnt/rootfs/etc/udev/rules.d/60-net.rules  
  10. ACTION=="add", SUBSYSTEM=="net", IMPORT{program}="/lib/udev/rename_device"  
  11. SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/net.hotplug"  
  12. vi /mnt/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0  
  13. DEVICE=eth0  
  14. BOOTPROTO=dhcp  
  15. ONBOOT=yes  
  16. TYPE=Ethernet  
  17. # 關閉selinux  
  18. vi /mnt/rootfs/etc/sysconfig/selinux   
  19. SELINUX=disabled  
  20. # 修改fstab,去掉所有的UUID方式  
  21. vi /mnt/rootfs/etc/fstab  
  22. /dev/xvda1         /             ext3     defaults,errors=remount-ro 0 0  
  23. /dev/xvda2         /mnt          ext3     defaults                   0 0  
  24. /dev/xvda3         swap          swap     defaults                   0 0  
  25. tmpfs                   /dev/shm                tmpfs   defaults        0 0  
  26. devpts                  /dev/pts                devpts  gid=5,mode=620  0 0  
  27. sysfs                   /sys                    sysfs   defaults        0 0  
  28. proc                    /proc                   proc    defaults        0 0  
  29. vi /mnt/rootfs/etc/mtab  
  30. /dev/sda1 / ext3 rw,errors=remount-ro 0 0  
  31. proc /proc proc rw 0 0  
  32. sysfs /sys sysfs rw 0 0  
  33. # 啟動時自動下載下傳可登入的ssh-rsa的public key  
  34. vi /mnt/rootfs/etc/rc.local   
  35. # simple attempt to get the user ssh key using the meta-data service  
  36. mkdir -p /root/.ssh  
  37. echo >> /root/.ssh/authorized_keys  
  38. curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys  
  39. echo "AUTHORIZED_KEYS:"  
  40. echo "************************"  
  41. cat /root/.ssh/authorized_keys  
  42. echo "************************"  
  43. # 删除密碼  
  44. vi /mnt/rootfs/etc/shadow  
  45. root:!:15280:0:99999:7:::  
  46. # 解除安裝  
  47. umount /mnt/rootfs  

 4. 修改NC上面的 /home/public/eucalyptus/usr/share/eucalyptus/gen_libvirt_xml, 把所有的sda改為xvda, 這個修改後,目前官網提供的image将不能使用  5. 最後, 上傳 [plain]  view plain copy

  1. source ~/.euca/eucarc  
  2. # 上傳核心,得到一個eki-KKKKKKKK  
  3. euca-bundle-image -d ./tmp/ -i ./kernel --kernel true  
  4. euca-upload-bundle -b centos6-bucket -m ./tmp/kernel.manifest.xml   
  5. euca-register centos6-bucket/kernel.manifest.xml  
  6. # 上傳ramdisk,得到一個eri-RRRRRRRR  
  7. euca-bundle-image -d ./tmp/ -i ./ramdisk --ramdisk true  
  8. euca-upload-bundle -b centos6-bucket -m ./tmp/ramdisk.manifest.xml  
  9. euca-register centos6-bucket/ramdisk.manifest.xml  
  10. # 上傳根分區  
  11. euca-bundle-image -d ./tmp/ -i ./rootfs.img --kernel  eki-KKKKKKKK --ramdisk eri-RRRRRRRR  
  12. euca-upload-bundle -b centos6-bucket -m ./tmp/rootfs.img.manifest.xml   
  13. euca-register centos6-bucket/rootfs.img.manifest.xml  

 6. 現在可以試試了,需要注意的即将建立的虛拟機的磁盤,不能小于根分區檔案的位元組數,否則不能建立虛拟機;而且設定的虛拟機的記憶體,不能小于核心的最低需要;這兩個參數可以在管理界面裡面調整。