- 一、先說說雲計算的前世今生
- 二、OpenStack介紹
- 二、OpenStack的部署
一、先說說雲計算的前世今生

IT系統架構的發展到目前為止大致可以分為3個階段:
-
1、 物理機架構階段:
應用部署和運行在物理機上。 比如企業要上一個ERP系統,如果規模不大,可以找3台物理機,分別部署Web服務器、應用服務器和數據庫服務器。 如果規模大一點,各種服務器可以采用集群架構,但每個集群成員也還是直接部署在物理機上。 早期都是這種架構,一套應用一套服務器,通常系統的資源使用率都很低,達到20%的都是好的。
-
2、虛擬化架構階段:
決定了物理服務器的計算能力越來越強,虛擬化技術的發展大大提高了物理服務器的資源使用率。 這個階段,物理機上運行若干虛擬機,應用系統直接部署到虛擬機上。 虛擬化的好處還體現在減少了需要管理的物理機數量,同時節省了維護成本。
-
3、雲計算架構階段:
虛擬化提高了單台物理機的資源使用率,隨着虛擬化技術的應用,IT環境中有越來越多的虛擬機,這時新的需求產生了,"如何對IT環境中的虛擬機進行統一和高效的管理"。有需求就有供給,雲計算登上了歷史舞台。
什么是雲計算?
雲計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網絡訪問, 通過互聯網進入可配置的計算資源共享池(資源包括網絡,計算,存儲,應用軟件,服務)
雲計算的服務類型

二、OpenStack介紹

1. 項目起源
-
OpenStack是一個開源的 IaaS 雲計算平台,是一系列軟件開源項目的組合。由NASA(美國國家航空航天局)和Rackspace(一家美國的雲計算廠商)合作研發並發起,以Apache許可證(Apache軟件基金會發布的一個自由軟件許可證)授權的開源代碼項目。
-
2010年 Openstack項目成立,雖然誕生時間不長,但其發展之迅速,在雲計算領域的影響力擴展迅速成為業內所有人都不得不關注的焦點。
-
OpenStack覆蓋了網絡、虛擬化、操作系統、服務器等各個方面。它是一個正在開發中的雲計算平台項目,根據成熟及重要程度的不同,被分解成核心項目、孵化項目,以及支持項目和相關項目。每個項目都有自己的委員會和項目技術主管,而且每個項目都不是一成不變的,孵化項目可以根據發展的成熟度和重要性,轉變為核心項目。

2. 選擇OpenStack的原因
-
OpenStack 提供了一個非常好的有關如何來打造類似於主要公有雲比如亞馬遜( AWS )和 Google Cloud Platform ( GCP )的彈性私有雲的樣板。OpenStack 將 AWS/GCP 式樣的的基礎架構即服務( IaaS )推向了每個用戶。它就是能實現企業內部 DevOps 的終極平台。
-
OpenStack 能在企業內部提供類似的平台。私有雲可以基於公有雲模型來構造,使得開發者同時擁有集中式 IT 控制和支配。本質上,它是兩者融合的最佳平台,這也是 OpenStack 驅動的私有雲的真正價值。
-
社區活躍,學習資料較多,有問題很容易能找到幫助。
-
使用python開發,遵循apache 2.0開源協議,只需修改一個Logo,都能拿來商業化。
-
架構非常的靈活,可擴展性強。
3. OpenStack和其他虛擬化技術的區別?
OpenStack雲管理平台框架,有很多功能組件,比如說包含計算虛擬化、存儲虛擬化、網絡虛擬化、Image管理、身份認證管理、計費管理、前端展示模塊等等。
KVM、XenServer、VMware只是計算虛擬化模塊調用的后台實現技術而已。
4. OpenStack主要的組件服務

| 項目名稱 | 核心服務 | 描述 |
|---|---|---|
| 儀表盤 | Horizon | 提供了一個基於web的操作界面門戶,通過web界面與OpenStack底層服務交互,就可以實現 建雲主機,分配網絡,配安全組,加雲盤等功能。 |
| 計算服務 | Nova | 是OpenStack雲計算架構控制器,管理 OpenStack 雲里的計算資源、網絡、授權、和擴展需求。是OpenStack中最核心的服務。 |
| 對象存儲服務=========== | Swift | 為OpenStack提供分布式的、最終一致的虛擬對象存儲服務;適用於一次寫入,多次使用。例如百度網盤, 這個服務不是必須的,是可選服務。Swift 有能力存儲數十億計的對象, Swift 具有內置冗余、容錯管理、存檔、流媒體的功能。並且高度擴展,不論大小(多個 PB 級別)和能力(對象的數量)。 |
| 鏡像服務 | Glance | 存儲和檢索虛擬機磁盤鏡像系統,OpenStack計算會在實例部署時使用此服務。管理鏡像模板的倉庫,為虛機提供鏡像模板。 |
| 網絡服務 | Neutron | 確保為其它OpenStack服務提供網絡服務,為虛擬機提供網絡連接服務,就像物理的交換機和路由器。 |
| 塊存儲服務 | Cinder | 為OpenStack運行實例而提供的持久性塊存儲服務。它的可插拔驅動架構的功能有助於創建和管理塊存儲設備。為虛擬機提供額外的硬盤。 |
| 認證服務 | Keystone | 為OpenStack各服務組件提供認證和授權服務,為所有的OpenStack服務提供一個端點目錄。 |
| 監控計費服務 | Ceilometer | 為OpenStack的監控計費服務、基准、擴展性以及統計等目的提供監測和計量。為公有雲准備的,私有雲不需要。屬於高級服務。 |
| 編排服務 | Heat | 為OpenStack編排服務,基於模板自動化部署服務,屬於高級服務。類似於ansible的playbook劇本。 |
| 數據庫服務 | Trove | 為用戶在OpenStack的環境提供可擴展和可靠的關系和非關系數據庫引擎服務。 |
| 項目名稱 | 共享服務 |
|---|---|
| 數據庫服務 | MariaDB ; MongoDB |
| 消息傳輸 | RabbitMQ |
| 緩存 | Memcached ; NTP |
| 存儲 | CEPH、GFS、LVM、ISICI |
| 高可用和負載均衡 | Haproxy、Keepalive、LVS |
5. OpenStack的版本
OpenStack是按照A B C D E F G ...的順序發布版本的,截止到目前19年12月份最新的發行版是 Train

