- OpenStack云計算實戰
- 鐘小平 許寧
- 4676字
- 2020-05-22 15:44:39
2.1 使用Packstack安裝單節點OpenStack云平臺
RDO 的 Packstack非常適合使用單一的 All-in-One(一體化)節點來驗證OpenStack云部署。
2.1.1 準備安裝環境
通常將運行OpenStack的計算機稱為主機或主機節點。為方便實驗,建議使用虛擬機。本章的實例是在一臺真實的Windows計算機(作為宿主機)中通過VMWare Workstation創建一臺運行CentOS 7操作系統的虛擬機,作為OpenStack主機。
1.創建虛擬機
這里給出虛擬機的基本要求,創建虛擬機的具體過程不再詳述。
建議采用16GB內存,使用8GB也能運行。
CPU雙核且支持虛擬化。
硬盤不低于200GB。
網卡(網絡適配器)以橋接模式接入主機(物理機)網絡。
筆者所舉實例中虛擬機硬件配置如圖2-1所示(僅供參考)。可見,創建一臺這樣的虛擬機對主機(物理機)的硬件配置要求不低。

圖2-1 CentOS 7虛擬機硬件配置
2.在虛擬機中安裝CentOS 7操作系統
在安裝過程中語言選擇默認的英語,如果對Linux命令行操作很熟悉,建議選擇CentOS 7最小化操作系統以降低系統資源消耗,否則選擇安裝帶GUI的服務器(Server with GUI)版本,如圖2-2所示。這將有助于初學者查看和編輯配置文件,運行命令行(可打開多個終端界面)。為簡化操作,可以考慮直接以root身份登錄。如果以普通用戶身份登錄,執行系統配置和管理操作時需要使用sudo命令。例如關閉防火墻:
sudo systemctl stop firewalld

圖2-2 選擇帶GUI的服務器
3.NetworkManager服務
CentOS 7網絡默認由 NetworkManager(網絡管理器)負責管理,但是 NetworkManager 與OpenStack網絡組件Neutron有沖突,應停用它,改用傳統的網絡服務Network來管理網絡。執行以下命令實現這些目的:
systemctl disable NetworkManager
systemctl stop NetworkManager
systemctl enable network
systemctl start network
4.禁用防火墻與SELinux
為方便測試,應關閉防火墻。
systemctl disable firewalld
systemctl stop firewalld
編輯/etc/selinux/config文件,將“SELINUX”的值設置為“disabled”,重啟系統使禁用SELinux生效。
5.設置網絡
虛擬機的IP地址應選擇靜態地址,建議通過橋接模式直接訪問外網,以便于測試內外網之間的雙向通信。此實例中虛擬機的網絡連接如圖2-3所示,采用的是橋接模式。

