本章內容講解如何在3臺物理機上搭建最小化雲平臺,這3臺機器分爲稱爲Server1、Server2和Client1,以後的各章也是如此。Server1承載着Nova、Glance、Swift、Keystone及Horizon(OpenStack的Web UI)服務。Server2只用來運行實例管理的nova運算工做站。因爲OpenStack組件採用分佈式結構,其中的任何一部分或幾個部分均可以安裝在任意服務器上。python
Client1並非安裝所必須的,在本例中,它僅用來製做打包鏡像,並使用它訪問Horizon在Web上管理OpenStack設施。因而就避免了使用服務器來完成鏡像打包等諸如此類的任務了,並且在製做桌面系統鏡像時若是包含視窗界面的話,咱們也只能相應地使用有GUI的電腦來完成,故而最好仍是別在服務器上玩火了吧。建議Client1支持虛擬化技術,以便在製做完鏡像打包時能夠運行KVM。mysql
OpenStack安裝須要設定主機名、IP地址等,按你實際的環境進行配置。下表是譯者安裝的網絡參數清單:sql
如下是教程中網絡設置參數,本教程均採用這些參數,但在實際安裝中請參照上表進行設置。數據庫
正如上表所示,Server1包含了全部的Nova服務:nova-compute、nova-api、nova-volume、nova-network以及Glance、Swift、Keystone和Horizon。這臺服務器上須要雙網卡。ubuntu
沒必要多想,請參照下述說明,記住相關參數,選擇64位Ubuntu12.04版,進行安裝。swift
l 建立的第一個用戶命名爲「localadmin」api
l 爲eth0和eth1設定IP及其相關參數bash
l 在安裝服務包中,僅選擇「Openssh-server」做爲預裝項服務器
由於Server1上也將安裝nova-volume軟件,而nova-volume須要一塊專用分區,因此在安裝Ubuntu Server時請選擇手動分區,並另行建立一塊合適大小的分區。從本章起,教程都將以/dev/sda6做爲這塊分區。你能夠根據本身分區的實際狀況進行修改。此外,請使用fdisk工具將該分區須要格式化爲LVM(8e)格式,這一操做在安裝中或剛安裝完畢格式化都可。進一步,若是你還計劃在這臺服務器上再新建一個分區配給Swift的話,那麼就新建一塊分區並參照本章後文「安裝Swift」一節相關內容進行安裝。網絡
待12.04的UbuntuOS安裝完畢後,使用下列命令更新系統:
sudo apt-get update
sudo apt-get upgrade
安裝網橋工具bridge-utils:
sudo apt-get install bridge-utils
編輯/etc/network/interfaces文件,以下所示:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.10.10.2
netmask 255.255.255.0
broadcast 10.10.10.255
gateway 10.10.10.1
dns-nameservers 10.10.8.3
auto eth1
iface eth1 inet static
address 192.168.3.1
netmask 255.255.255.0
network 192.168.3.0
broadcast 192.168.3.255
隨後從新啓動網絡:
sudo /etc/init.d/networking restart
安裝NTP軟件包。這個時間服務器將爲全部節點提供支持。OpenStack全部組件的時間都必須同步,因而咱們就在Server1上安裝NTP服務而且讓其餘服務器或節點與之保持同步。
sudo apt-get install ntp
譯者注:NTP(Network Time Protocol),是用來使計算機時間同步化的一種協議,它可使計算機對其服務器或時鐘源(如石英鐘,GPS等等)作同步化,它能夠提供高精準度的時間校訂(LAN上與標準間差小於1毫秒,WAN上幾十毫秒),且可介由加密確認的方式來防止惡毒的協議***。[來源:百度百科]
打開文件/etc/ntp.conf增長如下三行內容,目的是讓本服務器時間與外部服務器時間同步。若是不能訪問外網,NTP服務器將使用本機硬件時鐘做爲第二選擇。
server ntp.ubuntu.com
server 127.127.1.0
fudge 127.127.1.0 stratum 10
而後重啓NTP使配置生效:
sudo service ntp restart
請確保服務器IP地址能夠被DNS解析。若是不能,則在/etc/hosts文件中手工加入。
咱們有不少選擇:MySQL、PostgreSQL或者SQLite等都能很好地對Nova和Glance提供數據支持。究竟選哪一個,本身定吧。本例中採用MySQL。
MySQL
安裝mysql-server和python-mysqldb包:
sudo apt-get install mysql-server python-mysqldb
爲mysql建立root密碼,在此使用「mygreatsecret」。隨後編輯mysql配置文件/etc/mysql/my.cnf,將綁定地址從127.0.0.1改成0.0.0.0,以下所示:
bind-address = 0.0.0.0
重啓MySQL服務器讓其開始監聽全部端口:
sudo restart mysql
建立數據庫
咱們將要爲nova、glance和keystone建立不少東東,各類數據庫、表及用戶。話音未落,這就開始了:
建立名爲「nova」的數據庫:
sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE nova;'
新建一個用戶,名爲「novadbadmin」:
sudo mysql -uroot -pmygreatsecret -e 'CREATE USER novadbadmin;'
授予novadbadmin用戶nova數據庫所有權限:
sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON nova.* TO 'novadbadmin'@'%';"
爲novadbadmin同志建立密碼(譯者注:密碼是novasecret,後文相似之處很少言,請詳見命令):
sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'novadbadmin'@'%' = PASSWORD('novasecret');"
Glance登場,仍是重複剛纔的道道,首先建立一個名爲glance的數據庫:
sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE glance;'
而後爲這個新建的數據庫添加一個用戶「glancedbadmin」:
sudo mysql -uroot -pmygreatsecret -e 'CREATE USER glancedbadmin;'
接着,光榮授予他本數據庫的所有權限:
sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON glance.* TO 'glancedbadmin'@'%';"
是的,最後一步,爲該用戶分配密碼:
sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'glancedbadmin'@'%' = PASSWORD('glancesecret');"
很煩的,keystone出場了。剛纔的大循環,至此開始演繹第三遍:
sudo mysql -uroot -pmygreatsecret -e 'CREATE DATABASE keystone;'
sudo mysql -uroot -pmygreatsecret -e 'CREATE USER keystonedbadmin;'
sudo mysql -uroot -pmygreatsecret -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystonedbadmin'@'%';"
sudo mysql -uroot -pmygreatsecret -e "SET PASSWORD FOR 'keystonedbadmin'@'%' = PASSWORD('keystonesecret')"
如今,MySQL部分的工做結束。
Keystone是OpenStack的認證服務。使用如下命令進行安裝:
sudo apt-get install keystone python-keystone python-keystoneclient
打開/etc/keystone/keystone.conf文件,將這一行:
admin_token = ADMIN
改成:
admin_token = admin
(本教程中咱們將一直使用admin做爲令牌)
本例中,咱們使用MySQL來存儲keystone配置,則將 /etc/keystone/keystone.conf中的這句配置:
connection = sqlite:////var/lib/keystone/keystone.db
換成:
connection = mysql://keystonedbadmin:keystonesecret@10.10.10.2/keystone
而後,重啓Keystone:
sudo service keystone restart
接着,執行如下命令同步數據庫:
sudo keystone-manage db_sync
最後,有些環境變量是OpenStack運行所必須的:
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
export SERVICE_TOKEN=admin
固然爲了不下次系統重啓後,還得將這些變量再次export,最穩妥的辦法就是將其寫入~/.bashrc中。
建立租間
使用如下命令建立兩個租間,admin和service:
keystone tenant-create --name admin
keystone tenant-create --name service
建立用戶
執行如下命令,建立四個用戶admin、nova、glance及swift:
keystone user-create --name admin --pass admin --email admin@foobar.com
keystone user-create --name nova --pass nova --email nova@foobar.com
keystone user-create --name glance --pass glance --email glance@foobar.com
keystone user-create --name swift --pass swift --email swift@foobar.com
建立角色
使用命令建立兩個角色,admin和Member(譯者注:注意是大寫M):
keystone role-create --name admin
keystone role-create --name Member
查看租間、用戶和角色
剛纔創建的租間、用戶和角色能夠經過以下命令進行查看:
租間列表:
keystone tenant-list
+----------------------------------+--------------------+---------+
| id | name | enabled |
+----------------------------------+--------------------+---------+
| 7f95ae9617cd496888bc412efdceabfd | admin | True |
| c7970080576646c6959ee35970cf3199 | service | True |
+----------------------------------+--------------------+---------+
用戶列表:
keystone user-list
+----------------------------------+---------+-------------------+--------+
| id | enabled | email | name |
+----------------------------------+---------+-------------------+--------+
| 1b986cca67e242f38cd6aa4bdec587ca | True | swift@foobar.com | swift |
| 518b51ea133c4facadae42c328d6b77b | True | glance@foobar.com | glance |
| b3de3aeec2544f0f90b9cbfe8b8b7acd | True | admin@foobar.com | admin |
| ce8cd56ca8824f5d845ba6ed015e9494 | True | nova@foobar.com | nova |
+----------------------------------+---------+-------------------+--------+
角色列表:
keystone role-list
+----------------------------------+----------------------+
| id | name |
+----------------------------------+----------------------+
| 2bbe305ad531434991d4281aaaebb700 | admin |
| d983800dd6d54ee3a1b1eb9f2ae3291f | Member |
+----------------------------------+----------------------+
請你們格外注意id列中的值,雖然很長,但隨後爲用戶綁定角色,繼而把用戶配入租間中時可全靠它們了。
爲特定租間中的用戶綁定角色
如今咱們先爲剛剛建立的用戶綁定角色,經過以下命令格式能夠將特定租間中的特定用戶增長角色(譯者注:僅是命令格式,隨後纔是真正執行的命令):
keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID
其中id字段能夠經過keystone user-list,keystone role-list和keystone tenant-list命令得到。
下面開始爲「admin」租間中的「admin」用戶綁定「admin」角色:
keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role 2bbe305ad531434991d4281aaaebb700 --tenant_id 7f95ae9617cd496888bc412efdceabfd
接着執行以下命令,爲「service」租間中的「nova」、「glance」、「swift」用戶綁定「admin」角色:
keystone user-role-add --user ce8cd56ca8824f5d845ba6ed015e9494 --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
keystone user-role-add --user 518b51ea133c4facadae42c328d6b77b --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
keystone user-role-add --user 1b986cca67e242f38cd6aa4bdec587ca --role 2bbe305ad531434991d4281aaaebb700 --tenant_id c7970080576646c6959ee35970cf3199
Horizon和Swift只「Member」角色便可,因此相應地執行以下命令:
keystone user-role-add --user b3de3aeec2544f0f90b9cbfe8b8b7acd --role d983800dd6d54ee3a1b1eb9f2ae3291f --tenant_id 7f95ae9617cd496888bc412efdceabfd
注意,在執行本身的安裝時,請千萬按照實際安裝中的id進行設置,照抄本文id必將出錯!
建立服務
至此,咱們該建立受權用戶能夠享用的服務了,命令格式以下:
keystone service-create --name service_name --type service_type --description 'Description of the service'
安裝上述格式,建立nova-compute、nova-volume、glance、swift、keystone及ec2服務:
keystone service-create --name nova --type compute --description 'OpenStack Compute Service'
keystone service-create --name volume --type volume --description 'OpenStack Volume Service'
keystone service-create --name glance --type p_w_picpath --description 'OpenStack Image Service'
keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'
keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'
keystone service-create --name ec2 --type ec2 --description 'EC2 Service'
剛纔建立的每一個服務都擁有惟一的id,要查看服務id,使用以下命令便可:
keystone service-list
+----------------------------------+----------+--------------+----------------------------+
| id | name | type | description |
+----------------------------------+----------+--------------+----------------------------+
| 1e93ee6c70f8468c88a5cb1b106753f3 | nova | compute | OpenStack Compute Service |
| 28fd92ffe3824004996a3e04e059d875 | ec2 | ec2 | EC2 Service |
| 7d4ec192dfa1456996f0f4c47415c7a7 | keystone | identity | OpenStack Identity Service |
| 96f35e1112b143e59d5cd5d0e6a8b22d | swift | object-store | OpenStack Storage Service |
| f38f4564ff7b4e43a52b2f5c1b75e5fa | volume | volume | OpenStack Volume Service |
| fbafab6edcab467bb734380ce6be3561 | glance | p_w_picpath | OpenStack Image Service |
+----------------------------------+----------+--------------+----------------------------+
這些id將被用於定義所屬服務的入口(endpoint)。
建立入口
建立服務入口的命令格式是:
keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url
使用以下命令建立nova-compute入口:
keystone endpoint-create --region myregion --service_id 1e93ee6c70f8468c88a5cb1b106753f3 --publicurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --adminurl 'http://10.10.10.2:8774/v2/$(tenant_id)s' --internalurl 'http://10.10.10.2:8774/v2/$(tenant_id)s'
使用以下命令建立nova-volume入口:
keystone endpoint-create --region myregion --service_id f38f4564ff7b4e43a52b2f5c1b75e5fa --publicurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --adminurl 'http://10.10.10.2:8776/v1/$(tenant_id)s' --internalurl 'http://10.10.10.2:8776/v1/$(tenant_id)s'
使用以下命令建立glance入口:
keystone endpoint-create --region myregion --service_id fbafab6edcab467bb734380ce6be3561 --publicurl 'http://10.10.10.2:9292/v1' --adminurl 'http://10.10.10.2:9292/v1' --internalurl 'http://10.10.10.2:9292/v1'
使用以下命令建立swift入口:
keystone endpoint-create --region myregion --service_id 96f35e1112b143e59d5cd5d0e6a8b22d --publicurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s' --adminurl 'http://10.10.10.2:8080/v1' --internalurl 'http://10.10.10.2:8080/v1/AUTH_$(tenant_id)s'
使用以下命令建立keystone入口:
keystone endpoint-create --region myregion --service_id 7d4ec192dfa1456996f0f4c47415c7a7 --publicurl http://10.10.10.2:5000/v2.0 --adminurl http://10.10.10.2:35357/v2.0 --internalurl http://10.10.10.2:5000/v2.0
使用以下命令建立ec2入口:
keystone endpoint-create --region myregion --service_id 28fd92ffe3824004996a3e04e059d875 --publicurl http://10.10.10.2:8773/services/Cloud --adminurl http://10.10.10.2:8773/services/Admin --internalurl http://10.10.10.2:8773/services/Cloud
使用如下命令安裝glance:
sudo apt-get install glance glance-api glance-client glance-common glance-
registry python-glance
配置Glance服務
Glance默認使用SQLite,MySQL或PostgreSQL也能夠很好地與Glance工做。
打開 /etc/glance/glance-api-paste.ini文件並在末尾編輯以下內容:
admin_tenant_name = %SERVICE_TENANT_NAME%
admin_user = %SERVICE_USER%
admin_password = %SERVICE_PASSWORD%
這些值須要用剛纔咱們安裝中的實際值進行替換,admin_tenant_name應該是「service」,admin_user這裏是「glance」、admin_password是「glance」。
編輯完這三行應該是以下的樣子:
admin_tenant_name = service
admin_user = glance
admin_password = glance
接着再打開 /etc/glance/glance-registry-paste.ini文件,也如上述操做同樣在文件尾部進行一樣的編輯。
而後,修改glance數據庫鏈接爲MySQL,編輯 /etc/glance/glance-registry.conf,找到「sql_connection =」這句做以下修改:
sql_connection = mysql://glancedbadmin:glancesecret@10.10.10.2/glance
緊接着仍是這份文件,在底部增長以下設置,目的是讓glance使用keystone受權:
[paste_deploy]
flavor = keystone
打開 /etc/glance/glance-api.conf文件,在文件末尾增長以下配置:
[paste_deploy]
flavor = keystone
在MySQL數據庫中建立glance schema,進行同步:
sudo glance-manage version_control 0
sudo glance-manage db_sync
上述改動所有完成後,重啓glance-api和glance-registry服務:
sudo restart glance-api
sudo restart glance-registry
設置以下環境變量,你也能夠將其寫入 ~/.bashrc中:
export SERVICE_TOKEN=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL="http://localhost:5000/v2.0/"
export SERVICE_ENDPOINT=http://localhost:35357/v2.0
如今咱們可使用這個命令來測試glance是否正確安裝:
glance index
若是這條命令沒有返回任何結果,則說明glance已經正確安裝完畢,並與Keystone正常通訊。如果稍微探究一下的話,上述命令其實有返回值,正確安裝狀況下的返回值是0,可使用echo $?進行查看。
在Glance正確配置且使用keystone做爲受權機制後,咱們即可以上傳鏡像到glance了,相關內容詳見後文中的「鏡像管理(Image Management)」。
先使用以下命令安裝nova及其相關組件:
sudo apt-get install nova-api nova-cert nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler nova-volume rabbitmq-server novnc nova-consoleauth
配置Nova
以以下配置爲例,編輯nova主配文件 /etc/nova/nova.conf:
--dhcpbridge_flagfile=/etc/nova/nova.conf
--dhcpbridge=/usr/bin/nova-dhcpbridge
--logdir=/var/log/nova
--state_path=/var/lib/nova
--lock_path=/run/lock/nova
--allow_admin_api=true
--use_deprecated_auth=false
--auth_strategy=keystone
--scheduler_driver=nova.scheduler.simple.SimpleScheduler
--s3_host=10.10.10.2
--ec2_host=10.10.10.2
--rabbit_host=10.10.10.2
--cc_host=10.10.10.2
--nova_url=http://10.10.10.2:8774/v1.1/
--routing_source_ip=10.10.10.2
--glance_api_servers=10.10.10.2:9292
--p_w_picpath_service=nova.p_w_picpath.glance.GlanceImageService
--iscsi_ip_prefix=192.168.4
--sql_connection=mysql://novadbadmin:novasecret@10.10.10.2/nova
--ec2_url=http://10.10.10.2:8773/services/Cloud
--keystone_ec2_url=http://10.10.10.2:5000/v2.0/ec2tokens
--api_paste_config=/etc/nova/api-paste.ini
--libvirt_type=kvm
--libvirt_use_virtio_for_bridges=true
--start_guests_on_host_boot=true
--resume_guests_state_on_host_boot=true
# vnc specific configuration
--novnc_enabled=true
--novncproxy_base_url=http://10.10.10.2:60
--vncserver_proxyclient_address=10.10.10.2
--vncserver_listen=10.10.10.2
# network specific settings
--network_manager=nova.network.manager.FlatDHCPManager
--public_interface=eth0
--flat_interface=eth1
--flat_network_bridge=br100
--fixed_range=192.168.4.1/27
--floating_range=10.10.10.2/27
--network_size=32
--flat_network_dhcp_start=192.168.4.33
--flat_injected=False
--force_dhcp_release
--iscsi_helper=tgtadm
--connection_type=libvirt
--root_helper=sudo nova-rootwrap
--verbose
建立一個物理卷:
sudo pvcreate /dev/sda6
建立一個名爲「nova-volumnes」的卷組:
sudo vgcreate nova-volumes /dev/sda6
修改 /etc/nova文件夾的屬主及 /etc/nova/nova.conf文件的訪問權限:
sudo chown -R nova:nova /etc/nova
sudo chmod 644 /etc/nova/nova.conf
進入 /etc/nova/api-paste.ini文件,找到末尾三行:
admin_tenant_name = %SERVICE_TENANT_NAME%
admin_user = %SERVICE_USER%
admin_password = %SERVICE_PASSWORD%
用以前建立的名字進行替換(譯者注:和Glance一模一樣,只是此次是nova),編輯完畢以下所示:
admin_tenant_name = service
admin_user = nova
admin_password = nova
仍然在MySQL數據庫進行同步:
sudo nova-manage db sync
爲實例提供IP池:
sudo nova-manage network create private --fixed_range_v4=192.168.4.32/27 --num_networks=1 --bridge=br100 --bridge_interface=eth1 --network_size=32
輸出環境變量:
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL="http://localhost:5000/v2.0/"
重啓nova服務:
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 nova-volume; sudo restart nova-consoleauth;
執行下列命令測試nova是否正確安裝:
sudo nova-manage service list
Binary Host Zone Status State Updated_At
nova-network server1 nova enabled :-) 2012-04-20 08:58:43
nova-scheduler server1 nova enabled :-) 2012-04-20 08:58:44
nova-volume server1 nova enabled :-) 2012-04-20 08:58:44
nova-compute server1 nova enabled :-) 2012-04-20 08:58:45
nova-cert server1 nova enabled :-) 2012-04-20 08:58:43
若全部組件都是微笑,說明nova已經正確安裝完畢。