6. 企業級OpenStack需要些什么呢?
-
99.999%的API可用性以及可擴展的控制平面
有高可靠性要求的應用需要高可靠的雲API向全新的雲和 DevOps 模型轉型的一個關鍵能力是提供雲原生應用在彈性雲中的容錯能力。要使一個應用能實時地適應不同組件的出錯,雲 API 需要有更高的可用性。
-
健壯的管理和安全模型
安裝只是管理 OpenStack 的開端。一個真正的雲操作系統將提供一個從設計上就能保證基礎設施團隊能成功交付服務的以運維為核心的雲管理工具套件。
- 可重用的架構模型,通常使用參考網絡架構將小集群或者組連接在在一起
- 初始雲安裝和部署
- 典型的日常雲運維工具,包括日志、系統測量值和相關度分析
- 供運維人員使用的用來做整合和自動化的 CLI(命令行界面)和 API(應用程序編程接口)
- 用於可視化和分析的運維圖形界面
-
開放的架構
OpenStack 的開放架構,能夠減少廠商鎖定,進而降低風險。
-
混合雲兼容性
-
目前環境下,混合雲兼具私有雲安全性與公有雲的彈性擴展能力,混合雲必然成為企業雲部署的第一選擇。根據應用類別和業務特點,將關鍵應用、性能敏感型、中高密級應用部署在私有雲,其他應用部署在公有雲;將同一個應用的不同層部署在不同雲中,時延敏感業務就近用戶部署,提升最終用戶體驗。
-
混合雲的難點在於解決應用的移植性問題。如果你需要一個公有雲和私有雲組合而成的混合雲,不管應用在某個雲中被開發,還是要在兩個雲之間做遷移,或者從一個雲到另一個雲,應用的可移植性都是必須的。當你選定一個應用以及它的雲原生的自動化框架,並將它們從一個雲移動到另一個雲中,一些關鍵的東西必須保持一致:
-
性能相對平穩
-
底層的存儲、網絡和計算架構保持一致或者近似
-
應用的自動化框架必須和兩個雲中的 API 都兼容
-
每個雲中,運行應用的總所有成本( TCO)都應該在1/2-2倍的范圍之內
-
還有行為上的兼容性,意味着非 API 功能也需要吻合
-
支持與相關公有雲 API 的兼容
-
-
-
可擴展的彈性架構
-
當在系統中增加資源后,其性能會按照所增加資源的某種比例增加時,我們就可以說其服務是可擴展的。
-
從多方面看, OpenStack 自身就是個高擴展性的系統。它被設計為松耦合、基於消息通信的架構,這些技術已經在各種中級到高級擴展的系統中得到應用和驗證,它們也可以適應小規模的部署。問題在於配置和部署OpenStack時所做的設計上的決定。
-
一部分默認的配置,以及許多廠商的插件和方案在設計時並沒有考慮擴展性。
-
基礎架構從來沒有真正的彈性過,可是它的特性能支持彈性的應用在它上面運行。一個彈性雲,需要被設計為每個資源,比如虛機、塊存儲和對象存儲,其成本盡可能的低。
-
-
全面的支持和服務
OpenStack 作為一個可擴展的、打造下一代彈性雲的基礎架構,盡管它還不是很完美。但作為一個開源項目,它的吸引力確實不容小視。基於平台開放,會有越來越多的力量促使它更完善和強大,采用 OpenStack 意味着企業雲平台會更加自主可控,並實現技術沉淀和自動化運維水平的提升。
7. OpenStack社區與文檔的鏈接
| 社區: | www.openstack.org ; wiki.openstack.org |
|---|---|
| 郵件列表: | http://wiki.openstack.org/MailingLists#General_List |
| 貢獻代碼: | http://wiki.openstack.org/HowToContribute |
| 源代碼管理: | http://wiki.openstack.org/GerritWorkflow |
| 文檔: | http://docs.openstack.org |
二、OpenStack的部署
1. 環境准備
准備兩台優化好的虛擬機

