当前位置: 首页 > article >正文

openEuler 22.03 LTS SP4源码编译部署OpenStack-Dalmatian

openEuler 22.03 LTS SP4源码编译部署OpenStack-Dalmatian

  • 说明
  • 机器详情
  • 安装操作系统注意事项
  • 基础准备
    • Controller节点 && Compute节点 && Block节点
      • 关闭防火墙
      • 关闭selinux
      • 设置静态IP
      • 更新
      • 设置时区及时间同步
  • 安装前准备
    • Controller节点 && Compute节点 && Block节点
      • 设置主机名
      • 配置hosts
      • 验证配置
  • 安装 SQL DataBase
    • Controller节点
      • 安装软件包
      • 编辑配置文件
      • 启动服务
      • 初始化配置
  • 安装 RabbitMQ
    • Controller节点
      • 安装软件包
      • 启动服务
      • 添加openstack用户
      • 设置openstack用户权限,允许进行配置、写、读
  • 安装 Memcached
    • Controller节点
      • 安装软件包
      • 编辑配置文件
      • 启动服务
      • 验证
  • 安装Keystone
    • Controller节点
      • 下载源码包
      • 创建数据库
      • 安装httpd、mod_wsgi软件包
      • 解压keystone-26.0.0.tar.gz
      • 安装tox
      • 安装postgresql-devel
      • 安装openldap-devel
      • 安装python3-devel
      • 修改tox.ini
      • 生成示例配置文件
      • 安装所需依赖包
      • 把SQLAlchemy的版本降为1.4.49
      • 编译安装
      • 降低bcrypt的版本
      • 创建/etc/keystone文件夹
      • 复制etc/目录下的内容到/etc/keystone
      • 编辑keystone配置文件
      • 创建keystone用户并提供sudo权限
      • 同步数据库
      • 初始化Fernet密钥仓库
      • 启动服务
      • 配置Apache HTTP server
      • 重新启动Apache HTTP服务
      • 创建脚本文件
      • 下载openstackclient源码包
      • 解压python-openstackclient-7.1.4.tar.gz
      • 安装依赖包
      • 编译安装
      • 创建domain
      • 创建project
      • 创建user
      • 创建role
      • 将role添加到project和user
      • 验证
  • 安装Glance
    • Controller节点
      • 下载源码包
      • 创建数据库
      • 创建glance用户
      • 将glacne添加到admin中去
      • 创建glance服务实体
      • 创建Image服务API端点
      • 解压glance-29.0.0.tar.gz
      • 修改tox.ini
      • 生成示例配置文件
        • 遇到的问题
        • 原因
        • 解决办法
      • 安装依赖包
      • 编译安装
      • 创建/etc/glance文件夹
      • 复制etc/文件夹下的内容到/etc/glance
      • 创建并编辑glance配置文件
      • 创建glance用户并提供sudo权限
      • 同步数据库
      • 编写servie并启动服务
      • 验证
  • 安装Placement
    • Controller节点
      • 下载源码包
      • 创建数据库
      • 创建placement用户
      • 将用户添加到admin
      • 创建placement服务实体
      • 创建API 服务端点
      • 解压openstack-placement-12.0.0.tar.gz
      • 修改tox.ini
      • 生成示例配置文件
      • 安装依赖包
      • 编译安装
      • 创建/etc/placement文件夹
      • 复制配置文件
      • 编辑placement文件
      • 创建placement用户并提供sudo权限
      • 同步数据库
      • 安装uwsgi
      • 创建service并启动
      • 重启httpd服务
      • 验证1
      • 下载osc-placement-4.5.0.tar.gz
      • 解压osc-placement-4.5.0.tar.gz
      • 安装依赖包
      • 编译安装
      • 验证2
  • 安装Nova
    • Controller节点
      • 下载源码包
      • 创建数据库
      • 创建nova用户
      • 添加到admin
      • 创建nova服务实体
      • 创建API服务端点
      • 解压nova-30.0.0.tar.gz
      • 修改tox.ini
      • 生成示例配置文件
      • 安装依赖包
      • 编译安装
      • 创建/etc/nova文件夹
      • 复制etc/nova目录下的内容到/etc/nova
      • 编辑nova配置文件
      • 解压noVNC-1.5.0.tar.gz
      • 复制到/usr/share/novnc
      • 创建vnc_auto.html链接文件
      • 创建nova用户并添加sudo权限
      • 同步数据库
      • 创建service并启动
    • Compute节点
      • 编译安装libvirt-7.0.0
      • 安装dnsmasq
      • 重启dnsmasq服务
      • 下载源码包
      • 解压nova-30.0.0.tar.gz
      • 安装tox
      • 修改tox.ini
      • 生成示例配置文件
      • 安装依赖包
      • 降低SQLAlchemy的版本为1.4.49
      • 编译安装
      • 创建/etc/nova文件夹
      • 复制etc/nova目录下的内容到/etc/nova
      • 编辑nova配置文件
      • 修改虚拟类型
      • 安装libvirt-python
      • 创建nova用户并提供sudo权限
      • 编写service并启动
      • 配置libvirted与nova的权限问题
    • 验证(controller)
    • 安装qemu-img(Controller && Compute && Block)
  • 安装Neutron(使用的是OVN)
    • 编译安装OVN(Controller节点 && Compute节点)
      • 下载OVN源码包
      • 解压
      • 删除OVS空目录
      • 解压OVS压缩包并移动到OVN目录下并重命名为OVS
      • 进入ovs目录执行下面命令,对ovs进行编译安装
      • 回到ovn目录执行下面命令对ovn进行编译安装
    • Controller节点
      • 下载源码包
      • 创建数据库
      • 创建neutron用户
      • 添加到admin
      • 创建neutron服务实体
      • 创建API端点
      • 解压neutron-25.1.0.tar.gz
      • 修改tox.ini
      • 生成示例配置文件
      • 安装依赖包
      • 编译安装
      • 创建/etc/neutron文件夹
      • 复制文件
      • 编辑neutron配置文件
      • 创建neutron用户并提供sudo权限
      • 同步数据库
      • 配置与启动OVS
      • 编写service并启动
      • 重启服务
    • Compute节点
      • 解压neutron-25.1.0.tar.gz
      • 修改tox.ini
      • 生成示例配置文件
      • 安装依赖包
      • 编译安装
      • 创建/etc/neutron文件夹
      • 复制文件
      • 编辑neutron配置文件
      • 配置与启动OVS
      • 启动ovn-controller服务
      • 设置OVN
      • 创建neutron用户并提供sudo权限
      • 编写服务并启动
    • 配置验证(Controller)
    • 配置OVN网络
      • Controller节点 && Compute节点
      • Controller节点
      • 解决一个端口DOWN
  • 安装Dashboard
    • Controller节点
      • 下载源码包
      • 创建/etc/openstack_dashboard目录
      • 解压horizon-25.1.0.tar.gz
      • 安装依赖包
      • 复制local_settings.py.example为local_settings.py并编辑
      • 安装pymemcache
      • 安装XStatic-Font-Awesome的版本为4.7.0.0
      • 编译
      • 收集静态资源
      • 修改WEBROOT
      • 生成horizon_wsgi.py
      • 生成httpd的配置文件
      • 修改生成的httpd的配置文件
      • 修改权限
      • 查询启动httpd的用户和组
      • 重启httpd服务
  • 安装Cinder
    • Controller节点
      • 下载源码包
      • 创建数据库
      • 创建cinder用户
      • 添加到admin
      • 创建 cinderv3 服务实体
      • 创建API 端点
      • 解压cinder-25.0.0.tar.gz
      • 修改tox.ini
      • 生成示例配置文件
      • 安装依赖包
      • 编译安装
      • 创建/etc/cinder目录
      • 移动文件到/etc/cinder目录
      • 编辑/etc/cinder/cinder.conf
      • 创建cinder用户并提供sudo权限
      • 同步数据库
      • 编写service并启动
      • 验证
    • Block节点
      • 安装targetcli
      • 解压cinder-25.0.0.tar.gz
      • 修改tox.ini
      • 安装tox
      • 生成示例配置文件
      • 安装依赖包
      • 把SQLAlchemy的版本降为1.4.49
      • 安装pymysql
      • 编译安装
      • 创建/etc/cinder目录
      • 移动文件到/etc/cinder目录
      • 编辑/etc/cinder/cinder.conf
      • 编辑/etc/lvm/lvm.conf
      • 创建cinder用户并提供sudo权限
      • 编写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

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

