OpenStack搭建


一、Openstack服務通用安裝步驟:

a、數據庫創庫授權

b、在keystone創建系統用戶關聯角色

c、在keystone上創建服務,注冊api

d、安裝相應服務軟件包

e、修改相應服務的配置文件

f、同步數據庫

g、啟動服務

二、Openstack搭建

第一次搭建的時候控制節點IP是:192.168.0.110;;計算節點IP是192.168.0.108

1、時間同步

控制節點:把控制節點變成一個時間同步服務器,其他節點都去和控制節點同步

yum install chrony

allow 192.168.0.0/24

控制節點沒有配成時間同步服務器的時候只監聽323,變成服務同步器的時候監聽123和323

計算節點配置chrony服務,配置時間同步服務為控制節點的IP

2、openstack包安裝--openstack包安裝需要有openstack相應的源

在CentOS中, ``extras``倉庫提供用於啟用 OpenStack 倉庫的RPM包。 CentOS 默認啟用``extras``倉庫,因此你可以直接安裝用於啟用OpenStack倉庫的包

這是本地已經上傳好的源(openstack_rpm.tar.gz和local源),不用執行yum了。或者centos安裝centos_base源要更新到最新和epel源再yum

yum install centos-release-openstack-mitaka(openstack源-Mitaka版)(https://mirrors.aliyun.com/centos/7.8.2003/extras/x86_64/Packages/在這可以找到相應的rpm源包,這里有R版\q版\k\o版)或yum install centos-release-openstack-rocky(openstack-R版),安裝完之后會生成幾個倉庫文件,倉庫文件指向7.6.1810/cloud//x86_64/各個版本/所有openstack軟件所有安裝包

本地源:

root@compute1 opt]# mount /dev/cdrom /mnt/
上傳openstack_rpm到opt目錄下,並解壓
echo '[local]
name=local
baseurl=file:///mnt
gpgcheck=0
[openstack]
name=openstack
baseurl=file:///opt/repo
gpgcheck=0' >/etc/yum.repos.d/local.repo

yum makecache
echo 'mount /dev/cdrom /mnt'  >>/etc/rc.local  配置自動掛盤
chmod +x /etc/rc.local 

yum安裝openstack源:--本次我們采用本地源,不采用yum安裝源方式

https://vault.centos.org/7.6.1810/extras/x86_64/Packages/

yum -y install https://vault.centos.org/7.6.1810/extras/x86_64/Packages/centos-release-openstack-rocky-1-1.el7.centos.noarch.rpm

 

控制節點計算所有節點都要執行:yum install python-openstackclient openstack-selinux

安裝 OpenStack 客戶端:RHEL 和 CentOS 默認啟用了 SELinux . 安裝 openstack-selinux 軟件包以便自動管理 OpenStack 服務的安全策略

3、安裝數據庫 

大多數 OpenStack 服務使用 SQL 數據庫來存儲信息。 典型地,數據庫運行在控制節點上

控制節點:yum install mariadb mariadb-server python2-PyMySQL -y

創建並編輯 /etc/my.cnf.d/openstack.cnf,然后完成如下動作:

在 [mysqld] 部分,設置 ``bind-address``值為控制節點的管理網絡IP地址以使得其它節點可以通過管理網絡訪問數據庫:

在``[mysqld]`` 部分,設置如下鍵值來啟用一起有用的選項和 UTF-8 字符集:

啟動數據庫服務,並將其配置為開機自啟:

為了保證數據庫服務的安全性,運行``mysql_secure_installation``腳本。特別需要說明的是,為數據庫的root用戶設置一個適當的密碼。

4、消息隊列

OpenStack 使用 message queue 協調操作和各服務的狀態信息。消息隊列服務一般運行在控制節點上,大多數發行版本的OpenStack包支持特定的消息隊列服務。本安裝 RabbitMQ 消息隊列服務,因為大部分發行版本都支持它。

yum install rabbitmq-server -y

啟動消息隊列服務並將其配置為隨系統啟動:

systemctl enable rabbitmq-server.service

systemctl start rabbitmq-server.service

* unable to connect to epmd (port 4369) on controller: address (cannot connect to host/port)

添加 openstack 用戶:用戶是openstack,密碼是RABBIT_PASS

rabbitmqctl add_user openstack RABBIT_PASS

給``openstack``用戶配置寫和讀權限:

 

[root@controller ~]# rabbitmqctl list_users  查看當前用戶列表 

 

[root@controller ~]# rabbitmqctl  list_user_permissions openstack 查看用戶權限

[root@controller ~]# rabbitmq-plugins enable rabbitmq_management 開啟rabbitmq的web界面,來監控rabbitmq的運行狀態

5、安裝memcache

認證服務認證緩存使用Memcached緩存令牌。緩存服務memecached運行在控制節點

yum install memcached python-memcached -y

