OpenStack Newton部署官方指南

作者:獨筆孤行@TaoCloud
本文檔主要基於OpenStack官方文檔,對官方文檔加以更加詳細的說明和解讀,更適合新手部署學習OpenStack。
官方文檔中主要爲英文,只有M版和L版有中文版,但存在部分翻譯錯誤,不建議新手使用。在此提供官方文檔鏈接:https://docs.openstack.org/newton/install/

若在虛擬機中部署OpenStack,網絡要選擇vxlan模式,vlan模式只能在物理機中使用。

1.基礎環境
1.1 最低硬件配置:
• 控制節點: 1 處理器, 4 GB 內存, 5 GB 磁盤
• 計算節點: 1 處理器, 2 GB 內存, 10 GB 磁盤
• 存儲節點: 1 處理器, 2 GB 內存, 10 GB 磁盤+10G數據盤

節點 主機名 網卡1(eth0) 網卡2(eth1)
控制節點 controller 10.0.0.10 192.168.20.10
計算節點 compute 10.0.0.11 192.168.20.11
存儲節點 storage 10.0.0.12 192.168.20.12

eth0用途1:eth0爲管理網絡,是openstack環境裏各個模塊之間交互,連接數據庫,連接Message Queue的網絡,即openstack本身用的IP網段。

eth0用途2:eth0爲隧道網絡tunnel,openstack裏使用vxlan模式,需要有隧道網絡;隧道網絡採用了點到點通信協議代替了交換連接,tunnel用於虛擬機走網絡數據流量。

eth1用途 : eth1用於是鏈接外網,用戶訪問openstack虛擬機,必須有個網段是連外網的,用戶通過這個網絡能訪問到虛擬機。

註解
標準的生產環境中,OpenStack需要管理網、外網、隧道網絡共3個網段,本次主要遵循官方文檔,將管理網絡與隧道網絡合並用eth0網卡。如果只是測試環境,可以將3個網絡合併爲一個網卡。

1.2 操作系統
CentOS-7-x86_64-Minimal-1511.iso
1.3 CPU虛擬化
本手冊採用VMware WorkStation創建虛擬機搭建OpenStack Newton。按照如下內容打開CPU虛擬化功能。物理服務器需要進入BIOS,打開CPU虛擬化功能。打開完成後,在操作系統中執行:egrep -c '(vmx|svm)' /proc/cpuinfo 命令檢測是否打開成功。返回值大於1說明完成。

1.4 網卡配置
本次測試採用每臺服務器2個物理網卡,環境無法滿足時同樣可以只配置1個網卡,OpenStack所有網絡都走同一網卡。CentOS7.2安裝完成後,默認網卡名稱是eno16777736,需要把eno16777736改成eth0.也可以不改使用默認名稱。
更改網卡名稱爲eth0

[root@controller ~]# cd /etc/sysconfig/network-scripts/
[root@controller network-scripts]# mv ifcfg-eno16777736 ifcfg-eth0

編輯網卡配置文件,將NAME和DEVICE內容改爲eth0.
編輯 /etc/default/grub。在GRUB_CMDLINE_LINUX中添加net.ifnames=0 biosdevname=0內容。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root net.ifnames=0 biosdevname=0 rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

運行命令grub2-mkconfig -o /boot/grub2/grub.cfg 來重新生成GRUB配置並更新內核參數,完成後執行reboot命令重啓服務器。按照同樣的操作將其他網卡改成類似的形式。

詳細介紹可參考鏈接:https://jingyan.baidu.com/article/17bd8e524c76a285ab2bb8ff.html

1.5 安全設置
關閉並禁用NetworkManager:

[root@controller ~]# systemctl stop NetworkManager
[root@controller ~]# systemctl disable NetworkManager

關閉並禁用防火牆:

[root@controller ~]# systemctl stop firewall
[root@controller ~]# systemctl disable firewall

1.6 域名解析
配置hosts域名解析,不改變原有內容,添加如下內容:

10.0.0.10   controller
10.0.0.11   compute
10.0.0.12   storage

1.7 yum源配置
OpenStack Newton的yum源有兩種配置方式。即網絡源和本地源。網絡源需要OpenStack服務器能訪問互聯網。本地源需要把Newton.tar.gz壓縮包拷貝到服務器製作本地源。
1.配置OpenStack-Newton網絡源

cat /etc/yum.repos.d/OpenStack-Newton.repo
[OpenStack-Newtron]
name=OpenStack-Newtron
baseurl=http://vault.centos.org/7.2.1511/cloud/x86_64/openstack-newton/
gpgcheck=0
enabled=1

安裝kvm源

rpm -ivh http://mirrors.163.com/centos/7.4.1708/virt/x86_64/kvm-common/centos-release-qemu-ev-1.0-1.el7.noarch.rpm

2.配置本地yum源
解壓縮Newton.tar.gz壓縮包到root目錄下,並安裝createrepo。

[root@compute ~]# cd Newton
[root@compute Newton]# yum localinstall  createrepo-0.9.9-28.el7.noarch.rpm\
python-deltarpm-3.6-3.el7.x86_64.rpm  deltarpm-3.6-3.el7.x86_64.rpm \
libxml2-python-2.9.1-6.el7_2.3.x86_64.rpm  libxml2-2.9.1-6.el7_2.3.x86_64.rpm

創建Newton本地源。

[root@compute ~]# createrepo /root/Newton
Spawning worker 0 with 568 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

編輯yum源配置文件

[root@controller ~]# cat /etc/yum.repos.d/OpenStack-Newton.repo 
[OpenStack-Newton]
name=OpenStack-Newton
baseurl=file:///root/Newton
enabled=1
gpgcheck=0

選擇以上任意一種方式配置好yum源後,生成yum源緩存。

[root@controller ~]# yum clean all;yum makecache

2.OpenStack環境
2.1概況

2.2密碼安全
用戶名稱 密碼名稱 描述
root 數據庫密碼(不能使用變量) 數據庫的root密碼
admin ADMIN_PASS admin 用戶密碼
cinder CINDER_DBPASS 塊設備存儲服務的數據庫密碼
cinder CINDER_PASS 塊設備存儲服務的 cinder 密碼
admin DASH_DBPASS Database password for the dashboard
demo DEMO_PASS demo 用戶的密碼
glance GLANCE_DBPASS 鏡像服務的數據庫密碼
glance GLANCE_PASS 鏡像服務的 glance 用戶密碼
keystone KEYSTONE_DBPASS 認證服務的數據庫密碼
neutron NEUTRON_DBPASS 網絡服務的數據庫密碼
neutron NEUTRON_PASS 網絡服務的 neutron 用戶密碼
nova NOVA_DBPASS 計算服務的數據庫密碼
nova NOVA_PASS 計算服務中nova用戶的密碼
openstack RABBIT_PASS RabbitMQ的guest用戶密碼
2.3 網絡時間協議(NTP)
Controller控制節點
1.安裝軟件包

# yum install chrony –y

2.編輯 /etc/chrony.conf 文件,按照你環境的要求,對下面的鍵進行添加,修改或者刪除:

server controller iburst
  1. 爲允許其他節點可以連接到控制節點的 chrony 後臺進程,在/etc/chrony.conf 文件添加下面的鍵值:
    allow 10.0.0.0/24

    如有必要,將10.0.0.0/24替換成你子網的相應描述。

  2. 啓動 NTP 服務並將其配置爲隨系統啓動::
    # systemctl enable chronyd.service
    # systemctl start chronyd.service

    在控制節點上運行監測命令: chronyc sources。包含controller內容即可。

其他節點
1.安裝軟件包

# yum install chrony –y

2.編輯 /etc/chrony.conf 文件,按照你環境的要求,對下面的鍵進行添加,且只保留controller節點的時間同步,刪除其他時間同步:

server controller iburst

3.啓動 NTP 服務並將其配置爲隨系統啓動::

# systemctl enable chronyd.service
# systemctl start chronyd.service

驗證操作
建議在繼續進一步的操作之前驗證 NTP 的同步。有些節點,特別是哪些引用了控制節點的,需要花費一些時間去同步。
1.在控制節點上執行這個命令:

[root@controller ~]# chronyc sources
210 Number of sources = 5
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ 85.199.214.100                1   6   237    35  -8610us[-8610us] +/-  153ms
^- ntp1.ams1.nl.leaseweb.net     2   6   377    38    +40ms[  +40ms] +/-  343ms
^+ biisoni.miuku.net             2   6   377   102   +572us[-2150us] +/-  110ms
^* cn.ntp.faelix.net             2   6   377    40  +1358us[-1762us] +/-   87ms
^- controller                    3   6   377    33  -6501ns[-6501ns] +/-   87ms

在 Name/IP address 列的內容應顯示NTP服務器的主機名或者IP地址。在 S 列的內容應該在NTP服務目前同步的上游服務器前顯示 *。紅色標記部分出現既可。
2.在所有其他節點執行相同命令:

