Centos 8安裝部署openstack Victoria版


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、基本配置

配置節點:控制節點和計算節點

  1. 修改主機名

    # 修改控制節點
    hostnamectl set-hostname controller
    exec bash
    # 修改計算節點
    hostnamectl set-hostname compute
    exec bash
    
  2. 更換網絡服務

    在安裝部署OpenStack時,OpenStack的網絡服務會與NetworkManager服務產生沖突,二者無法一起正常工作,需要使用Network

    # 安裝Network服務
    dnf install network-scripts -y
    # 停用NetworkManager並禁止開機自啟
    systemctl stop NetworkManager && systemctl disable NetworkManager
    # 啟用 Network並設置開機自啟
    systemctl start network && systemctl enable network
    
  3. 設置靜態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
    
  4. 關閉所有節點防火牆並禁止開機自啟

    systemctl stop firewalld && systemctl disable firewalld
    
  5. 配置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、基礎服務

配置節點:控制節點和計算節點

  1. 時間同步,先執行命令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
    
  2. 重啟chrony服務並開機自啟

    systemctl restart chronyd && systemctl enable chronyd
    
  3. 安裝openstack存儲庫

    dnf config-manager --enable powertools
    dnf install centos-release-openstack-victoria -y
    
  4. 若網絡太慢,可以修改為國內的yum源,修改方式請查看官方操作步驟,各源地址如下

    華為	https://mirrors.huaweicloud.com/
    清華	https://mirrors.tuna.tsinghua.edu.cn/
    阿里雲	https://mirrors.aliyun.com/
    網易	https://mirrors.163.com/
    中科大	https://mirrors.ustc.edu.cn/
    
  5. 升級所有節點上的軟件包

    dnf upgrade -y
    
  6. 安裝openstack客戶端和openstack-selinux

    dnf install python3-openstackclient openstack-selinux -y
    
3、SQL數據庫

配置節點:僅控制節點

  1. 安裝Mariadb數據庫,也可安裝MySQL數據庫

    dnf install mariadb mariadb-server python3-PyMySQL -y
    
  2. 創建和編輯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
    
  3. 啟動數據庫並設置為開機自啟

    systemctl start mariadb && systemctl enable mariadb
    
  4. 保護數據庫服務

    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、消息隊列

配置節點:僅控制節點

  1. 安裝軟件包

    dnf install rabbitmq-server -y
    
  2. 啟動消息隊列服務並設置為開機自啟

    systemctl start rabbitmq-server && systemctl enable rabbitmq-server
    
  3. 添加openstack用戶並設置密碼

    rabbitmqctl add_user openstack RABBIT_PASS
    
  4. 給openstack用戶可讀可寫可配置權限

    rabbitmqctl set_permissions openstack ".*" ".*" ".*"
    
  5. 為了方便監控,啟用Web界面管理插件

    rabbitmq-plugins enable rabbitmq_management
    

    安裝成功后通過命令netstat -lntup查看多了一個15672的服務端口,通過瀏覽器訪問可以成功登錄RabbitMQ,默認管理員賬號密碼都是guest,登錄成功頁面如下圖

5、Memcached緩存

配置節點:僅控制節點

  1. 安裝軟件包

    dnf install memcached python3-memcached -y
    
  2. 編輯vim /etc/sysconfig/memcached文件,將OPTTONS行修改成如下信息

    OPTIONS="-l 127.0.0.1,::1,controller"
    
  3. 啟動Memcached服務並設置開機自啟

    systemctl start memcached && systemctl enable memcached
    
6、Etcd集群

配置節點:僅控制節點

  1. 安裝軟件包

    dnf install etcd -y
    
  2. 編輯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"
    
    
  3. 啟動Etcd服務並設置開機自啟

    systemctl start etcd && systemctl enable etcd
    

二、KeyStone服務安裝

配置節點:僅控制節點

1、創庫授權
  1. 連接數據庫

    mysql -u root -p
    
  2. 創建keystone數據庫

    CREATE DATABASE keystone;
    
  3. 授予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相關軟件包
  1. 安裝軟件

    dnf install openstack-keystone httpd python3-mod_wsgi -y
    
  2. 修改/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
    
  3. 初始化數據庫

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

    同步前后可以先看一下數據庫信息,下圖是操作前后數據庫信息變化

  4. 初始化Fernet,執行如下兩條命令

    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
    
  5. 引導身份認證服務

    keystone-manage bootstrap --bootstrap-password 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服務
  1. 編輯vim /etc/httpd/conf/httpd.conf文件,添加如下信息

    ServerName controller
    
  2. 創建/usr/share/keystone/wsgi-keystone.conf文件鏈接

    ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
    
  3. 啟動httpd服務 並設置開機自啟

    systemctl start httpd && systemctl enable httpd
    
  4. 創建環境變量腳本來配置管理員賬號,執行命令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、創建域,項目,用戶和角色
  1. 創建域,程序中已存在默認域,此命令只是一個創建域的例子,可以不執行

    openstack domain create --description "An Example Domain" example
    
  2. 創建service項目,也叫做租戶

    openstack project create --domain default --description "Service Project" service
    
  3. 創建myproject測試項目

    openstack project create --domain default --description "Demo Project" myproject
    
  4. 創建myuser用戶

    openstack user create --domain default --password-prompt myuser
    # 執行命令后需要設置用戶密碼,輸入兩次相同的密碼
    
  5. 創建myrole角色

    openstack role create myrole
    
  6. 將myrole角色添加到myproject項目和myuser用戶

    openstack role add --project myproject --user myuser myrole
    
  7. 編輯環境變量腳本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

  8. 驗證token令牌

    # 驗證KeyStone服務是否正常
    openstack token issue
    

    出現如下圖信息就說明KeyStone配置完成啦!

  9. 每次執行openstack命令之前都需要先執行腳本source /admin-openrc.sh或者. /admin-openrc.sh,所以也可以設置為開機自動加載環境變量,將命令添加到.bashrc中即可,如圖

三、Glance服務安裝

配置節點:僅控制節點

1、創庫授權
  1. 連接數據庫

    mysql -u root -p
    
  2. 創建glance數據庫

    CREATE DATABASE glance;
    
  3. 授予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

  1. 創建glance用戶並設置密碼為GLANCE_PASS,此處與上面創建用戶的不同之處是未使用交互式的方式,直接將密碼放入了命令中

    openstack user create --domain default --password GLANCE_PASS glance
    
  2. 使用admin角色將Glance用戶添加到服務項目中

    # 在service的項目上給glance用戶關聯admin角色
    openstack role add --project service --user glance admin
    
3、創建glance服務並注冊API
  1. 創建glance服務

    openstack service create --name glance --description "OpenStack Image" image
    
  2. 注冊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
  1. 安裝glance軟件包,安裝若出現依賴問題,請更換安裝源

    dnf install openstack-glance -y
    
  2. 編輯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/
    
  3. 同步數據庫

    su -s /bin/sh -c "glance-manage db_sync" glance
    
  4. 啟動glance服務並設置開機自啟

    systemctl start openstack-glance-api && systemctl enable openstack-glance-api
    
  5. 下載一個測試鏡像先上傳到系統中,然后上傳到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、創庫授權
  1. 連接數據庫

    mysql -u root -p
    
  2. 創建Plancement數據庫

    CREATE DATABASE placement;
    
  3. 授予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

  1. 創建一個plancement用戶並設置密碼為PLACEMENT_PASS

    openstack user create --domain default --password PLACEMENT_PASS placement
    
  2. 使用admin角色將Placement用戶添加到服務項目中

    # 在service的項目上給placement用戶關聯admin角色
    openstack role add --project service --user placement admin
    
3、創建Placement服務並注冊API
  1. 創建Plancement服務

    openstack service create --name placement --description "Placement API" placement
    
  2. 創建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
  1. 安裝Plancement軟件包

    dnf install openstack-placement-api -y
    
  2. 編輯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
    
  3. 同步數據庫

    su -s /bin/sh -c "placement-manage db sync" placement
    
  4. 重啟httpd服務

    systemctl restart httpd
    
  5. 檢查Placement服務狀態

    placement-status upgrade check
    

    出現如下圖所示,說明安裝配置成功

五、Nova服務安裝

配置節點:控制節點和計算節點

Nova是服務是openstack最核心的服務,由它來創建雲主機,其它服務都是協助,同時Nova組件也是最多的,由於Nova組件較多,此處控制節點和計算節點分開寫,再次提醒上文提到【配置節點:控制節點和計算節點】指的是相同的操作需要在控制節點和計算節點都執行一遍,這里是分開講解安裝步驟的,先從控制節點開始

控制節點

1、創庫授權
  1. 連接數據庫

    mysql -u root -p
    
  2. 創建nova_api,nova和nova_cell0數據庫

    CREATE DATABASE nova_api;
    CREATE DATABASE nova;
    CREATE DATABASE nova_cell0;
    
  3. 分別授予三個數據庫權限,然后退出

    # 授權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

  1. 創建nova用戶並設置密碼為NOVA_PASS

    openstack user create --domain default --password NOVA_PASS nova
    
  2. 使用admin角色將nova用戶添加到服務項目中

    # 在service的項目上給nova用戶關聯admin角色
    openstack role add --project service --user nova admin
    