设置静态IP

nmtui

设置ens160网卡的IP地址为静态IP地址
设置ens192网卡不获取到IP地址(即设置为Disabled)
网卡配置生效命令

nmcli c reload
nmcli c up ens160
nmcli c up ens192

更新

dnf update -y && dnf -y upgrade

设置时区及时间同步

timedatectl set-timezone Asia/Shanghai
dnf -y install chrony
sed -i '/^pool/d' /etc/chrony.conf
echo "server ntp.aliyun.com iburst" >> /etc/chrony.conf
systemctl restart chronyd && systemctl enable chronyd

重启一下机器

安装前准备

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/dalmatian/index.html#dalmatian-keystone
所需下载的源码包:keystone-26.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-26.0.0.tar.gz

tar -xvf keystone-26.0.0.tar.gz
cd keystone-26.0.0/

安装tox

pip3 install tox -i https://mirrors.huaweicloud.com/repository/pypi/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
deps =
  -i https://mirrors.huaweicloud.com/repository/pypi/simple # 添加

生成示例配置文件

tox -egenconfig
tox -egenpolicy

安装所需依赖包

pip3 install -r requirements.txt -i https://mirrors.huaweicloud.com/repository/pypi/simple

把SQLAlchemy的版本降为1.4.49

pip3 install SQLAlchemy==1.4.49 -i https://mirrors.huaweicloud.com/repository/pypi/simple