[root@controller ~]# sed -i 's#127.0.0.1#192.168.0.110#g' /etc/sysconfig/memcached

[root@controller ~]# systemctl enable memcached.service

[root@controller ~]#systemctl start memcached.service

6、安裝keystone

控制節點上安裝和配置OpenStack身份認證服務,keystone為認證管理,授權管理和服務目錄服務管理提供單點整合

認證:賬號管理,openstack所有用戶,都是在keystone上注冊的

授權:glance、Nova、neutron、cinder等其他服務都統一使用keystone的賬號管理,類似很多網站支持qq登錄

服務目錄:每增加一個服務,都需要在keystone上做注冊登記,用戶通過keystone可以知道那有哪些服務,這些服務的URL是什么,用戶就可以直接訪問這些服務了。

在你配置 OpenStack 身份認證服務前,你必須創建一個數據庫和管理員令牌。

用數據庫連接客戶端以 root 用戶連接到數據庫服務器:mysql -u root –p

創建 keystone 數據庫:CREATE DATABASE keystone;

對``keystone``數據庫授予恰當的權限:

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost'  IDENTIFIED BY 'KEYSTONE_DBPASS';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'   IDENTIFIED BY 'KEYSTONE_DBPASS';

教程使用帶有``mod_wsgi``的Apache HTTP服務器來服務認證服務請求,端口為5000和35357。缺省情況下,Kestone服務仍然監聽這些端口。然而,本教程手動禁用keystone服務。

安裝包:[root@controller ~]#yum install openstack-keystone httpd mod_wsgi -y

編輯文件 /etc/keystone/keystone.conf 並完成如下動作:

[root@controller ~]#cp /etc/keystone/keystone.conf{,.bak}

[root@controller ~]# grep -Ev '^$|#' /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf

在``[DEFAULT]``部分,定義初始管理令牌的值:

admin_token = ADMIN_TOKEN(生成一個隨機值在初始的配置中作為管理員的令牌。使用這個openssl rand -hex 10,也可以使用這個不變)

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

connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone將``KEYSTONE_DBPASS``替換為你為數據庫選擇的密碼

mysql+pymysql://這是個協議

keystone:KEYSTONE_DBPASS訪問數據庫的賬號和密碼

controller/keystone訪問哪台主機的哪個庫,由於keystone部署在controller節點,所以就是訪問controller節點下的keystone庫。默認端口3306

在``[token]``部分,配置Fernet UUID令牌的提供者。

[token]

provider = fernet,提供token的方案,加密算法

 

以上改配置是手動進vim改的。接下來自動配置相關參數,先安裝自動配置工具

yum -y install openstack-utils

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf database connection  mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

[root@controller ~]# openstack-config --set /etc/keystone/keystone.conf token provider  fernet

MD5校驗配置文件和手動配置的md5一樣,說明自動配置結果一樣

初始化身份認證服務的數據庫: 以keystone用戶執行keystone-manage db_sync

[root@controller ~] su -s /bin/sh -c "keystone-manage db_sync" keystone,進入數據如果有很多表說明同步成功

su代表切換用戶;=s /bin/sh表指定了指定了一個shell; -c "keystone-manage db_sync"代表切換用戶后在數據庫中執行的命令;keystone代表切換到哪個用戶

以keystone的身份在shell中執行keystone-manage db_sync

初始化Fernet keys:

[root@controller ~]keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

配置 Apache HTTP 服務器

編輯``/etc/httpd/conf/httpd.conf`` 文件,配置``ServerName`` 選項為控制節點:

[root@controller ~]# echo "ServerName controller" >> /etc/httpd/conf/httpd.conf

用下面的內容創建文件 /etc/httpd/conf.d/wsgi-keystone.conf

Listen 5000
Listen 35357 
<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined 
    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined
    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

啟動 Apache HTTP 服務並配置其隨系統啟動:
# systemctl enable httpd.service
# systemctl start httpd.service

創建服務和注冊api

身份認證服務提供服務的目錄和他們的位置。每個你添加到OpenStack環境中的服務在目錄中需要一個 service 實體和一些 API endpoints

你必須使用``–os-token``參數將認證令牌的值傳遞給:command:openstack 命令。類似的,你必須使用``–os-url`` 參數將身份認證服務的 URL傳遞給 openstack 命令或者設置OS_URL環境變量。配置認證令牌:export OS_TOKEN=ADMIN_TOKEN這個和前面default下配的一樣

配置端點URL:export OS_URL=http://controller:35357/v3

配置認證 API 版本:export OS_IDENTITY_API_VERSION=3

創建服務實體和身份認證服務:openstack service create --name keystone --description "OpenStack Identity" identity(類型,ID,身份認證)

創建認證服務的 API 端點:

openstack endpoint create --region RegionOne  identity public http://controller:5000/v3  public是所有人都可以用的api接口