3、創建Nova服務並注冊API
  1. 創建Nova服務

    openstack service create --name nova --description "OpenStack Compute" compute
    
  2. 創建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
  1. 安裝nova相關軟件包

    dnf install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y
    
  2. 編輯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
    
  3. 同步數據庫

    # 同步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
    
  4. 啟動服務並設為開機自啟

    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
    
  5. 驗證服務是否成功啟動,使用命令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
  1. 安裝軟件包

    dnf install openstack-nova-compute -y
    
  2. 編輯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
    
  3. 確認計算節點是否支持硬件加速

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

    執行命令后返回結果是數字說明支持硬件加速,否則需要編輯vim /etc/nova/nova.conf文件中的[libvirt]部分,修改以下內容

    [libvirt]
    virt_type = qemu
    
  4. 啟動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、創庫授權
  1. 連接數據庫

    mysql -u root -p
    
  2. 創建neutron數據庫

    CREATE DATABASE neutron;
    
  3. 授予數據庫權限,然后退出

    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

  1. 創建neutron用戶並設置密碼為NEUTRON_PASS

    openstack user create --domain default --password NEUTRON_PASS neutron
    
  2. 使用admin角色將neutron用戶添加到服務項目中

    # 在service的項目上給neutron用戶關聯admin角色
    openstack role add --project service --user neutron admin
    
3、創建Neutron服務並注冊API
  1. 創建Neutron服務

    openstack service create --name neutron --description "OpenStack Networking" network
    
  2. 創建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

公有網絡和私有網絡配置任意選擇一種即可

控制節點公有網絡
  1. 配置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
  1. 配置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
  1. 配置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
  1. 配置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
  1. 配置元數據代理

編輯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
  1. 為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
控制節點私有網絡
  1. 配置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
  1. 配置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
  1. 配置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
  1. 配置L3

編輯vim /etc/neutron/l3_agent.ini文件,手動修改以下內容

[DEFAULT]
interface_driver = linuxbridge

命令修改以上內容

crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver linuxbridge
  1. 配置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
  1. 配置元數據代理

編輯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
  1. 為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、控制節點安裝確認
  1. 添加sudoer權限

    修改vim /etc/neutron/neutron.conf文件,修改以下內容

    [privsep]
    user = neutron
    helper_command = sudo privsep-helper
    

    修改vim /etc/sudoers.d/neutron文件,添加以下內容后強制保存退出

    neutron ALL = (root) NOPASSWD: ALL
    
  2. 網絡服務初始化腳本需要一個軟鏈接指向/etc/neutron/plugins/ml2/ml2_conf.ini文件,創建軟鏈接

    ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
    
  3. 同步數據庫

    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
    
  4. 重啟nova-api服務

    systemctl restart openstack-nova-api
    
  5. 啟用網絡服務並設為開機自啟,兩種網絡都需要要執行以下兩條命令

    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
    
  6. 對於私有網絡,還應該啟動L3服務並設為開機自啟

    systemctl restart neutron-l3-agent && systemctl enable neutron-l3-agent
    
  7. 查看網絡代理

    openstack network agent list
    

    控制節點成功配置公有網絡后,應輸出如下圖

    控制節點成功配置私有網絡后,應輸出如下圖

計算節點

  1. 安裝相關軟件包

    dnf install openstack-neutron-linuxbridge ebtables ipset -y
    

公有網絡和私有網絡配置任意選擇一種即可,但要與控制節點保持一致

  1. 配置網絡組件

    編輯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
    
計算節點公有網絡
  1. 配置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
    
計算節點私有網絡
  1. 配置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
    
  2. 為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、計算節點安裝確認
  1. 添加sudoer權限

    修改vim /etc/neutron/neutron.conf文件,修改以下內容

    [privsep]
    user = neutron
    helper_command = sudo privsep-helper
    

    修改vim /etc/sudoers.d/neutron文件,添加以下內容后強制保存退出

    neutron ALL = (root) NOPASSWD: ALL
    
  2. 關閉Selinux

    編輯vim /etc/selinux/config文件

    # 修改SELINUX的值,保存退出
    SELINUX=permissive
    
    #執行以下命令,使配置立即生效
    setenforce 0
    
  3. 重啟計算服務

    systemctl restart openstack-nova-compute
    
  4. 啟動LinuxBridge代理並設為開機自啟

    systemctl start neutron-linuxbridge-agent && systemctl enable neutron-linuxbridge-agent
    
  5. 回到控制節點再次執行查看網絡代理命令

    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最新版


免責聲明!

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



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