| CPU | 支持 intel64 或 AMD64 CPU擴展,並啟用AMD-H或intel VT硬件虛擬化支持的64位x86處理器 |
|---|---|
| 系統版本 | CentOS7.6 版本 |
| 內存 | 根據實際測試環境選擇 >=2G |
| 硬盤容量 | 根據實際測試環境選擇 >=50G |
| 防火牆 | 需要關閉 |
| SELINUX | 需要關閉 |
| YUM源 | 阿里雲的Yum源 |
虛擬機分配情況
| 主機 | IP地址 | 主機名 | 注意事項 |
|---|---|---|---|
| 控制節點 | NAT網絡 192.168.1.10 | controller | 至少4G,要開虛擬化 |
| 計算節點 | NAT網絡 192.168.1.20 | computel | 至少2G,要開虛擬化 |
配置域名解析
[root@computel ~]# cat /etc/hosts
192.168.1.10 controller
192.168.1.20 compute1
測試各節點連通性
ping -c 4 controller
ping -c 4 compute1
插件密碼參考(測試)
| 密碼名稱 | 描述 |
|---|---|
| 123456 | 數據庫的根密碼 |
| 123456 | admin 用戶密碼 |
| 123456 | 塊設備存儲服務的數據庫密碼 |
| 123456 | 塊設備存儲服務的 cinder 密碼 |
| 123456 | demo 用戶的密碼 |
| 123456 | 鏡像服務的數據庫密碼 |
| 123456 | 鏡像服務的 glance 用戶密碼 |
| 123456 | 認證服務的數據庫密碼 |
| 123456 | 網絡服務的數據庫密碼 |
| 123456 | 網絡服務的 neutron 用戶密碼 |
| 123456 | 計算服務的數據庫密碼 |
| 123456 | 計算服務中 nova 用戶的密碼 |
| 123456 | RabbitMQ的guest用戶密碼 |
2. 部署OpenStack R版
2.1 安裝 NTP 時間同步服務
-
在controller控制節點安裝配置chrony
Chrony是一個開源的自由軟件,像CentOS 7或基於RHEL 7操作系統,已經是默認服務,默認配置文件在 /etc/chrony.conf 它能保持系統時間與時間服務器(NTP)同步,讓時間始終保持同步。相對於NTP時間同步軟件,占據很大優勢。其用法也很簡單
yum install chrony -y
vim /etc/chrony.conf
server ntp1.aliyun.com iburst //向外網同步時間
allow 192.168.1.0/24 //設置時間同步網段
systemctl restart chronyd.service
systemctl enable chronyd.service
- 在compute計算節點安裝配置chrony
yum install chrony -y
vim /etc/chrony.conf
server 192.168.1.10 iburst //所有計算節點向controller節點同步時間
systemctl restart chronyd.service
systemctl enable chronyd.service
- 進行時間同步服務驗證
[root@computel ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
=========================================================================
^* controller 3 6 17 6 -4061ns[ +163us] +/- 34ms
在安裝過程中可以發現,OpenStack項目全程都是用Python開發的。
2.2 啟用 OpenStack 存儲庫
在CentOS上,extras資源庫提供 rpm包,以啟用OpenStack資源庫。CentOS extras默認包含該存儲庫,因此只需安裝該軟件包即可啟用OpenStack存儲庫。
- 所有節點安裝最新版openstack-rocky ,安裝其他版本修改后綴名即可
yum install centos-release-openstack-rocky -y
- 所有節點修改yum源到國內清華源
cd /etc/yum.repos.d/
#修改openstack-rocky的源
vim CentOS-OpenStack-rocky.repo
[centos-openstack-rocky]
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/cloud/x86_64/openstack-rocky/
#修改ceph源
vim CentOS-Ceph-Luminous.repo
[centos-ceph-luminous]
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7.7.1908/storage/x86_64/ceph-luminous/
- 所有節點**安裝OpenStack客戶端
yum install python-openstackclient -y
2.3 安裝 SQL數據庫-controller
只在控制節點上運行!根據實際要求使用MariaDB或MySQL;也支持其他數據庫。
- 安裝數據庫軟件包
yum install mariadb mariadb-server python2-PyMySQL -y
- 創建和編輯
/etc/my.cnf.d/openstack.cnf文件
#創建一個[mysqld]部分,並將bind-address 密鑰設置為控制器節點的管理IP地址,以允許其他節點通過管理網絡進行訪問。設置其他鍵以啟用有用的選項和UTF-8字符集:
-----------------------------------------------------
[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 192.168.1.10 #監聽地址
default-storage-engine = innodb #默認存儲引擎
innodb_file_per_table = on #獨立表空間文件
max_connections = 4096 #最大連接數
collation-server = utf8_general_ci #默認字符集為UTF8
character-set-server = utf8
- 啟動數據庫,並設置開機自啟
systemctl restart mariadb.service
systemctl enable mariadb.service
- 運行
mysql_secure_installation安全初始化。為數據庫root帳戶選擇合適的密碼
[root@controller ~]# mysql_secure_installation
Enter current password for root (enter for none): <回車>
Set root password? [Y/n] <n> #設數據庫密碼
Remove anonymous users? [Y/n] <y> #移除匿名用戶
Disallow root login remotely? [Y/n] <y> #禁止root用戶遠程登錄
Remove test database and access to it? [Y/n] <y> #移除test數據庫和訪問權限
Reload privilege tables now? [Y/n] <y> #重新加載權限表
2.4 安裝消息隊列服務-controller
消息隊列服務通常在控制器節點上運行;OpenStack支持多種消息隊列服務,包括RabbitM, Qpid和ZeroMQ
- 安裝軟件包
yum install rabbitmq-server -y
- 啟動消息隊列,並設置開機自啟
systemctl restart rabbitmq-server.service
systemctl enable rabbitmq-server.service
- 添加OpenStack用戶
rabbitmqctl add_user openstack 123456
- 授權用戶的配置寫入和讀取權限
#三個 ".*" 表示可讀可寫可配置
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
- 擴展:啟用 rabbitmq的管理插件,為了方便日后做監控
#啟動后的端口是 15672
systemctl enable rabbitmq-server.service
systemctl restart rabbitmq-server.service
rabbitmq-plugins enable rabbitmq_management
#插件啟動以后會監控兩個端口(5672、25672)
[root@controller ~]# netstat -lntup|egrep '5672|25672'
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 56252/beam.smp
tcp6 0 0 :::5672 :::* LISTEN 56252/beam.smp
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 56252/beam.smp
- 瀏覽器訪問
2.5 安裝Memcached緩存-controller
memcached服務通常在控制器節點上運行。對於生產部署,建議啟用防火牆,身份驗證和加密的組合以保護其安全。
- 安裝軟件包
yum install memcached python-memcached -y
- 修改
/etc/sysconfig/memcached文件為控制節點IP,也可改為 0.0.0.0
sed -i 's#127.0.0.1#0.0.0.0#g' /etc/sysconfig/memcached
#配置服務以使用控制器節點的管理IP地址。這是為了允許其他節點通過管理網絡進行訪問
OPTIONS="-l 0.0.0.0,::1"
- 啟動服務,並設置開機自啟
systemctl restart memcached.service
systemctl enable memcached.service
2.6 安裝 etcd 分布式存儲-controller
在控制器節點上運行。etcd是一個分布式,一致的鍵值存儲,用於共享配置和服務發現,特點是,安全,具有可選客戶 端證書身份驗證的自動TLS;快速,基准測試10,000次/秒;可靠,使用Raft正確分發。
- 安裝軟件包
yum install etcd -y
- 編輯
/etc/etcd/etcd.conf文件
[root@controller ~]# vi /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.10:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.10:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.10:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.10:2379"
ETCD_INITIAL_CLUSTER="controller=http://192.168.1.10:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
- 啟動服務,並設置開機自啟
systemctl restart etcd.service
systemctl enable etcd.service
3. 安裝 keystone 認證服務-控制節點
keystone是OpenStack的身份服務,暫且可以理解為一個與權限有關'的組件。
Keystone項目的主要目的是為訪問openstack的各個組件(nova,cinder,glance...)提供一個統一的驗證方式,具體的:
openstack是由眾多組件構成的一套系統,該系統的功能是對外提供服務,因而我們可以將其定義為一個龐大的軟件,沒有軟件不考慮安全因素,Keystone對於通常的應用場景所不同的是他要解決分布式環境下的統一認證。
-
功能:認證管理,授權管理,服務目錄
-
身份驗證服務包括以下組件:服務器、驅動、模塊

當安裝OpenStack自身服務時,用戶必須將之注冊到其OpenStack安裝環境的每個服務。身份服務才可以追蹤到哪些OpenStack服務已經安裝,以及在網絡中定位它們。
- 創建keystone數據庫
每個組件都有自己的數據庫,能抗的壓力更大
mysql -uroot -p
create database keystone;
- 對keystone數據庫授權
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456';
grant all privileges on keystone.* to 'keystone'@'%' identified by '123456';
flush privileges;
安裝和配置的部件
- 安裝keystone相關的軟件包
yum install openstack-keystone httpd mod_wsgi -y
#wsgi:python項目, 類似於php的fastcgi
#相關資料鏈接 https://www.cnblogs.com/xiaoyuanqujing/articles/11838819.html
- 編輯/etc/keystine/keystone.conf文件
- 注意:
controller在此示例中,主機必須是可解析的。
#備份原配置文件,過濾出模塊名覆蓋到配置文件中
cp /etc/keystone/keystone.conf{,.bak}
egrep -v '^$|^#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
[root@controller ~]# vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:123456@controller/keystone #配置數據庫訪問
[token]
provider = fernet #配置Fernet令牌提供者
- 填充身份服務數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
#查看表
mysql keystone -p123456 -e 'show tables'
- 初始化Fernet密鑰存儲庫
#命令行直接復制執行
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
keystone-manage bootstrap --bootstrap-password 123456 \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne

配置Apache HTTP服務器
- 編輯 /etc/httpd/conf/httpd.conf 文件
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller #修改主機名
- 創建/usr/share/keystone/wsgi-keystone.conf文件的軟鏈接
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
- 啟動Apache HTTP服務,並設置開機自啟動
systemctl restart httpd.service
systemctl enable httpd.service
[root@controller ~]# netstat -lntup|grep httpd
tcp6 0 0 :::5000 :::* LISTEN 17417/httpd
tcp6 0 0 :::80 :::* LISTEN 17417/httpd
- 設置環境變量
[root@controller ~]# vim admin-openrc
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
#使變量腳本生效
[root@controller ~]# source ~/admin-openrc
[root@controller ~]# env|grep OS
- 創建域、項目用戶和角色
#創建域
openstack domain create --description "An Example Domain" example
#創建項目
openstack project create --domain default --description "Service Project" service
#創建平台demo項目
openstack project create --domain default --description "Demo Project" demo
#創建demo用戶
openstack user create --domain default --password 123456 demo
#創建user角色
openstack role create user
#將user角色添加到myproject項目和demo用戶
openstack role add --project demo --user demo user //該步驟沒有返回值
- 驗證keystone
#取消環境變量
unset OS_AUTH_URL OS_PASSWORD
#admin用戶返回的認證token
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
#demo用戶返回的認證token
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name demo --os-username demo token issue
- 創建變量環境腳本並認證
#再創建一個demo-openrc腳本
[root@controller ~]# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
#使用腳本驗證返回值,查看admin用戶的token信息
source ~/admin-openrc //使環境變量生效
source ~/demo-openrc
#認證
openstack token issue
4. 安裝 Glance 鏡像服務-控制節點
OpenStack鏡像服務對於基礎架構即服務(IaaS)至關重要。它接受來自磁盤或服務器鏡像的API請求,以及來自最終用戶或OpenStack Compute組件的元數據定義。它還支持在各種存儲庫類型(包括OpenStack對象存儲)上存儲磁盤或服務器映像。
OpenStack Image服務上運行許多定期進程以支持緩存。復制服務可確保整個群集的一致性和可用性。其他定期過程包括審核員,更新者和收獲者。
OpenStack鏡像服務包括以下組件:
-
glance-api
接受用於圖像發現,檢索和存儲的Image API調用。
-
glance-registry(瀏覽注冊表)
存儲,處理和檢索有關圖像的元數據。元數據包括大小和類型等項目。 警告注冊表是供OpenStack Image服務使用的私有內部服務。不要將此服務提供給用戶。
-
Database(數據庫)
存儲圖像元數據,您可以根據自己的喜好選擇數據庫。大多數部署使用MySQL或SQLite。
-
Storage repository for image files(圖像文件的存儲庫)
支持各種存儲庫類型,包括普通文件系統,對象存儲,RADOS塊設備,HTTP和Amazon S3。請注意,某些存儲庫將僅支持只讀用法。
-
Metadata definition service(元數據定義服務)
供應商,管理員,服務和用戶的通用API,可以有意義地定義他們自己的自定義元數據。該元數據可用於不同類型的資源,例如圖像,偽像,體積,風味和聚合。定義包括新屬性的鍵,描述,約束以及可以與之關聯的資源類型。
4.1 安裝與配置
-
添加數據庫
在安裝和配置Image服務之前,必須創建數據庫,服務憑證和API端點。
#使用數據庫訪問客戶端以root用戶身份連接到數據庫服務器 mysql -u root -p #創建glance數據庫 create database glance; #授予對glance數據庫的適當訪問權限 grant all privileges on glance.* to 'glance'@'localhost' identified by '123456'; grant all privileges on glance.* to 'glance'@'%' identified by '123456'; flush privileges; -
獲取admin用戶的環境變量
source ~/admin-openrc
- 創建glance用戶
openstack user create --domain default --password-prompt glance

- 將管理員admin用戶添加到glance用戶和項目中
openstack role add --project service --user glance admin
\\該命令不提供任何輸出
- 創建glance服務
openstack service create --name glance --description "OpenStack Image" image

- 創建鏡像服務API端點
OpenStack使用三種API端點變種代表每種服務:admin、internal、public。
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292

- 安裝glance包
yum install openstack-glance -y
- 創建images文件夾,並修改屬性
#一定要賦予openstack-glance-api.service服務對存儲設備的可寫權限
mkdir /var/lib/glance/images
chown -hR glance:glance /var/lib/glance/
- 編輯文件 /etc/glance/glance-api.conf
cp /etc/glance/glance-api.conf{,.bak}
egrep -v '^$|^#' /etc/glance/glance-api.conf.bak >/etc/glance/glance-api.conf
[root@controller ~]# vim /etc/glance/glance-api.conf
[database] #數據庫訪問
connection = mysql+pymysql://glance:123456@controller/glance
[keystone_authtoken] #認證服務訪問
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = 123456 #glance用戶的密碼
[paste_deploy] #認證服務訪問
flavor = keystone
[glance_store] #本地文件系統存儲和鏡像文件位置
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images
- 編輯鏡像服務的另一個組件文件 /etc/glance/glance-registry.conf
cp /etc/glance/glance-registry.conf{,.bak}
egrep -v '^$|^#' /etc/glance/glance-registry.conf.bak >/etc/glance/glance-registry.conf
[root@controller ~]# vim /etc/glance/glance-registry.conf
[database]
connection = mysql+pymysql://glance:123456@controller/glance
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = 123456
[paste_deploy]
flavor = keystone
- 同步寫入鏡像數據庫
su -s /bin/sh -c "glance-manage db_sync" glance

- 啟動服務
systemctl enable openstack-glance-api.service openstack-glance-registry.service
systemctl start openstack-glance-api.service openstack-glance-registry.service
4.2 對鏡像服務進行驗證
- 獲取admin用戶的環境變量來獲取只有管理員能執行的命令的訪問權限,並下載鏡像
source ~/admin-openrc
wget http://download.cirros-cloud.net/0.3.6/cirros-0.3.6-x86_64-disk.img
#下載一個小型linux鏡像進行測試
- 上傳鏡像
使用QCOW2磁盤格式,裸容器格式和公開可見性將圖像上傳到Image服務,以便所有項目都可以訪問它
openstack image create "cirros" --file ~/cirros-0.3.6-x86_64-disk.img --disk-format qcow2 --container-format bare --public
- 查看上傳的鏡像
openstack image list

#刪除鏡像的命令
openstack image delete <ID>
5. 安裝 Nova 計算服務-控制節點
使用OpenStack計算服務來托管和管理雲計算系統。OpenStack計算服務是基礎設施即服務(IaaS)系統的主要部分,模塊主要由Python實現。
OpenStack計算組件請求OpenStack Identity服務進行認證;請求OpenStack Image服務提供磁盤鏡像;為OpenStack dashboard提供用戶與管理員接口。磁盤鏡像訪問限制在項目與用戶上;配額以每個項目進行設定(例如,每個項目下可以創建多少實例)。OpenStack組件可以在標准硬件上水平大規模擴展,並且下載磁盤鏡像啟動虛擬機實例。
OpenStack計算服務由下列組件所構成:
-
nova-api服務接收和響應來自最終用戶的計算API請求。此服務支持OpenStack計算服務API,Amazon EC2 API,以及特殊的管理API用於賦予用戶做一些管理的操作。它會強制實施一些規則,發起多數的編排活動,例如運行一個實例。
-
nova-api-metadata服務接受來自虛擬機發送的元數據請求。
-
nova-compute服務一個持續工作的守護進程,通過Hypervior的API來創建和銷毀虛擬機實例。
-
nova-scheduler服務拿到一個來自隊列請求虛擬機實例,然后決定那台計算服務器主機來運行它。
-
nova-conductor模塊媒介作用於
nova-compute服務與數據庫之間。它排除了由nova-compute服務對雲數據庫的直接訪問。nova-conductor模塊可以水平擴展。但是,不要將它部署在運行nova-compute服務的主機節點上 -
nova-cert模塊服務器守護進程向Nova Cert服務提供X509證書。用來為
euca-bundle-image生成證書。 -
nova-network worker守護進程與
nova-compute服務類似,從隊列中接受網絡任務,並且操作網絡。執行任務例如創建橋接的接口或者改變IPtables的規則。 -
nova-consoleauth守護進程授權控制台代理所提供的用戶令牌。
-
nova-novncproxy守護進程提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持基於瀏覽器的novnc客戶端。
-
nova-spicehtml5proxy守護進程提供一個代理,用於訪問正在運行的實例,通過 SPICE 協議,支持基於瀏覽器的 HTML5 客戶端。
-
nova-xvpvncproxy守護進程提供一個代理,用於訪問正在運行的實例,通過VNC協議,支持OpenStack特定的Java客戶端。
-
nova-cert守護進程X509 證書。
-
nova客戶端用於用戶作為租戶管理員或最終用戶來提交命令。
-
隊列
一個在守護進程間傳遞消息的中央集線器。
-
SQL數據庫
存儲構建時和運行時的狀態,為雲基礎設施。理論上,OpenStack計算可以支持任何和SQL-Alchemy所支持的后端數據庫,通常使用SQLite3來做測試可開發工作,MySQL和PostgreSQL 作生產環境。
5.1 配置MySQL數據庫及授權
- 創建數據庫
mysql -u root -p
#創建nova_api,nova,nova_cell0和placement數據庫
create database nova_api;
create database nova;
create database nova_cell0;
create database placement;
#對數據庫進行正確的授權
grant all privileges on nova_api.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova_api.* to 'nova'@'%' identified by '123456';
grant all privileges on nova.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova.* to 'nova'@'%' identified by '123456';
grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by '123456';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by '123456';
grant all privileges on placement.* to 'placement'@'localhost' identified by '123456';
grant all privileges on placement.* to 'placement'@'%' identified by '123456';
flush privileges;
5.2 創建nova用戶
source ~/admin-openrc #加載admin環境變量
openstack user create --domain default --password 123456 nova

- 給
nova用戶添加admin角色
openstack role add --project service --user nova admin
- 創建
nova服務實體:
openstack service create --name nova --description "OpenStack Compute" compute

- 創建 Compute 服務 API 端點
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

5.3 創建placement用戶
例如,一個資源提供者可以是一個計算節點,共享存儲池,或一個IP分配池。placement服務跟蹤每個供應商的庫存和使用情況。例如,在一個計算節點創建一個實例的可消費資源如計算節點的資源提供者的CPU和內存,磁盤從外部共享存儲池資源提供商和IP地址從外部IP資源提供者。
- 創建一個
placement服務用戶
openstack user create --domain default --password 123456 placement

- 使用管理員角色將Placement用戶添加到服務項目中
openstack role add --project service --user placement admin
- 在服務目錄創建Placement API服務
openstack service create --name placement --description "Placement API" placement

- 創建Placement API服務端點
openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

5.4 安裝軟件並配置 Nova
- 安裝軟件包
yum install openstack-nova-api openstack-nova-conductor openstack-nova-console \
openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api -y
- 修改
nova.conf配置文件
cp /etc/nova/nova.conf{,.bak}
egrep -v '^$|^#' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
[root@controller ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis=osapi_compute,metadata #只啟用計算和元數據API
transport_url = rabbit://openstack:123456@controller #配置RabbitMQ消息隊列訪問
my_ip=192.168.1.10 #控制節點的IP地址
use_neutron = true #能夠使用Networking服務
firewall_driver = nova.virt.firewall.NoopFirewallDriver #能夠使用Networking服務
[api]
auth_strategy = keystone
[api_database]
connection = mysql+pymysql://nova:123456@controller/nova_api #配置數據庫的連接
[database]
connection = mysql+pymysql://nova:123456@controller/nova #配置數據庫的連接
[keystone_authtoken] #配置認證服務訪問
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = 123456 #nova用戶的密碼
[glance] #配置鏡像服務API的位置
api_servers = http://controller:9292
[oslo_concurrency] #配置鎖路徑
lock_path = /var/lib/nova/tmp
[placement] #配置對Placement API的訪問
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = 123456
[placement_database]
connection = mysql+pymysql://placement:123456@controller/placement
[vnc] #配置VNC代理 使用控制節點的IP地址
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
5.5 啟用placement API訪問
由於軟件包錯誤,必須通過將以下配置添加到來啟用對 Placement API 的訪問
[root@controller ~]# vim /etc/httpd/conf.d/00-nova-placement-api.conf
...
15 #SSLCertificateKeyFile ...
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
...
---------------------------------------------------------------------------
#重啟httpd
systemctl restart httpd.service
5.6 同步數據庫的設置
- 同步nova-api 數據庫
su -s /bin/sh -c "nova-manage api_db sync" nova
- 注冊cell0數據庫
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
- 創建cell1 單元格
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
#2ce1c654-9c08-4313-99be-99e9db53f9c9
- 同步nova數據庫
su -s /bin/sh -c "nova-manage db sync" nova
- 驗證數據庫是否注冊正確
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

- 啟動nova服務並設置為開機自啟
systemctl enable openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
systemctl start openstack-nova-api.service openstack-nova-consoleauth openstack-nova-scheduler.service \
openstack-nova-conductor.service openstack-nova-novncproxy.service
6. 安裝 Nova 計算服務-計算節點
[root@computel ~]# cat /etc/hosts
192.168.1.10 controller
192.168.1.20 compute1
#關閉yum源檢查
sed -i 's#gpgcheck=1#gpgcheck=0#g' /etc/yum.repos.d/*.repo
- 安裝軟件包
yum install python-openstackclient -y #測試環境時已安裝
yum install openstack-nova-compute -y
- 編輯配置文件 /etc/nova/nova.conf
cp /etc/nova/nova.conf{,.bak}
egrep -v '^$|^#' /etc/nova/nova.conf.bak >/etc/nova/nova.conf
[root@computel ~]# vim /etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:123456@controller
my_ip = 192.168.1.20
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = 123456
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.1.10:6080/vnc_auto.html
# 這里的vnc網址 http://controller:6080/vnc_auto.html 需改為 http://192.168.1.10:6080/vnc_auto.html
[glance]
api_servers = http://controller:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = 123456
- 確定計算節點是否支持虛擬機的硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
2
#如果這個命令返回了one or greater的值,那么你的計算節點支持硬件加速且不需要這步的額外的配置
#如果這個命令返回了zero值,那么你的計算節點不支持硬件加速。你必須配置libvirt來使用QEMU去代替KVM
vim /etc/nova/nova.conf
[libvirt]
virt_type = qemu
- 啟動服務並添加為開機自啟動
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl restart libvirtd.service openstack-nova-compute.service
systemctl status libvirtd.service openstack-nova-compute.service
7. 添加 計算節點 到 controller的數據庫中-控制節點
- 驗證在數據庫中的計算節點
source ~/admin-openrc #加載環境變量
openstack compute service list --service nova-compute

- 發現計算節點
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

- 注意:添加新的計算節點時,必須在控制器節點上運行以注冊這些新的計算節點。另外,可以在中設置適當的時間間隔
vim /etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300
- 在controller節點驗證計算服務操作
source ~/admin-openrc
openstack compute service list
其輸處中有3個服務組件是激活在控制節點,一個服務組件是激活在計算節點

- 列出身份服務中的API端點以驗證與身份服務的連接
openstack catalog list

- 列出圖像服務中的圖像以驗證與圖像服務的連接性
openstack image list

- 檢查單元格和展示位置API是否正常運行
nova-status upgrade check

8. 安裝 Neutron 網絡虛擬化服務
Neutron 組件介紹

一般而言,neutron-server和各neutron-plugin部署在控制節點或者網絡節點上,而neutron-gent則部署在網絡節點上和計算節點上。
8.1 控制節點安裝
- 創建
neutron數據庫
mysql -uroot -p
create database neutron;
- 對數據庫進行授權
grant all privileges on neutron.* to 'neutron'@'localhost' identified by '123456';
grant all privileges on neutron.* to 'neutron'@'%' identified by '123456';
flush privileges;
- 創建
neutron用戶
source ~/admin-openrc
openstack user create --domain default --password 123456 neutron

admin向neutron用戶添加角色
openstack role add --project service --user neutron admin
\\沒有任何輸出
- 創建
neutron服務實體
openstack service create --name neutron --description "OpenStack Networking" network

- 創建網絡服務API端點
openstack endpoint create --region RegionOne network public http://controller:9696
openstack endpoint create --region RegionOne network internal http://controller:9696
openstack endpoint create --region RegionOne network admin http://controller:9696

配置網絡的選項:
可以使用選項1和2表示的兩種體系結構之一來部署網絡服務
- 選項1 部署了最簡單的架構,該架構僅支持將實例附加到提供程序(外部)網絡。沒有自助服務(專用)網絡,路由器或浮動IP地址。只有
admin或其他特權用戶可以管理提供商網絡。 - 選項2通過支持將實例附加到自助服務網絡的第3層服務增強了選項1。該
demo非特權用戶或其他非特權用戶可以管理自助服務網絡,包括在自助服務網絡與提供商網絡之間提供連接的路由器。此外,浮動IP地址使用自助服務網絡從外部網絡(例如Internet)提供到實例的連接。
提供商網絡
- 安裝需要的組件
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
- 編輯
/etc/neutron/neutron.conf文件
cp /etc/neutron/neutron.conf{,.bak}
egrep -v '^#|^$' /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf
[root@controller ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:123456@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[database]
connection = mysql+pymysql://neutron:123456@controller/neutron
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = 123456
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = 123456
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
- 配置模塊化層2(ML2)插件
ML2插件使用Linux橋接器機制為實例構建第2層(橋接和交換)虛擬網絡基礎架構
## 編輯/etc/neutron/plugins/ml2/ml2_conf.ini文件
cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
egrep -v '^$|^#' /etc/neutron/plugins/ml2/ml2_conf.ini.bak >/etc/neutron/plugins/ml2/ml2_conf.ini
[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
#啟用flat網絡和VLAN網絡,
type_drivers = flat,vlan
#禁用自助服務網絡
tenant_network_types =
#啟用Linux橋接機制
mechanism_drivers = linuxbridge
#啟用端口安全擴展驅動程序
extension_drivers = port_security
[ml2_type_flat]
#將提供者的虛擬網絡配置為flat網絡
flat_networks = provider
[ml2_type_vxlan]
#為自助服務網絡配置VXLAN網絡標識符范圍
vni_ranges = 1:1000
[securitygroup]
#啟用ipset以提高安全組規則的效率
enable_ipset = true
flat網絡:沒有使用任何網絡隔離技術,大二層互通。
vlan網絡:基於vlan實現的虛擬網絡。同一個物理網絡中的多個vlan網絡是相互隔離的,因此支持多租戶這種應用場景。
- 配置Linux網橋代理
Linux網橋代理為實例構建第2層(橋接和交換)虛擬網絡基礎結構並處理安全組
## 編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件
cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}
egrep -v '^$|^#' /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >//etc/neutron/plugins/ml2/linuxbridge_agent.ini
[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
[linux_bridge]
#將提供者虛擬網絡映射到提供者物理網絡接口
physical_interface_mappings = provider:eth0
[securitygroup]
#啟用安全組並配置Linux網橋iptables防火牆驅動程序
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
#禁用VXLAN覆蓋網絡
enable_vxlan = false
- 修改linux內核參數設置為1
[root@controller ~]# vim /etc/sysctl.conf
...
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
#要啟用網絡橋接器支持,需要加載 br_netfilter 內核模塊
modprobe br_netfilter
sysctl -p
- 配置DHCP代理
DHCP代理為虛擬網絡提供DHCP服務
#編輯/etc/neutron/dhcp_agent.ini文件
#配置Linux橋接口驅動程序Dnsmasq DHCP驅動程序,並啟用隔離的元數據,以便提供商網絡上的實例可以通過網絡訪問元數據
[root@controller ~]# vim /etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
- 配置元數據代理
元數據代理提供配置信息,例如實例的憑據
# 編輯/etc/neutron/metadata_agent.ini文件
# 配置元數據主機和共享機密
[root@controller ~]# vim /etc/neutron/metadata_agent.ini
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = 123456 #密碼
- 配置Nova服務使用網絡服務
#編輯/etc/nova/nova.conf文件
[root@controller ~]# vim /etc/nova/nova.conf
...
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = 123456 #neutron用戶密碼
service_metadata_proxy = true
metadata_proxy_shared_secret = 123456 #元數據代理密碼
- 創建 /etc/neutron/plugins/ml2/ml2_conf.ini 文件指向ML2插件配置的軟鏈接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
- 同步數據庫
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

- 重新啟動Nova計算服務的API服務
systemctl restart openstack-nova-api.service
- 啟動網絡服務,並配置為開機自啟動
systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
對於網絡選項2,還啟用並啟動第3層服務。這里未配置。請點擊鏈接聯網選項2:自助服務網絡
8.2 計算節點安裝
- 安裝組件
yum install openstack-neutron-linuxbridge ebtables ipset -y
- 編輯
/etc/neutron/neutron.conf文件
cp /etc/neutron/neutron.conf{,.bak}
egrep -v '^$|^#' /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf
[root@computel ~]# vim /etc/neutron/neutron.conf
[DEFAULT]
transport_url = rabbit://openstack:123456@controller
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = 123456
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
- 配置Linux網橋代理
#編輯/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件
[root@computel ml2]# vim linuxbridge_agent.ini
[linux_bridge]
physical_interface_mappings = provider:eth0
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[vxlan]
enable_vxlan = false
- 修改linux系統內核參數為1
[root@controller ~]# vim /etc/sysctl.conf
...
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
#要啟用網絡橋接器支持,需要加載 br_netfilter 內核模塊
modprobe br_netfilter
sysctl -p
- 配置Nova服務使用網絡服務
#編輯/etc/nova/nova.conf文件
[root@computel ~]# vim /etc/nova/nova.conf
...
[neutron]
url = http://controller:9696
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = 123456
- 重新啟動計算節點上的Nova服務
systemctl restart openstack-nova-compute.service
- 啟動Linux網橋代理,並將其配置為開機自啟動
systemctl enable neutron-linuxbridge-agent.service
systemctl restart neutron-linuxbridge-agent.service
8.3 Neutron網絡虛擬化驗證-控制節點
- 列出已加載的擴展,以驗證該
neutron-server過程是否成功啟動
source ~/admin-openrc
openstack extension list --network
- 列出代理商以驗證成功
openstack network agent list

9. 安裝 Horizon服務-控制節點
- 安裝軟件包
yum install openstack-dashboard -y
- 編輯
/etc/openstack-dashboard/local_settings文件
[root@controller ~]# vim /etc/openstack-dashboard/local_settings
#配置儀表盤在controller節點上使用OpenStack服務
OPENSTACK_HOST = "controller"
#啟用身份API版本3
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
#配置user為通過儀表板創建的用戶的默認角色
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
#允許主機訪問儀表板,接受所有主機
ALLOWED_HOSTS = ['*']
#配置memcached會話存儲服務
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
#啟用對域的版本支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
#配置API版本
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
"compute": 2,
}
#配置Default為通過儀表板創建的用戶的默認域
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
#如果選擇網絡選項1,請禁用對第3層網絡服務的支持
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': False,
'enable_quotas': False,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_lb': False,
'enable_firewall': False,
'enable_vpn': False,
'enable_fip_topology_check': False,
#配置時區為亞洲上海
TIME_ZONE = "Asia/Shanghai"
- 解決網頁無法打開檢查
[root@controller ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf
WSGISocketPrefix run/wsgi
WSGIApplicationGroup %{GLOBAL}
- 重新啟動Web服務器和會話存儲服務
systemctl restart httpd.service memcached.service
systemctl enable httpd.service memcached.service
10. 訪問驗證Web頁面
使用Web瀏覽器訪問儀表板,
網址為 http://192.168.1.10/dashboard
使用admin或demo用戶和default域憑據進行身份驗證


11. 創建虛擬網絡並啟動實例
本部分創建必要的虛擬網絡以支持啟動實例。網絡選項1包括一個提供程序(外部)網絡,以及一個使用它的實例。聯網選項2包括一個帶有一個使用它的實例的提供者網絡,以及一個帶有一個使用它的實例的自助服務(專用)網絡。
這里選擇提供商網絡
- 創建網絡
source ~/admin-openrc
openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider
#--share 允許所有項目使用虛擬網絡
#--external 將虛擬網絡定義為外部
#--internal 如果要創建內部網絡,則可以使用

- 在網絡上創建一個子網
openstack subnet create --network provider \
--allocation-pool start=192.168.1.101,end=192.168.1.250 \
--dns-nameserver 223.5.5.5 --gateway 192.168.1.254 \
--subnet-range 192.168.1.0/24 provider
#提供者網絡使用192.168.1.0/24網段,網關位於192.168.1.1。
#DHCP服務器為每個實例分配從192.168.1.101到192.168.1.250的IP地址。
#所有實例都使用223.5.5.5作為DNS解析器。

- 創建一台1核cpu 1G硬盤的實例類型
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano


- 創建秘鑰對
[root@controller ~]# source ~/admin-openrc
[root@controller ~]# ssh-keygen -q -N ""
Enter file in which to save the key (/root/.ssh/id_rsa): #回車
[root@controller ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
+-------------+-------------------------------------------------+
| Field | Value |
+-------------+-------------------------------------------------+
| fingerprint | 62:6a:3f:97:ac:12:2d:90:91:51:01:3d:72:2b:59:ab |
| name | mykey |
| user_id | 3dc7ca3b1d3b4755a9662c1038b6241d |
+-------------+-------------------------------------------------+
- 驗證秘鑰對的添加
openstack keypair list

- 添加安全組規則
默認情況下,default安全組適用於所有實例,並包括拒絕對實例進行遠程訪問的防火牆規則。對於CirrOS之類的Linux映像,建議至少允許ICMP(ping)和安全Shell(SSH)。
#將規則添加到default安全組
* 許可ICMP協議(ping命令)
openstack security group rule create --proto icmp default
* 允許SSH訪問(22端口)
openstack security group rule create --proto tcp --dst-port 22 default
- 啟動一個實例
#要啟動實例,必須至少指定實例類型,映像名稱,網絡,安全組,密鑰和實例名稱
source admin-openrc
#列出可用的實例類型
openstack flavor list

#列出可用的鏡像
openstack image list

#列出可用的網絡
openstack network list
#列出可用的安全組
openstack security group list
- 啟動實例
#net-id=<可用的網絡的ID>
openstack server create --flavor m1.nano --image cirros --nic net-id=310645c0-6fb4-43bf-84e3-1349ce7c49b1 --security-group default name mykey provider-instance
- 檢查實例狀態
openstack server list
- 使用虛擬控制台訪問實例
#從Web瀏覽器訪問
openstack console url show provider-instance
如果Web瀏覽器在無法解析
controller主機名的主機上運行,則可以替換nova.conf的配置文件中的[vnc]模塊,將controller為控制器節點上管理接口的IP地址novncproxy_base_url = http://192.168.1.10:6080/vnc_auto.html
- 報錯 找不到磁盤無法啟動的問題
#解決方法
將計算節點的nova,conf中
[root@computel ~]# vim /etc/nova/nova.conf
[libvirt]
cpu_mode = none
virt_type = qemu #因測試中是虛擬機,不是物理機。所以只能修改為qemu
#重啟nova計算服務
[root@computel ~]# systemctl restart openstack-nova-compute.service
#重啟實例,可在控制節點命令行重啟也可在Web網頁進行重啟
openstack server list
nova reboot 5c2a8b19-68a4-40d3-a55d-a0642e8fe876

- 驗證對網關和互聯網的訪問


- 驗證遠程訪問實例的連接性


12. Web界面操作示范
12.1 創建實例
12.2 創建項目
12.3 創建用戶
12.4 配置安全組
12.5 手動添加鏡像
12.6 ※網絡配置※
Neutron是Openstack的網絡管理組件,提供網絡、子網和路由器的抽象。創建網絡必須要創建一個外部網絡,可以讓外部訪問openstack的外部網絡,多租戶之間共享的網絡,外部網絡必須由管理員創建,因為外部網絡是和物理網絡有直接映射關系的虛擬網絡。在網絡里可以設置一個或多個內部網絡,這些內部網絡直接連接vm。如果openstack外的網絡要訪問vm,就必須在網絡之間創建路由。接下來,我們就一步一步的去創建openstack的網絡。
- 查看已創建的外部網絡和子網情況
- 創建名為demo_net的私有網絡
私有網絡中的每個項目的網絡是隔離的
因為是私有網絡,所以分配地址池可以不用填寫,按順序分配即可
- 創建路由
私有網絡連接到外網需要路由,打開“項目”-“網絡”-“路由”,新建路由
13. 安裝Cinder 塊存儲服務
Cinder將持久性存儲添加到虛擬機。塊存儲提供了用於管理卷的基礎架構,並與OpenStack Compute交互以提供實例的卷。該服務還可以管理卷快照和卷類型。nova與cinder的工作原理類似。
塊存儲服務主要組件
-
cinder-api:
是cinder服務的 endpoint,提供rest接口,負責處理client請求,並將RPC(遠程過程調用)請求發送至cinder-scheduler組件。
-
cinder-volume
負責具體的volume請求處理,由不同后端存儲提供volume存儲空間。目前各大存儲廠商已經積極地將存儲產品的driver貢獻到cinder社區。
-
**cinder-scheduler **
負責cinder請求調度,其核心部分就是scheduler_driver,作為scheduler manager的driver,負責cinder-volume具體的調度處理,發送cinder RPC請求到選擇的cinder-volume。

在控制器節點上安裝和配置代號為cinder的塊存儲服務。此服務需要至少一個額外的存儲節點,該節點可為實例提供卷。
添加一台節點服務器-cinder
虛擬機分配情況
| 主機 | IP地址 | 主機名 | 注意事項 |
|---|---|---|---|
| 存儲節點 | 192.168.1.30/24 ; 內172.16.1.30/24 | cinder | 開虛擬化 |
13.1 安裝cinder塊存儲服務—控制節點
- 創建數據庫
mysql -u root -p
create database cinder;
grant all privileges on cinder.* to 'cinder'@'%' identified by '123456';
grant all privileges on cinder.* to 'cinder'@'localhost' identified by '123456';
flush privileges;
- 創建一個
cinder用戶
source ~/admin-openrc
openstack user create --domain default --password 123456 cinder

- admin向cinder用戶添加角色
openstack role add --project service --user cinder admin
- 創建cinderv2和cinderv3服務實體
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

- 創建塊存儲服務API端點
#塊存儲服務需要每個服務實體的端點
openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s
- 安裝軟件包
yum install openstack-cinder -y
- 編輯
/etc/cinder/cinder.conf文件
[root@controller ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
transport_url = rabbit://openstack:123456@controller
my_ip = 192.168.1.10
[database]
connection = mysql+pymysql://cinder:123456@controller/cinder
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = 123456
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
- 填充塊存儲數據庫
su -s /bin/sh -c "cinder-manage db sync" cinder
- 編輯
/etc/nova/nova.conf文件
[root@controller ~]# vim /etc/nova/nova.conf
[cinder]
os_region_name = RegionOne
- 重啟
nova計算和cinder塊存儲服務並設置開機自啟動
systemctl restart openstack-nova-api.service
systemctl restart openstack-cinder-api.service openstack-cinder-scheduler.service
systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
13.2 安裝cinder塊存儲節點
- 安裝LVM軟件包
yum install lvm2 device-mapper-persistent-data -y
- 啟動LVM元數據服務,並將其配置為在系統引導時啟動
systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service
- 創建LVM物理卷
/dev/sdb
#添加一塊新硬盤重啟節點
[root@cinder ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
- 創建LVM卷組
cinder-volumes
[root@cinder ~]# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created
#塊存儲服務在此卷組中創建邏輯卷
- 編輯
/etc/lvm/lvm.conf文件
只有實例可以訪問塊存儲卷。但是,底層操作系統管理與卷關聯的設備。默認情況下,LVM卷掃描工具會在
/dev目錄中掃描 包含卷的塊存儲設備。如果項目在其卷上使用LVM,則掃描工具會檢測到這些卷並嘗試對其進行緩存,這可能導致基礎操作系統卷和項目卷出現各種問題。您必須將LVM重新配置為僅掃描包含cinder-volumes卷組的設備。
[root@cinder ~]# vim /etc/lvm/lvm.conf
#在devices部分,添加一個過濾器,只接受/dev/sdb設備,拒絕其他所有設備
devices {
filter = [ "a/sdb/", "r/.*/"]
每個過濾器組中的元素都以
a開頭,即為 accept,或以r開頭,即為reject,並且包括一個設備名稱的正則表達式規則。過濾器組必須以r/.*/結束,過濾所有保留設備。您可以使用 命令:vgs -vvvv來測試過濾器。如果您的存儲節點在操作系統磁盤上使用了 LVM,您還必需添加相關的設備到過濾器中。例如,如果
/dev/sda設備包含操作系統filter = [ "a/sda/", "a/sdb/", "r/.*/"]類似地,如果您的計算節點在操作系統磁盤上使用了 LVM,您也必需修改這些節點上
/etc/lvm/lvm.conf文件中的過濾器,將操作系統磁盤包含到過濾器中。例如,如果/dev/sda設備包含操作系統filter = [ "a/sda/", "r/.*/"]
- 安裝軟件包
yum install centos-release-openstack-rocky -y #下載R版的源
yum install openstack-cinder targetcli python-keystone -y
- 編輯
/etc/cinder/cinder.conf文件
[root@cinder ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
transport_url = rabbit://openstack:123456@controller
auth_strategy = keystone
my_ip = 192.168.1.30
enabled_backends = lvm
glance_api_servers = http://controller:9292
#為LVM后端配置LVM驅動程序,cinder-volumes卷組,iSCSI協議和適當的iSCSI服務。
#如果該[lvm]部分不存在,請創建它
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
[database]
connection = mysql+pymysql://cinder:123456@controller/cinder
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = 123456
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
- 啟動塊存儲卷服務並設置開機自啟動
systemctl restart openstack-cinder-volume.service target.service
systemctl enable openstack-cinder-volume.service target.service
在控制節點進行驗證
source ~/admin-openrc
openstack volume service list

14. 維護openstack平台的考慮因素
1. 掌握安裝部署
2. 熟悉上傳鏡像:centos7 centos6 ubuntu debian windows server R2
3. 給開發開通賬戶,跳轉默認資源配額,創建shell腳本創建用戶
4. 增加計算節點:給物理服務器裝系統,cobbler無人安裝操作系統 ansible批量操作 測試
5. 監控與高可用:zabbix mysql高可用 rabbitmq高可用
15. Shell腳本創建用戶
#物理機可以配置郵箱進行發送郵件通知
cat >> /etc/mail.rc << EOF
set from=xxxx@163.com
set smtp=smtp.163.com
set smtp-auth-user=xxxx@163.com
set smtp-auth-password=xxxxx
set smtp-auth=login
EOF
systemctl restart postfix.service
[root@controller scripts]# vim user_create.sh
#!/bin/bash
source /root/admin-openrc
read -p "請輸入您要創建的用戶名: " name
read -p "請輸入您要發送到郵箱號[xxx.qq.com]: " mail
PWD=`date +%s |sha256sum |base64 |head -c 15`
echo $PWD
openstack project create --domain default $name
openstack user create --domain default --password $PWD $name
openstack role add --project $name --user $name user
context="您的openstack賬號已開通,賬號為 [$name],初始密碼為 $PWD ,請妥善保管你的密碼,遇到任何問題請聯系QQ:245684979,祝您使用愉快! openstack平台訪問地址 http://192.168.1.10/dashboard"
echo $context|mail -s "OpenStack賬號開通" $mail
---------------------------------------------------------------------
[root@controller scripts]# sh user_create.sh
請輸入您要創建的用戶名: douer
請輸入您要發送到郵箱號[xxx.qq.com]: 245684979@qq.com
NzI2Y2Q5OTQ5ZDA
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| domain_id | default |
| enabled | True |
| id | a2a1eed4cd7f4c32933cc51574d1c0dd |
| is_domain | False |
| name | douer |
| parent_id | default |
| tags | [] |
+-------------+----------------------------------+
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | 4424e47ff9134cc99787066fd44fb3a5 |
| name | douer |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+

。。






