openstack endpoint create --region RegionOne  identity internal http://controller:5000/v3  internal是內部使用的(glance、neutron、cinder等 )

openstack endpoint create --region RegionOne  identity admin http://controller:35357/v3   admin是管理員使用的

創建域、用戶、項目和角色

身份認證服務為每個OpenStack服務提供認證服務。認證服務使用 T domains, projects (tenants), :term:`users<user>`和 :term:`roles<role>`的組合。

創建域``default``:openstack domain create --description "Default Domain" default

創建 admin 項目:openstack project create --domain default --description "Admin Project" admin

創建 admin 用戶:openstack user create --domain default  --password ADMIN_PASS admin

創建 admin 角色:openstack role create admin

查看用戶:openstack user list;openstack user show ID

添加``admin`` 角色到 admin 項目和用戶上(關聯項目、用戶、角色):openstack role add --project admin --user admin admin(角色)

在admin項目上,給admin用戶賦予admin角色

 添加到你的環境中每個服務包含獨有用戶的service 項目。創建``service``項目:openstack project create --domain default \

  --description "Service Project" service 創建service項目是為了nova\glance用戶都屬於一個項目,到時候把他們放到service項目,剛才設置變量是臨時有效,退出xshell失效。

export OS_TOKEN=ADMIN_TOKEN

export OS_URL=http://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

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 --os-password ADMIN_PASS user list

 

unset OS_TOKEN OS_URL   --查看token不要這兩個變量,否則會出現'NoneType' object has no attribute 'service_catalog'

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 --os-password ADMIN_PASS token issue

每次執行那么麻煩,導入環境變量

cat>> admin-openrc << EOF

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

EOF

[root@controller ~]# openstack token issue 能獲取到token,keystone就安裝OK

 7、安裝glance鏡像服務

先執行source admin-openrc導入環境變量,后期直接用openstack命令

安裝在控制節點:鏡像服務 (glance) 允許用戶發現、注冊和獲取虛擬機鏡像。它提供了一個 REST API,允許您查詢虛擬機鏡像的 metadata 並獲取一個現存的鏡像。

OpenStack鏡像服務包括以下組件:

glance-api:接收鏡像API的調用,諸如鏡像發現、恢復、存儲。

glance-registry:存儲、處理和恢復鏡像的元數據,元數據包括項諸如大小和類型。

安裝和配置鏡像服務之前,你必須創建創建一個數據庫、服務憑證和API端點

a、數據庫創庫授權

用數據庫連接客戶端以 root 用戶連接到數據庫服務器:mysql -u root -p 密碼為空直接回車

創建 glance 數據庫:CREATE DATABASE glance;

對``glance``數據庫授予恰當的權限:

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost'  IDENTIFIED BY 'GLANCE_DBPASS';

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%'  IDENTIFIED BY 'GLANCE_DBPASS';

b、在keystone創建系統用戶關聯角色

創建 glance 用戶:openstack user create --domain default --password GLANCE_PASS glance

添加 admin 角色到 glance 用戶和 service 項目上。openstack role add --project service --user glance admin 在service項目上給glance用戶授權admin的角色

c、在keystone上創建服務,注冊api

創建``glance``服務實體:openstack service create --name glance   --description "OpenStack Image" image

創建鏡像服務的 API 端點:

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

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

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

d、安裝相應服務軟件包

安裝軟件包: yum install openstack-glance -y

e、修改相應服務的配置文件

[root@controller ~]# cp  /etc/glance/glance-api.conf{,.bak}

[root@controller ~]# grep -Ev '^$|#' /etc/glance/glance-api.conf.bak >/etc/glance/glance-api.conf

在 [database] 部分,配置數據庫訪問:將``GLANCE_DBPASS`` 替換為你為鏡像服務設置的密碼

connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

在 [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_store] 部分,配置本地文件系統存儲和鏡像文件位置:[glance_store]

...

stores = file,http

default_store = file

filesystem_store_datadir = /var/lib/glance/images/

用openstack-config更改上面的配置

openstack-config --set /etc/glance/glance-api.conf  database connection mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken auth_type password

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken project_domain_name default

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken user_domain_name default

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken project_name service

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken username glance

openstack-config --set /etc/glance/glance-api.conf  keystone_authtoken password GLANCE_PASS

openstack-config --set /etc/glance/glance-api.conf  paste_deploy flavor keystone

openstack-config --set /etc/glance/glance-api.conf  glance_store stores file,http

openstack-config --set /etc/glance/glance-api.conf  glance_store default_store file

openstack-config --set /etc/glance/glance-api.conf  glance_store filesystem_store_datadir /var/lib/glance/images/

編輯文件 ``/etc/glance/glance-registry.conf``並完成如下動作:

在 [database] 部分,配置數據庫訪問:將``GLANCE_DBPASS`` 替換為你為鏡像服務設置的密碼