编译安装

python3 setup.py install

降低bcrypt的版本

pip3 install bcrypt==4.0.1 -i https://mirrors.huaweicloud.com/repository/pypi/simple

创建/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用户设置的数据库访问密码

创建keystone用户并提供sudo权限

useradd -d /var/lib/keystone -s /usr/sbin/nologin -m keystone
visudo
keystone ALL=(ALL) NOPASSWD: ALL

同步数据库

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为准备设置管理员用户的密码

配置Apache HTTP server

sed -i '/^#ServerName/s/#//' /etc/httpd/conf/httpd.conf && sed -i '/^ServerName/s/.*/ServerName controller/' /etc/httpd/conf/httpd.conf
cp /root/keystone-26.0.0/httpd/wsgi-keystone.conf /etc/httpd/conf.d/
mkdir /var/log/apache2/

重新启动Apache HTTP服务

systemctl restart httpd.service && systemctl enable httpd.service

创建脚本文件

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
export OS_VOLUME_API_VERSION=3

ADMIN_PASS为启动Keystone服务设置的管理员用户的密码

chmod +x admin-openrc.sh

下载openstackclient源码包

下载地址:https://releases.openstack.org/dalmatian/index.html#dalmatian-python-openstackclient
所需下载的源码包:python-openstackclient-7.1.4.tar.gz

解压python-openstackclient-7.1.4.tar.gz

tar -xvf python-openstackclient-7.1.4.tar.gz
cd python-openstackclient-7.1.4/

安装依赖包

pip3 install -r requirements.txt -i https://mirrors.huaweicloud.com/repository/pypi/simple

编译安装

python3 setup.py install

创建domain

source admin-openrc.sh
openstack domain create --description "An Example Domain" example

创建project

openstack project create --domain default --description "Service Project" service
openstack project create --domain default --description "Demo Project" myproject

创建user

openstack user create --domain default --password-prompt myuser

创建role

openstack role create myrole

将role添加到project和user

openstack role add --project myproject --user myuser myrole

验证

source admin-openrc.sh
openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue

安装Glance

Controller节点

下载源码包

下载地址:https://releases.openstack.org/dalmatian/index.html#dalmatian-glance
所需下载的源码包:glance-29.0.0.tar.gz

创建数据库

mysql -u root -p
CREATE DATABASE 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

GLANCE_DBPASS为要设置的密码

创建glance用户

source admin-openrc.sh
openstack user create --domain default --password-prompt glance

将glacne添加到admin中去

openstack role add --project service --user glance admin

创建glance服务实体

openstack service create --name glance --description "OpenStack Image" image

创建Image服务API端点

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

解压glance-29.0.0.tar.gz

tar -xvf glance-29.0.0.tar.gz
cd glance-29.0.0/

修改tox.ini

vim tox.ini
deps =
  -i https://mirrors.huaweicloud.com/repository/pypi/simple # 添加

生成示例配置文件

