1. 程式人生 > >OpenStack Queens版搭建詳解

OpenStack Queens版搭建詳解

1.基礎環境配置

1.1 節點硬體規劃

本次搭建使用VMware Workstation虛擬出3臺CentOS7虛擬機器作為主機節點,節點架構:1個controller控制節點、1個compute計算節點、1個cinder塊儲存節點。硬體配置具體如下:

節點名稱 CPU 記憶體 磁碟 作業系統映象
controller節點 2VCPU 4GB 50GB CentOS-7-x86_64-Minimal-1804.iso
compute1節點 2VCPU 4GB 50GB CentOS-7-x86_64-Minimal-1804.iso
cinder1節點 2VCPU 4GB 50GB系統盤,50GB儲存盤 CentOS-7-x86_64-Minimal-1804.iso

說明:硬體規劃可以根據自己需求靈活調整,這裡使用CentOS-7-x86_64-Minimal-1804,minimal版佔用資源更少,下載地址:https://www.centos.org/

Vmware Workstation虛擬機器開啟虛擬化引擎:


這裡寫圖片描述
檢視作業系統及核心版本:

[root@controller ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)
[root@controller ~]# uname -sr
Linux 4.16.11-1.el7.elrepo.x86_64

1.2 節點網路規劃

本次搭建網路使用linuxbridge+vxlan模式,包含三個網路平面:管理網路,外部網路和租戶隧道網路,具體規劃如下:

節點名稱 網絡卡編號 網絡卡名稱 網絡卡模式 虛擬交換機 網路型別 IP地址 閘道器
controller節點 網絡卡1 ens33 僅主機模式 vmnet1 管理網路 192.168.90.70
網絡卡2 ens37 僅主機模式 vmnet2 隧道網路 192.168.91.70
網絡卡3 ens38 NAT模式 vmnet8 外部網路 192.168.92.70 192.168.92.2/24
compute1節點 網絡卡1 ens33 僅主機模式 vmnet1 管理網路 192.168.90.71
網絡卡2 ens37 僅主機模式 vmnet2 隧道網路 192.168.91.71
網絡卡3 ens38 NAT模式 vmnet8 部署網路 192.168.92.71 192.168.92.2/24
cinder1節點 網絡卡1 ens33 僅主機模式 vmnet1 管理網路 192.168.90.72
網絡卡2 ens37 NAT模式 vmnet8 部署網路 192.168.92.72 192.168.92.2/24

VMware Workstation虛擬網路編輯器配置資訊,這裡新建立VMnet2作為隧道網路:
這裡寫圖片描述
網路規劃說明:

  • 控制節點3塊網絡卡,計算節點3塊網絡卡,儲存節點2塊網絡卡。特別注意,計算節點和儲存節點的最後一塊網絡卡僅用於連線網際網路部署Oenstack軟體包,如果搭建有本地yum源,這兩塊網絡卡是不需要的,不屬於openstack架構體系中的網路。
  • 管理網路配置為僅主機模式,官方解釋通過管理網路訪問網際網路安裝軟體包,如果搭建的有內部yum源,管理網路是不需要訪問網際網路的,配置成hostonly模式也可以。
  • 隧道網路配置為僅主機模式,因為隧道網路不需要訪問網際網路,僅用來承載openstack內部租戶的網路流量。
  • 外部網路配置為NAT模式,控制節點的外部網路主要是實現openstack租戶網路對外網的訪問,另外openstack軟體包的部署安裝也走這個網路,
  • 特別注意:計算節點和儲存節點的外部網路僅用來部署openstack軟體包,沒有其他用途。

三種網路平面說明:

  • 管理網路(management/API網路):
    提供系統管理相關功能,用於節點之間各服務元件內部通訊以及對資料庫服務的訪問,所有節點都需要連線到管理網路,這裡管理網路也承載了API網路的流量,將API網路和管理網絡合並,OpenStack各元件通過API網路向用戶暴露API服務。
  • 隧道網路(tunnel網路或self-service網路):
    提供租戶虛擬網路的承載網路(VXLAN or GRE)。openstack裡面使用gre或者vxlan模式,需要有隧道網路;隧道網路採用了點到點通訊協議代替了交換連線,在openstack裡,這個tunnel就是虛擬機器走網路資料流量用的。這個網路所承載的網路和官方文件Networking Option 2: Self-service networks相對應。

  • 外部網路(external網路或者provider網路):
    openstack網路至少要包括一個外部網路,這個網路能夠訪問OpenStack安裝環境之外的網路,並且非openstack環境中的裝置能夠訪問openstack外部網路的某個IP。另外外部網路為OpenStack環境中的虛擬機器提供浮動IP,實現openstack外部網路對內部虛擬機器例項的訪問。這個網路和官方文件Networking Option 1: Provider networks相對應。

  • 注意,這裡沒有規劃儲存平面網路,cinder儲存節點使用管理網路承載儲存網路資料。