[database]

connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

在 [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

[root@controller ~]# cp /etc/glance/glance-registry.conf{,.bak}

[root@controller ~]# grep -Ev '^$|#' /etc/glance/glance-registry.conf.bak >/etc/glance/glance-registry.conf

[root@controller ~]# cat /etc/glance/glance-registry.conf 

openstack-config --set /etc/glance/glance-registry.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken auth_type password

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken project_domain_name default

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken user_domain_name default

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken project_name service

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken username glance

openstack-config --set /etc/glance/glance-registry.conf  keystone_authtoken password GLANCE_PASS

openstack-config --set /etc/glance/glance-registry.conf  paste_deploy flavor keystone

f、同步數據庫

寫入鏡像服務數據庫:su -s /bin/sh -c "glance-manage db_sync" glance。忽略輸出中任何不推薦使用的信息。

g、啟動服務

啟動鏡像服務、配置他們隨機啟動:

systemctl enable openstack-glance-api.service  openstack-glance-registry.service

systemctl start openstack-glance-api.service  openstack-glance-registry.service

監聽端口一個9191,一個9292

h、驗證

[root@controller ~]# openstack image create "cirros"  --file cirros-0.3.4-x86_64-disk.img  --disk-format qcow2 --container-format bare --public,下面報錯是因為沒有配置glancepublicendpointopenstack endpoint create --region RegionOne image public http://controller:9292

我們可以在/etc/glance/glance-api.conf 這個配置文件中設置[glance_store]文件存儲路徑filesystem_store_datadir = /var/lib/glance/images/查看剛上傳的

8、安裝計算服務Nova

計算服務來托管和管理雲計算系統,OpenStack計算組件請求OpenStack Identity服務進行認證;請求OpenStack Image服務提供磁盤鏡像;為OpenStack dashboard提供用戶與管理員接口。

OpenStack計算服務由下列組件所構成:

nova-api 服務接收和響應來自最終用戶的計算API請求,管理虛擬機生命周期

nova-compute(多個)服務,一個持續工作的守護進程,通過Hypervior的API來創建和銷毀虛擬機實例。真正管理虛擬機的生命周期。

nova-api-metadata 服務,接受來自虛擬機發送的元數據請求。``nova-api-metadata``服務一般在安裝``nova-network``服務的多主機模式下使用。

nova-scheduler服務,拿到一個來自隊列請求虛擬機實例,然后決定哪台計算服務器主機來運行它。Nova調度器(挑出最合適的Nova-compute來創建虛機)

nova-conductor模塊,媒介作用於``nova-compute``服務與數據庫之間,幫助Nova-compute代理修改數據庫中虛擬機的狀態。

nova客戶端,用於用戶作為租戶管理員或最終用戶來提交命令

nova-consoleauth 守護進程,授權控制台代理所提供的用戶令牌,為web版的vnc提供訪問令牌token。

novncproxy ,web版VNC客戶端

備注:用戶發起請求創建虛擬機,Nova-api收到請求,開始下發任務,Nova-compute(計算節點)有多台,Nova-api把活安排給誰呢,怎么安排合理,nova-scheduler負責選節點,nova-scheduler需要知道每個計算節點資源情況,比如CPU、MEM,硬盤等等,把這些信息寫到數據庫,schedule從數據庫Nova-db中根據資源情況去選擇相應的計算節點,Nova-compute也需要連接數據庫,去更新自己資源信息。假設有10000個計算節點,每個節點都要連接數據庫,這樣不安全,另一個如果數據庫Nova-db的密碼修改,則所有計算節點都需要修改,且需要重啟計算節點,為了避免以上兩點,nova-conductor出現了。只需在Nova-compute配置消息隊列(rabbitmq),所有的計算節點通過消息隊列去連接nova-conductor,Nova-api通過消息隊列發給Nova-schedule,Nova-schedule收到消息之后,去數據庫查詢nova-compute剩的資源最多。

(1)在控制節點controller上安裝Nova

在安裝和配置 Compute 服務前,你必須創建數據庫服務的憑據以及 API endpoints。

先導入環境變量:source admin-openrc

a、數據庫創庫授權

用數據庫連接客戶端以 root 用戶連接到數據庫服務器:mysql -u root -p

創建 nova_api 和 nova 數據庫:CREATE DATABASE nova_api;CREATE DATABASE nova;

對數據庫進行正確的授權:

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

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

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%'  IDENTIFIED BY 'NOVA_DBPASS';

b、在keystone創建系統用戶關聯角色

創建 nova 用戶:openstack user create --domain default  --password NOVA_PASS nova

給 nova 用戶添加 admin 角色:openstack role add --project service --user nova admin

c、在keystone上創建服務,注冊api

創建 nova 服務實體:openstack service create --name nova  --description "OpenStack Compute" compute

創建 Compute 服務 API 端點 :

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

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

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

d、安裝相應服務軟件包

安裝軟件包:yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler -y

e、修改相應服務的配置文件

cp /etc/nova/nova.conf{,.bak}

grep -Ev "^$|#" /etc/nova/nova.conf.bak >/etc/nova/nova.conf

編輯``/etc/nova/nova.conf``文件並完成下面的操作:

在``[DEFAULT]``部分,只啟用計算和元數據API:

[DEFAULT]

...

enabled_apis = osapi_compute,metadata

在``[api_database]``和``[database]``部分,配置數據庫的連接:用你為 Compute 數據庫選擇的密碼來代替 NOVA_DBPASS

[api_database]

...

connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]

...

connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息隊列訪問:用你在 “RabbitMQ” 中為 “openstack” 選擇的密碼替換 “RABBIT_PASS”。

[DEFAULT]

...

rpc_backend = rabbit

 

[oslo_messaging_rabbit]

...

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置認證服務訪問:使用你在身份認證服務中設置的``nova`` 用戶的密碼替換``NOVA_PASS``。

[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

在 [DEFAULT 部分,配置``my_ip`` 來使用控制節點的管理接口的IP 地址。

[DEFAULT]

...

my_ip = 192.168.0.110

在 [DEFAULT] 部分,使能 Networking 服務:

[DEFAULT]

...

use_neutron = True

firewall_driver = nova.virt.firewall.NoopFirewallDriver

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

[root@controller ~]# ll /lib/python2.7/site-packages/nova/virt/firewall.py

-rw-r--r-- 1 root root 16823 May 24  2017 /lib/python2.7/site-packages/nova/virt/firewall.py

[root@controller ~]#

在``[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

用openstack-config配置上面的配置:

openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata

openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova

openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password  RABBIT_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service

openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova

openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.0.110

openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True

openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver

openstack-config --set /etc/nova/nova.conf vnc vncserver_listen $my_ip

openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $my_ip

openstack-config --set /etc/nova/nova.conf glance api_servers http://controller:9292

openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp 

f、同步數據庫

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

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

g、啟動服務

啟動 Compute 服務並將其設置為隨系統啟動:

# 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

h、驗證測試

[root@controller ~]# openstack compute service list

[root@controller ~]# nova service-list

(2)在計算節點compute上安裝並配置計算服務

確定您的計算節點是否支持虛擬機的硬件加速:

egrep -c '(vmx|svm)' /proc/cpuinfo

如果這個命令返回了 one or greater 的值,那么你的計算節點支持硬件加速且不需要額外的配置。

如果這個命令返回了 zero 值,那么你的計算節點不支持硬件加速。你必須配置 libvirt 來使用 QEMU 去代替 KVM

在 /etc/nova/nova.conf 文件的 [libvirt] 區域做出如下的編輯:

[libvirt]

...

virt_type = qemu

正式安裝:

nova-compute調用libvirtd創建虛擬機

yum install openstack-nova-compute openstack-utils.noarch -y

cp /etc/nova/nova.conf{,.bak}

grep -Ev "^$|#" /etc/nova/nova.conf.bak >/etc/nova/nova.conf

編輯``/etc/nova/nova.conf``文件並完成下面的操作:

在``[DEFAULT]`` 和 [oslo_messaging_rabbit]部分,配置``RabbitMQ``消息隊列的連接:

[DEFAULT]

...

rpc_backend = rabbit

[oslo_messaging_rabbit]

...

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

用你在 “RabbitMQ” 中為 “openstack” 選擇的密碼替換 “RABBIT_PASS”。

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置認證服務訪問:

...

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``。

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

[DEFAULT]

...

my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

將其中的 MANAGEMENT_INTERFACE_IP_ADDRESS 替換為計算節點上的管理網絡接口的IP 地址,例如 :ref:`example architecture <overview-example-architectures>`中所示的第一個節點 192.168.0.108 。

在 [DEFAULT] 部分,使能 Networking 服務:

[DEFAULT]

...

use_neutron = True

firewall_driver = nova.virt.firewall.NoopFirewallDriver

在``[vnc]``部分,啟用並配置遠程控制台訪問:

[vnc]

...

enabled = True

vncserver_listen = 0.0.0.0

vncserver_proxyclient_address = $my_ip

novncproxy_base_url = http://controller:6080/vnc_auto.html

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

在 [glance] 區域,配置鏡像服務 API 的位置:

[glance]

...

api_servers = http://controller:9292

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

[oslo_concurrency]

...

lock_path = /var/lib/nova/tmp

通過openstack-config配置上面文件:

openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/nova/nova.conf oslo_messaging_rabbit rabbit_password  RABBIT_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service

openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova

openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS

openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.0.108

openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron True

openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver  nova.virt.firewall.NoopFirewallDriver

openstack-config --set /etc/nova/nova.conf vnc enabled True

openstack-config --set /etc/nova/nova.conf vnc vncserver_listen 0.0.0.0

openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://controller:6080/vnc_auto.html

openstack-config --set /etc/nova/nova.conf vnc vncserver_proxyclient_address $my_ip

openstack-config --set /etc/nova/nova.conf glance api_servers http://controller:9292

openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp

啟動計算服務及其依賴,並將其配置為隨系統自動啟動:

# systemctl enable libvirtd.service openstack-nova-compute.service

# systemctl start libvirtd.service openstack-nova-compute.service (控制節點的消息隊列服務要起來systemctl status rabbitmq-server,否則計算節點開啟這個服務失敗)

驗證測試:

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

9、網絡服務neutron

OpenStack Networking(neutron),允許創建、插入接口設備。常用組件:

neutron-server:接收和路由API請求到合適的OpenStack網絡插件

neutron-linuxbridge-agent:負責創建橋接網卡

neutron-dhcp-agent:負責分配IP

neutron-metadata-agent:配合neutron-metadata-api實現虛擬機的定制

L3-agent:實現三層網絡vxlan(網絡層)

在你配置OpenStack網絡(neutron)服務之前,你必須為其創建一個數據庫,服務憑證和API端點

先執行下:source admin-openrc設置環境變量

(1)控制節點配置

a、數據庫創庫授權

用數據庫連接客戶端以 root 用戶連接到數據庫服務器:mysql -u root -p

創建``neutron`` 數據庫:CREATE DATABASE neutron;

對``neutron`` 數據庫授予合適的訪問權限,使用合適的密碼替換``NEUTRON_DBPASS``:

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost'  IDENTIFIED BY 'NEUTRON_DBPASS';

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';

b、在keystone創建系統用戶關聯角色

創建``neutron``用戶:openstack user create --domain default --password NEUTRON_PASS neutron

添加``admin`` 角色到``neutron`` 用戶:openstack role add --project service --user neutron admin

c、在keystone上創建服務,注冊api

創建``neutron``服務實體:openstack service create --name neutron --description "OpenStack Networking" network

創建網絡服務API端點:

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

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

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

d、安裝相應服務軟件包

選擇公共網絡安裝:yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y

http://docs.qstack.com.cn/mitaka/zh_CN/install-guide-rdo/neutron-controller-install-option1.html

e、修改相應服務的配置文件

配置服務組件:Networking 服務器組件的配置包括數據庫、認證機制、消息隊列、拓撲變化通知和插件

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

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

[database]

...

connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

使用你設置的數據庫密碼替換 NEUTRON_DBPASS 。

在``[DEFAULT]``部分,啟用ML2插件並禁用其他插件:

[DEFAULT]

...

core_plugin = ml2

service_plugins =

在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息隊列的連接:

[DEFAULT]

...

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

用你在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_PASS 替換為你在認證服務中為 neutron 用戶選擇的密碼。

在``[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

通過openstack-config配置上面信息:

openstack-config --set /etc/neutron/neutron.conf database connection  mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

openstack-config --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2

openstack-config --set /etc/neutron/neutron.conf DEFAULT service_plugins

openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password RABBIT_PASS

openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS

openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes True

openstack-config --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes True

openstack-config --set /etc/neutron/neutron.conf nova auth_url              http://controller:35357

openstack-config --set /etc/neutron/neutron.conf nova auth_type             password

openstack-config --set /etc/neutron/neutron.conf nova project_domain_name   default

openstack-config --set /etc/neutron/neutron.conf nova user_domain_name      default

openstack-config --set /etc/neutron/neutron.conf nova region_name           RegionOne

openstack-config --set /etc/neutron/neutron.conf nova project_name          service

openstack-config --set /etc/neutron/neutron.conf nova username              nova

openstack-config --set /etc/neutron/neutron.conf nova password              NOVA_PASS

openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp

配置 Modular Layer 2 (ML2) 插件

ML2插件使用Linuxbridge機制來為實例創建layer-2虛擬網絡基礎設施

編輯``/etc/neutron/plugins/ml2/ml2_conf.ini``文件並完成以下操作:

在``[ml2]``部分,啟用flat和VLAN網絡:

[ml2]

...

type_drivers = flat,vlan

在``[ml2]``部分,禁用私有網絡:

[ml2]

...

tenant_network_types =

在``[ml2]``部分,啟用Linuxbridge機制:

[ml2]

...

mechanism_drivers = linuxbridge

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

[ml2]

...

extension_drivers = port_security

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

[ml2_type_flat]

...

flat_networks = provider

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

[securitygroup]

...

enable_ipset = True

通過openstack-config配置上面文檔:

cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/plugins/ml2/ml2_conf.ini.bak >/etc/neutron/plugins/ml2/ml2_conf.ini

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider

openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset True

配置Linuxbridge代理¶

Linuxbridge代理為實例建立layer-2虛擬網絡並且處理安全組規則。

編輯``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件並且完成以下操作:

在``[linux_bridge]``部分,將公共虛擬網絡和公共物理網絡接口對應起來:

[linux_bridge]

physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME

將``PUBLIC_INTERFACE_NAME`` 替換為底層的物理公共網絡接口。請查看:ref:environment-networking for more information。

在``[vxlan]``部分,禁止VXLAN覆蓋網絡:

[vxlan]

enable_vxlan = False

在 ``[securitygroup]``部分,啟用安全組並配置 Linuxbridge iptables firewall driver:

[securitygroup]

...

enable_security_group = True

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

通過openstack-config配置上面文檔:

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >/etc/neutron/plugins/ml2/linuxbridge_agent.ini

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth0

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan  enable_vxlan False

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group True

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置DHCP代理¶

The DHCP agent provides DHCP services for virtual networks.

編輯``/etc/neutron/dhcp_agent.ini``文件並完成下面的操作:

在``[DEFAULT]``部分,配置Linuxbridge驅動接口,DHCP驅動並啟用隔離元數據,這樣在公共網絡上的實例就可以通過網絡來訪問元數據

[DEFAULT]

...

interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

enable_isolated_metadata = True

通過openstack-config配置上面文檔

cp /etc/neutron/dhcp_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/dhcp_agent.ini.bak >/etc/neutron/dhcp_agent.ini

openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver neutron.agent.linux.interface.BridgeInterfaceDriver

openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver  neutron.agent.linux.dhcp.Dnsmasq

openstack-config --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata True

配置元數據代理:

編輯``/etc/neutron/metadata_agent.ini``文件並完成以下操作:

在``[DEFAULT]`` 部分,配置元數據主機以及共享密碼:

[DEFAULT]

...

nova_metadata_ip = controller

metadata_proxy_shared_secret = METADATA_SECRET

用你為元數據代理設置的密碼替換 METADATA_SECRET。

cp /etc/neutron/metadata_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/metadata_agent.ini.bak >/etc/neutron/metadata_agent.ini

openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_ip  controller

openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret  METADATA_SECRET

為計算服務配置網絡服務:

編輯``/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_PASS 替換為你在認證服務中為 neutron 用戶選擇的密碼。

使用你為元數據代理設置的密碼替換``METADATA_SECRET``

openstack-config --set /etc/nova/nova.conf neutron url   http://controller:9696

openstack-config --set /etc/nova/nova.conf neutron auth_url   http://controller:35357

openstack-config --set /etc/nova/nova.conf neutron auth_type   password

openstack-config --set /etc/nova/nova.conf neutron project_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron user_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron region_name   RegionOne

openstack-config --set /etc/nova/nova.conf neutron project_name   service

openstack-config --set /etc/nova/nova.conf neutron username   neutron

openstack-config --set /etc/nova/nova.conf neutron password   NEUTRON_PASS

openstack-config --set /etc/nova/nova.conf neutron service_metadata_proxy   True

openstack-config --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret   METADATA_SECRET

f、同步數據庫

網絡服務初始化腳本需要一個超鏈接 /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

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

g、啟動服務

systemctl restart openstack-nova-api.service

systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

(2)在計算節點上配置

計算節點處理實例的連接和 安全組 

# yum install openstack-neutron-linuxbridge ebtables ipset

Networking 通用組件的配置包括認證機制、消息隊列和插件

cp /etc/neutron/neutron.conf{,.bak}

grep -Ev "^$|#" /etc/neutron/neutron.conf.bak >/etc/neutron/neutron.conf

openstack-config --set /etc/neutron/neutron.conf DEFAULT rpc_backend rabbit

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_host controller

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_userid openstack

openstack-config --set /etc/neutron/neutron.conf oslo_messaging_rabbit rabbit_password RABBIT_PASS

openstack-config --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_uri http://controller:5000

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:35357

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken auth_type password

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken project_name service

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken username neutron

openstack-config --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS

openstack-config --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp

配置Linuxbridge代理:

http://docs.qstack.com.cn/mitaka/zh_CN/install-guide-rdo/neutron-compute-install-option1.html

cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini{,.bak}

grep -Ev "^$|#" /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak >/etc/neutron/plugins/ml2/linuxbridge_agent.ini

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:eth0

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan  enable_vxlan False

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group True

openstack-config --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

為計算服務配置網絡服務:

openstack-config --set /etc/nova/nova.conf neutron url   http://controller:9696

openstack-config --set /etc/nova/nova.conf neutron auth_url   http://controller:35357

openstack-config --set /etc/nova/nova.conf neutron auth_type   password

openstack-config --set /etc/nova/nova.conf neutron project_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron user_domain_name   default

openstack-config --set /etc/nova/nova.conf neutron region_name   RegionOne

openstack-config --set /etc/nova/nova.conf neutron project_name   service

openstack-config --set /etc/nova/nova.conf neutron username   neutron

openstack-config --set /etc/nova/nova.conf neutron password   NEUTRON_PASS

完成安裝:

systemctl restart openstack-nova-compute.service

# systemctl enable neutron-linuxbridge-agent.service

# systemctl start neutron-linuxbridge-agent.service

(3)在控制節點驗證

[root@controller ~]# neutron agent-list

[root@controller ~]# neutron agent-list

503 Service Unavailable

The server is currently unavailable. Please try again at a later time.

Neutron server returns request_ids: ['req-e7689fba-87db-47fc-8786-2e633dfa1c59']

報錯原因是 /etc/neutron/neutron.conf里面的keystone密碼配置錯誤

發現缺少compute計算節點的linux bridge agent,是因為計算節點未和控制節點時間同步,在計算節點可以利用`ntpdate 控制節點IP`(在計算節點配置’server 控制節點IP iburst’)或者一直重啟chronyd

10、安裝horizon儀表盤服務

Dashboard(horizon)是一個web接口,使得雲平台管理員以及用戶可以管理不同的Openstack資源以及服務。這個部署示例使用的是 Apache Web 服務器。

計算節點進行安裝配置(在計算節點和控制節點都行),keystone安裝在控制節點,也用Apache,horizon也是使用Apache,一旦Apache配置錯誤,重啟Apache,horizon和keystone都掛了。沒有自己數據庫,web頁面展示,全程依賴調用其他服務的api

http://docs.qstack.com.cn/mitaka/zh_CN/install-guide-rdo/horizon-install.html

a、安裝軟件包

yum install openstack-dashboard  python-memcached -y

編輯文件 /etc/openstack-dashboard/local_settings 增加並按照如下修改:

編輯文件 /etc/openstack-dashboard/local_settings 並完成如下動作:
ALLOWED_HOSTS = ['*', ]
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': 'controller:11211',
    },
}
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
OPENSTACK_HOST = "controller"
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

OPENSTACK_NEUTRON_NETWORK = {
    'enable_router': False,
    'enable_quotas': False,
    'enable_ipv6': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': False,
    'default_ipv4_subnet_pool_label': None,
    'default_ipv6_subnet_pool_label': None,
    'profile_support': None,
    'supported_provider_types': ['*'],
    'supported_vnic_types': ['*'],
}

TIME_ZONE = "Asia/Shanghai"

將本地配置的local_settings上傳到計算節點,然后替換

[root@compute ~]# cat local_settings >/etc/openstack-dashboard/local_settings 

權限是640,用戶是Apache

systemctl start httpd.service

/usr/share/doc/httpd-2.4.6/httpd-default.conf

驗證:

驗證儀表盤的操作。在瀏覽器中輸入 ``http://192.168.0.108/dashboard``訪問儀表盤。

驗證使用 admin 或者``demo``用戶憑證和``default``域憑證。

 

在/var/log/httpd/error_log中看到End of script output before headers: django.wsgi

在/etc/httpd/conf.d/openstack-dashboard.conf添加一行WSGIApplicationGroup %{GLOBAL}

[root@compute1 ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf

[root@compute1 ~]# cat /etc/httpd/conf.d/openstack-dashboard.conf  | grep -i global

WSGIApplicationGroup %{GLOBAL}

cat >> etc/httpd/conf.d/openstack-dashboard.conf << 'EOF'
WSGIDaemonProcess dashboard WSGIProcessGroup dashboard WSGISocketPrefix run/wsgi WSGIApplicationGroup %{GLOBAL} WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi Alias /dashboard/static /usr/share/openstack-dashboard/static <Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi> Options All AllowOverride All Require all granted </Directory> <Directory /usr/share/openstack-dashboard/static> Options All AllowOverride All Require all granted </Directory>
EOF

 

Oct 08 00:12:25 compute1 httpd[77803]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.0.108. Set the 'ServerName' directive globally to suppress this message

解決方案:將 apache 的配置文件httpd.conf中的 ServerName 改成可用域名或如下配置

ServerName localhost:80

驗證:http://192.168.0.108/dashboard

admin 用戶:openstack user create --domain default \

  --password ADMIN_PASS admin

 

登錄時有如下報錯:
Something went wrong!
An unexpected error has occurred. Try refreshing the page. If that doesn't help, contact your local administrator.

解決方法

1.修改配置文件vim /etc/openstack-dashboard/local_settings2.將SESSION_ENGINE值修改

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
改為SESSION_ENGINE = 'django.contrib.sessions.backends.file'

3.重啟服務,然后再次登錄。
systemctl restart httpd.service memcached.service

http://controller//dashboard/ 這樣登錄也行,需要在本地配置hosts解析

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM