openEuler 22.03 LTS SP3源碼編譯部署OpenStack-Caracal
- 說明
- 機器詳情
- 安裝操作系統注意事項
- 基礎準備
- Controller節點 && Compute節點 && Block節點
- 關閉防火墻
- 關閉selinux
- 設置靜態IP
- 更新
- 安裝前準備
- Controller節點 && Compute節點 && Block節點
- 設置主機名
- 配置hosts
- 驗證配置
- 安裝 SQL DataBase
- Controller節點
- 安裝軟件包
- 編輯配置文件
- 啟動服務
- 初始化配置
- 安裝 RabbitMQ
- Controller節點
- 安裝軟件包
- 啟動服務
- 添加openstack用戶
- 設置openstack用戶權限,允許進行配置、寫、讀
- 安裝 Memcached
- Controller節點
- 安裝軟件包
- 編輯配置文件
- 啟動服務
- 驗證
- 安裝Keystone
- Controller節點
- 下載源碼包
- 創建數據庫
- 安裝httpd、mod_wsgi軟件包
- 解壓keystone-25.0.0.tar.gz
- 安裝tox
- 安裝postgresql-devel
- 安裝openldap-devel
- 安裝python3-devel
- 修改tox.ini
- 生成示例配置文件
- 安裝所需依賴包
- 把SQLAlchemy的版本降為1.4.49
- 編譯安裝
- 創建/etc/keystone文件夾
- 復制etc/目錄下的內容到/etc/keystone
- 編輯keystone配置文件
- 同步數據庫
- 初始化Fernet密鑰倉庫
- 啟動服務
- 配置Apache HTTP server
- 啟動Apache HTTP服務
- 創建腳本文件
- 下載openstackclient源碼包
- 解壓python-openstackclient-6.6.0.tar.gz
- 安裝依賴包
- 編譯安裝
- 創建domain
- 創建project
- 創建user
- 創建role
- 將role添加到project和user
- 驗證
- 安裝Glance
- Controller節點
- 下載源碼包
- 創建數據庫
- 創建glance用戶
- 將glacne添加到admin中去
- 創建glance服務實體
- 創建Image服務API端點
- 解壓glance-28.0.1.tar.gz
- 安裝依賴包
- 編譯安裝
- 創建/etc/glance文件夾
- 復制etc/文件夾下的內容到/etc/glance
- 創建并編輯glance配置文件
- 同步數據庫
- 創建/var/lib/glance/images/文件夾并修改權限
- 編寫servie并啟動服務
- 驗證
- 安裝Placement
- Controller節點
- 下載源碼包
- 創建數據庫
- 創建placement用戶
- 將用戶添加到admin
- 創建placement服務實體
- 創建API 服務端點
- 解壓openstack-placement-11.0.0.tar.gz
- 修改tox.ini
- 生成示例配置文件
- 安裝依賴包
- 編譯安裝
- 創建/etc/placement文件夾
- 復制配置文件
- 編輯placement文件
- 同步數據庫
- 安裝uwsgi
- 創建service并啟動
- 重啟httpd服務
- 驗證1
- 下載osc-placement-4.3.0.tar.gz
- 解壓osc-placement-4.3.0.tar.gz
- 安裝依賴包
- 編譯安裝
- 驗證2
- 安裝Nova
- Controller節點
- 下載源碼包
- 創建數據庫
- 創建nova用戶
- 添加到admin
- 創建nova服務實體
- 創建API服務端點
- 解壓nova-29.0.1.tar.gz
- 修改tox.ini
- 生成示例配置文件
- 安裝依賴包
- 編譯安裝
- 創建/etc/nova文件夾
- 復制etc/nova目錄下的內容到/etc/nova
- 編輯nova配置文件
- 創建/var/lib/nova/tmp
- 解壓noVNC-master.zip
- 復制到/usr/share/novnc
- 創建vnc_auto.html鏈接文件
- 同步數據庫
- 創建service并啟動
- Compute節點
- 編譯安裝libvirt-7.0.0
- 安裝dnsmasq
- 重啟dnsmasq服務
- 下載源碼包
- 解壓nova-29.0.1.tar.gz
- 安裝tox
- 修改tox.ini
- 生成示例配置文件
- 安裝依賴包
- 降低SQLAlchemy的版本為1.4.49
- 編譯安裝
- 創建/etc/nova文件夾
- 復制etc/nova目錄下的內容到/etc/nova
- 編輯nova配置文件
- 修改虛擬類型
- 安裝libvirt-python
- 創建/var/lib/nova/instances/與/var/lib/nova/tmp并修改權限
- 編寫service并啟動
- 驗證(controller)
- 安裝qemu-img(Controller && Compute && Block)
- 安裝Neutron(使用的是OVN)
- 編譯安裝OVN(Controller節點 && Compute節點)
- 下載OVN源碼包
- 下在與之對應的OVS源碼包
- 解壓
- 刪除OVS空目錄
- 解壓OVS壓縮包并移動到OVN目錄下并重命名為OVS
- 進入ovs目錄執行下面命令,對ovs進行編譯安裝
- 回到ovn目錄執行下面命令對ovn進行編譯安裝
- Controller節點
- 下載源碼包
- 創建數據庫
- 創建neutron用戶
- 添加到admin
- 創建neutron服務實體
- 創建API端點
- 解壓neutron-24.0.0.tar.gz
- 修改tox.ini
- 生成示例配置文件
- 安裝依賴包
- 編譯安裝
- 創建/etc/neutron文件夾
- 復制文件
- 編輯neutron配置文件
- 同步數據庫
- 配置與啟動OVS
- 編寫service并啟動
- 重啟服務
- Compute節點
- 解壓neutron-24.0.0.tar.gz
- 修改tox.ini
- 生成示例配置文件
- 安裝依賴包
- 編譯安裝
- 創建/etc/neutron文件夾
- 復制文件
- 編輯neutron配置文件
- 配置與啟動OVS
- 啟動ovn-controller服務
- 設置OVN
- 編寫服務并啟動
- 配置驗證(Controller)
- 配置OVN網絡
- Controller節點 && Compute節點
- Controller節點
- 可能遇到的問題解決辦法
- 問題1
- 問題2
- 安裝Dashboard
- Controller節點
- 下載源碼包
- 創建/etc/openstack_dashboard目錄
- 解壓horizon-24.0.0.tar.gz
- 安裝依賴包
- 復制local_settings.py.example為local_settings.py并編輯
- 安裝pymemcache
- 編譯
- 收集靜態資源
- 把fontawesome.scss改為font-awesome.scss
- 修改_checkboxes.scss
- 修改_radiobuttons.scss
- 修改WEBROOT
- 生成horizon_wsgi.py
- 生成httpd的配置文件
- 修改生成的httpd的配置文件
- 修改權限
- 查詢啟動httpd的用戶和組
- 修改base.html
- 在編譯一下
- 重啟httpd服務
- 安裝Cinder
- Controller節點
- 下載源碼包
- 創建數據庫
- 創建cinder用戶
- 添加到admin
- 創建 cinderv3 服務實體
- 創建API 端點
- 解壓cinder-24.0.0.tar.gz
- 修改tox.ini
- 生成示例配置文件
- 安裝依賴包
- 編譯安裝
- 創建/etc/cinder目錄
- 移動文件到/etc/cinder目錄
- 編輯/etc/cinder/cinder.conf
- 同步數據庫
- 編寫service并啟動
- 驗證
- Block節點
- 安裝targetcli
- 解壓cinder-24.0.0.tar.gz
- 修改tox.ini
- 安裝tox
- 生成示例配置文件
- 安裝依賴包
- 把SQLAlchemy的版本降為1.4.49
- 安裝pymysql
- 編譯安裝
- 創建/etc/cinder目錄
- 移動文件到/etc/cinder目錄
- 編輯/etc/cinder/cinder.conf
- 編輯/etc/lvm/lvm.conf
- 編寫service
- 創建volume group
- 啟動服務
- Compute節點
- 修改/etc/nova/nova.conf
- 安裝
- 重啟服務
說明
本教程只用于學習,雖然能夠成功運行,但是還有一些bug
機器詳情
主機名 | IP | 磁盤 | CPU | 內存 |
---|---|---|---|---|
controller | ens160:192.168.46.31/24 ens192:不配置IP地址 | 100G | 2C | 8G |
compute1 | ens160:192.168.46.32/24 ens192:不配置IP地址 | 100G | 2C | 8G |
block1 | ens160:192.168.46.33/24 | sda:50G sdb:100G | 2C | 4G |
安裝操作系統注意事項
安裝操作只需注意的一步是Software Selection要勾選Development Tools
這會自動地幫我們安裝一些基礎的編譯環境,如果你沒有勾選,也無大礙,在編譯安裝時可能會遇到
報錯說缺失一些編譯環境,根據報錯安裝與之對應地編譯環境即可解決
基礎準備
Controller節點 && Compute節點 && Block節點
關閉防火墻
systemctl stop firewalld && systemctl disable firewalld
關閉selinux
vim /etc/selinux/config
SELINUX=disabled
設置靜態IP
nmtui
設置ens160網卡的IP地址為靜態IP地址
設置ens192網卡不獲取到IP地址(即設置為Disabled)
網卡配置生效命令
nmcli c reload
nmcli c up ens160
nmcli c up ens192
更新
dnf update -y
重啟一下機器
安裝前準備
Controller節點 && Compute節點 && Block節點
設置主機名
hostnamectl set-hostname controller
hostnamectl set-hostname compute1
hostnamectl set-hostname block1
配置hosts
vim /etc/hosts
192.168.46.31 controller
192.168.46.32 compute1
192.168.46.33 block1
驗證配置
# Controller節點
ping -c 4 www.baidu.com
ping -c 4 compute1
ping -c 4 block1
# Compute節點
ping -c 4 www.baidu.com
ping -c 4 controller
ping -c 4 block1
# Block節點
ping -c 4 www.baidu.com
ping -c 4 controller
ping -c 4 compute1
安裝 SQL DataBase
Controller節點
安裝軟件包
dnf install mariadb mariadb-server python3-PyMySQL -y
編輯配置文件
vim /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = Controller-IP
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
Controller-IP為Controller節點的IP地址
啟動服務
systemctl restart mariadb.service && systemctl enable mariadb.service
初始化配置
mysql_secure_installation
安裝 RabbitMQ
Controller節點
安裝軟件包
dnf install rabbitmq-server -y
啟動服務
systemctl restart rabbitmq-server.service && systemctl enable rabbitmq-server.service
添加openstack用戶
rabbitmqctl add_user openstack RABBIT_PASS
RABBIT_PASS為設置的密碼
設置openstack用戶權限,允許進行配置、寫、讀
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
安裝 Memcached
Controller節點
安裝軟件包
dnf install memcached python3-memcached -y
編輯配置文件
vim /etc/sysconfig/memcached
OPTIONS="-l 127.0.0.1,::1,controller"
啟動服務
systemctl restart memcached.service && systemctl enable memcached.service
驗證
memcached-tool controller stats
安裝Keystone
Controller節點
下載源碼包
下載地址:https://releases.openstack.org/caracal/index.html#caracal-keystone
所需下載的源碼包:keystone-25.0.0.tar.gz
創建數據庫
mysql -u root -p
CREATE DATABASE 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
KEYSTONE_DBPASS為要設置的密碼
安裝httpd、mod_wsgi軟件包
dnf install httpd mod_wsgi -y
解壓keystone-25.0.0.tar.gz
tar -xvf keystone-25.0.0.tar.gz
cd keystone-25.0.0/
安裝tox
pip3 install tox -i https://pypi.tuna.tsinghua.edu.cn/simple
安裝postgresql-devel
dnf -y install postgresql-devel
安裝openldap-devel
dnf -y install openldap-devel
安裝python3-devel
dnf -y install python3-devel
修改tox.ini
vim tox.ini
生成示例配置文件
tox -egenconfig
tox -egenpolicy
安裝所需依賴包
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
把SQLAlchemy的版本降為1.4.49
pip3 install SQLAlchemy==1.4.49 -i https://pypi.tuna.tsinghua.edu.cn/simple
編譯安裝
python3 setup.py install
創建/etc/keystone文件夾
mkdir /etc/keystone
復制etc/目錄下的內容到/etc/keystone
cp -r etc/* /etc/keystone/
編輯keystone配置文件
cp /etc/keystone/keystone.conf.sample /etc/keystone/keystone.conf
cp /etc/keystone/keystone.policy.yaml.sample /etc/keystone/keystone.policy.yaml
vim /etc/keystone/keystone.conf
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
KEYSTONE_DBPASS為創建keystone用戶設置的數據庫訪問密碼
同步數據庫
useradd keystone
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
ADMIN_PASS為準備設置管理員用戶的密碼
如果遇到如下的錯誤
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt Traceback (most recent call last):
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib/python3.9/site-packages/keystone/identity/backends/sql.py", line 209, in get_user_by_name
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt user_ref = query.one()
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib64/python3.9/site-packages/sqlalchemy/orm/query.py", line 2870, in one
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt return self._iter().one()
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib64/python3.9/site-packages/sqlalchemy/engine/result.py", line 1522, in one
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt return self._only_one_row(
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib64/python3.9/site-packages/sqlalchemy/engine/result.py", line 562, in _only_one_row
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt raise exc.NoResultFound(
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt sqlalchemy.exc.NoResultFound: No row was found when one was required
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt During handling of the above exception, another exception occurred:
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt Traceback (most recent call last):
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib/python3.9/site-packages/keystone/cmd/bootstrap.py", line 205, in _bootstrap_admin_user
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt user = PROVIDERS.identity_api.get_user_by_name(
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib/python3.9/site-packages/keystone/common/manager.py", line 115, in wrapped
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt __ret_val = __f(*args, **kwargs)
2024-04-13 14:21:16.788 274641 ERROR passlib.handlers.bcrypt File "/usr/local/lib/python3.9/site-packages/keystone/identity/core.py",