遇到的问题
[root@controller glance-29.0.0]# tox -e genconfig
.pkg: _optional_hooks> python /usr/local/lib/python3.9/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: get_requires_for_build_sdist> python /usr/local/lib/python3.9/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: get_requires_for_build_editable> python /usr/local/lib/python3.9/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: build_editable> python /usr/local/lib/python3.9/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
genconfig: install_package> python -m pip install -chttps://releases.openstack.org/constraints/upper/master --force-reinstall --no-deps /root/glance-29.0.0/.tox/.tmp/package/6/glance-29.0.0-0.editable-py3-none-any.whl
genconfig: commands[0]> oslo-config-generator --config-file etc/oslo-config-generator/glance-api.conf
Traceback (most recent call last):
  File "/root/glance-29.0.0/.tox/genconfig/bin/oslo-config-generator", line 8, in <module>
    sys.exit(main())
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_config/generator.py", line 831, in main
    generate(conf)
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_config/generator.py", line 792, in generate
    groups = _get_groups(_list_opts(conf.namespace))
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_config/generator.py", line 519, in _list_opts
    loaders = _get_raw_opts_loaders(namespaces)
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_config/generator.py", line 459, in _get_raw_opts_loaders
    mgr = stevedore.named.NamedExtensionManager(
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/stevedore/named.py", line 78, in __init__
    extensions = self._load_plugins(invoke_on_load,
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/stevedore/extension.py", line 218, in _load_plugins
    self._on_load_failure_callback(self, ep, err)
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/stevedore/extension.py", line 206, in _load_plugins
    ext = self._load_one_plugin(ep,
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/stevedore/named.py", line 156, in _load_one_plugin
    return super()._load_one_plugin(
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/stevedore/extension.py", line 240, in _load_one_plugin
    plugin = ep.load()
  File "/usr/lib64/python3.9/importlib/metadata.py", line 77, in load
    module = import_module(match.group('module'))
  File "/usr/lib64/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/root/glance-29.0.0/glance/opts.py", line 28, in <module>
    import glance.api.middleware.context
  File "/root/glance-29.0.0/glance/api/middleware/context.py", line 21, in <module>
    from glance.api import policy
  File "/root/glance-29.0.0/glance/api/policy.py", line 27, in <module>
    from glance.domain import proxy
  File "/root/glance-29.0.0/glance/domain/__init__.py", line 32, in <module>
    CONF.import_opt('task_executor', 'glance.common.config', group='task')
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_config/cfg.py", line 2641, in import_opt
    __import__(module_str)
  File "/root/glance-29.0.0/glance/common/config.py", line 643, in <module>
    policy.Enforcer(CONF)
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_policy/policy.py", line 542, in __init__
    self.policy_file = policy_file or pick_default_policy_file(
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_policy/policy.py", line 377, in pick_default_policy_file
    if conf.find_file(conf.oslo_policy.policy_file):
  File "/root/glance-29.0.0/.tox/genconfig/lib/python3.9/site-packages/oslo_config/cfg.py", line 2780, in find_file
    raise NotInitializedError()
oslo_config

http://www.kler.cn/a/549964.html

相关文章:

  • 云原生(五十五) | ECS中自建数据库迁移到RDS
  • 2009年下半年软件设计师上午真题的知识点整理(附真题及答案解析)
  • React.memo 使用详解与最佳实践
  • SpringBoot+微信小程序+数据可视化的宠物到家喂宠服务(程序+论文+讲解+安装+调试+售后等)
  • 使用 DiskPart 命令创建磁盘和卷
  • 基于AWS的证券交易系统架构设计与核心技术实践
  • 第6章 6.1 ASP.NET Core MVC 项目
  • PHP语法入门完全指南(2024新版)
  • 生成对抗网络(GAN)的“对抗“过程解析:从图像合成到药物发现的跨领域应用
  • 制作一个项目用于研究elementUI的源码
  • 腿足机器人之七- 逆运动学
  • 【Unity】打包运行后如何查看日志
  • SQL语言的区块链
  • React 第二十六节 <Profiler></Profiler> 的用途使用方法
  • MySQL Dockerfile 示例
  • Linux:线程概念、理解、控制
  • 自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?
  • DockerDesktop更改默认的磁盘镜像地存储位置
  • React常用库
  • 【NLP251】命名实体实战(基于Transformer分类)