[root@compute ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* controller                    3   6   377    27  +5882us[+6188us] +/-   90ms

在 Name/IP address 列的內容應顯示控制節點的主機名。
2.4 OpenStack包
所有節點
1.安裝 OpenStack 客戶端:

# yum install python-openstackclient

2.CentOS 默認啓用了SELinux。安裝openstack-selinux軟件包以便自動管理OpenStack 服務的安全策略:

# yum install openstack-selinux

2.5 SQL數據庫
大多數 OpenStack 服務使用 SQL 數據庫來存儲信息。 典型地,數據庫運行在控制節點上。以下內容只在控制節點上操作。
Controller控制節點
1.安裝軟件包:

# yum install mariadb mariadb-server python2-PyMySQL

2.創建並編輯 /etc/my.cnf.d/openstack.cnf 文件,完成如下操作:
創建 [mysqld] 部分,設置 bind-address 的值爲controller控制節點的管理網ip地址。以使得其它節點可以通過管理網絡訪問數據庫,設置其他鍵值來啓用有用的選項和 UTF-8 字符集:

[mysqld]
bind-address = 10.0.0.10

default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

3.啓動數據庫服務並設置開機自啓動:

# systemctl enable mariadb.service
# systemctl start mariadb.service
  1. 爲了保證數據庫服務的安全性,運行mysql_secure_installation腳本。特別需要說明的是,爲數據庫的root用戶設置一個適當的密碼。
    # mysql_secure_installation

    2.6 消息隊列
    Controller控制節點
    OpenStack使用message queue協調操作和各服務的狀態信息。消息隊列服務一般運行在控制節點上。OpenStack支持好幾種消息隊列服務包括RabbitMQ, Qpid, and ZeroMQ. 不過,大多數發行版本的OpenStack包支持特定的消息隊列服務。本指南安裝 RabbitMQ 消息隊列服務,因爲大部分發行版本都支持它。如果你想安裝不同的消息隊列服務,查詢與之相關的文檔。
    消息隊列運行在 controller控制節點上。

  2. 安裝軟件包:
    # yum install rabbitmq-server -y
  3. 啓動消息隊列服務並設置開機自啓動:
    # systemctl enable rabbitmq-server.service
    # systemctl start rabbitmq-server.service
  4. 添加 openstack 用戶:(用戶名openstack,密碼RABBIT_PASS)
    # rabbitmqctl add_user openstack RABBIT_PASS
    Creating user "openstack" ...

    用合適的密碼替換 RABBIT_PASS

  5. 爲 openstack 用戶配置寫和讀的權限:
    # rabbitmqctl set_permissions openstack ".*" ".*" ".*"
    Setting permissions for user "openstack" in vhost "/" ...

    2.7 Memcached
    Controller控制節點
    認證服務認證緩存使用Memcached緩存令牌。緩存服務memecached運行在controller控制節點。在生產部署中,我們推薦聯合啓用防火牆、認證和加密保證它的安全。
    1.安裝軟件包:

    # yum install memcached python-memcached

    2.爲了允許其他節點通過管理網絡訪問,編輯 /etc/sysconfig/memcached 文件,配置服務使用controller控制節點管理ip地址:

    10.0.0.10

    註解
    替換原有有內容"127.0.0.1"或" "

配置完成後查看/etc/sysconfig/memcached文件內容爲:

[root@controller ~]# cat /etc/sysconfig/memcached 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="10.0.0.10"

3.啓動Memcached 服務並設置開機自啓動:

# systemctl enable memcached.service
# systemctl start memcached.service

3.認證服務
本節描述如何在控制器節點上安裝和配置OpenStack認證服務,即Keystone。考慮到可擴展性,此配置部署了Fernet令牌和Apache HTTP服務器來處理請求。
Controller控制節點
3.1安裝和配置
在安裝和配置OpenStack認證服務之前,一定要創建數據庫和管理員令牌。
1.創建數據庫,完成如下操作:
用數據庫客戶端以root用戶連接到數據庫服務器:

$ mysql -u root -p

創建 keystone 數據庫:

mysql> CREATE DATABASE keystone;

對keystone數據庫賦予合適的權限:

mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';

可用合適的密碼替換 KEYSTONE_DBPASS。
退出數據庫連接。

註解
默認配置文件因分佈不同而不同。您可能需要添加這些部分和選項,而不是修改現有的部分和選項。此外,配置片段中的省略號(…),表示應該保留的原有的默認配置。

註解
本指南使用帶有mod_wsgi的Apache HTTP服務器,響應端口5000和35357上的認證服務請求。默認情況下,keystone服務仍然偵聽這些端口。因此,該指南手動禁用keystone服務。

2運行如下命令安裝軟件包:

# yum install openstack-keystone httpd mod_wsgi

3.編輯/etc/keystone/keystone.conf 文件完成如下操作:
在 [database]部分,配置數據庫訪問:

[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

可用keystone 認證服務數據庫設置的密碼替換KEYSTONE_DBPASS

註解
註釋或者移除[database]部分的其他任何connection選項

在 [token] 部分,配置Fernet 令牌提供者:

[token]
...
provider = fernet

4.同步認證服務數據庫:

# su -s /bin/sh -c "keystone-manage db_sync" keystone

5.初始化Fernet 存儲庫:

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

6.引導認證服務:

# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://controller:35357/v3/ \
  --bootstrap-internal-url http://controller:35357/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne

用合適的管理員用戶密碼替換 ADMIN_PASS。
7.配置Apache http服務,編輯/etc/httpd/conf/httpd.conf 文件,配置ServerName 選項 爲控制節點:

ServerName controller

8.創建指向 /usr/share/keystone/wsgi-keystone.conf 文件的鏈接:

# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

9.啓動Apache HTTP服務並設置開機自啓動:

# systemctl enable httpd.service
# systemctl start httpd.service

10.配置管理員賬戶

$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:35357/v3
$ export OS_IDENTITY_API_VERSION=3

可用在“安裝和配置”部分使用keystone-manage bootstrap 命令設置的密碼替換 ADMIN_PASS
3.2創建域、項目、用戶和角色
身份認證服務爲每個OpenStack服務提供認證服務。認證服務使用 domains, projects, users, 和 roles的組合。
1.本指南使用一個服務項目,該服務項目爲添加到環境中的每個服務包含唯一的用戶。創建service項目

$ openstack project create --domain default \
 --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 24ac7f19cd944f4cba1d77469b2a73ed |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
+-------------+----------------------------------+

2.常規(非管理)任務應該使用非特權項目和用戶。作爲一個例子,這個指南創建demo項目和用戶。
創建 demo 項目:

$ openstack project create --domain default \
  --description "Demo Project" demo
    +-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 231ad6e7ebba47d6a1e57e1cc07ae446 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
+-------------+----------------------------------+

註解
在爲該項目創建額外用戶時,不要重複此步驟。

創建 demo 用戶:

$ openstack user create --domain default \
  --password-prompt demo
    User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | aeda23aa78f44e859900e22c24817832 |
| name                | demo                             |
| password_expires_at | None                             |
+---------------------+----------------------------------+

創建 user 角色:

$ openstack role create user
 +-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 997ce8d05fc143ac97d83fdfb5998552 |
| name      | user                             |
+-----------+----------------------------------+

添加 user 角色到demo 項目和用戶:

$ openstack role add --project demo --user demo user

註解
此命令沒有輸出

註解
可以重複此步驟創建更多項目和用戶

3.3驗證操作
在安裝其他服務之前,驗證身份認證服務的操作。

註解
在控制節點上執行這些命令

1.考慮安全因素,關閉臨時認證令牌機制:
編輯 /etc/keystone/keystone-paste.ini 文件,從 [pipeline:public_api], [pipeline:admin_api], 和 [pipeline:api_v3] 這3個部分移除admin_token_auth。
2.重置 OS_AUTH_URL 和 OS_PASSWORD 臨時環境變量:

$ unset OS_AUTH_URL OS_PASSWORD

3.作爲 admin 用戶,請求令牌認證:

$ openstack --os-auth-url http://controller:35357/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name admin --os-username admin token issue

Password:
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:14:07.056119Z                                     |
| id         | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
|            | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
|            | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

註解
這個命令使用admin 用戶的密碼。

4.作爲 demo 用戶,請求令牌認證:

$ 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

Password:

+------------+---------------------------------------------------------+
| Field      | Value                                                   |
+------------+---------------------------------------------------------+
| expires    | 2018-06-22 10:14:31+00:00                               |
| id         | gAAAAABbLL33VlBkLLD_fu0KXR97qbk0GKzjeDgmQVokSHfHnys9AUv |
|            | n0SXPJHxbh0inyMUWQFQTYbwjOLztN0UERzb9Lohrm1QPtJfrO1YYej |
|            | 4YBqnPpwjbaQvWLg9g7MBVcaZZK1A771Yl2BEUKxttAOhNemItP0Nfy |
|            | rIQOsPnCprKuycPQcA                                      |
| project_id | 31eb23991654472f986b104f31c0eafe                        |
| user_id    | 0ef27ca68eb84bd396cee85e142d52c5                        |
+------------+---------------------------------------------------------+

註解
這個命令使用demo用戶密碼和API端口5000,這樣只會允許對身份認證服務API的常規(非管理)訪問。

3.4創建 OpenStack 客戶端環境腳本
前一節中使用環境變量和命令選項的組合,通過openstack客戶端與身份認證服務交互。爲了提升客戶端操作的效率,OpenStack支持簡單的客戶端環境變量腳本即OpenRC 文件。這些腳本通常包含客戶端所有常見的選項,當然也支持唯一選項。
爲 admin 和 demo 項目和用戶創建客戶端項目腳本,本指南的接下來的部分會引用這些腳本,爲客戶端操作加載合適的的憑證。本指南的接下來的部分會引用這些腳本,爲客戶端操作加載合適的的憑證。

  1. 編輯 admin-openrc 文件添加如下內容:
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=ADMIN_PASS
    export OS_AUTH_URL=http://controller:35357/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2

    用在認證服務中設置的 admin 用戶的密碼替換 ADMIN_PASS。

  2. 編輯 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=DEMO_PASS
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2

    用在認證服務中設置的 demo用戶的密碼替換DEMO_PASS。
    使用特定租戶和用戶運行客戶端,你可以在運行之前簡單地加載相關客戶端腳本。例如:

  3. 加載 admin-openrc 文件以滿足身份認證服務的環境變量,和 admin 項目和用戶認證:

    $ . admin-openrc
  4. 請求認證令牌:
    $ openstack token issue
    +------------+---------------------------------------------------------+
    | Field      | Value                                                   |
    +------------+---------------------------------------------------------+
    | expires    | 2018-06-22 10:20:16+00:00                               |
    | id         | gAAAAABbLL9QK8flVesG1iK83v-VUpbbx4UaNul_DpltZsU6fmeSwgg |
    |            | 4P2EwUx3IlVvViAeX8esAIW3FQhTX3iEuT4P5ZMhb4eEr0o9X6v4YAV |
    |            | qNKBnTVhtY20TwK5AW7TfQGE6qDk1qeZRtHb8G2j5KaxgnFzoazwGeu |
    |            | v9trkukOfzxQ8wJzfA                                      |
    | project_id | 257966dab33148b9843b7e86efde84e8                        |
    | user_id    | 73dcdee1cc954a598a67d095211bf582                        |
    +------------+---------------------------------------------------------+

4.鏡像服務
Controller控制節點
4.1安裝前準備
這個部分描述如何在控制節點上安裝和配置鏡像服務,即 glance。簡單來說,這個配置將鏡像保存在本地文件系統中。
安裝和配置鏡像服務之前,你必須創建創建一個數據庫、服務憑證和API端點。

  1. 創建數據庫並完成以下步驟:
    用數據庫連接客戶端以 root 用戶連接到數據庫服務器:
    $ mysql -u root -p

    創建 glance 數據庫:

    mysql> CREATE DATABASE glance;

    對 glance 數據庫賦予合適的權限:

    mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
    IDENTIFIED BY 'GLANCE_DBPASS';
    mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
    IDENTIFIED BY 'GLANCE_DBPASS';

    可用合適的密碼替換GLANCE_DBPASS。

  2. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . admin-openrc
  3. 要創建服務證書,完成這些步驟:
    創建 glance 用戶:
$ openstack user create --domain default --password-prompt glance

User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 3f4e777c4062483ab8d9edd7dff829df |
| name                | glance                           |
| password_expires_at | None                             |
+---------------------+----------------------------------+

添加 admin 角色到 glance 用戶和 service 項目:

$ openstack role add --project service --user glance admin

註解
此命令沒有輸出。

創建 glance 服務實體:

$ openstack service create --name glance \
  --description "OpenStack Image" image

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image                  |
| enabled     | True                             |
| id          | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+

4.創建鏡像服務的API端點:

$ openstack endpoint create --region RegionOne \
  image public http://controller:9292

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 340be3625e9b4239a6415d034e98aace |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne \
  image internal http://controller:9292

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | a6e4b153c2ae4c919eccfdbb7dceb5d2 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne \
  image admin http://controller:9292

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 0c37ed58103f4300a84ff125a539032d |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

4.2安裝配置組件

註解
默認配置文件在各發行版本中可能不同。你可能需要添加這些部分和選項,而不是修改已經存在的部分和選項。另外,在配置片段中的省略號(...)表示默認的配置選項應該保留。

  1. 安裝軟件包:
# yum install openstack-glance
  1. 編輯 /etc/glance/glance-api.conf 文件完成如下步驟:
    在 [database] 部分,配置數據庫訪問:
    [database]
    ...
    connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

    可用在 glance 鏡像服務數據庫設置的密碼替換 GLANCE_DBPASS。
    在 [keystone_authtoken] 和 [paste_deploy] 部分,配置認證服務訪問:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS

[paste_deploy]
...
flavor = keystone

將 GLANCE_PASS 替換爲在認證服務中爲 glance 用戶設置的密碼。

註解
註釋或刪除 [keystone_authtoken] 中的其它選項。

在 [glance_store] 部分,配置本地文件系統商店和本地鏡像文件:

[glance_store]
...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
  1. 編輯 /etc/glance/glance-registry.conf 文件完成如下內容:
    在 [database] 部分,配置數據庫訪問:
    [database]
    ...
    connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

    可用在glance鏡像服務數據庫設置的密碼替換 GLANCE_DBPASS。
    在 [keystone_authtoken] 和 [paste_deploy] 部分,配置身份認證服務訪問:

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS

[paste_deploy]
...
flavor = keystone

可用在身份認證服務創建 glance 用戶的密碼替換GLANCE_PASS。

註解
註釋或者刪除 [keystone_authtoken] 部分的其它選項。

  1. 同步鏡像服務數據庫:
    # su -s /bin/sh -c "glance-manage db_sync" glance

    註解
    忽略任何輸出。

5.啓動鏡像服務並設置開機自啓動:

# systemctl enable openstack-glance-api.service \
  openstack-glance-registry.service
# systemctl start openstack-glance-api.service \
  openstack-glance-registry.service

4.3驗證操作
CirrOS是一個小型的Linux鏡像,使用 CirrOS對鏡像服務進行驗證,可以用來測試 OpenStack部署。

註解
在控制節點執行如下命令。

  1. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . admin-openrc
  2. 下載鏡像:

    $ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

    註解
    如果沒有wget 命令請安裝它:yum install wget -y

  3. 使用 QCOW2 磁盤格式, bare 容器格式上傳鏡像到鏡像服務並設置公共可見,這樣所有的項目都可以訪問它:
$ openstack image create "cirros" \
  --file cirros-0.3.4-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public

+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| checksum         | 133eae9fb1c98f45894a4e60d8736619                     |
| container_format | bare                                                 |
| created_at       | 2015-03-26T16:52:10Z                                 |
| disk_format      | qcow2                                                |
| file             | /v2/images/cc5c6982-4910-471e-b864-1098015901b5/file |
| id               | cc5c6982-4910-471e-b864-1098015901b5                 |
| min_disk         | 0                                                    |
| min_ram          | 0                                                    |
| name             | cirros                                               |
| owner            | ae7a98326b9c455588edd2656d723b9d                     |
| protected        | False                                                |
| schema           | /v2/schemas/image                                    |
| size             | 13200896                                             |
| status           | active                                               |
| tags             |                                                      |
| updated_at       | 2015-03-26T16:52:10Z                                 |
| virtual_size     | None                                                 |
| visibility       | public                                               |
+------------------+------------------------------------------------------+

註解
OpenStack 是動態生成 ID 的,因此您看到的輸出會與示例中的命令行輸出不相同。

  1. 確認鏡像的上傳並驗證屬性:
$ openstack image list

+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | active |
+--------------------------------------+--------+--------+

5.計算服務
Controller控制節點
這個部分將描述如何在控制節點上安裝和配置 Compute 服務,即 nova。
5.1安裝前準備
在安裝和配置 Compute 服務前,你必須創建數據庫服務的憑據以及 API endpoints。

  1. 創建數據庫,完成如下步驟:
    用數據庫連接客戶端以 root 用戶連接到數據庫服務器:
    $ mysql -u root -p

    創建 nova_api 和 nova 數據庫:

    mysql> CREATE DATABASE nova_api;
    mysql> CREATE DATABASE nova;

    給nova_api 和 nova 數據庫賦予合適的權限:

    mysql> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
    IDENTIFIED BY 'NOVA_DBPASS';
    mysql> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
    IDENTIFIED BY 'NOVA_DBPASS';
    mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    IDENTIFIED BY 'NOVA_DBPASS';
    mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    IDENTIFIED BY 'NOVA_DBPASS';

    可用合適的密碼替換 NOVA_DBPASS。
    退出數據庫連接。

  2. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . admin-openrc
  3. 要創建服務證書,完成如下步驟:
    創建 nova 用戶:
$ openstack user create --domain default \
  --password-prompt nova

User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 8a7dbf5279404537b1c7b86c033620fe |
| name                | nova                             |
| password_expires_at | None                             |
+---------------------+----------------------------------+

添加 admin 角色到 nova 用戶:

$ openstack role add --project service --user nova admin

註解
此命令沒有輸出。

創建 nova 服務實體:

$ openstack service create --name nova \
  --description "OpenStack Compute" compute

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 060d59eac51b4594815603d75a00aba2 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

3.創建Compute服務API端點:

$ openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1/%\(tenant_id\)s

+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 3c1caa473bfe4390a11e7177894bcc7b          |
| interface    | public                                    |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+

$ openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1/%\(tenant_id\)s

+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | e3c918de680746a586eac1f2d9bc10ab          |
| interface    | internal                                  |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+

$ openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1/%\(tenant_id\)s

+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 38f7af91666a47cfb97b4dc790b94424          |
| interface    | admin                                     |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+

5.2安裝配置組件

註解
默認配置文件在各發行版本中可能不同。你可能需要添加這些部分,選項而不是修改已經存在的部分和選項。另外,在配置片段中的省略號(...)表示默認的配置選項你應該保留。

  1. 安裝軟件包:
    # yum install openstack-nova-api openstack-nova-conductor \
    openstack-nova-console openstack-nova-novncproxy \
    openstack-nova-scheduler
  2. 編輯 /etc/nova/nova.conf 文件,完成如下操作:
    在 [DEFAULT] 部分,只啓用計算和元數據API:
[DEFAULT]
...
enabled_apis = osapi_compute,metadata

在 [api_database] 和 [database] 部分,配置數據庫訪問:

[api_database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]
...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

可用在nova和nova_api計算服務數據庫設置的密碼替換 NOVA_DBPASS。
在 [DEFAULT] 部分,配置 RabbitMQ 消息隊列訪問:

[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller

可用在RabbitMQ消息隊列設置的openstack賬戶密碼替換 RABBIT_PASS。
在 [DEFAULT] 和 [keystone_authtoken] 部分,配置身份認證服務訪問:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

可用在認證服務中設置的 nova 用戶密碼替換 NOVA_PASS。

註解
註釋或者刪除 [keystone_authtoken] 部分的其它選項。

在 [DEFAULT] 部分,配置 my_ip 選項使用控制節點的管理網:

[DEFAULT]
...
my_ip = 10.0.0.10

在 [DEFAULT] 部分,允許使用網絡服務:

[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

註解
默認情況下,計算服務使用內置的防火牆服務。由於網絡服務包含了防火牆服務,你必須使用 nova.virt.firewall.NoopFirewallDriver 防火牆服務來禁用掉計算服務內置的防火牆服務

在 [vnc] 部分,配置配置VNC代理使用控制節點的管理接口IP地址:

[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

在 [glance] 部分,配置本地鏡像服務API:

[glance]
...
api_servers = http://controller:9292

在 [oslo_concurrency] 部分,配置鎖路徑:

[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

3.同步計算服務數據庫:

# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage db sync" nova

註解
忽略任何信息輸出。

4.啓動計算服務並設置開機自啓動:

# systemctl enable openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service

Compute計算節點
安裝並配置計算節點。這部分描述如何在計算節點上安裝並配置計算服務。計算服務支持多種hypervisors 虛擬化方式部署 instances 或 VMs. 簡而言之,本次配置使用KVM計算節點擴展的QEMU虛擬機管理程序,支持對虛擬化的硬件加速。對於傳統的硬件,本配置使用QEMU虛擬化。可以根據這些說明進行細微的調整,或者使用額外的計算節點來橫向擴展環境。

註解
假設已經按照之前的嚮導配置好了第一個計算節點。如果想要配置更多的計算節點,以類似配置第一個計算節點的方式準備好其它節點。每個額外的計算節點都需要一個唯一的IP地址。

6.5.3安裝配置組件

註解
默認配置文件在各發行版本中可能不同。你可能需要添加這些部分選項,而不是修改已經存在的部分和選項。此外,在配置片段中的省略號(...)表示默認的配置選項你應該保留。

  1. 安裝軟件包:
    # yum install openstack-nova-compute
  2. 編輯 /etc/nova/nova.conf 文件完成如下步驟:
    在 [DEFAULT] 部分,只啓用計算和元數據API:
    [DEFAULT]
    ...
    enabled_apis = osapi_compute,metadata

    在 [DEFAULT] 部分,配置 RabbitMQ 消息隊列訪問:

    [DEFAULT]
    ...
    transport_url = rabbit://openstack:RABBIT_PASS@controller

    可用在RabbitMQ 消息隊列中設置openstack 用戶的密碼替換 RABBIT_PASS。
    在 [DEFAULT] 和 [keystone_authtoken] 部分,配置身份認證服務訪問:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

可用在認證服務中設置的 nova 用戶密碼替換 NOVA_PASS。

註解
註釋或者刪除 [keystone_authtoken] 部分的其它選項。

在 [DEFAULT] 部分,配置 my_ip 選項:

[DEFAULT]
...
my_ip = 10.0.0.11

可用在compute計算節點的管理網ip地址替換 10.0.0.11。
在 [DEFAULT] 部分,啓用網絡服務:

[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

註解
缺省情況下,Compute 使用內置的防火牆服務。由於 Networking 包含了防火牆服務,所以你必須通過使用 nova.virt.firewall.NoopFirewallDriver來禁用Compute內置的防火牆服務。

在 [vnc] 部分,啓用並配置遠程控制檯訪問:

[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://10.0.0.10:6080/vnc_auto.html

服務器組件監聽所有的 IP 地址,而代理組件僅僅監聽計算節點管理網絡接口的 IP 地址。基本的 URL 表示可以使用 web 瀏覽器訪問位於該計算節點上實例的遠程控制檯位置。

註解
10.0.0.10 是控制節點管理網的ip地址,可用使用控制節點管理網的ip地址替換10.0.0.10,儘量使用控制節點管理網的ip地址而不是域名,使用域名可能出現無法解析的情況。

在 [glance] 部分,配置鏡像服務 API 的位置:

[glance]
...
api_servers = http://controller:9292
在 [oslo_concurrency] 部分,配置鎖路徑:
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
  1. 檢查計算節點是否支持虛擬機的硬件加速:
    $ egrep -c '(vmx|svm)' /proc/cpuinfo

    如果這個命令返回值大於等於1,說明計算節點支持硬件加速且不需要其它配置。
    如果這個命令返回值是0,說明計算節點不支持硬件加速。必須配置 libvirt 來使用 QEMU 代替 KVM。或者打開CPU虛擬化使其支持虛擬化硬件加速。
    返回值是0時,編輯 /etc/nova/nova.conf 文件的 [libvirt] 部分爲如下內容:

    [libvirt]
    ...
    virt_type = qemu
  2. 啓動計算服務及其依賴,並將其配置爲開機自動啓動:
    # systemctl enable libvirtd.service openstack-nova-compute.service
    # systemctl start libvirtd.service openstack-nova-compute.service

    註解
    如果 nova-compute 服務啓動失敗,檢查日誌 /var/log/nova/nova-compute.log. 類似報錯消息如 AMQP server on controller:5672 is unreachable,說明控制節點的防火牆阻止訪問5672端口。

5.4驗證操作

註解
在控制節點上執行如下命令,驗證計算服務操作。

  1. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . admin-openrc
  2. 列出服務組件,以驗證是否成功啓動並註冊了每個進程:
$ openstack compute service list

+----+--------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |
+----+--------------------+------------+----------+---------+-------+----------------------------+
|  1 | nova-consoleauth   | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
|  2 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
|  3 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |
|  4 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |
+----+--------------------+------------+----------+---------+-------+----------------------------+

註解
輸出應該顯示三個服務組件在控制節點上啓用,一個服務組件在計算節點上啓用。

6.網絡服務
Controller控制節點
6.1安裝前準備
在配置OpenStack的neutron網絡服務之前,需要創建neutron數據庫、服務憑證和API端點。
1.創建數據庫完成如下步驟:
用數據庫連接客戶端以 root 用戶連接到數據庫服務器:

$ mysql -u root -p

創建 neutron 數據庫:

mysql> CREATE DATABASE neutron;

對 neutron 數據庫賦予合適的權限:

mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';

可用合適的密碼替換NEUTRON_DBPASS。
退出數據庫連接。
1.獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:

$ . admin-openrc

2.創建服務證書,完成如下步驟:
創建 neutron 用戶:

$ openstack user create --domain default --password-prompt neutron

User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 319f34694728440eb8ffcb27b6dd8b8a |
| name                | neutron                          |
| password_expires_at | None                             |
+---------------------+----------------------------------+

添加 admin 角色到neutron 用戶:

$ openstack role add --project service --user neutron admin

註解
此命令沒有輸出。

創建 neutron 服務實體:

$ openstack service create --name neutron \
  --description "OpenStack Networking" network

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | f71529314dab4a4d8eca427e701d209e |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

3.創建網絡服務API端點:

$ openstack endpoint create --region RegionOne \
  network public http://controller:9696

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 85d80a6d02fc4b7683f611d7fc1493a3 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne \
  network internal http://controller:9696

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 09753b537ac74422a68d2d791cf3714f |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

$ openstack endpoint create --region RegionOne \
  network admin http://controller:9696

+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1ee14289c9374dffb5db92a5c112fc4e |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

6.2配置網絡服務
OpenStack有公共網絡和私有網絡兩種網絡架構。在物理機中部署OpenStack時,兩種網絡可以選擇其中一種部署,公共網絡配置簡單,私有網絡配置複雜。但在虛擬機中部署OpenStack時,不支持公共網絡部署,只支持私有網絡vxlan模式部署,因此本次配置選擇私有網絡vxlan模式部署。
私有網絡在公共網絡的基礎上多了layer-3服務,增加了私有網絡、路由器以及浮動IP地址等內容。支持實例連接到私有網絡。demo或者其他沒有特權的用戶可以管理自己的私有網絡,包含連接公網和私網的路由器。另外,浮動IP地址可以讓實例使用私有網絡連接到外部網絡,例如互聯網。
典型的私有網絡一般使用覆蓋網絡。覆蓋網絡,例如VXLAN包含了額外的數據頭,這些數據頭增加了開銷,減少了有效內容和用戶數據的可用空間。在不瞭解虛擬網絡架構的情況下,實例嘗試用以太網最大傳輸單元 (MTU) 1500字節發送數據包。網絡服務會自動給實例提供正確的MTU的值通過DHCP的方式。但是,一些雲鏡像並沒有使用DHCP或者忽視了DHCP MTU選項,要求使用元數據或者腳本來進行配置

註解
私有網絡支持實例連接到公共網絡。在控制節點安裝並配置網絡組件。

1.安裝組件

# yum install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables

2.配置服務組件
編輯 /etc/neutron/neutron.conf 文件,完成如下操作:
在數據庫 [database] 部分,配置數據庫訪問:

[database]
...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

可用創建neutron數據庫設置的密碼替換 NEUTRON_DBPASS。

註解
註釋或者刪除[database] 部分的其他 connection 選項。

在 [DEFAULT] 部分,啓用Modular Layer 2 (ML2)插件,路由服務和重疊的IP地址:

[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True

在 [DEFAULT] 部分,配置 RabbitMQ 消息隊列訪問:

[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller

可用在RabbitMQ 消息隊列中設置openstack 用戶的密碼替換 RABBIT_PASS。
在 [DEFAULT] 和 [keystone_authtoken] 部分,配置身份認證服務訪問:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = NEUTRON_PASS

可用在身份認證服務中設置的neutron 用戶的密碼替換 NEUTRON_PASS。

註解
註釋或者刪除[keystone_authtoken] 部分的其他選項。

在 [DEFAULT] 和 [nova] 部分,配置網絡服務來通知計算節點的網絡拓撲變化:

[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True

[nova]
...
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS

可用在身份認證服務中設置的nova 用戶的密碼替換 NOVA_PASS。
在 [oslo_concurrency] 部分,配置鎖路徑:

[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp

3.配置 Modular Layer 2 (ML2) 插件
ML2插件使用Linuxbridge機制,爲實例創建layer-2虛擬網絡基礎設施
編輯 /etc/neutron/plugins/ml2/ml2_conf.ini 文件,完成如下內容:
在 [ml2] 部分,啓用flat、VLAN和VXLAN網絡:

[ml2]
...
type_drivers = flat,vlan,vxlan

在 [ml2] 部分,配置VXLAN私有網絡:

[ml2]
...
tenant_network_types = vxlan

在 [ml2] 部分,啓用Linuxbridge和layer-2機制:

[ml2]
...
mechanism_drivers = linuxbridge,l2population

警告
在你配置完ML2插件之後,刪除可能導致數據庫不一致的 type_drivers 項的值。

註解
Linuxbridge代理只支持VXLAN覆蓋網絡。

在 [ml2] 部分,啓用端口安全擴展驅動:

[ml2]
...
extension_drivers = port_security

在 [ml2_type_flat] 部分,配置公共虛擬網絡爲flat網絡:

[ml2_type_flat]
...
flat_networks = provider

在 [ml2_type_vxlan] 部分,配置私有網絡VXLAN識別的網絡範圍:

[ml2_type_vxlan]
...
vni_ranges = 1:1000

在 [securitygroup] 部分,啓用 ipset 增加安全組規則的高效性:

[securitygroup]
...
enable_ipset = True

4.配置Linuxbridge代理
Linuxbridge代理爲實例建立layer-2虛擬網絡並且處理安全組規則。
編輯 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件完成如下步驟:
在 [linux_bridge] 部分,將 provider 虛擬網絡和 provider 物理網絡接口對應起來:

[linux_bridge]
physical_interface_mappings = provider:eth1

可用provider物理網絡接口的名字替換 eth1。
在 [vxlan] 部分,啓用VXLAN覆蓋網絡,配置覆蓋網絡的物理網絡接口的IP地址,啓用layer-2 population:

[vxlan]
enable_vxlan = True
local_ip = 10.0.0.10
l2_population = True

可用處理覆蓋網絡的底層物理網絡接口的IP地址替換 10.0.0.10。本次環境搭建使用管理網絡接口與其他節點建立流量隧道。因此,將10.0.0.10替換爲控制節點的管理網絡的IP地址。
在 [securitygroup] 部分,啓用安全組並配置Linux橋接防火牆驅動:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

5.配置layer-3代理
Layer-3代理爲私有虛擬網絡提供路由和NAT服務
編輯/etc/neutron/l3_agent.ini 文件並完成以下操作:
在 [DEFAULT] 部分,配置Linux網橋接口驅動和外部網絡橋接:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

6.配置DHCP代理
DHCP代理提供虛擬網絡DHCP服務。
編輯/etc/neutron/dhcp_agent.ini 文件並完成以下操作:
在 [DEFAULT] 部分,配置Linuxbridge驅動接口,DHCP驅動並啓用隔離元數據,這樣在provider網絡上的實例就可以通過網絡來訪問元數據:

[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

7.配置元數據代理
元數據代理負責提供配置信息,例如:訪問實例的憑證。
編輯 /etc/neutron/metadata_agent.ini 文件完成如下操作:
在 [DEFAULT] 部分,配置元數據主機以及共享密碼

[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET

可用合適的元數據代理密碼替換METADATA_SECRET。
8.配置計算服務使用網絡

註解
此處爲controller控制節點的計算服務,而非compute計算節點。

編輯/etc/nova/nova.conf 文件並完成如下操作:
在 [neutron] 部分,配置訪問參數,啓用元數據代理並設置密碼:

[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET

可用在認證服務中設置的 neutron 用戶密碼替換 NEUTRON_PASS。
可用在元數據代理中設置的密碼替換METADATA_SECRET。
9.完成安裝

  1. 網絡服務初始化腳本需要/etc/neutron/plugin.ini文件,該文件是指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini 的超鏈接。如果超鏈接不存在,使用下面的命令創建:
    # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
  2. 同步數據庫:

    # 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

    註解
    網絡配置完成之後進行數據庫同步,因爲腳本需要完成服務器和插件的配置文件。

  3. 重啓計算API服務:
    # systemctl restart openstack-nova-api.service
  4. 啓動網絡服務並設置開機自啓動。
    # 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

    啓動layer-3服務並設置開機自啓動:

    # systemctl enable neutron-l3-agent.service
    # systemctl start neutron-l3-agent.service

Compute計算節點
6.3.安裝組件

# yum install openstack-neutron-linuxbridge ebtables ipset

6.4.配置通用組件
網絡通用組件的配置包括認證機制、消息隊列和插件。

註解
默認配置文件因分佈不同而不同。您可能需要添加這些部分和選項,而不是修改現有的部分和選項。此外,配置片段中的省略號(…),表示應該保留的原有的默認配置。

編輯 /etc/neutron/neutron.conf 文件完成如下操作:

在 [database] 部分,註釋所有 connection項,因爲計算節點不直接訪問數據庫。
在 [DEFAULT] 部分,配置 RabbitMQ 消息隊列訪問:

 [DEFAULT]
 ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

可用在RabbitMQ消息隊列設置的openstack賬戶密碼替換 RABBIT_PASS。
在 [DEFAULT] 和 [keystone_authtoken] 部分,配置認證服務訪問:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = NEUTRON_PASS

可用在身份認證服務中設置的neutron 用戶的密碼替換 NEUTRON_PASS。

註解
在 [keystone_authtoken] 中註釋或者刪除其他選項。

在 [oslo_concurrency] 部分,配置鎖路徑:

[oslo_concurrency]
...
lock_path = /var/lib/neutron/tmp

6.5.配置Linuxbridge代理
Linuxbridge代理爲實例建立layer-2虛擬網絡並且處理安全組規則。
編輯 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件完成如下步驟:
在 [linux_bridge] 部分,將 provider 虛擬網絡和 provider 物理網絡接口對應起來:

[linux_bridge]
physical_interface_mappings = provider:eth1

可用provider物理網絡接口的名字替換 eth1。
在 [vxlan] 部分,啓用VXLAN覆蓋網絡,配置覆蓋網絡的物理網絡接口的IP地址,啓用layer-2 population:

[vxlan]
enable_vxlan = True
local_ip = 10.0.0.11
l2_population = True

可用處理覆蓋網絡的底層物理網絡接口的IP地址替換 10.0.0.11。本次環境搭建使用管理網絡接口與其他節點建立流量隧道。因此,將10.0.0.11替換爲控制節點的管理網絡的IP地址。
在 [securitygroup] 部分,啓用安全組並配置Linux橋接防火牆驅動:

[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

6.6.配置計算服務使用網絡
編輯/etc/nova/nova.conf 文件並完成如下操作:
在 [neutron] 部分,配置訪問參數:

[neutron]
...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS

可用在認證服務中設置的 neutron 用戶密碼替換 NEUTRON_PASS。
6.7.完成安裝
重啓計算服務:

# systemctl restart openstack-nova-compute.service

啓動網絡代理服務並設置開機自啓動。

# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service

驗證操作

註解
在控制節點執行這些命令。

  1. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限::
    $ . admin-openrc
  2. 列出加載的擴展來驗證 neutron-server 進程是否正常啓動:
$ neutron ext-list

+---------------------------+-----------------------------------------------+
| alias                     | name                                          |
+---------------------------+-----------------------------------------------+
| default-subnetpools       | Default Subnetpools                           |
| network-ip-availability   | Network IP Availability                       |
| network_availability_zone | Network Availability Zone                     |
| auto-allocated-topology   | Auto Allocated Topology Services              |
| ext-gw-mode               | Neutron L3 Configurable external gateway mode |
| binding                   | Port Binding                                  |
| agent                     | agent                                         |
| subnet_allocation         | Subnet Allocation                             |
| l3_agent_scheduler        | L3 Agent Scheduler                            |
| tag                       | Tag support                                   |
| external-net              | Neutron external network                      |
| net-mtu                   | Network MTU                                   |
| availability_zone         | Availability Zone                             |
| quotas                    | Quota management support                      |
| l3-ha                     | HA Router extension                           |
| flavors                   | Neutron Service Flavors                       |
| provider                  | Provider Network                              |
| multi-provider            | Multi Provider Network                        |
| address-scope             | Address scope                                 |
| extraroute                | Neutron Extra Route                           |
| timestamp_core            | Time Stamp Fields addition for core resources |
| router                    | Neutron L3 Router                             |
| extra_dhcp_opt            | Neutron Extra DHCP opts                       |
| dns-integration           | DNS Integration                               |
| security-group            | security-group                                |
| dhcp_agent_scheduler      | DHCP Agent Scheduler                          |
| router_availability_zone  | Router Availability Zone                      |
| rbac-policies             | RBAC Policies                                 |
| standard-attr-description | standard-attr-description                     |
| port-security             | Port Security                                 |
| allowed-address-pairs     | Allowed Address Pairs                         |
| dvr                       | Distributed Virtual Router                    |
+---------------------------+-----------------------------------------------+

註解
實際的輸出結果也許與本例有細微的差異。

列出代理以驗證啓動 neutron 代理是否成功::

$ openstack network agent list

+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| f49a4b81-afd6-4b3d-b923-66c8f0517099 | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| 27eee952-a748-467b-bf71-941e89846a92 | Linux bridge agent | controller | None              | True  | UP    | neutron-linuxbridge-agent |
| 08905043-5010-4b87-bba5-aedb1956e27a | Linux bridge agent | compute1   | None              | True  | UP    | neutron-linuxbridge-agent |
| 830344ff-dc36-4956-84f4-067af667a0dc | L3 agent           | controller | nova              | True  | UP    | neutron-l3-agent          |
| dd3644c9-1a3a-435a-9282-eb306b4b0391 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+

輸出結果應該包括控制節點上的四個代理和每個計算節點上的一個代理。
7.Dashboard
Dashboard(horizon)是一個web接口,使得雲平臺管理員以及用戶可以管理不同的Openstack資源以及服務。本次署示例使用的是 Apache Web 服務器。描述如何在控制節點上安裝和配置儀表盤。
Keystone身份認證服務是Dashboard所需的核心服務,可以結合圖像、網絡、計算等其它服務使用Dashboard。也可以在具有獨立服務(如對象存儲)的環境中使用Dashboard。
Controller節點
7.1安裝配置組件

註解
默認配置文件在各發行版本中可能不同。你可能需要添加這些部分選項,而不是修改已經存在的部分和選項。此外,在配置片段中的省略號(...)表示默認的配置選項你應該保留。

  1. 安裝軟件包:
    # yum install openstack-dashboard
  2. 編輯 /etc/openstack-dashboard/local_settings 文件完成如下步驟:
    在 controller 節點上配置儀表盤使用OpenStack服務:
    OPENSTACK_HOST = "controller"

    允許所有主機訪問儀表板:

    ALLOWED_HOSTS = ['*', ]

    配置 memcached會話存儲服務:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}

註解
註釋其他的會話存儲服務配置

啓用第3版認證API:

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

啓用對域的支持:

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

配置API版本:

OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

通過儀表盤創建用戶時的默認域配置爲 default:

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"

通過儀表盤創建的用戶默認角色配置爲 user:

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

vxlan模式默認支持layer-3網絡服務,保持原有默認配置文件即可,主要有以下內容:

OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': True,
    'enable_quotas': True,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': True,
    'enable_firewall': True,
    'enable_***': True,
'enable_fip_topology_check': True,
}

可以選擇性的配置時區:

TIME_ZONE = "Asia/Shanghai"

使用恰當的時區標識替換Asia/Shanghai。

  1. 重啓web服務器以及會話存儲服務:
    # systemctl restart httpd.service memcached.service

    註解
    如果當前的服務當前沒有運行,用 systemctl start 來啓動每個服務。

7.2驗證操作
驗證儀表盤的操作。在瀏覽器中輸入http://controller/dashboard訪問儀表盤。驗證使用 admin或者demo用戶憑證和default域憑證。如果域名controller無法解析,可用controller節點管理網ip地址10.0.0.10替換,即在瀏覽器中輸入http://10.0.0.10/dashboard。
8.塊存儲服務
Controller控制節點
塊存儲服務(cinder)爲實例提供塊存儲。存儲的分配和消耗是由塊存儲驅動器,或者多後端配置的驅動器決定的。還有很多驅動程序可用:NAS/SAN,NFS,ISCSI,Ceph等。典型情況下,塊服務API和調度器服務運行在控制節點上。取決於使用的驅動,卷服務器可以運行在控制節點、計算節點或單獨的存儲節點。
本節內容講述如何在控制節點上安裝和配置塊存儲服務,即cinder。在控制節點,cinder服務至少需要一個額外的磁盤爲實例提供卷。
8.1安裝前準備
在你安裝和配置塊存儲服務之前,你必須創建數據庫、服務證書和API端點
1.創建數據庫,完成以下步驟:
用數據庫連接客戶端以 root 用戶連接到數據庫服務器:

$ mysql -u root -p

創建 cinder 數據庫:

mysql> CREATE DATABASE cinder;

對 cinder 數據庫賦予合適的權限:

mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \
  IDENTIFIED BY 'CINDER_DBPASS';
mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' \
  IDENTIFIED BY 'CINDER_DBPASS';

可用合適的密碼替換 CINDER_DBPASS。
退出數據庫連接。

  1. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . admin-openrc
  2. 創建服務證書,完成如下步驟:
    創建 cinder 用戶:
$ openstack user create --domain default --password-prompt cinder

User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 0dbcdd0968dd4c948eacf9eb60d82b46 |
| name                | cinder                           |
| password_expires_at | None                             |
+---------------------+----------------------------------+

添加 admin 角色到 cinder 用戶:

$ openstack role add --project service --user cinder admin

註解
此命令沒有輸出。

創建 cinder 和 cinderv2 服務實體:

$ openstack service create --name cinder \
  --description "OpenStack Block Storage" volume

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | ab3bbbef780845a1a283490d281e7fda |
| name        | cinder                           |
| type        | volume                           |
+-------------+----------------------------------+
$ openstack service create --name cinderv2 \
  --description "OpenStack Block Storage" volumev2

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Block Storage          |
| enabled     | True                             |
| id          | eb9fd245bdbc414695952e93f29fe3ac |
| name        | cinderv2                         |
| type        | volumev2                         |
+-------------+----------------------------------+

註解
塊存儲服務需要兩個服務實體

4.創建塊設備存儲服務的 API 入口點:

$ openstack endpoint create --region RegionOne \
  volume public http://controller:8776/v1/%\(tenant_id\)s

  +--------------+-----------------------------------------+
  | Field        | Value                                   |
  +--------------+-----------------------------------------+
  | enabled      | True                                    |
  | id           | 03fa2c90153546c295bf30ca86b1344b        |
  | interface    | public                                  |
  | region       | RegionOne                               |
  | region_id    | RegionOne                               |
  | service_id   | ab3bbbef780845a1a283490d281e7fda        |
  | service_name | cinder                                  |
  | service_type | volume                                  |
  | url          | http://controller:8776/v1/%(tenant_id)s |
  +--------------+-----------------------------------------+

$ openstack endpoint create --region RegionOne \
  volume internal http://controller:8776/v1/%\(tenant_id\)s

  +--------------+-----------------------------------------+
  | Field        | Value                                   |
  +--------------+-----------------------------------------+
  | enabled      | True                                    |
  | id           | 94f684395d1b41068c70e4ecb11364b2        |
  | interface    | internal                                |
  | region       | RegionOne                               |
  | region_id    | RegionOne                               |
  | service_id   | ab3bbbef780845a1a283490d281e7fda        |
  | service_name | cinder                                  |
  | service_type | volume                                  |
  | url          | http://controller:8776/v1/%(tenant_id)s |
  +--------------+-----------------------------------------+

$ openstack endpoint create --region RegionOne \
  volume admin http://controller:8776/v1/%\(tenant_id\)s

  +--------------+-----------------------------------------+
  | Field        | Value                                   |
  +--------------+-----------------------------------------+
  | enabled      | True                                    |
  | id           | 4511c28a0f9840c78bacb25f10f62c98        |
  | interface    | admin                                   |
  | region       | RegionOne                               |
  | region_id    | RegionOne                               |
  | service_id   | ab3bbbef780845a1a283490d281e7fda        |
  | service_name | cinder                                  |
  | service_type | volume                                  |
  | url          | http://controller:8776/v1/%(tenant_id)s |
  +--------------+-----------------------------------------+

$ openstack endpoint create --region RegionOne \
  volumev2 public http://controller:8776/v2/%\(tenant_id\)s

+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 513e73819e14460fb904163f41ef3759        |
| interface    | public                                  |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | eb9fd245bdbc414695952e93f29fe3ac        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+

$ openstack endpoint create --region RegionOne \
  volumev2 internal http://controller:8776/v2/%\(tenant_id\)s

+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | 6436a8a23d014cfdb69c586eff146a32        |
| interface    | internal                                |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | eb9fd245bdbc414695952e93f29fe3ac        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+

$ openstack endpoint create --region RegionOne \
  volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

+--------------+-----------------------------------------+
| Field        | Value                                   |
+--------------+-----------------------------------------+
| enabled      | True                                    |
| id           | e652cf84dd334f359ae9b045a2c91d96        |
| interface    | admin                                   |
| region       | RegionOne                               |
| region_id    | RegionOne                               |
| service_id   | eb9fd245bdbc414695952e93f29fe3ac        |
| service_name | cinderv2                                |
| service_type | volumev2                                |
| url          | http://controller:8776/v2/%(tenant_id)s |
+--------------+-----------------------------------------+

註解
塊設備存儲服務每個服務實體都需要端點。

8.2安裝配置組件
1.安裝軟件包:

# yum install openstack-cinder

2.編輯 /etc/cinder/cinder.conf 文件並完成以下步驟:
在 [database] 部分,配置數據庫訪問:

[database]
...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

可用在創建 cinder 數據庫時設置的密碼替換 CINDER_DBPASS。
在 [DEFAULT] 部分,配置 RabbitMQ 消息隊列訪問:

[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller

可用在RabbitMQ消息隊列設置的openstack賬戶密碼替換 RABBIT_PASS
在 [DEFAULT] 和 [keystone_authtoken] 部分,配置身份認證服務訪問:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = cinder
password = CINDER_PASS

可用在認證服務中設置的 cinder 用戶密碼替換 CINDER_PASS。

註解
註釋或者刪除 [keystone_authtoken] 部分的其它選項。

在 [DEFAULT] 部分,使用controller控制節點管理網ip地址配置 my_ip 選項:

[DEFAULT]
...
my_ip = 10.0.0.10

在 [oslo_concurrency] 部分,配置鎖路徑:

[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp

3.同步塊存儲數據庫:

# su -s /bin/sh -c "cinder-manage db sync" cinder

註解
忽略輸出中任何不推薦使用的信息。

4.配置計算服務使用塊存儲
編輯 /etc/nova/nova.conf 文件爲如下內容:

[cinder]
os_region_name = RegionOne

註解
此處爲controller控制節點的計算服務,而非compute計算節點。compute計算節點不需要做任何關於使用cinder的配置。

5.重啓計算API服務:

# systemctl restart openstack-nova-api.service

6.啓動塊存儲服務並設置開機自啓動:

# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

Cinder存儲節點
本節描述如何爲塊存儲服務安裝並配置存儲節點。簡而言之,在存儲節點配有一個空的本地磁盤設備 /dev/sdb,可以根據需求替換成不同的值。cinder服務在/dev/sdb設備上使用LVM提供邏輯卷,並通過iSCSI協議映射給實例使用。同樣可以根據這些修改指導,添加額外的存儲節點來增加存儲環境規模。
8.3安裝前準備
在安裝和配置塊存儲服務之前,必須準備好存儲設備。

註解
在Cinder存儲節點實施這些步驟。

1.安裝支持的工具包:
安裝 LVM 包:

# yum install lvm2

啓動LVM服務並且設置該服務隨系統啓動:

# systemctl enable lvm2-lvmetad.service
# systemctl start lvm2-lvmetad.service

2.創建LVM 物理卷 /dev/sdb:

# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created

3.創建 LVM 卷組 cinder-volumes:

# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created

塊存儲服務會在這個卷組中創建邏輯卷。

  1. 只有實例可以訪問塊存儲卷組。而底層的操作系統管理設備與卷關聯。默認情況下,LVM卷掃描工具會默認掃描 /dev 目錄,查找包含卷的塊存儲設備。如果系統有其它任務和lVM使用同一塊設備,掃描工具檢測到這些卷時會嘗試配置緩存,可能會在底層操作系統和捲上產生各種問題。所以,必須重新配置LVM,讓它只掃描包含cinder-volume卷組的設備。編輯/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/.*/"]

8.4安裝配置組件
1.安裝軟件包:

# yum install openstack-cinder targetcli python-keystone

2.編輯 /etc/cinder/cinder.conf 文件並完成以下步驟:
在 [database] 部分,配置數據庫訪問:

[database]
...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

可用在創建 cinder 數據庫時設置的密碼替換 CINDER_DBPASS。
在 [DEFAULT] 部分,配置 RabbitMQ 消息隊列訪問:

[DEFAULT]
...
transport_url = rabbit://openstack:RABBIT_PASS@controller

可用在RabbitMQ消息隊列設置的openstack賬戶密碼替換 RABBIT_PASS
在 [DEFAULT] 和 [keystone_authtoken] 部分,配置身份認證服務訪問:

[DEFAULT]
...
auth_strategy = keystone

[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = cinder
password = CINDER_PASS

可用在認證服務中設置的 cinder 用戶密碼替換 CINDER_PASS。

註解
註釋或者刪除 [keystone_authtoken] 部分的其它選項。

在 [DEFAULT] 部分,配置 my_ip 選項:

[DEFAULT]
...
my_ip = 10.0.0.12

可用cinder存儲節點的管理網ip地址替換 10.0.0.12。
在 [lvm] 部分,配置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

在 [DEFAULT] 部分,啓用 LVM 後端:

[DEFAULT]
enabled_backends = lvm

註解
後端名字是任意的。比如,本教程使用驅動的名字作爲後端的名字。

在 [DEFAULT] 部分,配置鏡像服務 API:

[DEFAULT]
glance_api_servers = http://controller:9292

在 [oslo_concurrency] 部分,配置鎖路徑:

[oslo_concurrency]
lock_path = /var/lib/cinder/tmp

3.啓動塊存儲卷服務及其依賴的服務,並將其配置爲隨系統啓動:

# systemctl enable openstack-cinder-volume.service target.service
# systemctl start openstack-cinder-volume.service target.service

8.5驗證操作

註解
在控制節點上執行如下命令,驗證塊存儲服務操作。

  1. 獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . admin-openrc
  2. 列出服務組件以驗證是否每個進程都成功啓動:
$ openstack volume service list

+------------------+------------+------+---------+-------+----------------------------+
| Binary           | Host       | Zone | Status  | State | Updated_at                 |
+------------------+------------+------+---------+-------+----------------------------+
| cinder-scheduler | controller | nova | enabled | up    | 2016-09-30T02:27:41.000000 |
| cinder-volume    | block@lvm  | nova | enabled | up    | 2016-09-30T02:27:46.000000 |
+------------------+------------+------+---------+-------+----------------------------+

9.啓動虛擬機
Controller節點
9.1創建虛擬網絡
由於使用vxlan網絡模式,因此需要創建private私有網絡和provider外網。
9.1.1創建provider公網

1.在控制節點,獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:

$ . admin-openrc

2.創建provider外網:

$ openstack network create  --share --external \
  --provider-physical-network provider \
  --provider-network-type flat provider

Created a new network:

+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2016-11-02T20:36:18Z                 |
| description               |                                      |
| headers                   |                                      |
| id                        | 9793a02d-4f05-40d2-a280-407c48db0161 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| mtu                       | 1500                                 |
| name                      | provider                             |
| port_security_enabled     | True                                 |
| project_id                | 7e188c33604d4b02ae0a99b5da68cae0     |
| provider:network_type     | flat                                 |
| provider:physical_network | provider                             |
| provider:segmentation_id  | None                                 |
| revision_number           | 3                                    |
| router:external           | External                             |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      | []                                   |
| updated_at                | 2016-11-02T20:36:18Z                 |
+---------------------------+--------------------------------------+

--share 項允許所有項目使用provider虛擬網絡
--external 項定義虛擬網絡爲外網。如果要創建內部網絡,可以使用 --internal 代替,默認值也是 internal.
--provider-physical-network provider 和 --provider-network-type flat 項將flat虛擬網絡連接到使用eth1網卡的flat物理網絡,檢查主機的以下配置信息:

ml2_conf.ini:
[ml2_type_flat]
flat_networks = provider
linuxbridge_agent.ini:
[linux_bridge]
physical_interface_mappings = provider:eth1

3.創建provider網絡的子網:

$ openstack subnet create --network provider \  
--allocation-pool start=START_IP_ADDRESS,end=END_IP_ADDRESS \
--dns-nameserver DNS_RESOLVER --gateway PROVIDER_NETWORK_GATEWAY \
--subnet-range PROVIDER_NETWORK_CIDR provider

使用provider物理網絡的子網CIDR標記替換 PROVIDER_NETWORK_CIDR。
使用準備分配給實例的子網網段的起始和結束ip地址替換 START_IP_ADDRESS 和 END_IP_ADDRESS。這個範圍不能包括任何已經使用的ip地址。
用DNS解析服務的ip地址替換 DNS_RESOLVER。一般情況,可從主機文件/etc/resolv.conf 獲取。
可用provider網關ip地址替換 PROVIDER_NETWORK_GATEWAY,一般的網關IP地址以 ”.1” 結尾。

例如
Provider公網網絡203.0.113.0/24的網關爲203.0.113.1。DHCP 服務從203.0.113.101 到 203.0.113.250中爲每個實例分配ip地址。所有實例使用 8.8.4.4 配置DNS 解析。

$ openstack subnet create --network provider \
  --allocation-pool start=203.0.113.101,end=203.0.113.250 \
  --dns-nameserver 8.8.4.4 --gateway 203.0.113.1 \
  --subnet-range 203.0.113.0/24 provider

Created a new subnet:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 203.0.113.101-203.0.113.250          |
| cidr              | 203.0.113.0/24                       |
| created_at        | 2016-11-02T20:45:04Z                 |
| description       |                                      |
| dns_nameservers   | 8.8.4.4                              |
| enable_dhcp       | True                                 |
| gateway_ip        | 203.0.113.1                          |
| headers           |                                      |
| host_routes       |                                      |
| id                | 2c65ef8c-a5f3-4f51-94c1-4df0daaaab5c |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | provider                             |
| network_id        | 9793a02d-4f05-40d2-a280-407c48db0161 |
| project_id        | 7e188c33604d4b02ae0a99b5da68cae0     |
| revision_number   | 2                                    |
| service_types     | []                                   |
| subnetpool_id     | None                                 |
| updated_at        | 2016-11-02T20:45:04Z                 |
+-------------------+--------------------------------------+

9.1.2創建selfservice私有網絡

5.獲得 demo 憑證來獲取只有管理員能執行的命令的訪問權限:

$ . demo-openrc

6.創建selfservice私有網絡:

$ openstack network create selfservice

Created a new network:
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| admin_state_up          | UP                                   |
| availability_zone_hints |                                      |
| availability_zones      |                                      |
| created_at              | 2016-11-04T18:20:59Z                 |
| description             |                                      |
| headers                 |                                      |
| id                      | 7c6f9b37-76b4-463e-98d8-27e5686ed083 |
| ipv4_address_scope      | None                                 |
| ipv6_address_scope      | None                                 |
| mtu                     | 1450                                 |
| name                    | selfservice                          |
| port_security_enabled   | True                                 |
| project_id              | 3828e7c22c5546e585f27b9eb5453788     |
| project_id              | 3828e7c22c5546e585f27b9eb5453788     |
| revision_number         | 3                                    |
| router:external         | Internal                             |
| shared                  | False                                |
| status                  | ACTIVE                               |
| subnets                 |                                      |
| tags                    | []                                   |
| updated_at              | 2016-11-04T18:20:59Z                 |
+-------------------------+--------------------------------------+

非特權用戶一般不能在這個命令制定更多參數。服務會自動從下面的文件中的信息選擇參數:

ml2_conf.ini:
[ml2]
tenant_network_types = vxlan

[ml2_type_vxlan]
vni_ranges = 1:1000

7.創建網絡子網:

$ openstack subnet create --network selfservice \
  --dns-nameserver DNS_RESOLVER --gateway SELFSERVICE_NETWORK_GATEWAY \
  --subnet-range SELFSERVICE_NETWORK_CIDR selfservice

用DNS解析服務的ip地址替換 DNS_RESOLVER。一般情況,可從主機文件/etc/resolv.conf 獲取。
用selfservice網關ip地址替換 SELFSERVICE_NETWORK_GATEWAY,一般的網關IP地址以 ”.1” 結尾。
用selfservice網絡的子網替換 SELFSERVICE_NETWORK_CIDR。 可以使用任意值。
例如
Selfservice私有網絡172.16.1.0/24的網關爲172.16.1.1。DHCP 服務從172.16.1.2 到 172.16.1.254中爲每個實例分配ip地址。所有實例使用 8.8.4.4 配置DNS 解析。

$ openstack subnet create --network selfservice \
  --dns-nameserver 8.8.4.4 --gateway 172.16.1.1 \
  --subnet-range 172.16.1.0/24 selfservice

Created a new subnet:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 172.16.1.2-172.16.1.254              |
| cidr              | 172.16.1.0/24                        |
| created_at        | 2016-11-04T18:30:54Z                 |
| description       |                                      |
| dns_nameservers   | 8.8.4.4                              |
| enable_dhcp       | True                                 |
| gateway_ip        | 172.16.1.1                           |
| headers           |                                      |
| host_routes       |                                      |
| id                | 5c37348e-e7da-439b-8c23-2af47d93aee5 |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | selfservice                          |
| network_id        | b9273876-5946-4f02-a4da-838224a144e7 |
| project_id        | 3828e7c22c5546e585f27b9eb5453788     |
| project_id        | 3828e7c22c5546e585f27b9eb5453788     |
| revision_number   | 2                                    |
| service_types     | []                                   |
| subnetpool_id     | None                                 |
| updated_at        | 2016-11-04T18:30:54Z                 |
+-------------------+--------------------------------------+

9.1.3創建路由
selfservice私有網絡通過虛擬路由連接到provider公有網絡,以雙向NAT最爲典型。每個路由包含至少一個私有網絡接口和一個連接到公有網絡網關的接口
provider公有提供網絡必須包括router:external選項,以便使路由連接到外部網絡,如互聯網。admin 或者其他權限用戶在網絡創建時必須包括這個選項,或創建完成後添加。在這個環境裏,創建provider網絡時,router:external項由--external參數設置。
1.獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限::

$ . admin-openrc
  1. 獲得 demo 憑證來獲取只有管理員能執行的命令的訪問權限:
    $ . demo-openrc

    3.創建路由:

$ openstack router create router

Created a new router:
+-------------------------+--------------------------------------+
| Field                   | Value                                |
+-------------------------+--------------------------------------+
| admin_state_up          | UP                                   |
| availability_zone_hints |                                      |
| availability_zones      |                                      |
| created_at              | 2016-11-04T18:32:56Z                 |
| description             |                                      |
| external_gateway_info   | null                                 |
| flavor_id               | None                                 |
| headers                 |                                      |
| id                      | 67324374-396a-4db6-9443-c70be167a42b |
| name                    | router                               |
| project_id              | 3828e7c22c5546e585f27b9eb5453788     |
| project_id              | 3828e7c22c5546e585f27b9eb5453788     |
| revision_number         | 2                                    |
| routes                  |                                      |
| status                  | ACTIVE                               |
| updated_at              | 2016-11-04T18:32:56Z                 |
+-------------------------+--------------------------------------+

4.添加selfservice私有網絡子網作爲路由接口:

$ neutron router-interface-add router selfservice

Added interface bff6605d-824c-41f9-b744-21d128fc86e1 to router router.

5.在router路由上設置 provider 公網的網關:

$ neutron router-gateway-set router provider

Set gateway for router router

9.1.4驗證操作
在繼續操作前檢查是否存在問題,以下步驟將使用網絡和子網創建示例中的IP地址。
1.在控制節點上,獲得 admin 憑證來獲取只有管理員能執行的命令的訪問權限:

$ . admin-openrc

2.查看列出網絡命名空間,正常應該看到一個 qrouter 命名空間和兩個 qdhcp 命名空間。

$ ip netns

qrouter-89dd2083-a160-4d75-ab3a-14239f01ea0b
qdhcp-7c6f9b37-76b4-463e-98d8-27e5686ed083
qdhcp-0e62efcd-8cee-46c7-b163-d8df05c3c5ad
  1. 列出路由器上的端口來確定公網網關的IP 地址:
$ neutron router-port-list router

+--------------------------------------+------+-------------------+------------------------------------------+
| id                                   | name | mac_address       | fixed_ips                                |
+--------------------------------------+------+-------------------+------------------------------------------+
| bff6605d-824c-41f9-b744-21d128fc86e1 |      | fa:16:3e:2f:34:9b | {"subnet_id":                            |
|                                      |      |                   | "3482f524-8bff-4871-80d4-5774c2730728",  |
|                                      |      |                   | "ip_address": "172.16.1.1"}              |
| d6fe98db-ae01-42b0-a860-37b1661f5950 |      | fa:16:3e:e8:c1:41 | {"subnet_id":                            |
|                                      |      |                   | "5cc70da8-4ee7-4565-be53-b9c011fca011",  |
|                                      |      |                   | "ip_address": "203.0.113.102"}           |
+--------------------------------------+------+-------------------+------------------------------------------+

4.從控制節點或任意公共物理網絡上的節點Ping這個IP地址:

$ ping -c 4 203.0.113.102

PING 203.0.113.102 (203.0.113.102) 56(84) bytes of data.
64 bytes from 203.0.113.102: icmp_req=1 ttl=64 time=0.619 ms
64 bytes from 203.0.113.102: icmp_req=2 ttl=64 time=0.189 ms
64 bytes from 203.0.113.102: icmp_req=3 ttl=64 time=0.165 ms
64 bytes from 203.0.113.102: icmp_req=4 ttl=64 time=0.216 ms

--- 203.0.113.102 ping statistics ---
rtt min/avg/max/mdev = 0.165/0.297/0.619/0.187 ms

10.9.2 創建 m1.nano 實例類型
默認的最小規格的主機需要512 MB內存。對於環境中計算節點內存不足4 GB的,建議創建只需要64 MB的m1.nano規格的主機。如果只是測試,一般用m1.nano規格的主機來加載CirrOS鏡像

$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

+----------------------------+---------+
| Field                      | Value   |
+----------------------------+---------+
| OS-FLV-DISABLED:disabled   | False   |
| OS-FLV-EXT-DATA:ephemeral  | 0       |
| disk                       | 1       |
| id                         | 0       |
| name                       | m1.nano |
| os-flavor-access:is_public | True    |
| ram                        | 64      |
| rxtx_factor                | 1.0     |
| swap                       |         |
| vcpus                      | 1       |
+----------------------------+---------+

9.3生成鍵值對
大多數雲鏡像支持公共密鑰認證而不是傳統的密碼認證。在啓動實例前,需要添加公共密鑰到計算服務。
1.獲取 demo 項目認證:

$ . demo-openrc

2.生成並添加密鑰對:

$ ssh-keygen -q -N ""
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
| name        | mykey                                           |
| user_id     | 58126687cbcc4888bfa9ab73a2256f27                |
+-------------+-------------------------------------------------+

註解
可以跳過執行ssh-keygen 命令直接使用現存的公共密鑰。
3.驗證添加的密鑰對:


$ openstack keypair list

+-------+-------------------------------------------------+
| Name | Fingerprint |
+-------+-------------------------------------------------+
| mykey | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
+-------+-------------------------------------------------+

9.4增加安全組規則
默認情況下,default安全組適用於所有實例並且包括拒絕遠程訪問實例的防火牆規則。對CirrOS的Linux鏡像,建議至少允許ICMP(ping)和shell(SSH)訪問。
•   添加規則至 default 安全組:
o   允許 ICMP (ping):

$ openstack security group rule create --proto icmp default

+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| created_at | 2016-10-05T09:52:31Z |
| description | |
| direction | ingress |
| ethertype | IPv4 |
| headers | |
| id | 6ee8d630-9803-4d3d-9aea-8c795abbedc2 |
| port_range_max | None |
| port_range_min | None |
| project_id | 77ae8d7104024123af342ffb0a6f1d88 |
| project_id | 77ae8d7104024123af342ffb0a6f1d88 |
| protocol | icmp |
| remote_group_id | None |
| remote_ip_prefix | 0.0.0.0/0 |
| revision_number | 1 |
| security_group_id | 4ceee3d4-d2fe-46c1-895c-382033e87b0d |
| updated_at | 2016-10-05T09:52:31Z |
+-------------------+--------------------------------------+

o   允許 shell (SSH) 訪問:

$ openstack security group rule create --proto tcp --dst-port 22 default

+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| created_at | 2016-10-05T09:54:50Z |
| description | |
| direction | ingress |
| ethertype | IPv4 |
| headers | |
| id | 3cd0a406-43df-4741-ab29-b5e7dcb7469d |
| port_range_max | 22 |
| port_range_min | 22 |
| project_id | 77ae8d7104024123af342ffb0a6f1d88 |
| project_id | 77ae8d7104024123af342ffb0a6f1d88 |
| protocol | tcp |
| remote_group_id | None |
| remote_ip_prefix | 0.0.0.0/0 |
| revision_number | 1 |
| security_group_id | 4ceee3d4-d2fe-46c1-895c-382033e87b0d |
| updated_at | 2016-10-05T09:54:50Z |
+-------------------+--------------------------------------+

9.5啓動實例
網絡配置包括provider公網和selfservice私網兩個網絡,分別介紹在以下兩種網絡模式下啓動實例。
9.5.1在provider公網啓動實例
9.5.1.1檢查實例選項
啓動實例前,一定要指定實例類型、鏡像名稱、網絡、安全組、鍵值和實例名稱。
1.在控制節點,獲得 demo 憑證來獲取只有管理員能執行的命令的訪問權限:

$ . demo-openrc

2.實例類型包括分配虛擬資源策略,比如處理器、內存、存儲等。
查看可使用的實例類型:

$ openstack flavor list

+----+---------+-----+------+-----------+-------+-----------+
| ID | Name | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+---------+-----+------+-----------+-------+-----------+
| 0 | m1.nano | 64 | 1 | 0 | 1 | True |
+----+---------+-----+------+-----------+-------+-----------+

> 註解
> 可以用ID引用實例類型
> 3.查看可用鏡像:

$ openstack image list

+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 390eb5f7-8d49-41ec-95b7-68c0d5d54b34 | cirros | active |
+--------------------------------------+--------+--------+

實例使用 cirros 鏡像。
4.查看可用網絡:

$ openstack network list

+--------------------------------------+--------------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+--------------+--------------------------------------+
| 4716ddfe-6e60-40e7-b2a8-42e57bf3c31c | selfservice | 2112d5eb-f9d6-45fd-906e-7cabd38b7c7c |
| b5b6993c-ddf9-40e7-91d0-86806a42edb8 | provider | 310911f6-acf0-4a47-824e-3032916582ff |
+--------------------------------------+--------------+--------------------------------------+


實例使用 provider 公網。注意要參考網絡使用的ID而非網絡名稱。
5,列出可用安全組:
$ openstack security group list

+--------------------------------------+---------+------------------------+----------------------------------+
| ID                                   | Name    | Description            | Project                          |
+--------------------------------------+---------+------------------------+----------------------------------+
| dd2b614c-3dad-48ed-958b-b155a3b38515 | default | Default security group | a516b957032844328896baa01e0f906c |
+--------------------------------------+---------+------------------------+----------------------------------+
9.5.1.2創建實例
1.啓動實例:
用 provider 網絡ID替換 PROVIDER_NET_ID。
$ openstack server create --flavor m1.nano --image cirros \
  --nic net-id=PROVIDER_NET_ID --security-group default \
  --key-name mykey provider-instance

+--------------------------------------+-----------------------------------------------+
| Property                             | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          | nova                                          |
| OS-EXT-STS:power_state               | 0                                             |
| OS-EXT-STS:task_state                | scheduling                                    |
| OS-EXT-STS:vm_state                  | building                                      |
| OS-SRV-USG:launched_at               | -                                             |
| OS-SRV-USG:terminated_at             | -                                             |
| accessIPv4                           |                                               |
| accessIPv6                           |                                               |
| adminPass                            | hdF4LMQqC5PB                                  |
| config_drive                         |                                               |
| created                              | 2015-09-17T21:58:18Z                          |
| flavor                               | m1.nano                                       |
| hostId                               |                                               |
| id                                   | 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf          |
| image                                | cirros (38047887-61a7-41ea-9b49-27987d5e8bb9) |
| key_name                             | mykey                                         |
| metadata                             | {}                                            |
| name                                 | provider-instance                             |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| security_groups                      | default                                       |
| status                               | BUILD                                         |
| tenant_id                            | f5b2ccaa75ac413591f12fcaa096aa5c              |
| updated                              | 2015-09-17T21:58:18Z                          |
| user_id                              | 684286a9079845359882afc3aa5011fb              |
+--------------------------------------+-----------------------------------------------+
2.檢查實例狀態:
$ openstack server list

+--------------------------------------+-------------------+--------+------------------------+------------+
| ID                                   | Name              | Status | Networks               | Image Name |
+--------------------------------------+-------------------+--------+------------------------+------------+
| 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf | provider-instance | ACTIVE | provider=203.0.113.103 | cirros     |
+--------------------------------------+-------------------+--------+------------------------+------------+
創建成功後,實例狀態會由 BUILD 變成 ACTIVE。
9.5.1.3使用虛擬控制檯訪問實例
1.獲取VNC會話URL,以便於通過WEB瀏覽器訪問實例:
$ openstack console url show provider-instance

+-------+---------------------------------------------------------------------------------+
| Field | Value                                                                           |
+-------+---------------------------------------------------------------------------------+
| type  | novnc                                                                           |
| url   | http://controller:6080/vnc_auto.html?token=5eeccb47-525c-4918-ac2a-3ad1e9f1f493 |
+-------+---------------------------------------------------------------------------------+
註解
如果WEB瀏覽器所允許的主機不能解析 controller 主機名稱,可以用controller節點管理網的ip地址10.0.0.10替換 controller。即瀏覽器輸入:http://10.0.0.10:6080/vnc_auto.html?token=5eeccb47-525c-4918-ac2a-3ad1e9f1f493
CirrOS 鏡像包括傳統的用戶名/密碼認證方式,並需要在登錄提示中提供這些認證。登錄到CirrOS後,建議用命令 ping 驗證網絡是否互通。
2.檢驗是否可連接到provider物理網絡網關:
$ ping -c 4 203.0.113.1

PING 203.0.113.1 (203.0.113.1) 56(84) bytes of data.
64 bytes from 203.0.113.1: icmp_req=1 ttl=64 time=0.357 ms
64 bytes from 203.0.113.1: icmp_req=2 ttl=64 time=0.473 ms
64 bytes from 203.0.113.1: icmp_req=3 ttl=64 time=0.504 ms
64 bytes from 203.0.113.1: icmp_req=4 ttl=64 time=0.470 ms

--- 203.0.113.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms
3.檢查是否可連接到互聯網:
$ ping -c 4 openstack.org

PING openstack.org (174.143.194.225) 56(84) bytes of data.
64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms
64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms
64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms
64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms

--- openstack.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms
9.5.1.4遠程訪問實例
1. 驗證控制節點或者其他provider公網上的主機能否ping通實例:
$ ping -c 4 203.0.113.103

PING 203.0.113.103 (203.0.113.103) 56(84) bytes of data.
64 bytes from 203.0.113.103: icmp_req=1 ttl=63 time=3.18 ms
64 bytes from 203.0.113.103: icmp_req=2 ttl=63 time=0.981 ms
64 bytes from 203.0.113.103: icmp_req=3 ttl=63 time=1.06 ms
64 bytes from 203.0.113.103: icmp_req=4 ttl=63 time=0.929 ms

--- 203.0.113.103 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms
2. 驗證控制節點或者其他provider公網上的主機能否通過SSH訪問實例:
$ ssh [email protected]

The authenticity of host '203.0.113.102 (203.0.113.102)' can't be established.
RSA key fingerprint is ed:05:e9:e7:52:a0:ff:83:68:94:c7:d1:f2:f8:e2:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '203.0.113.102' (RSA) to the list of known hosts.

9.5.2在selfservice私網啓動實例
9.5.2.1檢查實例選項
啓動實例前,一定要指定實例類型、鏡像名稱、網絡、安全組、鍵值和實例名稱。
1.在控制節點,獲得 demo 憑證來獲取只有管理員能執行的命令的訪問權限:
$ . demo-openrc
2.實例類型包括分配虛擬資源策略,比如處理器、內存、存儲等。
查看可使用的實例類型:
$ openstack flavor list

+----+---------+-----+------+-----------+-------+-----------+
| ID | Name    | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+---------+-----+------+-----------+-------+-----------+
| 0  | m1.nano |  64 |    1 |         0 |     1 | True      |
+----+---------+-----+------+-----------+-------+-----------+
註解
可以用ID引用實例類型
3.查看可用鏡像:
$ openstack image list

+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 390eb5f7-8d49-41ec-95b7-68c0d5d54b34 | cirros | active |
+--------------------------------------+--------+--------+
實例使用 cirros 鏡像。
4.查看可用網絡:
$ openstack network list

+--------------------------------------+-------------+--------------------------------------+
| ID                                   | Name        | Subnets                              |
+--------------------------------------+-------------+--------------------------------------+
| 4716ddfe-6e60-40e7-b2a8-42e57bf3c31c | selfservice | 2112d5eb-f9d6-45fd-906e-7cabd38b7c7c |
| b5b6993c-ddf9-40e7-91d0-86806a42edb8 | provider    | 310911f6-acf0-4a47-824e-3032916582ff |
+--------------------------------------+-------------+--------------------------------------+
實例使用 selfservice 私網。注意要參考網絡使用的ID而非網絡名稱。
5.查看可用安全組:
$ openstack security group list

+--------------------------------------+---------+------------------------+
| ID                                   | Name    | Description            |
+--------------------------------------+---------+------------------------+
| dd2b614c-3dad-48ed-958b-b155a3b38515 | default | Default security group |
+--------------------------------------+---------+------------------------+
實例使用 default 默認安全組。
9.5.2.2創建實例
1.啓動實例
使用selfservice私網ID替換 SELFSERVICE_NET_ID。
$ openstack server create --flavor m1.nano --image cirros \
  --nic net-id=SELFSERVICE_NET_ID --security-group default \
  --key-name mykey selfservice-instance

+--------------------------------------+---------------------------------------+
| Field                                | Value                                 |
+--------------------------------------+---------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                |
| OS-EXT-AZ:availability_zone          |                                       |
| OS-EXT-STS:power_state               | 0                                     |
| OS-EXT-STS:task_state                | scheduling                           |
| OS-EXT-STS:vm_state                  | building                              |
| OS-SRV-USG:launched_at               | None                                  |
| OS-SRV-USG:terminated_at             | None                                 |
| accessIPv4                           |                                       |
| accessIPv6                           |                                       |
| addresses                            |                                       |
| adminPass                            | 7KTBYHSjEz7E                          |
| config_drive                         |                                       |
| created                              | 2016-02-26T14:52:37Z                  |
| flavor                               | m1.nano                               |
| hostId                               |                                       |
| id                                   | 113c5892-e58e-4093-88c7-e33f502eaaa4|
| image                                | cirros (390eb5f7-8d49-41ec-95b7-68c0d |
|                                      | 5d54b34)                              |
| key_name                             | mykey                                 |
| name                                 | selfservice-instance                  |
| os-extended-volumes:volumes_attached | []                                  |
| progress                             | 0                                     |
| project_id                           | ed0b60bf607743088218b0a533d5943f    |
| properties                           |                                       |
| security_groups                      | [{u'name': u'default'}]               |
| status                               | BUILD                                 |
| updated                              | 2016-02-26T14:52:38Z                  |
| user_id                              | 58126687cbcc4888bfa9ab73a2256f27    |
+--------------------------------------+---------------------------------------+
2.檢查實例狀態:
$ openstack server list

+--------------------------------------+----------------------+--------+------------------------+
| ID                                   | Name                 | Status | Networks               |
+--------------------------------------+----------------------+--------+------------------------+
| 113c5892-e58e-4093-88c7-e33f502eaaa4 | selfservice-instance | ACTIVE | selfservice=172.16.1.3 |
| 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf | provider-instance    | ACTIVE | provider=203.0.113.103 |
+--------------------------------------+----------------------+--------+------------------------+
創建成功後,實例狀態會由 BUILD 變成 ACTIVE。
9.5.2.3使用虛擬控制檯訪問實例
1.獲取VNC會話URL,以便於通過WEB瀏覽器訪問實例:
$ openstack console url show selfservice-instance

+-------+---------------------------------------------------------------------------------+
| Field | Value                                                                           |
+-------+---------------------------------------------------------------------------------+
| type  | novnc                                                                           |
| url   | http://controller:6080/vnc_auto.html?token=5eeccb47-525c-4918-ac2a-3ad1e9f1f493 |
+-------+---------------------------------------------------------------------------------+
註解
如果WEB瀏覽器所允許的主機不能解析 controller 主機名稱,可以用controller節點管理網的ip地址10.0.0.10替換 controller。即瀏覽器輸入:http://10.0.0.10:6080/vnc_auto.html?token=5eeccb47-525c-4918-ac2a-3ad1e9f1f493
CirrOS 鏡像包括傳統的用戶名/密碼認證方式,並需要在登錄提示中提供這些認證。登錄到CirrOS後,建議用命令 ping 驗證網絡是否互通。
2.檢查是否可連接到selfservice私網網關:
$ ping -c 4 172.16.1.1

PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_req=1 ttl=64 time=0.357 ms
64 bytes from 172.16.1.1: icmp_req=2 ttl=64 time=0.473 ms
64 bytes from 172.16.1.1: icmp_req=3 ttl=64 time=0.504 ms
64 bytes from 172.16.1.1: icmp_req=4 ttl=64 time=0.470 ms

--- 172.16.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms
3.檢查是否可訪問互聯網:
$ ping -c 4 openstack.org

PING openstack.org (174.143.194.225) 56(84) bytes of data.
64 bytes from 174.143.194.225: icmp_req=1 ttl=53 time=17.4 ms
64 bytes from 174.143.194.225: icmp_req=2 ttl=53 time=17.5 ms
64 bytes from 174.143.194.225: icmp_req=3 ttl=53 time=17.7 ms
64 bytes from 174.143.194.225: icmp_req=4 ttl=53 time=17.5 ms

--- openstack.org ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 17.431/17.575/17.734/0.143 ms
9.5.2.4遠程訪問實例
1.在provider公網上創建浮動IP地址:
$ openstack floating ip create provider

+-------------+--------------------------------------+
| Field       | Value                                |
+-------------+--------------------------------------+
| fixed_ip    | None                                 |
| id          | 3d05a9b1-b1af-4884-be1c-833a69744449 |
| instance_id | None                                 |
| ip          | 203.0.113.104                        |
| pool        | provider                             |
+-------------+--------------------------------------+
2.給實例分配浮動IP地址:
$ openstack server add floating ip selfservice-instance 203.0.113.104
註解
此命令沒有輸出。
3.檢查浮動IP地址狀態:
$ openstack server list

+--------------------------------------+----------------------+--------+---------------------------------------+
| ID                                   | Name                 | Status | Networks                              |
+--------------------------------------+----------------------+--------+---------------------------------------+
| 113c5892-e58e-4093-88c7-e33f502eaaa4 | selfservice-instance | ACTIVE | selfservice=172.16.1.3, 203.0.113.104 |
| 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf | provider-instance    | ACTIVE | provider=203.0.113.103                |
+--------------------------------------+----------------------+--------+---------------------------------------+
4.驗證控制節點或者其他provider公網上的主機能否通過浮動IP地址ping通實例:
$ ping -c 4 203.0.113.104

PING 203.0.113.104 (203.0.113.104) 56(84) bytes of data.
64 bytes from 203.0.113.104: icmp_req=1 ttl=63 time=3.18 ms
64 bytes from 203.0.113.104: icmp_req=2 ttl=63 time=0.981 ms
64 bytes from 203.0.113.104: icmp_req=3 ttl=63 time=1.06 ms
64 bytes from 203.0.113.104: icmp_req=4 ttl=63 time=0.929 ms

--- 203.0.113.104 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms
5. 驗證控制節點或者其他provider公網上的主機能否通過SSH訪問實例:
$ ssh [email protected]

The authenticity of host '203.0.113.104 (203.0.113.104)' can't be established.
RSA key fingerprint is ed:05:e9:e7:52:a0:ff:83:68:94:c7:d1:f2:f8:e2:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '203.0.113.104' (RSA) to the list of known hosts.

OpenStack官網鏡像指南:https://docs.openstack.org/image-guide/

 
OpenStack官網鏡像指南:https://docs.openstack.org/image-guide/

如有不明之處,歡迎留言提問。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章