Ubuntu12.04Openstack部署(單節點、單網絡卡)
參考文章:http://blog.csdn.net/sweetburden2011/article/details/7859081(在此感謝此文章的作者,同時感謝onestack.sh的作者)
一、系統準備
1. 安裝ubuntu系統(我使用的Ubuntu12.04-desktop-amd64)
以150G硬碟為例:
分出5個區,3個主分割槽,2個邏輯分割槽;
Primary1:100G 掛載到目錄/root下;
Primary2:20G 掛載到目錄/nova-volume下;
Primary3: 2G 更改分割槽型別為Swap,作為系統的交換分割槽;
Logical 1:15G 掛載到目錄/swift下;
Logical 2:10G 可不進行掛載,也可掛載到/home
2. 登入系統,獲取root許可權;(本文件中,主機名為template)
3. 檢查是否聯網:如pingwww.baidu.com,確認可以聯網進行下一步。
4. 檢查cpu是否支援kvm虛擬技術(有的教程上說可以使用qemu,但我使用qemu,雖然最後能成功建立虛擬機器,但不能正常訪問建立的虛擬機器,應該是Hypervisor呼叫虛擬機器出錯)
輸入#kvm-ok,如果輸出以下資訊,則說明支援,否則說明kvm不可用
#INFO:/dev/kvm exists
#KVM acceleration can be used
設定PC支援KVM
(1)首先進入Bios使用箭頭鍵滾動到“System Configuration”
選擇“Virtualization Technology”,然後按 Enter 鍵選擇“Enabled”,然後按 Enter 鍵按 F10 鍵以儲存並退出
(2)如果是在虛擬機器中安裝的作業系統還要將虛擬機器的processor選中Virtualize Intel VT-x/EPT or AMD-V/RVI
(3)#egrep '(vmx|svm)' --color=always /proc/cpuinfo
執行上述命令,如果輸出的結果包含 vmx,它是 Intel;如果包含
svm,它是 AMD。如果你甚麼都得不到,那應你的系統並沒有支援虛擬化的處理。
(4)然後執行命令安裝kvm #apt-get install -y kvm libvirt-bin qemuqemu-kvm
安裝完執行命令#reboot重啟系統
(5)再次執行kvm-ok檢視是否正常支援KVM。
5. 系統更新:
#apt-get update
#apt-get upgrade
6. 配置網路
(1)修改/etc/network/interfaces檔案,在該檔案中新增如下資訊,設定eth0為靜態地址
auto eth0
iface eth0 inet static
address 192.168.252.136
netmask 255.255.255.0
network 192.168.252.0
broadcast 192.168.252.255
gateway 192.168.252.2
dns-nameservers 210.72.128.8
(2)重啟網路服務:
[email protected]:~# /etc/init.d/networking restart
(3)檢查網絡卡狀態:
# mii-tool
7. NTP伺服器
對於單節點來說,NTP伺服器,但不是必須的。如果是多臺機器的環境,就需要設定所有的節點,將NTP服務指向同一個NTP伺服器上。
NTP安裝:
# apt-get install ntp
NTP配置:
編輯 /etc/ntp.conf,在 server ntp.ubuntu.com下新增兩行
server 127.127.1.0
fudge 127.127.1.0 stratum 10
重啟NTP服務:
# service ntp restart
8. ISCSI設定
這是為測試Nova-volume服務使用的。不過目前nova-volume並不穩定,故簡單測試一下就可以。未來的Folsom版本,將會有新的元件來替代Nova-volume。
安裝tgt和iscsi客戶端:
# apt-get install tgt
# apt-get install open-iscsi open-iscsi-utils
9. Nova-volume
安裝系統的時候,我們已經建立了一個nova-volume的分割槽,首先對它進行umount操作,再建立一個volume,名字為nova-volumes。nova的預設使用的volume的名字就是叫 nova-volumes. 如果你希望改變,就需要指定在nova.conf 檔案裡。
通過指令檢視系統分割槽;
# df –h
# umount /dev/sda2
# pvcreate /dev/sda2
# vgcreate nova-volumes /dev/sda2
編輯 /etc/fstab ,將nova-volumes開機載入註釋掉,否則會導致開機無法啟動服務。
# sed -i '/nova-volume/s/^/#/' /etc/fstab
10. Bridge (目前Openstack的網路是通過linux的bridge和iptables來實現的。)
# apt-get install bridge-utils
重啟網路:
# /etc/init.d/networking restart
11. RabbitMQ和Memcache等
RabbitMQ是用來做排程使用。Memcache是給Dashboard使用。
# apt-get install rabbitmq-server memcached python-memcache kvmlibvirt-bin
二、資料庫
在Openstack元件裡,Nova,Keystone, Glance, Horizon,都需要用到資料庫。所以我們需要建立相關的資料庫和使用者。預設Dashboard(horizon)是使用sqlite,文件大部分都是沒有修改。生產環境建議改成mysql。
1. mysql安裝
Openstack都是Python寫的,所以你需要python-mysqldb,安裝過程,會提示你輸入mysql的root的密碼。(該文件中設定密碼為:password)
# apt-get installmysql-server python-mysqldb
提示輸入密碼的介面:
2. mysql配置
編輯/etc/mysql/my.cnf,允許網路訪問mysql
#bind-address =127.0.0.1
bind-address= 0.0.0.0
3. 重啟mysql服務
# service mysql restart
4. 建立相關資料庫:
# mysql -u root –ppassword #進入資料庫
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY'password';
mysql> CREATE DATABASE glance;
mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY'password';
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIEDBY 'password';
mysql> CREATE DATABASE horizon;
mysql> GRANT ALL PRIVILEGES ON horizon.* TO 'horizon'@'%'IDENTIFIED BY'password';
mysql> quit;
三、Keystone
Keystone是Openstack的核心,所有的元件,都需要通過keystone進行認證和授權。
租 戶 |
用 戶 |
密 碼 |
admin |
admin |
password |
service |
nova |
password |
glance |
password |
|
swift |
password |
1. keystone安裝
# apt-get install keystone python-keystone python-mysqldbpython-keystoneclient
2. keystone配置
編輯/etc/keystone/keystone.conf,需要修改
•keystone的預設token是ADMIN,我這裡修改alfred
•預設是採用sqlite連線,我們需要改成mysql
admin_token = ADMIN換成admin_token = alfred
connection = sqlite:///var/lib/keystone/keystone.db換成connection = mysql://keystone:[email protected]/keystone
重啟服務:
# service keystone restart
同步keystone資料庫:
# keystone-manage db_sync
keystone的資料庫,需要匯入資料和endpoint,你可以參考官方文件,一步一步用命令列匯入。為了方便,你也可以直接使用下面2個指令碼來進行全部的設定:
1.keystone_data.sh匯入使用者資訊
#mv keystone_data.sh_.txt keystone_data.sh
對於keystone_data.sh 指令碼,下載完成後對它進行修改,預設登陸dashboard的密碼是:chenshake,Token是chenshake。我這裡登入密碼修改為:password,Token為alfred;修改keystone_data.sh的第1、3兩行:
ADMIN_PASSWORD=${ADMIN_PASSWORD:-password}
export SERVICE_TOKEN="alfred"
並把以下各行中開頭#號去掉:
#SERVICE_PASSWORD=${SERVICE_PASSWORD:-$ADMIN_PASSWORD}
#export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
賦給shell指令碼可執行許可權
#chmod +x keystone_data.sh
執行指令碼:
#./keystone_data.sh
沒任何輸出,就表示正確,可以通過下面命令檢查:
#echo $?
此輸出表示指令碼執行正常。千萬不要重複執行指令碼!!!
2.endpoints.sh 設定endpoint
#mv endpoints.sh_.txt endpoints.sh
#chmod +x endpoints.sh
這個指令碼執行,需要使用不少引數:
#./endpoints.sh -m 192.168.1.105 -u keystone -D keystone -p password -Talfred -K 192.168.1.105 -R RegionOne -E "http://localhost:35357/v2.0"-S 192.168.1.105
正常執行,會輸出以下內容:
設定環境變數:
#export OS_TENANT_NAME=admin
#export OS_USERNAME=admin
#export OS_PASSWORD=password
#export OS_AUTH_URL=http://localhost:5000/v2.0/
檢查當前的環境變數:
#export | grep OS_
declare-xOS_AUTH_URL="http://localhost:5000/v2.0/"
declare-xOS_PASSWORD="password"
declare-xOS_TENANT_NAME="admin"
declare-xOS_USERNAME="admin"
測試keystone:
#keystone user-list
#keystone endpoint-list
可以使用下面命令來檢視結果:
#keystone tenant-list
#keystone role-list
四、Glance
Glance是提供映象管理服務,可以理解成一箇中間件,後面的儲存可以是本地儲存,也可以使用swift儲存。
1. glance安裝
# apt-get install glance glance-api glance-client glance-commonglance-registry python-glance
2. glance配置
編輯 /etc/glance/glance-api-paste.ini,/etc/glance/glance-registry-paste.ini,兩個檔案,都是修改文件最後3行
admin_tenant_name = service
admin_user = glance
admin_password = password
編輯/etc/glance/glance-registry.conf,改成使用mysql驗證:
#sql_connection = sqlite:////var/lib/glance/glance.sqlite
sql_connection =mysql://glance:[email protected]/glance
編輯/etc/glance/glance-registry.conf 和 /etc/glance/glance-api.conf,都在檔案末尾新增兩行
[paste_deploy]
flavor = keystone
同步glance資料庫:
# glance-manage version_control 0
# glance-manage db_sync
重啟glance服務:
# service glance-api restart&& service glance-registry restart
設定永久生效環境變數
為了簡化日後的操作,這裡設定永久的環境變數,修改 /etc/profile,在末尾新增下面內容:
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
exportOS_AUTH_URL=http://localhost:5000/v2.0/
3. glance測試
# glance index 沒有結果輸出就表示正常,因為還沒有安裝映象;
CirrOS
下載Image:
我們下載CirrOS的image作為測試使用,只有10M。如果是ubuntu官方的image,220M,並且ubuntu官方的image,都是需要使用金鑰登陸。
上傳image:
# glance add name=cirros-0.3.0-x86_64is_public=true container_format=bare disk_format=qcow2</root/cirros-0.3.0-x86_64-disk.img
Cirros,是可以使用使用者名稱和密碼登陸,也可以使用金鑰登陸
user: cirros password: cubswin:)
Ubuntu官方image
下載image:
上傳image:
# glance add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovfdisk_format=qcow2 <precise-server-cloudimg-amd64-disk1.img
user:ubuntu password:只能使用金鑰登陸
檢視image:
# glance index
五、Nova
1. nova安裝
# apt-get install nova-api nova-cert nova-common nova-objectstorenova-scheduler nova-volume nova-consoleauth novnc python-nova python-novaclientnova-compute nova-compute-kvm nova-network
如果你希望控制節點,不安裝計算服務,那麼 nova-compute nova-compute-kvmnova-network 這3個包不安裝就可以。
2. nova配置
編輯 /etc/nova/api-paste.ini , 修改末尾3行
#admin_tenant_name = %SERVICE_TENANT_NAME%
#admin_user = %SERVICE_USER%
#admin_password = %SERVICE_PASSWORD%
admin_tenant_name = service
admin_user = nova
admin_password = password (此處密碼不要設為數字,否則會報錯)
編輯/etc/nova/nova.conf 檔案,下面是我的nova.conf檔案的配置。需要注意的一點是Essex版本的nova,配置檔案不需要前面加上—。日後我會逐步調整nova.conf檔案,讓他更加可讀和方便大家理解。
[DEFAULT]
###### LOGS/STATE
#verbose=True
verbose=False
###### AUTHENTICATION
auth_strategy=keystone
###### SCHEDULER
#--compute_scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler
scheduler_driver=nova.scheduler.simple.SimpleScheduler
###### VOLUMES
volume_group=nova-volumes
volume_name_template=volume-%08x
iscsi_helper=tgtadm
iscsi_ip_prefix=192.168.22
###### DATABASE
sql_connection=mysql://nova:[email protected]/nova
###### COMPUTE
#libvirt_type=kvm
libvirt_type=qemu
connection_type=libvirt
instance_name_template=instance-%08x
api_paste_config=/etc/nova/api-paste.ini
allow_resize_to_same_host=True
libvirt_use_virtio_for_bridges=true
start_guests_on_host_boot=true
resume_guests_state_on_host_boot=true
###### APIS
osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions
allow_admin_api=true
s3_host=192.168.1.105
cc_host=192.168.1.105
###### RABBITMQ
rabbit_host=192.168.1.105
###### GLANCE
image_service=nova.image.glance.GlanceImageService
glance_api_servers=192.168.1.105:9292
###### NETWORK
network_manager=nova.network.manager.FlatDHCPManager
force_dhcp_release=True
dhcpbridge_flagfile=/etc/nova/nova.conf
dhcpbridge=/usr/bin/nova-dhcpbridge
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver
public_interface=eth0
flat_interface=eth0
flat_network_bridge=br100
fixed_range=192.168.22.0/24
multi_host=true
###### NOVNC CONSOLE
novnc_enabled=true
novncproxy_base_url=http://192.168.1.105:6080/vnc_auto.html
vncserver_proxyclient_address=192.168.1.105
vncserver_listen=192.168.1.105
########Nova
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova
#####MISC
use_deprecated_auth=false
root_helper=sudo nova-rootwrap
檢視/etc/nova/nova-compute.conf,內容應該如下:
--libvirt_type=kvm
設定目錄許可權:
# chown -R nova:nova /etc/nova
重啟所有服務:
由於服務數量比較多,建立一個指令碼 restart.sh來重啟所有服務。
#!/bin/bash
for a in rabbitmq-server libvirt-bin nova-network nova-cert nova-computenova-api nova-objectstore nova-scheduler nova-volumenovnc nova-consoleauth; do service "$a" stop; done
for a in rabbitmq-server libvirt-bin nova-network nova-cert nova-computenova-api nova-objectstore nova-scheduler nova-volumenovnc nova-consoleauth; do service "$a" start; done
執行指令碼:
# chmod +x restart.sh
# ./restart.sh
同步資料庫:
# nova-manage db sync
看到上面的輸出,檢查nova資料庫裡已經有相應的表,就表示正確。
建立Fix IP
FIX IP,就是分配給虛擬機器的實際IP地址,這些資料都會寫入資料庫:
# nova-manage network createprivate --fixed_range_v4=192.168.22.0/24--num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=256--multi_host=T
建立floating IP
所謂Floating IP,是亞馬遜EC2的定義。簡單說,就是公網的IP。他其實是通過類似防火牆類似,做一個對映。實際上是通過iptables來實現對映。
# nova-manage floating create --ip_range=192.168.1.122/27
重啟nova服務:
3. nova測試
可以嘗試用下面命令去檢查nova的狀況:
# nova-manage service list
六、建立一個VM
1. 建立第一個VM
以下是用命令列建立vm的方法,你可以跳過:
1建立金鑰:
#ssh-keygen (執行時一路回車即可,生成的金鑰在/root/.ssh/下)
2上傳金鑰到資料庫:
#nova keypair-add --pub_key ~/.ssh/id_rsa.pubkey_for_template
3檢視到上傳的key:
#nova keypair-list
4開始建立虛擬機器
#nova image-list
#nova flavor-list
建立虛擬機器:
其中a59bd299-3839-448e-a6e1-9ead497a61ff為使用的映象的ID(可自由選擇要使用的映象)、key_for_template為建立的金鑰名稱、template_test為即將建立的虛擬機器的名稱
#nova boot --flavor 1 --image a59bd299-3839-448e-a6e1-9ead497a61ff --key_namekey_for_template template_test
檢視剛建立的虛擬機器(建立成功則顯示如下圖所示):
#nova show template_test
2. ssh訪問VM
1)開啟防火牆:
# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 (開啟SSH埠)
# nova secgroup-add-rule default tcp 3306 3306 0.0.0.0/0 (mysql)
# nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0(ping)
檢視防火牆
#nova secgroup-list
#nova secgroup-list-rules default
2)ssh到虛擬機器上:
這樣就可以登入伺服器。
3) Floating IP訪問:
申請floating IP:
# nova floating-ip-create
關聯vm:
# nova add-floating-iptemplate_test 192.168.1.97
將以上兩部合為一步:#nova add-floating-ip template_test `nova floating-ip-create | awk 'FNR==4{print $2}'`
檢視虛擬機器:
# nova show template_test
ssh訪問虛擬機器:
刪除虛擬機器繫結的浮動IP:
# nova remove-floating-ip template_test 192.168.1.97
查詢浮動IP分配情況:
# nova floating-ip-list
移除浮動IP:
# nova floating-ip-delete 192.168.1.97
檢視關於float的命令:
# nova help | grep float
其它命令:刪除虛擬機器命令:nova delete vm_name 停止虛擬機器:nova stop vm_name 掛起:nova suspend vm_name 重啟:nova reboot vm_name
七、Dashboard
1. dashboard安裝
# apt-get install apache2 libapache2-mod-wsgi openstack-dashboard
2. dashboard配置
預設採用sqlite來儲存,直接訪問就可以。如果希望改成mysql儲存,才需要做下面的配置。
編輯 /etc/openstack-dashboard/local_settings.py,新增下面內容:
DATABASES={
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'horizon',
'USER':'horizon',
'PASSWORD':'password',
'HOST':'192.168.1.105',
'default-character-set':'utf8'
},
}
同步資料庫:
#/usr/share/openstack-dashboard/manage.py syncdb
重啟nova api:
# restart nova-api
3. dashboard測試
登陸dashobard:
注意:登入dashboard請使用IE瀏覽器,其他的瀏覽器可能會導致下載的金鑰無法使用!!!
Address |
User |
Password |
http://192.168.1.105 |
admin |
password |
Word版和shell指令碼連結地址如下:http://pan.baidu.com/s/1jG84SJW
虛擬機器訪問方式:
(1) 直接從openstack宿主機上訪問:
# ssh –i ~/.ssh/id_rsa [email protected](此處IP為內網或外網IP都可以);
(2) 從其他機器上使用putty軟體訪問,對於putty,需要對金鑰進行轉換。具體步驟如下:
① PUTTYGEN,通過load,找到剛才下載的私鑰(id_rsa),注意,要選擇全部檔案(all files),才可以找到。通過轉換,選擇儲存私鑰就可以
② 存放到本地:
③ 設定putty使用金鑰:
④ 出現如下介面表示登入成功:
以上方式在windows平臺上使用,如果是在linux平臺下登入,可直接使用ssh命令方式登入:# ssh –I id_rsa[email protected](這個一定要是外網IP)
2、 sftp方式訪問虛擬機器用於實現檔案傳輸
目前只會在windows平臺下使用Xftp軟體實現檔案傳輸,如何在linux平臺下使用sftp命令傳輸還未搞定。
(1) 首先開啟Xftp,點選左上角“新建連線”,在彈出框中設定如下(使用者金鑰即為openstack建立該虛擬機器時使用的私鑰):
(2) 點選確定後,出現如下圖所示畫面(輸入使用者名稱,這裡的使用者名稱為ubuntu):
(3) 點選確定後在右側會顯示虛擬機器上的相應檔案目錄,然後就可以直接複製、貼上檔案了: