OpenStack基礎介紹
請查看此博客
安裝部署官方文檔,點擊此處查看
硬件最低要求
控制器節點:1個處理器,4 GB內存和5 GB存儲
計算節點:1個處理器,2 GB內存和10 GB存儲
在虛擬機中安裝請調整內存、處理器和磁盤大小,以滿足硬件最低要求,並勾選虛擬化
由於硬件條件有限,此此安裝只有控制節點和計算節點
安裝環境
-
工具:VMware Workstation 16 Pro
-
操作系統:CentOS 8.3
-
控制節點虛擬機配置,內存 8G、處理器 6C、磁盤 80G、虛擬化引擎
-
計算節點虛擬機配置,內存 4G、處理器 4C、磁盤 40G、虛擬化引擎
一、基礎服務安裝
1、基本配置
配置節點:控制節點和計算節點
-
修改主機名
# 修改控制節點 hostnamectl set-hostname controller exec bash # 修改計算節點 hostnamectl set-hostname compute exec bash
-
更換網絡服務
在安裝部署OpenStack時,OpenStack的網絡服務會與NetworkManager服務產生沖突,二者無法一起正常工作,需要使用Network
# 安裝Network服務 dnf install network-scripts -y # 停用NetworkManager並禁止開機自啟 systemctl stop NetworkManager && systemctl disable NetworkManager # 啟用 Network並設置開機自啟 systemctl start network && systemctl enable network
-
設置靜態IP
編輯網絡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改修改並添加以下內容
# 設為靜態 BOOTPROTO=static # 設為開機自動連接 ONBOOT=yes # 添加IP、子網掩碼及網關 IPADDR=192.166.66.10 NETMASK=255.255.255.0 GATEWAY=192.166.66.2
重啟Network網絡服務
# 重啟網絡服務 systemctl restart network # 測試是否可訪問外網 ping -c 2 www.baidu.com
-
關閉所有節點防火牆並禁止開機自啟
systemctl stop firewalld && systemctl disable firewalld
-
配置host解析,在hosts文件中添加主機
使用echo命令修改,分別在兩個節點執行以下命令
echo -e "192.166.66.10\tcontroller\n192.166.66.11\tcompute" >> /etc/hosts
或者編輯hosts文件
vim /etc/hosts
添加如下信息192.166.66.10 controller 192.166.66.11 compute
配置后可通過命令
scp -rp /etc/hosts 192.166.66.11:/etc/hosts
直接覆蓋另一節點hosts文件然后測試控制節點與計算節點的連通性,以及兩節點與外網的連通性,在各節點上分別執行如下命令
# 控制節點 ping -c 3 www.baidu.com ping -c 3 compute # 計算節點 ping -c 3 www.baidu.com ping -c 3 controller
2、基礎服務
配置節點:控制節點和計算節點
-
時間同步,先執行命令
rpm -qa |grep chrony
查看系統是否安裝chrony,若未安裝則執行安裝命令dnf install chrony -y
,若已安裝則編輯chrony配置文件vim /etc/chrony.conf
修改以下兩條信息,注意:在計算節點僅修改第一條,修改為server controller iburst
,直接與控制節點同步# Please consider joining the pool (http://www.pool.ntp.org/join.html). server ntp6.aliyun.com iburst # Allow NTP client access from local network. allow 10.0.0.0/24
-
重啟chrony服務並開機自啟
systemctl restart chronyd && systemctl enable chronyd
-
安裝openstack存儲庫
dnf config-manager --enable powertools dnf install centos-release-openstack-victoria -y
-
若網絡太慢,可以修改為國內的yum源,修改方式請查看官方操作步驟,各源地址如下
華為 https://mirrors.huaweicloud.com/ 清華 https://mirrors.tuna.tsinghua.edu.cn/ 阿里雲 https://mirrors.aliyun.com/ 網易 https://mirrors.163.com/ 中科大 https://mirrors.ustc.edu.cn/
-
升級所有節點上的軟件包
dnf upgrade -y
-
安裝openstack客戶端和openstack-selinux
dnf install python3-openstackclient openstack-selinux -y
3、SQL數據庫
配置節點:僅控制節點
-
安裝Mariadb數據庫,也可安裝MySQL數據庫
dnf install mariadb mariadb-server python3-PyMySQL -y
-
創建和編輯
vim /etc/my.cnf.d/openstack.cnf
文件,添加如下信息[mysqld] bind-address = 192.166.66.10 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8
-
啟動數據庫並設置為開機自啟
systemctl start mariadb && systemctl enable mariadb
-
保護數據庫服務
mysql_secure_installation # 輸入當前用戶root密碼,若為空直接回車 Enter current password for root (enter for none): OK, successfully used password, moving on... # 是否設置root密碼 Set root password? [Y/n] y # 輸入新密碼 New password: # 再次輸入新密碼 Re-enter new password: # 是否刪除匿名用戶 Remove anonymous users? [Y/n] y # 是否禁用遠程登錄 Disallow root login remotely? [Y/n] n # 是否刪除數據庫並訪問它 Remove test database and access to it? [Y/n] y # 是否重新加載權限表 Reload privilege tables now? [Y/n] y # 以上步驟根據實際情況做配置即可,不一定要與此處保持一致
4、消息隊列
配置節點:僅控制節點
-
安裝軟件包
dnf install rabbitmq-server -y
-
啟動消息隊列服務並設置為開機自啟
systemctl start rabbitmq-server && systemctl enable rabbitmq-server
-
添加openstack用戶並設置密碼
rabbitmqctl add_user openstack RABBIT_PASS
-
給openstack用戶可讀可寫可配置權限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
-
為了方便監控,啟用Web界面管理插件
rabbitmq-plugins enable rabbitmq_management
安裝成功后通過命令
netstat -lntup
查看多了一個15672的服務端口,通過瀏覽器訪問可以成功登錄RabbitMQ,默認管理員賬號密碼都是guest,登錄成功頁面如下圖
5、Memcached緩存
配置節點:僅控制節點
-
安裝軟件包
dnf install memcached python3-memcached -y
-
編輯
vim /etc/sysconfig/memcached
文件,將OPTTONS行修改成如下信息OPTIONS="-l 127.0.0.1,::1,controller"
-
啟動Memcached服務並設置開機自啟
systemctl start memcached && systemctl enable memcached
6、Etcd集群
配置節點:僅控制節點
-
安裝軟件包
dnf install etcd -y
-
編輯
vim /etc/etcd/etcd.conf
文件,修改如下信息#[Member] ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS="http://192.166.66.10:2380" ETCD_LISTEN_CLIENT_URLS="http://192.166.66.10:2379" ETCD_NAME="controller" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.166.66.10:2380" ETCD_ADVERTISE_CLIENT_URLS="http://192.166.66.10:2379" ETCD_INITIAL_CLUSTER="controller=http://192.166.66.10:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"
-
啟動Etcd服務並設置開機自啟
systemctl start etcd && systemctl enable etcd
二、KeyStone服務安裝
配置節點:僅控制節點
1、創庫授權
-
連接數據庫
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'; exit;
2、安裝KeyStone相關軟件包
-
安裝軟件
dnf install openstack-keystone httpd python3-mod_wsgi -y
-
修改/etc/keystone/keystone.conf文件,由於文件內容有2700行左右,備注內容過多,實際有效配置信息只有40行左右,所有為了方便修改文件,可以先備份該文件,然后去掉注釋信息
# 備份 cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak # 去掉備份文件keystone.conf.backup的空行、備注等信息覆蓋掉keystone.conf文件 grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
然后再手動修改文件內容,修改信息如下
[database] connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone [token] provider = fernet
手動方式和命令行方式二選一
為了提高修改文件效率,減少配置錯誤率,我們可以使用配置工具,通過命令修改文件,先安裝軟件
dnf install crudini -y
執行命令修改文件內容
crudini --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone crudini --set /etc/keystone/keystone.conf token provider fernet
-
初始化數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone
同步前后可以先看一下數據庫信息,下圖是操作前后數據庫信息變化
-
初始化Fernet,執行如下兩條命令
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
-
引導身份認證服務
keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ --bootstrap-admin-url http://controller:5000/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne
3、配置Apache HTTP服務
-
編輯
vim /etc/httpd/conf/httpd.conf
文件,添加如下信息ServerName controller
-
創建
/usr/share/keystone/wsgi-keystone.conf
文件鏈接ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
-
啟動httpd服務 並設置開機自啟
systemctl start httpd && systemctl enable httpd
-
創建環境變量腳本來配置管理員賬號,執行命令
vim /admin-openrc.sh
,添加如下信息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:5000/v3 export OS_IDENTITY_API_VERSION=3
然后初始化,腳本執行命令
source /admin-openrc.sh
或者. /admin-openrc.sh
4、創建域,項目,用戶和角色
-
創建域,程序中已存在默認域,此命令只是一個創建域的例子,可以不執行
openstack domain create --description "An Example Domain" example
-
創建service項目,也叫做租戶
openstack project create --domain default --description "Service Project" service
-
創建myproject測試項目
openstack project create --domain default --description "Demo Project" myproject
-
創建myuser用戶
openstack user create --domain default --password-prompt myuser # 執行命令后需要設置用戶密碼,輸入兩次相同的密碼
-
創建myrole角色
openstack role create myrole
-
將myrole角色添加到myproject項目和myuser用戶
openstack role add --project myproject --user myuser myrole
-
編輯環境變量腳本
vim /admin-openrc.sh
,修改腳本,把創建的項目用戶信息添加到環境變量值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:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
然后再次初始化腳本,執行命令
source /admin-openrc.sh
或者. /admin-openrc.sh
也可以根據自己創建的項目角色信息編寫一個腳本,如:
vim /dyd-openrc.sh
export OS_PROJECT_DOMAIN_NAME=Default export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_NAME=myproject export OS_USERNAME=myuser export OS_PASSWORD=ADMIN_PASS export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
然后再次初始化腳本,執行命令
source /dyd-openrc.sh
或者. /admin-openrc.sh
-
驗證token令牌
# 驗證KeyStone服務是否正常 openstack token issue
出現如下圖信息就說明KeyStone配置完成啦!
-
每次執行openstack命令之前都需要先執行腳本
source /admin-openrc.sh
或者. /admin-openrc.sh
,所以也可以設置為開機自動加載環境變量,將命令添加到.bashrc中即可,如圖
三、Glance服務安裝
配置節點:僅控制節點
1、創庫授權
-
連接數據庫
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'; exit;
2、創建glance用戶並關聯角色
上文已設置自動加載環境變量,若未設置且未加載,請先加載環境變量腳本. /admin-openrc.sh
-
創建glance用戶並設置密碼為GLANCE_PASS,此處與上面創建用戶的不同之處是未使用交互式的方式,直接將密碼放入了命令中
openstack user create --domain default --password GLANCE_PASS glance
-
使用admin角色將Glance用戶添加到服務項目中
# 在service的項目上給glance用戶關聯admin角色 openstack role add --project service --user glance admin
3、創建glance服務並注冊API
-
創建glance服務
openstack service create --name glance --description "OpenStack Image" image
-
注冊API,也就是創建鏡像服務的API終端endpoints
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
4、安裝並配置glance
-
安裝glance軟件包,安裝若出現依賴問題,請更換安裝源
dnf install openstack-glance -y
-
編輯
vim /etc/glance/glance-api.conf
文件,文件內容過多,進6000行,建議向上文一樣使用命令配置,也可以手動配置手動修改如下信息
[database] connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance [keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = glance password = GLANCE_PASS [paste_deploy] flavor = keystone [glance_store] stores = file,http default_store = file filesystem_store_datadir = /var/lib/glance/images/
命令行修改以上信息
crudini --set /etc/glance/glance-api.conf database connection mysql+pymysql://glance:GLANCE_DBPASS@controller/glance crudini --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri http://controller:5000 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url http://controller:5000 crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type password crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name Default crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name Default crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name service crudini --set /etc/glance/glance-api.conf keystone_authtoken username glance crudini --set /etc/glance/glance-api.conf keystone_authtoken password GLANCE_PASS crudini --set /etc/glance/glance-api.conf paste_deploy flavor keystone crudini --set /etc/glance/glance-api.conf glance_store stores file,http crudini --set /etc/glance/glance-api.conf glance_store default_store file crudini --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir /var/lib/glance/images/
-
同步數據庫
su -s /bin/sh -c "glance-manage db_sync" glance
-
啟動glance服務並設置開機自啟
systemctl start openstack-glance-api && systemctl enable openstack-glance-api
-
下載一個測試鏡像先上傳到系統中,然后上傳到glance服務中
-
測試鏡像cirros下載地址:點擊此處進入下載頁,由於網絡限制,建議復制下載地址后使用迅雷等下載工具進行下載
-
使用命令上傳到Glance服務中
# 將當前目錄下的cirros-0.5.1-aarch64-disk.img鏡像命名為“cirros”,鏡像格式是qcow2,容器格式是bare,設為公有鏡像 openstack image create "cirros" --file cirros-0.5.1-aarch64-disk.img --disk-format qcow2 --container-format bare --public
出現如下圖說明鏡像上傳成功,通過命令
openstack image list
可以看到上傳的鏡像鏡像信息都是存在glance數據庫中的,我們可以在glance庫中的images表看到上傳的鏡像信息
在/var/lib/glance/images/目錄下可以看到鏡像文件,如果要刪除此鏡像需要刪除數據庫信息,再刪除鏡像文件
-
四、Placement服務安裝
配置節點:控制節點
Placement服務的作用是跟蹤資源(如計算節點,存儲資源池,網絡資源池等)的使用情況,提供自定義資源的能力,為分配資源提供服務。Placement在openstack的Stein版本之前是屬於Nova組件的一部分。在安裝Nova之前需要先安裝此組件
1、創庫授權
-
連接數據庫
mysql -u root -p
-
創建Plancement數據庫
CREATE DATABASE placement;
-
授予Plancement數據庫權限,然后退出
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS'; GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS'; exit;
2、配置用戶和Endpoint
先加載環境變量source /admin-openrc.sh
-
創建一個plancement用戶並設置密碼為PLACEMENT_PASS
openstack user create --domain default --password PLACEMENT_PASS placement
-
使用admin角色將Placement用戶添加到服務項目中
# 在service的項目上給placement用戶關聯admin角色 openstack role add --project service --user placement admin
3、創建Placement服務並注冊API
-
創建Plancement服務
openstack service create --name placement --description "Placement API" placement
-
創建Plancement服務API端口
openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778
4、安裝並配置Plancement
-
安裝Plancement軟件包
dnf install openstack-placement-api -y
-
編輯
vim /etc/placement/placement.conf
文件,文件700行左右,手動命令二選一手動修改文件內容
[placement_database] connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement [api] auth_strategy = keystone [keystone_authtoken] auth_url = http://controller:5000/v3 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = placement password = PLACEMENT_PASS
命令行修改文件內容
crudini --set /etc/placement/placement.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement crudini --set /etc/placement/placement.conf api auth_strategy keystone crudini --set /etc/placement/placement.conf keystone_authtoken auth_url http://controller:5000/v3 crudini --set /etc/placement/placement.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/placement/placement.conf keystone_authtoken auth_type password crudini --set /etc/placement/placement.conf keystone_authtoken project_domain_name Default crudini --set /etc/placement/placement.conf keystone_authtoken user_domain_name Default crudini --set /etc/placement/placement.conf keystone_authtoken project_name service crudini --set /etc/placement/placement.conf keystone_authtoken username placement crudini --set /etc/placement/placement.conf keystone_authtoken password PLACEMENT_PASS
-
同步數據庫
su -s /bin/sh -c "placement-manage db sync" placement
-
重啟httpd服務
systemctl restart httpd
-
檢查Placement服務狀態
placement-status upgrade check
出現如下圖所示,說明安裝配置成功
五、Nova服務安裝
配置節點:控制節點和計算節點
Nova是服務是openstack最核心的服務,由它來創建雲主機,其它服務都是協助,同時Nova組件也是最多的,由於Nova組件較多,此處控制節點和計算節點分開寫,再次提醒上文提到【配置節點:控制節點和計算節點】指的是相同的操作需要在控制節點和計算節點都執行一遍,這里是分開講解安裝步驟的,先從控制節點開始
控制節點
1、創庫授權
-
連接數據庫
mysql -u root -p
-
創建nova_api,nova和nova_cell0數據庫
CREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0;
-
分別授予三個數據庫權限,然后退出
# 授權nova_api數據庫 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'; # 授權nova數據庫 GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; # 授權nova_cell0數據庫 GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS'; GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS'; exit;
2、配置用戶和Endpoint
先加載環境變量source /admin-openrc.sh
-
創建nova用戶並設置密碼為NOVA_PASS
openstack user create --domain default --password NOVA_PASS nova
-
使用admin角色將nova用戶添加到服務項目中
# 在service的項目上給nova用戶關聯admin角色 openstack role add --project service --user nova admin
3、創建Nova服務並注冊API
-
創建Nova服務
openstack service create --name nova --description "OpenStack Compute" compute
-
創建Nova服務API端口
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
4、安裝並配置Nova
-
安裝nova相關軟件包
dnf install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
-
編輯
vim /etc/nova/nova.conf
文件,文件近6000行,依然手動命令二選一手動修改如下信息
[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/ my_ip = 192.166.66.10 [api_database] connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api [database] connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova [api] auth_strategy = keystone [keystone_authtoken] www_authenticate_uri = http://controller:5000/ auth_url = http://controller:5000/ memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip [glance] api_servers = http://controller:9292 [oslo_concurrency] lock_path = /var/lib/nova/tmp [placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement password = PLACEMENT_PASS
命令行修改以上信息,命令不要一次性批量操作,由於命令過多,批量執行終端可能會出錯,建議分批次執行
crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller:5672/ crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.166.66.10 crudini --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api crudini --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@controller/nova crudini --set /etc/nova/nova.conf api auth_strategy keystone crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller:5000/ crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000/ crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default crudini --set /etc/nova/nova.conf keystone_authtoken project_name service crudini --set /etc/nova/nova.conf keystone_authtoken username nova crudini --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS crudini --set /etc/nova/nova.conf vnc enabled true crudini --set /etc/nova/nova.conf vnc server_listen '$my_ip' crudini --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip' crudini --set /etc/nova/nova.conf glance api_servers http://controller:9292 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp crudini --set /etc/nova/nova.conf placement region_name RegionOne crudini --set /etc/nova/nova.conf placement project_domain_name Default crudini --set /etc/nova/nova.conf placement project_name service crudini --set /etc/nova/nova.conf placement auth_type password crudini --set /etc/nova/nova.conf placement user_domain_name Default crudini --set /etc/nova/nova.conf placement auth_url http://controller:5000/v3 crudini --set /etc/nova/nova.conf placement username placement crudini --set /etc/nova/nova.conf placement password PLACEMENT_PASS
-
同步數據庫
# 同步nova_api數據庫 su -s /bin/sh -c "nova-manage api_db sync" nova # 同步nova_cell0數據庫 su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova # 創建cell1 su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova # 同步nova數據庫 su -s /bin/sh -c "nova-manage db sync" nova
驗證nova_cell0和cell1是否添加成功
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
-
啟動服務並設為開機自啟
systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy && systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
-
驗證服務是否成功啟動,使用命令
nova service-list
,如下圖啟動了4個服務,為什么只看到2個服務呢?
這是因為
nova service-list
這個命令是發給openstack-nova-api的,由openstack-nova-api服務返回響應結果,若nova-api服務關閉了,openstack-nova-scheduler和openstack-nova-conductor兩個服務便無法啟動,而查看openstack-nova-novncproxy服務是啟動成功,是通過端口查看的,netstat -lntup | grep 6080
,查看進程ps -ef | grep 上條命令得到的進程號
,如下圖可以通過Web訪問noVNC頁面,只是還沒有連接雲主機
計算節點
1、安裝並配置Nova
-
安裝軟件包
dnf install openstack-nova-compute -y
-
編輯
vim /etc/nova/nova.conf
文件,文件5500行左右,手動命令二選一手動修改文件以下內容
[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://openstack:RABBIT_PASS@controller my_ip = 192.166.66.11 [api] auth_strategy = keystone [keystone_authtoken] www_authenticate_uri = http://controller:5000/ auth_url = http://controller:5000/ memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = nova password = NOVA_PASS [vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://controller:6080/vnc_auto.html [glance] api_servers = http://controller:9292 [oslo_concurrency] lock_path = /var/lib/nova/tmp [placement] region_name = RegionOne project_domain_name = Default project_name = service auth_type = password user_domain_name = Default auth_url = http://controller:5000/v3 username = placement password = PLACEMENT_PASS
命令修改以上內容,已更換節點,使用命令需要先執行安裝軟件包
dnf install crudini -y crudini --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata crudini --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller crudini --set /etc/nova/nova.conf DEFAULT my_ip 192.166.66.11 crudini --set /etc/nova/nova.conf api auth_strategy keystone crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri http://controller:5000/ crudini --set /etc/nova/nova.conf keystone_authtoken auth_url http://controller:5000/ crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default crudini --set /etc/nova/nova.conf keystone_authtoken project_name service crudini --set /etc/nova/nova.conf keystone_authtoken username nova crudini --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS crudini --set /etc/nova/nova.conf vnc enabled true crudini --set /etc/nova/nova.conf vnc server_listen 0.0.0.0 crudini --set /etc/nova/nova.conf vnc server_proxyclient_address '$my_ip' crudini --set /etc/nova/nova.conf vnc novncproxy_base_url http://controller:6080/vnc_auto.html crudini --set /etc/nova/nova.conf glance api_servers http://controller:9292 crudini --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp crudini --set /etc/nova/nova.conf placement region_name RegionOne crudini --set /etc/nova/nova.conf placement project_domain_name Default crudini --set /etc/nova/nova.conf placement project_name service crudini --set /etc/nova/nova.conf placement auth_type password crudini --set /etc/nova/nova.conf placement user_domain_name Default crudini --set /etc/nova/nova.conf placement auth_url http://controller:5000/v3 crudini --set /etc/nova/nova.conf placement username placement crudini --set /etc/nova/nova.conf placement password PLACEMENT_PASS
-
確認計算節點是否支持硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
執行命令后返回結果是數字說明支持硬件加速,否則需要編輯
vim /etc/nova/nova.conf
文件中的[libvirt]
部分,修改以下內容[libvirt] virt_type = qemu
-
啟動nova服務和后期管理虛機的libvirt服務並設為開機自啟
systemctl start libvirtd openstack-nova-compute && systemctl enable libvirtd openstack-nova-compute
控制節點
計算節點安裝配置完成后再回到控制節點操作
先加載環境變量腳本source /admin-openrc.sh
在控制節點查看nova-compute服務
openstack compute service list --service nova-compute
同步計算節點
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

設置發現間隔時間,編輯vim /etc/nova/nova.conf
文件,修改文件
# 手動修改方式
[scheduler]
discover_hosts_in_cells_interval = 300
# 命令修改方式
crudini --set /etc/nova/nova.conf scheduler discover_hosts_in_cells_interval 300
此時再執行nova service-list
命令,會多出一個compute服務

六、Neutron服務安裝
配置節點:控制節點和計算節點
控制節點
1、創庫授權
-
連接數據庫
mysql -u root -p
-
創建neutron數據庫
CREATE DATABASE neutron;
-
授予數據庫權限,然后退出
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS'; GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS'; exit;
2、配置用戶和Endpoint
先加載環境變量source /admin-openrc.sh
-
創建neutron用戶並設置密碼為NEUTRON_PASS
openstack user create --domain default --password NEUTRON_PASS neutron
-
使用admin角色將neutron用戶添加到服務項目中
# 在service的項目上給neutron用戶關聯admin角色 openstack role add --project service --user neutron admin
3、創建Neutron服務並注冊API
-
創建Neutron服務
openstack service create --name neutron --description "OpenStack Networking" network
-
創建Neutron服務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
4、安裝並配置Neutron
安裝相關軟件包
執行此命令安裝軟件包
dnf install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables -y
公有網絡和私有網絡配置任意選擇一種即可
控制節點公有網絡
- 配置Neutron組件
編輯vim /etc/neutron/neutron.conf
文件
手動修改以下文件內容
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[DEFAULT]
core_plugin = ml2
service_plugins =
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
命令修改以上文件內容
crudini --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS
crudini --set /etc/neutron/neutron.conf nova auth_url http://controller:5000
crudini --set /etc/neutron/neutron.conf nova auth_type password
crudini --set /etc/neutron/neutron.conf nova project_domain_name default
crudini --set /etc/neutron/neutron.conf nova user_domain_name default
crudini --set /etc/neutron/neutron.conf nova region_name RegionOne
crudini --set /etc/neutron/neutron.conf nova project_name service
crudini --set /etc/neutron/neutron.conf nova username nova
crudini --set /etc/neutron/neutron.conf nova password NOVA_PASS
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
- 配置ML2組件
編輯vim /etc/neutron/plugins/ml2/ml2_conf.ini
文件
手動修改以下文件內容
[ml2]
type_drivers = flat,vlan
tenant_network_types =
mechanism_drivers = linuxbridge
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[securitygroup]
enable_ipset = true
命令修改以上文件內容
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset true
- 配置LinuxBridge
編輯vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件
手動修改以下文件內容
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan]
enable_vxlan = false
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
命令修改以上文件內容
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:ens33
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan false
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
執行以下命令
modprobe br_netfilter
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
- 配置DHCP
編輯vim /etc/neutron/dhcp_agent.ini
文件
手動修改文件以下內容
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
命令修改以上文件內容
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver linuxbridge
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
- 配置元數據代理
編輯vim /etc/neutron/metadata_agent.ini
文件
手動修改以下文件內容
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
命令修改以上文件內容
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host controller
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret METADATA_SECRET
- 為Nova配置網絡服務
編輯vim /etc/nova/nova.conf
文件
手動修改以下文件內容
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
命令修改以上內容
crudini --set /etc/nova/nova.conf neutron auth_url http://controller:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name default
crudini --set /etc/nova/nova.conf neutron user_domain_name default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password NEUTRON_PASS
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy true
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret METADATA_SECRET
控制節點私有網絡
- 配置Neutron組件
編輯vim /etc/neutron/neutron.conf
文件
手動修改以下文件內容
[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
[keystone_authtoken]
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = NEUTRON_PASS
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp
命令修改以上文件內容
crudini --set /etc/neutron/neutron.conf database connection mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:5000
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS
crudini --set /etc/neutron/neutron.conf nova auth_url http://controller:5000
crudini --set /etc/neutron/neutron.conf nova auth_type password
crudini --set /etc/neutron/neutron.conf nova project_domain_name default
crudini --set /etc/neutron/neutron.conf nova user_domain_name default
crudini --set /etc/neutron/neutron.conf nova region_name RegionOne
crudini --set /etc/neutron/neutron.conf nova project_name service
crudini --set /etc/neutron/neutron.conf nova username nova
crudini --set /etc/neutron/neutron.conf nova password NOVA_PASS
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
- 配置ML2組件
編輯vim /etc/neutron/plugins/ml2/ml2_conf.ini
文件
手動修改以下文件內容
[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = true
命令修改以上文件內容
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers flat,vlan,vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge,l2population
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges 1:1000
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset true
- 配置LinuxBridge
編輯vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件
手動修改以下文件內容
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan]
enable_vxlan = true
local_ip = 192.166.66.10
l2_population = true
[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
命令修改以上文件內容
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:ens33
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.166.66.10
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
執行以下三條命令
modprobe br_netfilter
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-ip6tables
- 配置L3
編輯vim /etc/neutron/l3_agent.ini
文件,手動修改以下內容
[DEFAULT]
interface_driver = linuxbridge
命令修改以上內容
crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver linuxbridge
- 配置DHCP
編輯vim /etc/neutron/dhcp_agent.ini
文件
手動修改文件以下內容
[DEFAULT]
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
命令修改以上文件內容
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver linuxbridge
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
- 配置元數據代理
編輯vim /etc/neutron/metadata_agent.ini
文件
手動修改以下文件內容
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = METADATA_SECRET
memcache_servers = controller:11211
命令修改以上文件內容
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host controller
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret METADATA_SECRET
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211
- 為Nova配置網絡服務
編輯vim /etc/nova/nova.conf
文件
手動修改以下文件內容
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET
命令修改以上內容
crudini --set /etc/nova/nova.conf neutron auth_url http://controller:5000
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name default
crudini --set /etc/nova/nova.conf neutron user_domain_name default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password NEUTRON_PASS
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy true
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret METADATA_SECRET
5、控制節點安裝確認
-
添加sudoer權限
修改
vim /etc/neutron/neutron.conf
文件,修改以下內容[privsep] user = neutron helper_command = sudo privsep-helper
修改
vim /etc/sudoers.d/neutron
文件,添加以下內容后強制保存退出neutron ALL = (root) NOPASSWD: ALL
-
網絡服務初始化腳本需要一個軟鏈接指向/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
-
重啟nova-api服務
systemctl restart openstack-nova-api
-
啟用網絡服務並設為開機自啟,兩種網絡都需要要執行以下兩條命令
systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent && systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
-
對於私有網絡,還應該啟動L3服務並設為開機自啟
systemctl restart neutron-l3-agent && systemctl enable neutron-l3-agent
-
查看網絡代理
openstack network agent list
控制節點成功配置公有網絡后,應輸出如下圖
控制節點成功配置私有網絡后,應輸出如下圖
計算節點
-
安裝相關軟件包
dnf install openstack-neutron-linuxbridge ebtables ipset -y
公有網絡和私有網絡配置任意選擇一種即可,但要與控制節點保持一致
-
配置網絡組件
編輯
vim /etc/neutron/neutron.conf
文件,手動修改以下文件內容[DEFAULT] transport_url = rabbit://openstack:RABBIT_PASS@controller auth_strategy = keystone [keystone_authtoken] www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = neutron password = NEUTRON_PASS [oslo_concurrency] lock_path = /var/lib/neutron/tmp
命令修改以上文件
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@controller crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri http://controller:5000 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url http://controller:5000 crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers controller:11211 crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name default crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name default crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron crudini --set /etc/neutron/neutron.conf keystone_authtoken password NEUTRON_PASS crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path /var/lib/neutron/tmp
計算節點公有網絡
-
配置LinuxBridge
編輯
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件,手動修改以下文件內容[linux_bridge] physical_interface_mappings = provider:ens33 [vxlan] enable_vxlan = false [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
命令修改以上文件內容
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:ens33 crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan false crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
執行以下三條命令
modprobe br_netfilter sysctl net.bridge.bridge-nf-call-iptables sysctl net.bridge.bridge-nf-call-ip6tables
計算節點私有網絡
-
配置LinuxBridge
編輯
vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件,手動修改以下文件內容[linux_bridge] physical_interface_mappings = provider:ens33 [vxlan] enable_vxlan = true local_ip = 192.166.66.11 l2_population = true [securitygroup] enable_security_group = true firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
命令修改以上文件內容
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings provider:ens33 crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 192.166.66.11 crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
執行以下三條命令
modprobe br_netfilter sysctl net.bridge.bridge-nf-call-iptables sysctl net.bridge.bridge-nf-call-ip6tables
-
為Nova配置網絡服務
編輯
vim /etc/nova/nova.conf
文件,手動修改以下內容[neutron] auth_url = http://controller:5000 auth_type = password project_domain_name = default user_domain_name = default region_name = RegionOne project_name = service username = neutron password = NEUTRON_PASS
命令修改以上文件內容
crudini --set /etc/nova/nova.conf neutron auth_url http://controller:5000 crudini --set /etc/nova/nova.conf neutron auth_type password crudini --set /etc/nova/nova.conf neutron project_domain_name default crudini --set /etc/nova/nova.conf neutron user_domain_name default crudini --set /etc/nova/nova.conf neutron region_name RegionOne crudini --set /etc/nova/nova.conf neutron project_name service crudini --set /etc/nova/nova.conf neutron username neutron crudini --set /etc/nova/nova.conf neutron password NEUTRON_PASS
6、計算節點安裝確認
-
添加sudoer權限
修改
vim /etc/neutron/neutron.conf
文件,修改以下內容[privsep] user = neutron helper_command = sudo privsep-helper
修改
vim /etc/sudoers.d/neutron
文件,添加以下內容后強制保存退出neutron ALL = (root) NOPASSWD: ALL
-
關閉Selinux
編輯
vim /etc/selinux/config
文件# 修改SELINUX的值,保存退出 SELINUX=permissive #執行以下命令,使配置立即生效 setenforce 0
-
重啟計算服務
systemctl restart openstack-nova-compute
-
啟動LinuxBridge代理並設為開機自啟
systemctl start neutron-linuxbridge-agent && systemctl enable neutron-linuxbridge-agent
-
回到控制節點再次執行查看網絡代理命令
openstack network agent list
計算節點配置公有網絡后,應輸出如下圖,多出一個計算節點的網橋
計算節點配置私有網絡后,應輸出如下圖,同樣也是多出一個計算節點的網橋
七、Horizon服務安裝
配置節點:控制節點或者計算節點
此處以安裝到計算節點為例,兩節點中網絡配置為私有網絡
1. 安裝軟件包
dnf install openstack-dashboard -y
2. 配置Horizon文件
編輯 vim /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',
}
}
# 啟用身份API版本3
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
TIME_ZONE = "Asia/Shanghai"
# 上面幾項修改即可,以下為新增信息
# 啟用對域的支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
# 配置API版本
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
# 配置默認域
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
# 配置默認角色
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
# 啟用對第3層網絡服務的支持,若是公有網絡則需要禁用對第3層網絡服務的支持,將True改為False
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': True,
'enable_quotas': True,
'enable_distributed_router': True,
'enable_ha_router': True,
'enable_lb': True,
'enable_firewall': True,
'enable_vpn': True,
'enable_fip_topology_check': True,
}
編輯vim /etc/httpd/conf.d/openstack-dashboard.conf
文件,添加以下內容
WSGIApplicationGroup %{GLOBAL}
重建apache的dashboard配置文件
# 執行以下兩條命令
cd /usr/share/openstack-dashboard
python3 manage.py make_web_conf --apache > /etc/httpd/conf.d/openstack-dashboard.conf
建立策略文件(policy.json)的軟鏈接
ln -s /etc/openstack-dashboard /usr/share/openstack-dashboard/openstack_dashboard/conf
3. 安裝確認
重啟Web服務器和會話存儲服務
# 計算節點執行,啟動httpd服務並設為開機自啟
systemctl start httpd && systemctl enable httpd
# 控制節點執行,重啟memcached會話存儲服務
systemctl restart memcached
4. 訪問Dashboard
http://192.166.66.11
成功訪問頁面如下

文件配置正確會自動填入域Default,否則可能配置有問題,手動輸入也會登錄失敗,若不記得用戶名密碼可以查看環境變量腳本

輸入用戶名密碼就可以成功訪問啦

此次安裝除SQL數據庫外,其它全部使用默認密碼!若自己設置密碼一定要記清楚,密碼太多容易搞錯,安裝過程一定要細心,用虛擬機安裝要多使用快照功能
其它方式安裝可以參考這三篇文章
Centos 8使用devstack快速安裝openstack最新版
Centos 8中使用Packstack(RDO)快速安裝openstack Victoria版
Ubuntu 20使用devstack快速安裝openstack最新版