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",