本次搭建Openstack網路結構圖:
這裡寫圖片描述
本次搭建環境整體網路圖:
這裡寫圖片描述
搭建完成後的內部網路圖:
這裡寫圖片描述

這裡寫圖片描述

1.3 關閉防火牆

1.關閉selinux

# sed -i 's/enforcing/disabled/g' /etc/selinux/config
# setenforce 0

2.關閉firewalld防火牆

# systemctl stop firewalld.service && systemctl disable firewalld.service
# firewall-cmd --state  #檢視是否關閉

1.4 配置yum源

以下操作在所有節點執行

配置國內阿里雲yum源以獲取更快的下載速度:

1.備份CentOS官方源:

# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下載阿里雲yum源:

# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.測試yum源是否正常

# yum clean all && yum makecache

也可以搭建本地yum源,參考連結:https://blog.csdn.net/networken/article/details/80729234

1.5 配置節點IP

1.控制節點網路配置:

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens33
ONBOOT=yes
#####################
IPADDR=192.168.90.70
PREFIX=24
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens37
ONBOOT=yes
#####################
IPADDR=192.168.91.70
PREFIX=24
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens38
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens38
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens38
ONBOOT=yes
#####################
IPADDR=192.168.92.70
PREFIX=24
GATEWAY=192.168.92.2
DNS1=114.114.114.114
DNS2=1.1.1.1

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:cb:a5:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.90.70/24 brd 192.168.90.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::2801:f5c2:4e5a:d003/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:cb:a5:23 brd ff:ff:ff:ff:ff:ff
    inet 192.168.91.70/24 brd 192.168.91.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::8af8:8b5c:793f:e719/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:cb:a5:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.92.70/24 brd 192.168.92.255 scope global noprefixroute ens38
       valid_lft forever preferred_lft forever
    inet6 fe80::e8d3:6442:89c0:cd4a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

2.計算節點網路配置:

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens33
ONBOOT=yes
#####################
IPADDR=192.168.90.71
PREFIX=24
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens37
ONBOOT=yes
#####################
IPADDR=192.168.91.71
PREFIX=24
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens38
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens38
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens38
ONBOOT=yes
#####################
IPADDR=192.168.92.71
PREFIX=24
GATEWAY=192.168.92.2
DNS1=114.114.114.114
DNS2=1.1.1.1

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c7:ba:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.90.71/24 brd 192.168.90.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ffb5:9b12:f911:89ec/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::b01a:e132:1923:175/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
    inet6 fe80::2801:f5c2:4e5a:d003/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c7:ba:a5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.91.71/24 brd 192.168.91.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::e8fe:eea6:f4f:2d85/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::8af8:8b5c:793f:e719/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:c7:ba:af brd ff:ff:ff:ff:ff:ff
    inet 192.168.92.71/24 brd 192.168.92.255 scope global noprefixroute ens38
       valid_lft forever preferred_lft forever
    inet6 fe80::e64:a89f:4312:ea34/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::e8d3:6442:89c0:cd4a/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever

3.儲存節點網路配置:

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens33
ONBOOT=yes
#####################
IPADDR=192.168.90.72
PREFIX=24
[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
#UUID=162a12c5-b271-4a13-865e-0fdb876e64b8
DEVICE=ens37
ONBOOT=yes
#####################
IPADDR=192.168.92.72
PREFIX=24
GATEWAY=192.168.92.2
DNS1=114.114.114.114
DNS2=1.1.1.1

[[email protected] ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:97:4f:52 brd ff:ff:ff:ff:ff:ff
    inet 192.168.90.72/24 brd 192.168.90.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::b01a:e132:1923:175/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::2801:f5c2:4e5a:d003/64 scope link tentative noprefixroute dadfailed 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:97:4f:5c brd ff:ff:ff:ff:ff:ff
    inet 192.168.92.72/24 brd 192.168.92.255 scope global noprefixroute ens37
       valid_lft forever preferred_lft forever
    inet6 fe80::8af8:8b5c:793f:e719/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

4.驗證網路是否正常:

[root@controller ~]# ping –c 4 openstack.org  #控制節點訪問網際網路
[root@compute1 ~]# ping –c 4 openstack.org    #計算節點訪問網際網路
[root@cinder1 ~]# ping –c 4 openstack.org     #儲存節點訪問網際網路
[root@controller ~]# ping –c 4 192.168.90.71  #訪問計算節點管理網路
[root@controller ~]# ping –c 4 192.168.91.71  #訪問計算節點隧道網路
[root@controller ~]# ping –c 4 192.168.92.71  #訪問計算節點外部網路

1.6 配置主機名

控制節點執行:

[root@localhost ~]# hostnamectl set-hostname controller

計算節點執行:

[root@localhost ~]# hostnamectl set-hostname compute1

儲存節點執行:

[root@localhost ~]# hostnamectl set-hostname cinder1

所有節點執行,登出賬號重新登入,驗證主機名是否配置成功:

[root@localhost ~]# exit

1.7 配置主機名解析

所有節點執行,配置相同,注意這裡使用管理網路IP地址:

[[email protected] ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
# controller
192.168.90.70 controller
# compute1
192.168.90.71 compute1
#cinder1
192.168.90.72 cinder1

2.驗證主機名解析是否正常:

ping計算節點:

[[email protected] ~]# ping -c 4 compute1
PING compute1 (190.168.90.71) 56(84) bytes of data.
64 bytes from compute1 (190.168.90.71): icmp_seq=1 ttl=64 time=0.301 ms
64 bytes from compute1 (190.168.90.71): icmp_seq=2 ttl=64 time=0.990 ms
64 bytes from compute1 (190.168.90.71): icmp_seq=3 ttl=64 time=0.376 ms
64 bytes from compute1 (190.168.90.71): icmp_seq=4 ttl=64 time=0.321 ms

--- compute1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3102ms
rtt min/avg/max/mdev = 0.301/0.497/0.990/0.285 ms

ping儲存節點:

[[email protected] ~]# ping -c 4 cinder1
PING cinder1 (190.168.90.72) 56(84) bytes of data.
64 bytes from cinder1 (190.168.90.72): icmp_seq=1 ttl=64 time=0.262 ms
64 bytes from cinder1 (190.168.90.72): icmp_seq=2 ttl=64 time=0.388 ms
64 bytes from cinder1 (190.168.90.72): icmp_seq=3 ttl=64 time=1.11 ms
64 bytes from cinder1 (190.168.90.72): icmp_seq=4 ttl=64 time=0.796 ms

--- cinder1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3057ms
rtt min/avg/max/mdev = 0.262/0.640/1.115/0.338 ms

1.8 配置NTP服務

以下在控制節點進行配置

1.安裝軟體包:

[root@controller ~]# yum install chrony

2.修改配置檔案:

[root@controller ~]# vim /etc/chrony.conf
allow 192.168.0.0/16  去掉註釋,允許其他節點網段同步時間,請配置為對應網段

3.重啟服務並加入開機啟動項:

[root@controller ~]# systemctl enable chronyd.service && systemctl start chronyd.service

4檢視時間同步狀態:
MS列中包含^*的行,指明NTP服務當前同步的伺服器。當前同步的源為time5.aliyun.com:

[[email protected] ~]# chronyc sources      
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^? 85.199.214.101                1   6     3    36    -24ms[  -24ms] +/-  114ms
^* time5.aliyun.com              2   6    77    37  +4343us[  +22ms] +/-   43ms
^- ntp1.ams1.nl.leaseweb.net     2   6    77    35    -43ms[  -43ms] +/-  367ms
^? ntp.de.fdw.no                 0   8     0     -     +0ns[   +0ns] +/-    0ns

5.檢視當前時間是否準確,其中NTP synchronized: yes說明同步成功

[root@controller ~]# timedatectl 
      Local time: Fri 2018-06-08 10:36:39 CST
  Universal time: Fri 2018-06-08 8:36:39 UTC
        RTC time: Fri 2018-06-08 8:36:39
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

以下在計算節點進行配置:

1.安裝軟體包:

[root@compute1 ~]# yum install chrony

2.修改配置檔案,使計算節點與控制節點同步時間:

[root@compute1 ~]# vim /etc/chrony.conf   #註釋3-6行,並增加第7行內容
  1 # Use public servers from the pool.ntp.org project.
  2 # Please consider joining the pool (http://www.pool.ntp.org/join.html).
  3 #server 0.centos.pool.ntp.org iburst
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server 192.168.92.70 iburst

3.重啟服務並設定開機啟動

[root@compute1 ~]# systemctl enable chronyd.service && systemctl start chronyd.service

4.檢視時間同步狀態,當前同步的源為controller

[root@compute1 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               

^* controller                    3   6   377    21  +7732us[+9937us] +/-   24ms

5.檢視時間是否與控制節點一致

[root@compute1 ~]# timedatectl
      Local time: Sat 2018-06-09 10:09:32 CST
  Universal time: Fri 2018-06-08 8:09:32 UTC
        RTC time: Fri 2018-06-08 8:09:32
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

儲存節點配置同計算節點,這裡省略

NTP的其他操作命令:

# timedatectl set-ntp yes                 #啟用ntp同步服務
# timedatectl set-timezone Asia/Shanghai  #設定時區
# yum install –y ntpdate                  #安裝時間同步工具
# ntpdate 0.centos.pool.ntp.org           #強制與網路NTP伺服器同步時間
# ntpdate 192.168.92.70                   #強制與控制節點同步時間

注意:各個節點時間不同步後續可能出現各種問題,建議配置準確在進行後續操作。

2.安裝基礎軟體包

2.1 安裝OpenStack軟體包

以下操作在所有節點執行

1.啟用OpenStack儲存庫,安裝queens版本的儲存庫

# yum install centos-release-openstack-queens

2.升級所有軟體包,如果升級後核心更新,請重啟節點啟用新核心。

# yum upgrade

3.安裝openstack客戶端

# yum install python-openstackclient

4.安裝 openstack-selinux軟體包以自動管理OpenStack服務的安全策略:

# yum install openstack-selinux

2.2 安裝mariadb資料庫

以下操作在控制節點執行

大多數OpenStack服務使用SQL資料庫來儲存資訊。資料庫通常在控制器節點上執行。本次搭建使用MariaDB資料庫, OpenStack服務還支援其他SQL資料庫,包括 PostgreSQL等。

1.安裝軟體包

# yum install mariadb mariadb-server python2-PyMySQL

2.建立並編輯/etc/my.cnf.d/openstack.cnf檔案並完成以下操作:

配置以下內容, bind-address設定為控制節點的管理IP地址,以使其他節點能夠通過管理網路進行訪問:

[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf    
[mysqld]
bind-address = 192.168.90.70
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

3.啟動資料庫服務並設定服務開機啟動:

# systemctl start mariadb.service && systemctl enable mariadb.service 

4.執行mysql_secure_installation 指令碼初始化資料庫服務,併為資料庫root帳戶設定密碼(這裡設為123456):

[root@controller ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

2.3 安裝RabbitMQ訊息佇列

以下在控制節點執行

OpenStack使用訊息佇列(Message queue)來協調服務之間的操作和狀態資訊,訊息佇列服務通常在控制節點上執行,OpenStack支援多種訊息佇列服務,包括RabbitMQ, Qpid和ZeroMQ。

1.安裝軟體包:

# yum install rabbitmq-server

2.啟動訊息佇列服務並設定服務開機啟動

# systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service

3.新增openstack 使用者,並設定密碼,這裡設定為123456

# rabbitmqctl add_user openstack 123456

4.為openstack使用者增加配置、讀取及寫入相關許可權

# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...

2.4 安裝Memcached快取資料庫

以下在控制節點執行

身份認證服務使用Memcached快取令牌,memcached服務通常在控制節點上執行。
1.安裝軟體包

# yum install memcached python-memcached

2.編輯/etc/sysconfig/memcached檔案並完成以下操作:
使用控制節點的管理IP地址配置服務。這使其他節點能夠通過管理網路進行訪問:

[root@controller ~]# vim  /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.90.70,::1"    #增加一行

3.啟動Memcached服務並將其配置為在系統引導時啟動:

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

2.5 安裝Etcd服務

以下操作在控制節點執行

OpenStack服務可能使用Etcd,這是一個可靠的分散式鍵值儲存,用於分散式金鑰鎖定,儲存配置,跟蹤服務的實時性和其他場景。
1.安裝軟體包

[root@controller ~]# yum install etcd

2.編輯/etc/etcd/etcd.conf檔案,以控制節點管理IP地址設定相關選項,以使其他節點通過管理網路進行訪問

[root@controller ~]# vim /etc/etcd/etcd.conf
#[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.90.70:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.90.70:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="controller"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.90.70:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.90.70:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="controller=http://192.168.90.70:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"

3.啟動etcd服務並設為開機啟動:

[root@controller ~]# systemctl enable etcd && systemctl start etcd

3 安裝OpenStack服務

1.Openstack Queens部署時至少需要安裝以下服務,按照下面指定的順序安裝服務:

  • 認證服務(Identity service)– keystone installation for Queens

  • 映象服務(Image service)– glance installation for Queens

  • 計算服務(Compute service)– nova installation for Queens
  • 網路服務(Networking service)– neutron installation for Queens

2.我們建議在最小部署以上服務後也安裝以下元件:

  • 儀表盤(Dashboard)– horizon installation for Queens
  • 塊儲存服務(Block Storage service)– cinder installation for Queens

3.1 安裝keystone服務

以下在控制節點執行

本節描述如何在控制節點上安裝和配置OpenStack身份認證服務,即稱為keystone。出於可擴充套件性的目的,此配置部署了Fernet tokens和Apache HTTP伺服器來處理請求。

3.1.1 認證服務概述

 OpenStack認證服務提供單一的整合點,用於管理身份驗證、授權和服務目錄。
 認證服務通常是使用者與之互動的第一個服務。一旦經過身份驗證,終端使用者可以使用其身份來訪問其他OpenStack服務。同樣,其他OpenStack服務利用認證服務來確保使用者是他們本人,並且發現部署中的其他服務在哪裡。認證服務還可以與一些外部使用者管理系統(如LDAP)整合。
 使用者和服務可以通過使用由認證服務管理的服務目錄來定位其他服務。顧名思義,服務目錄是OpenStack部署中可用服務的集合。每個服務可以有一個或多個端點,每個端點可以是三種類型之一:管理員、內部或公共。在生產環境中,出於安全原因,不同的端點型別可能駐留在暴露給不同型別使用者的單獨網路上。例如,公共API網路可能從因特網上可見,因此客戶可以管理他們的雲。管理API網路可能侷限於管理雲基礎設施的組織內的操作員。內部API網路可能侷限於包含OpenStack服務的主機。此外,OpenStack支援多個區域的可擴充套件性。為了簡單起見,本指南使用管理網路來實現所有端點型別和預設的TrimOne區域。在認證服務中建立的區域、服務和端點一起構成部署的服務目錄。部署中的每個OpenStack服務需要一個服務條目,其中儲存在標識服務中的相應端點。這一切都可以在認證服務安裝和配置之後完成。
認證服務包含這些元件:
Server
一箇中央伺服器使用RESTful介面提供認證和授權服務。
Drivers
驅動程式或服務後端整合到中央伺服器。它們用於訪問OpenStack外部的庫中的身份資訊,並且可能已經存在於部署OpenStack的基礎設施中(例如,SQL資料庫或LDAP伺服器)。
Modules
中介軟體模組執行在使用認證服務的OpenStack元件的地址空間中。這些模組攔截服務請求,提取使用者憑據,並將其傳送到集中式伺服器進行授權。中介軟體模組和OpenStack元件之間的整合使用Python Web伺服器閘道器介面。

3.1.2 安裝和配置keystone

建立keystone資料庫

1.以root使用者連線到資料庫伺服器:

$ mysql -u root -p

2.建立keystone資料庫:

MariaDB [(none)]> CREATE DATABASE keystone;

3.授予keystone資料庫適當的訪問許可權:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY '123456';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY '123456';

注意:這裡密碼設定為123456

安裝和配置keystone元件

1.安裝軟體包

# yum install openstack-keystone httpd mod_wsgi

2.編輯並修改/etc/keystone/keystone.conf配置檔案

[root@controller ~]# vim /etc/keystone/keystone.conf

在 [database]部分, 配置資料庫訪問許可權:

[database]
# ...
connection = mysql+pymysql://keystone:[email protected]/keystone

注意這裡的密碼為123456

在[token] 部分, 配置Fernet token provider

[token]
# ...
provider = fernet

3.同步認證服務資料庫:

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

4.初始化Fernet key庫:

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

5.引導身份認證服務:

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

替換ADMIN_PASS為管理使用者的合適密碼,這裡為123456

配置apache http服務

1.編輯/etc/httpd/conf/httpd.conf檔案並配置ServerName選項以引用控制節點:

[root@controller ~]# vim /etc/httpd/conf/httpd.conf
ServerName controller

2.建立到/usr/share/keystone/wsgi-keystone.conf檔案的連結:

[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

3.