OpenStack實(shí)踐之旅:安裝配置篇
原創(chuàng)【51CTO獨(dú)家特稿】OpenStack是一套用來管理虛擬機(jī)的平臺(tái)軟件。它不是一個(gè)單一的軟件,而是集成了很多個(gè)組件用來協(xié)同合作。簡單的來說,譬如有十臺(tái)服務(wù)器,在VMware的情況下,我們?cè)诿颗_(tái)服務(wù)器上安裝esx或者esxi,然后裝一臺(tái)vcenter,在vcenter的管理界面里把十臺(tái)服務(wù)器的esx通過域名或者ip加入,就能在vcenter里面統(tǒng)一管理。類似的,紅帽也有virsh這種管理虛擬機(jī)的程序。
相關(guān)閱讀:在Ubuntu上安裝和配置OpenStack Nova
在這里我不介紹其他的云平臺(tái)的管理軟件,只是介紹如何從技術(shù)角度來使用OpenStack。如果要作為生產(chǎn)環(huán)境的話,你還需要考慮更多,譬如架構(gòu),網(wǎng)絡(luò)拓?fù)?,存?chǔ)的方式,節(jié)點(diǎn)的分布等等。
在本篇文章里,我將介紹采用ec2兼容認(rèn)證的方式 。所有組件安裝在一臺(tái)controller上。
關(guān)鍵字定義
控制端:類似vcenter的管理系統(tǒng)。
節(jié)點(diǎn):類似安裝了esx的服務(wù)器。
nova組件:安裝在節(jié)點(diǎn)上,讓節(jié)點(diǎn)能按照控制端的命令來操作節(jié)點(diǎn)上的虛擬機(jī)或者存儲(chǔ)。
glance組件:用來管理鏡像。
環(huán)境準(zhǔn)備
ubuntu 11.10,服務(wù)器雙網(wǎng)卡
步驟
安裝完基本的操作系統(tǒng)后
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install bridge-utils #安裝網(wǎng)橋軟件
配置網(wǎng)絡(luò)接口
在這里我的架構(gòu)是eth0連接了外網(wǎng),即我們可以訪問的網(wǎng)口。eth1做了網(wǎng)橋,和節(jié)點(diǎn)之間通過一個(gè)交換機(jī)連接。這樣的好處是,內(nèi)部節(jié)點(diǎn)和控制器的流量都走br100的交換機(jī),而不會(huì)影響虛擬機(jī)上的應(yīng)用使用的網(wǎng)絡(luò)。
$ sudo vi /etc/network/interfaces auto eth0
iface eth0 inet static
address 192.168.200.21
netmask 255.255.255.0
network 192.168.200.0
broadcast 192.168.200.255
gateway 192.168.200.10
auto br100
iface br100 inet static
bridge_ports eth1
bridge_stp off
bridge_maxwait 0
bridge_fd 0
address 10.200.200.2
netmask 255.255.255.0
$ sudo /etc/init.d/networking restart
初期準(zhǔn)備工作做好,接下來就是要安裝關(guān)于nova,glance等組件
$ sudo apt-get install -y rabbitmq-server #安裝MQ消息組件 $ sudo apt-get install -y python-greenlet python-mysqldb #安裝Python dependencies
接下來安裝各個(gè)nova組件及依賴
$ sudo apt-get install nova-volume nova-vncproxy nova-api nova-ajax-console-proxy $ sudo apt-get install nova-doc nova-scheduler nova-objectstore $ sudo apt-get install nova-network nova-compute $ sudo apt-get install glance
安裝euca2ools和unzip
$ sudo apt-get install -y euca2ools unzip
接下來我們安裝數(shù)據(jù)庫,這裡我選擇了MySQL,其實(shí)個(gè)人覺得PostgreSQL更好。
$ sudo su - # MYSQL_PASS=nova 設(shè)定mysql的密碼和nova數(shù)據(jù)庫的密碼 # cat <<MYSQL_PRESEED | debconf-set-selections >mysql-server-5.1 mysql-server/root_password password $MYSQL_PASS >mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASS >mysql-server-5.1 mysql-server/start_on_boot boolean true >MYSQL_PRESEED # apt-get install -y mysql-server # exit 退出root環(huán)境 $ sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf 修改my.cnf配置文件 $ sudo service mysql restart $ MYSQL_PASS=nova 在普通用戶環(huán)境下把密碼再次設(shè)置一下變量 $ NOVA_PASS=notnova 這是nova數(shù)據(jù)庫的密碼 $ sudo mysql -uroot -p$MYSQL_PASS -e 'CREATE DATABASE nova;' 創(chuàng)建一個(gè)名字為nova的數(shù)據(jù)庫,這裡建議新手使用nova的名字,如果這裡換別的名字,那麼在nova的配置文件裡面也需要更改 $ sudo mysql -uroot -p$MYSQL_PASS -e "GRANT ALL PRIVILEGES ON *.* TO 'nova'@'%' WITH GRANT OPTION;" $ sudo mysql -uroot -p$MYSQL_PASS -e "SET PASSWORD FOR 'nova'@'%' = PASSWORD('$NOVA_PASS');"
至此,nova,glance的安裝部分完成,接下來是配置。
nova配置
$ sudo vi /etc/nova/nova.conf --dhcpbridge_flagfile=/etc/nova/nova.conf --dhcpbridge=/usr/bin/nova-dhcpbridge --logdir=/var/log/nova --state_path=/data/openstack/nova 這裡的/data/openstack/nova是我新建的一個(gè)卷和目錄,確保你有這個(gè),并且要屬于nova用戶,或者你也可以使用他的默認(rèn)設(shè)置 --instances_path=/data/openstack/nova/instances 修改了默認(rèn)存放instances的地方 --lock_path=/var/lock/nova --force_dhcp_release=True --use_deprecated_auth --iscsi_helper=tgtadm --verbose --scheduler_driver=nova.scheduler.simple.SimpleScheduler --network_manager=nova.network.manager.FlatDHCPManager --my_ip=10.200.200.2 這是我的內(nèi)網(wǎng)ip地址 --public_inter> --sql_connection=mysql://nova:notnova@localhost/nova 剛才建立的數(shù)據(jù)庫 --libvirt_type=kvm --api_paste_config=/etc/nova/api-paste.ini --image_service=nova.image.glance.GlanceImageService --ec2_dmz_host=192.168.200.21 --ec2_url=http://192.168.200.21:8773/services/Cloud --rabbit_host=localhost --glance_api_servers=10.200.200.2:9292 --flat_network_bridge=br100 --flat_inter> --flat_network_dhcp_start=10.200.200.51 指定從instances分配從51開始,但貌似這個(gè)選項(xiàng)不起作用 --fixed_range=10.200.200.0/24 這個(gè)選項(xiàng)指定instances的網(wǎng)段 --flat_injected=False --multi_host=1 使用multi_host,即以后可以在節(jié)點(diǎn)上也使用nova-network --libvirt_use_virtio_for_bridges 使用virtio做instances的網(wǎng)卡模式
然后是glance的:
$ sudo vi /etc/glance/glance-api.conf
修改filesystem_store_datadir參數(shù),來指定你需要存放images的目錄,當(dāng)然屬主也要改成glance用戶。
$ sudo vi /etc/glance/glance-registry.conf
這個(gè)文件可以選修改sql_connection參數(shù)來指定你的數(shù)據(jù)庫。
如果你要修改,使用mysql里面的數(shù)據(jù)庫,請(qǐng)確保在mysql裡面建立了一個(gè)相對(duì)應(yīng)的數(shù)據(jù)庫
sql_connection = mysql://nova:notnova@localhost/glance
這是我的配置,我在mysql建立了一個(gè)glance的數(shù)據(jù)庫
$ sudo chown -R root:nova /etc/nova
改變一下/etc/nova的屬主
$ sudo chmod 640 /etc/nova/nova.conf
重啟各個(gè)服務(wù)
$ sudo restart libvirt-bin $ sudo restart nova-network $ sudo restart nova-compute $ sudo restart nova-api $ sudo restart nova-objectstore $ sudo restart nova-scheduler $ sudo restart glance-registry $ sudo restart glance-api
注意:我們這裡沒有起nova-volume,是因?yàn)殡m然我們安裝了volume,但是volume需要單獨(dú)的一個(gè)vg來使用,我們現(xiàn)在還沒配置volume,所以起不來。
這裡可能network服務(wù)和compute沒法起來,先暫時(shí)不要去管。
接下去,我們做配置nova的運(yùn)行環(huán)境了
$ sudo nova-manage db sync nova-manage user admin <user_name>
在這裡我們可以創(chuàng)建一個(gè)用戶,如
$ sudo nova-manage user admin test
創(chuàng)建成功屏幕上會(huì)返回下面這樣的輸出:
export EC2_ACCESS_KEY=d6aa7747-4324-4abc-9604-4f7d6a2f8f3f export EC2_SECRET_KEY=2b204b75-da2d-47b8-ba7a-611d71f0ecbf
nova-manage project create <project_name> <user_name>
創(chuàng)建一個(gè)項(xiàng)目,屬于剛才我們建的那個(gè)用戶 如:
$ sudo nova-manage project create test-proj test
nova-manage network create --help
創(chuàng)建一個(gè)實(shí)例的網(wǎng)絡(luò),如:
$ sudo nova-manage network create --label=test-net --fixed_range_v4=10.200.200.0/24 --num_network=1 --network_size=256
再次啟動(dòng)剛才失敗的服務(wù)
$ sudo start nova-network $ sudo start nova-compute $ sudo start nova-scheduler
怎么樣,成功了吧。
另外,在起每個(gè)服務(wù)的時(shí)候,最好看一下日志,譬如sudo tail -f /var/log/nova/nova-network來確定有沒有報(bào)錯(cuò),也可以用ps aux | grep [n]ova-network來確認(rèn)服務(wù)有沒有開啟。如果起服務(wù)失敗,你確認(rèn)好原因,修改好以后,需要用sudo start而不是sudo restart來起
好了。這樣計(jì)算的環(huán)境就部署好了。我們可以用命令來看一下狀態(tài):
$ sudo nova-manage service list $ sudo nova-manage network list
如此這般。
接下來創(chuàng)建證書,以方便我們使用euca工具
$ cd $ mkdir creds $ sudo nova-manage project zipfile test-proj test creds/novacreds.zip $ unzip creds/novacreds.zip -d creds/ $ source creds/novarc
注意每次你重新登錄shell的時(shí)候,需要source一下這個(gè)認(rèn)證文件才能使用euca;當(dāng)然你也可以把novarc的內(nèi)容>>到你的用戶profile文件或者bashrc
OK,完成,我們可以用工具來看一下
$ euca-describe-availability-zones verbose VAILABILITYZONE nova available AVAILABILITYZONE |- nova-test AVAILABILITYZONE | |- nova-network enabled :-) 2011-10-17 04:45:44 AVAILABILITYZONE | |- nova-compute enabled :-) 2011-10-17 04:45:45 AVAILABILITYZONE | |- nova-scheduler enabled :-) 2011-10-17 04:45:45
至此,成功啟用了服務(wù)。當(dāng)你發(fā)現(xiàn)服務(wù)不能正常使用時(shí),用ps aux | grep nova檢查一下服務(wù)有沒有開啟,并需要詳細(xì)觀察/var/log/nova/目錄下的各個(gè)服務(wù)的日志文件,這樣才能獲得更進(jìn)一步的信息。
接下來我們可以用kvm來創(chuàng)建一個(gè)image鏡像
$ sudo apt-get install kvm-pxe
安裝一下這個(gè),否則運(yùn)行kvm的時(shí)候會(huì)有個(gè)警告
$ kvm-img create -f raw server.img 5G $ sudo kvm -m 1024 -cdrom rhel5.iso -drive file=server.img,if=virtio,index=0 -boot d -net nic -net user -nographic -vnc :0
這里我們使用RHEL 5的iso,運(yùn)行完這個(gè)命令,可以用vnc連接。
在你的本機(jī)連接服務(wù)器:ssvncviewer 192.168.200.21 :0
打開vnc你就可以看到安裝界面。
安裝完以后,把下面一段寫入rhel鏡像的/etc/rc.local的開頭:
depmod -a modprobe acpiphp # simple attempt to get the user ssh key using the meta-data service mkdir -p /root/.ssh echo >> /root/.ssh/authorized_keys curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys echo "AUTHORIZED_KEYS:" echo "************************" cat /root/.ssh/authorized_keys echo "************************"
保存退出,這樣image就做好了。
使用glance上傳鏡像
$ glance --verbose add name="rhel5" disk_format=raw is_public=true < server.img
同時(shí)你應(yīng)該觀察/var/log/glance/registry和api的log。成功之后,用
$ glance index
看看鏡像列表。
啟動(dòng)你的實(shí)例
$ euca-describe-images
查看你現(xiàn)在可用的image,輸出類似下面這樣:
IMAGE ami-00000003 server.img
記住這里ami-000000003這個(gè)image號(hào)。
$ euca-run-instances -t m1.tiny ami-00000003
啟動(dòng)ami-00000003鏡像的實(shí)例。-t指明了實(shí)例的類型,類型規(guī)定了cpu,內(nèi)存,磁盤大小等信息。
觀察/var/log/nova/nova-api.log nova-scheduler.log,nova-compute,nova-network.log的輸出信息,同時(shí)你也可以使用vnc連接serverip:0來看實(shí)例的console。
用命令$ euca-describe-instances來查看你目前的實(shí)例情況。第一次啟動(dòng)實(shí)例會(huì)比較慢,因?yàn)樾枰裪mage從glance拷貝到nova下的實(shí)例目錄。
由于nova目前發(fā)展的很快,diablo的release版本功能可以完成日常的一些需求。但是開發(fā)版本的nova可以更好的結(jié)合keystone,novaclient,dashboard等一些其他的項(xiàng)目,使得OpenStack更加健全。有興趣的朋友,可以在生產(chǎn)環(huán)境使用repo的安裝方式,在測試環(huán)境測試開發(fā)版本。我本人由于在生產(chǎn)環(huán)境中使用了git方式安裝的開發(fā)版本,因此后續(xù)更加完善的整合,我都將以開發(fā)版本的形式出現(xiàn)。當(dāng)然使用開發(fā)版本的話,會(huì)有更多的煩惱,但也同樣有更多的樂趣和動(dòng)手的實(shí)踐,能更進(jìn)一步了解其工作的原理機(jī)制。
作者簡介:livemoon(gtalk: mwjpiero@gmail.com),小小SA,關(guān)注mac,BSD,openstack,開源技術(shù),webos。座右銘:非淡泊無以明志,非寧靜無以致遠(yuǎn)。
更新:看到有讀者詢問在哪里可以看到實(shí)際的應(yīng)用,這方面可參考本文的續(xù)篇《以公司實(shí)際應(yīng)用講解OpenStack到底是什么(入門篇)》。至于iso下載,則不在本文中提供了,請(qǐng)各位自備~
【編輯推薦】