圖2-3 網絡連接采用橋接模式
例如,虛擬機的主機運行 Windows 操作系統,IP 地址為192.168.199.201,連接的網絡是192.168.199.0,默認網關為192.168.199.1,DNS為114.114.114.114;虛擬機運行CentOS 7,IP地址配置為192.168.199.21,默認網關為192.168.199.1,DNS為114.114.114.114。該虛擬機的網卡配置文件/etc/sysconfig/network-scripts/ifcfg-eno16777736的內容如下:
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=c84d0100-79f6-427b-8ced-0348b5df4ed7
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.199.21
NETNASK=255.255.255.0
GATEWAY=192.168.199.1
DNS1=114.114.114.114
設置完畢,執行以下命令重啟network服務使網絡接口設置更改生效。
systemctl restart network
提示
CentOS 7的網卡設備命名方式有所變化,它采用一致性網絡設備命名,可以基于固件、拓撲、位置信息來設置固定名稱,由此帶來的好處是命名自動化,名稱完全可預測,硬件因故障更換也不會影響設備的命名,可以讓硬件更換無縫過渡。但不足之處是比傳統的命名格式更難讀。這種命名格式為:網絡類型+設備類型編碼+編號。例如,eno16777736表示一個以太網卡(en),使用的編號是板載設備索引號,類型編碼是o,索引號是16777736。前兩個字符為網絡類型,如en表示以太網(Ethernet),wl表示無線局域網(WLAN),ww表示無線廣域網(WWAN)。第3個字符代表設備類型,如o表示板載設備索引號,s表示熱插拔插槽索引號,x表示MAC地址,p表示PCI地理位置/USB端口號;后面的編號來自設備。如果要恢復使用傳統的網絡接口命令方式,則可以編輯/etc/sysconfig/grub 文件,找到 GRUB_CMDLINE_LINUX,為它增加以下兩個變量:
net.ifnames=0 biosdevname=0
再使用grub2-mkconfig重新生成GRUB配置并更新內核參數。
grub2-mkconfig -o /boot/grub2/grub.cfg
6.設置主機名
安裝好CentOS 7系統后,通常要更改主機名,例如,這里更改為node-a:
hostnamectl set-hostname node-a
一旦更改主機名,就必須將新的主機名追加到/etc/hosts配置文件中:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 node-a
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 node-a
192.168.199.21 node-a node-a.localdomain
否則,在使用RDO安裝OpenStack的過程中啟動rabbitmq-server服務后失敗,從而導致安裝不成功。RabbitMQ是一個在AMQP基礎上完成的,可復用的企業消息系統,為OpenStack的計算組件Nova 各個服務之間提供一個中心的消息機制。rabbitmq-server 服務在啟動前會解析主機名的地址是否可通。
7.更改語言編碼
如果CentOS 7安裝的是非英語版本,那么在/etc/environment文件中添加以下定義:
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
8.設置時間同步
整個OpenStack環境中所有節點的時間必須是同步的。在CentOS 7系統中一般使用時間同步軟件Chrony,如果沒有安裝,執行以下命令進行安裝。
yum install chrony -y
通常選擇一個控制節點作為其他節點的時間同步服務器(簡稱 NTP)。這里使用虛擬機作為OpenStack主機節點,選擇其宿主機(一臺物理機)作為所有節點的時間同步服務器比較好。
Windows系統自帶時間服務器。考慮到本書實驗環境,為便于實驗,這里直接在運行OpenStack的虛擬機的宿主機(物理機)上部署一個NTP服務器,統一所有OpenStack實驗節點的系統時間。該物理機運行Windows 7操作系統,可以利用其內置的W32Time服務架設一臺NTP服務器。默認情況下,Windows計算機作為 NTP客戶端工作,必須通過修改注冊表使其也作為 NTP服務器運行。
(1)打開注冊表編輯器,依次展開HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer節點,將Eabled鍵值由默認的0改為1,表示啟用NTP服務器。
(2)在注冊表編輯器中繼續將HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config節點下的AnnounceFlags鍵值改為5,這樣強制該主機將它自身宣布為可靠的時間源,從而使用內置的CMOS時鐘。默認值a(十六進制)表示采用外面的時間服務器。
(3)以管理員身份打開命令行,執行命令net stop w32time&&net start w32time,先停止再啟動W32Time服務。
(4)在命令行中執行services.msc命令打開服務管理單元(或者從計算機管理控制臺中打開該管理單元),設置W32Time服務啟動模式為自動。
(5)NTP服務的端口是123,使用的是UDP。如果啟用防火墻,則允許UDP 123端口訪問。可以打開“高級安全Windows防火墻”對話框,設置相應的入站規則。也可以通過管理員身份打開命令行,執行以下命令來添加該規則:
netsh advfirewall firewall add rule name= NTPSERVER dir=in action=allow protocol=UDP localport=123
至此,設置的NTP服務器可以提供時間服務。
然后在虛擬機(作為 All-in-One 節點)上配置 Chrony,使其與物理機的時間同步。編輯/etc/chrony.conf,加入以下語句(192.168.199.201為NTP服務器地址)。
server 192.168.199.201 iburst
然后重啟時間同步服務使設置生效:
systemctl restart chronyd.service
2.1.2 準備所需的軟件庫
CentOS Extras軟件庫已連同CentOS 7一并安裝,并默認啟用。該庫能支持OpenStack庫,只需執行以下命令即可設置OpenStack庫:
yum install -y centos-release-openstack-queens
本例使用的OpenStack的版本為Queens,RDO基本與上游的OpenStack版本同步。如果要安裝以前的舊版本,需要更改版本名,例如,Queens的上一版本為Pike,其中的軟件包名改為centos-releaseopenstack-pike。
繼續執行以下命令,以確保其中的openstack-queens軟件庫可用:
yum-config-manager --enable openstack-queens
該命令將解析依賴(Resolving Dependencies)并安裝所需的依賴(Installing for Dependencies)。完成之后,需要執行以下命令更新當前軟件包:
yum update -y
這將升級所有包,改變軟件設置和系統設置,并升級系統版本內核。
不過,從Pike開始,核心組件openstack-nova-compute的安裝所依賴的qemu-kvm版本不能低于2.9.0,CentOS 7現有的軟件庫不能提供qemu-kvm較新版本的安裝。為此,需要相應的軟件庫來提供支持,RDO就提供這樣的庫。具體操作步驟如下。
(1)執行以下命令安裝yum-plugin-priorities插件。
yum -y install yum-plugin-priorities
yum-plugin-priorities插件用來設置yum在調用軟件源時的順序。通常官方提供的軟件源,都是比較穩定和被推薦使用的,所以官方源的順序要高于第三方源的順序。當然這需要在軟件源定義文件(.repo)中使用priority參數設置優先級,其值為整數,默認優先級為99,數值越小優先級越高。
(2)執行以下命令切換到用于存放軟件源定義文件的目錄。
cd /etc/yum.repos.d/
(3)下載RDO官方網站針對CentOS 7提供的軟件源定義文件delorean-deps.repo。
curl -O https://trunk.rdoproject.org/centos7/delorean-deps.repo
(4)下載RDO官方網站針對CentOS 7提供的軟件源定義文件delorean.repo。
curl -O https://trunk.rdoproject.org/centos7/current-passed-ci/delorean.repo
該文件內容如下,priority參數值為1,說明其優先級最高。
[delorean]
name=delorean-puppet-oslo-e996ecf807ebc4bd3c9ef037bd3722b551ade1bd
baseurl=https://trunk.rdoproject.org/centos7/e9/96/e996ecf807ebc4bd3c9ef037bd3722b55 1ade1bd_fb58e76a
enabled=1
gpgcheck=0
priority=1
(5)升級所有包,改變軟件設置和系統設置,并升級系統版本內核。
yum update -y
這樣yum首先會訪問delorean.repo源,然后再訪問其他可用的源。
由于內核更新,需要重啟主機之后再執行后續操作。
2.1.3 安裝Packstack安裝器
執行以下命令安裝openstack-packstack及其依賴包:
yum install -y openstack-packstack
安裝過程中需要安裝許多依賴包,如openstack-packstack-puppet等。
Packstack是RDO的OpenStack安裝工具,用于取代手動設置OpenStack。Packstack基于Puppet工具,通過Puppet部署OpenStack各組件。Puppet是一種Linux、UNIX和Windows平臺的集中配置管理系統,使用自有的Puppet描述語言,可管理配置文件、用戶、任務、軟件包、系統服務等。Puppet將這些系統實體稱之為資源,其設計目標是簡化對這些資源的管理,妥善處理資源間的依賴關系。
2.1.4 運行Packstack安裝OpenStack
1.Packstack工具的基本用法
packstack [選項] [--help]
執行packstack --help命令列出選項清單,這里給出部分選項及其說明。
--gen-answer-file=GEN_ANSWER_FILE:產生應答文件模板。
--answer-file=ANSWER_FILE:依據應答文件的配置信息以非交互模式運行該工具。
--install-hosts=INSTALL_HOSTS:在一組主機上一次性安裝,主機列表間以逗號分隔。第一臺主機作為控制節點,其他主機作為計算節點。如果僅提供一臺主機,將集中在單節點上以“All-in-One”方式安裝。
--allinone:所有功能都集中安裝在單一主機上。
還有許多具體定義安裝內容的全局性選項,例如,--ssh-public-key=SSH_PUBLIC_KEY設置安裝在服務器上的公鑰路徑,--default-password=DEFAULT_PASSWORD設置默認密碼(會被具體服務或用戶的密碼所覆蓋),--mariadb-install=MARIADB_INSTALL設置是否安裝MARIADB數據庫。
2.Packstack的安裝過程
實際應用中多使用應答文件所提供的配置選項進行部署。首次測試,可以考慮直接使用“All-inOne”方式進行單節點部署。“All-in-One”方式是RDO官方網站上提供的向導模式,只需加上--allinone選項。下面記錄了例中的執行過程(#打頭的是筆者增加的注釋)。
[root@node-a ~]# packstack --allinone
Welcome to the Packstack setup utility
# 提示安裝日志文件
The installation log file is available at: /var/tmp/packstack/20180606-112055-8r6isW/openstack-setup.log
Packstack changed given value to required value /root/.ssh/id_rsa.pub
Installing:
Clean Up [ DONE ]
Discovering ip protocol version [ DONE ]
# 設置SSH密鑰
Setting up ssh keys [ DONE ]
# 準備服務器
Preparing servers [ DONE ]
# 安裝Puppet和探測主機詳情之前
Pre installing Puppet and discovering hosts' details [ DONE ]
# 準備預裝的項目
Preparing pre-install entries [ DONE ]
# 設置證書
Setting up CACERT [ DONE ]
# 準備AMQP(高級消息隊列)項目
Preparing AMQP entries [ DONE ]
# 準備MariaDB(現已代替MySQL)數據庫項目
Preparing MariaDB entries [ DONE ]
# 修正Keystone LDAP參數
Fixing Keystone LDAP config parameters to be undef if empty[ DONE ]
# 準備Keystone(認證服務)項目
Preparing Keystone entries [ DONE ]
# 準備Glance(鏡像服務)項目
Preparing Glance entries [ DONE ]
# 檢查Cinder(卷存儲服務)是否有卷
Checking if the Cinder server has a cinder-volumes vg[ DONE ]
# 準備Cinder(卷存儲服務)項目
Preparing Cinder entries [ DONE ]
# 準備Nova API(Nova對外接口)項目
Preparing Nova API entries [ DONE ]
# 為Nova遷移創建SSH密鑰
Creating ssh keys for Nova migration [ DONE ]
Gathering ssh host keys for Nova migration [ DONE ]
# 準備Nova Compute(計算服務)項目
Preparing Nova Compute entries [ DONE ]
# 準備Nova Scheduler(調度服務)項目
Preparing Nova Scheduler entries [ DONE ]
# 準備Nova VNC(虛擬網絡控制臺)代理項目
Preparing Nova VNC Proxy entries [ DONE ]
# 準備OpenStack與網絡相關的Nova項目
Preparing OpenStack Network-related Nova entries [ DONE ]
# 準備Nova通用項目
Preparing Nova Common entries [ DONE ]
# 以下準備Neutron(網絡組件)項目
Preparing Neutron LBaaS Agent entries [ DONE ]
Preparing Neutron API entries [ DONE ]
Preparing Neutron L3 entries [ DONE ]
Preparing Neutron L2 Agent entries [ DONE ]
Preparing Neutron DHCP Agent entries [ DONE ]
Preparing Neutron Metering Agent entries [ DONE ]
Checking if NetworkManager is enabled and running [ DONE ]
# 準備OpenStack客戶端項目
Preparing OpenStack Client entries [ DONE ]
# 準備Horizon儀表板項目
Preparing Horizon entries [ DONE ]
# 以下準備Swift(對象存儲)項目
Preparing Swift builder entries [ DONE ]
Preparing Swift proxy entries [ DONE ]
Preparing Swift storage entries [ DONE ]
# 準備Gnocchi(用于計費的時間序列數據庫作為服務)項目
Preparing Gnocchi entries [ DONE ]
# 準備Redis(用于計費的數據結構服務器)項目
Preparing Redis entries [ DONE ]
# 準備Ceilometer(計費服務)項目
Preparing Ceilometer entries [ DONE ]
# 準備Aodh(警告)項目
Preparing Aodh entries [ DONE ]
# 準備Puppet模塊和配置清單
Preparing Puppet manifests [ DONE ]
Copying Puppet modules and manifests [ DONE ]
# 應用控制節點(測試時可能需要較長時間)
Applying 192.168.199.21_controller.pp
192.168.199.21_controller.pp: [ DONE ]
# 應用網絡節點(測試時可能需要較長時間)
Applying 192.168.199.21_network.pp
192.168.199.21_network.pp: [ DONE ]
# 應用計算節點(測試時可能需要較長時間)
Applying 192.168.199.21_compute.pp
192.168.199.21_compute.pp: [ DONE ]
# 應用Puppet配置清單
Applying Puppet manifests [ DONE ]
Finalizing [ DONE ]
# 安裝成功完成應用并給出其他提示信息
**** Installation completed successfully ******
Additional information:
# 執行命令產生的應答文件
* A new answerfile was created in: /root/packstack-answers-20180606-112056.txt
# 未安裝時間同步。需要確認CentOS 7當前的系統時間正確,如果不正確,則需要修改
* Time synchronization installation was skipped.Please note that unsynchronized time on server instances might be problem for some OpenStack components.
# 在用戶主目錄下產生keystonerc_admin文件,使用命令行工具需要用它作為授權憑據
* File /root/keystonerc_admin has been created on OpenStack client host 192.168.199.21.To use the command line tools you need to source the file.
# 訪問OpenStack Dashboard(Web訪問接口),請使用keystonerc_admin中的登錄憑據
* To access the OpenStack Dashboard browse to http://192.168.199.21/dashboard .
Please, find your login credentials stored in the keystonerc_admin in your home directory.
# 安裝日志文件名及其路徑
* The installation log file is available at: /var/tmp/packstack/20180606-112055-8r6isW/openstack-setup.log
# Puppet配置清單路徑
* The generated manifests are available at: /var/tmp/packstack/20180606-112055-8r6isW/manifests
3.Packstack安裝典型問題
安裝過程中應用控制節點、網絡節點和計算節點時都會測試Puppet應用是否完成,如例中3個節點測試的提示依次為:
Testing if puppet apply is finished: 192.168.199.21_controller.pp
Testing if puppet apply is finished: 192.168.199.21_network.pp
Testing if puppet apply is finished: 192.168.199.21_compute.pp
測試過程可能會花費較長時間。安裝過程中出現的問題一般也集中在這個階段。筆者遇到的典型問題有以下兩個。
(1)應用控制節點失敗。這個問題可以到Puppet配置清單路徑中相應日志文件中查找原因,例中為/var/tmp/packstack/20180606-112055-8r6isW/manifests/192.168.199.21_controller.pp.log。最常見的原因是rabbitmq-server服務在啟動前要解析主機名的地址,解決方案參見2.1.1節第6點的有關說明。
(2)應用計算節點失敗。這個問題可以到Puppet配置清單路徑中相應日志文件中查找原因,例中為/var/tmp/packstack/20180606-112055-8r6isW/manifests/192.168.199.21_compute.pp.log。最常見的原因是openstack-nova-compute的安裝所依賴的qemu-kvm版本不能低于2.9.0,openstack-queens軟件庫現不能提供 qemu-kvm 較新版本的安裝,其解決方案參見2.1.2節。當然也可以從其他渠道安裝qemu-kvm 2.9.0以上版本,需要的軟件包括 qemu-img-ev.x86_64、qemu-kvm-common-ev.x86_64和qemu-kvm-ev.x86_64,版本不能低于2.9.0。
- SignalR Realtime Application Cookbook
- 綜合布線實訓教程(第3版)
- Axure RP8入門手冊:網站和App原型設計從入門到精通
- ASP.NET Core 3 框架揭秘(上下冊)
- 浴缸里的驚嘆:256道讓你恍然大悟的趣題
- OPENStack云框架應用管理實踐
- 矛與盾:黑客就這幾招
- 云計算和大數據技術實戰
- 巧學巧用Dreamweaver CS6、Flash CS6、Fireworks CS6網站制作
- HIS內核設計之道:醫院信息系統規劃設計系統思維
- Axure RP 9 高保真原型設計實例教程
- 計算機網絡技術及應用
- 深入淺出ASP.NET Core
- INSTANT Migration to HTML5 and CSS3 How-to
- Python Network Programming