1. 程式人生 > >Ubuntu12.04Openstack部署(單節點、單網絡卡)

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)      點選確定後在右側會顯示虛擬機器上的相應檔案目錄,然後就可以直接複製、貼上檔案了: