基于 openEuler 22.09 的 OpenStack Yoga 部署

news2025/3/4 14:29:35

openEuler 虚拟化环境部署

       使用 VMWare Workstation 创建三台 2 CPU、8G内存、100 GB硬盘 的虚拟机

主机

IP

作用

Controller

192.168.184.110

控制节点

Compute

192.168.184.111

计算节点

Storage

192.168.184.112

存储节

一 基础配置

1.1 配置 yum 源

由于 openEuler 22.09 系统已经停止维护了,所以我们需要修改 yum 源为官方 Archive 的 yum 源

打开 /etc/yum.repos.d/openEuler.repo 文件,将下面所有涉及到 http://repo.openeuler.org/ 的部分改成 https://archives.openeuler.openatom.cn/

在三台机器上

[root@controller ~]#

sed -i 's|http://repo.openeuler.org/|https://archives.openeuler.openatom.cn/|g' /etc/yum.repos.d/openEuler.repo

# 然后更新 yum

[root@controller ~]# dnf update

1.2关闭防火墙等

在三台机器上

        # 关闭防火墙

[root@controller ~]# systemctl disable --now firewalld         

# 关闭 SELinux

[root@controller ~]# vi /etc/selinux/config

# 修改以下内容

SELINUX=disabled

修改hosts

在三台机器上

[root@controller ~]# cat >> /etc/hosts << EOF

192.168.184.110 controller

192.168.184.111 compute

192.168.184.112 storage

EOF

此时最好重启一下机器,以便应用刚才关闭的 SELinux

1.3 时间同步

集群要求每个节点的时间要保持一致,一半由时间同步软件保证,这里使用 chrony 软件

Controller 节点

首先,安装 chrony 服务

[root@controller ~]# dnf install -y chrony

然后,修改 /etc/chrony.conf 配置文件,新增如下内容

# 表示允许哪些IP从本节点同步时钟

pool ntp.aliyun.com iburst

allow 192.168.184.0/24

然后重启服务

[root@controller ~]# systemctl restart chronyd

其他两个节点

首先一样,安装 chrony 服务

[root@compute ~]# dnf install -y chrony

修改 /etc/chrony.conf 配置文件,修改内容如下

[root@compute ~]# vi /etc/chrony.conf

# pool pool.ntp.org iburst

↑ 注释掉这行

[root@compute ~]# echo "server 192.168.184.110 iburst" >> /etc/chrony.conf

然后重启服务

[root@compute ~]# systemctl restart chronyd

配置完成后,检查一下结果,在其他非controller节点执行

[root@compute ~]# chronyc sources

返回结果如下所示,表示成功从 controller 同步时间

1.4安装数据库

数据库需要安装在 Controller 节点,这里我们选用 MariaDB 作为我们的数据库

首先安装 MariaDB

[root@controller ~]# dnf install mysql-config mariadb mariadb-server python3-PyMySQL -y

新增配置文件 /etc/my.cnf.d/openstack.cnf 内容如下所示

[root@controller ~]# vi /etc/my.cnf.d/openstack.cnf

[mysqld]

bind-address = 192.168.184.110

default-storage-engine = innodb

innodb_file_per_table = on

max_connections = 4096

collation-server = utf8_general_ci

character-set-server = utf8

然后启动服务器

[root@controller ~]# systemctl start mariadb

然后初始化数据库

[root@controller ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current

password for the root user. If you've just installed MariaDB, and

haven't set the root password yet, you should just press enter here.

# 这里输入密码,由于我们是初始化MariaDB,直接回车就行

Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody

can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

# 这里根据提示输入N

Switch to unix_socket authentication [Y/n] n

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

# 输入Y,修改密码

Change the root password? [Y/n] y

# 这里输入两次密码

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them.  This is intended only for testing, and to make the installation

go a bit smoother.  You should remove them before moving into a

production environment.

# 输入Y,删除匿名用户

Remove anonymous users? [Y/n] y

 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This

ensures that someone cannot guess at the root password from the network.

# 输入Y,关闭root远程登录权限

Disallow root login remotely? [Y/n] y

 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can

access.  This is also intended only for testing, and should be removed

before moving into a production environment.

# 输入Y,删除test数据库

Remove test database and access to it? [Y/n] y

 - Dropping test database...

 ... Success!

 - Removing privileges on test database...

 ... Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

# 输入Y,重载配置

Reload privilege tables now? [Y/n] y

 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

然后我们来验证一下

[root@controller ~]# mysql -uroot -p

# 输入密码

Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 11

Server version: 10.5.16-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

1.5 安装消息队列

消息队列安装在 Controller 节点,这里使用 rabbitmq 作为消息队列

首先,来安装软件包

[root@controller ~]# dnf install rabbitmq-server -y

然后启动服务

[root@controller ~]# systemctl start rabbitmq-server

然后配置openstack用户,RABBIT_PASS是openstack服务登录消息队里的密码,需要和后面各个服务的配置保持一致

[root@controller ~]# rabbitmqctl add_user openstack 000000

[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"

这里面的 000000 是 RABBIT_PASS,可以自己改,但是一定要记住

1.6 安装缓存服务

消息队列安装在 Controller 节点,这里使用 Memcached

首先,安装软件包

[root@controller ~]# dnf install memcached python3-memcached -y

修改配置文件 /etc/sysconfig/memcached

[root@controller ~]# vi /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS="-1 127.0.0.1,::1,controller"

然后启动服务

[root@controller ~]# systemctl start memcached

二 部署服务

2.1 Keystone

Keystone 是 OpenStack 的身份服务(Identity Service),它负责管理用户、角色、项目(租户)和域的认证和授权。Keystone 是 OpenStack 的核心组件之一,所有其他 OpenStack 服务都依赖于 Keystone 来进行用户身份验证和授权,必须安装

Controller 节点

首先创建 Keystone 数据库并授权

[root@controller ~]# mysql -uroot -p

Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 13

Server version: 10.5.16-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE keystone;

Query OK, 1 row affected (0.009 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '000000 ';

Query OK, 0 rows affected (0.013 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000';

Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> exit

Bye

然后安装软件包

[root@controller ~]# dnf install openstack-keystone httpd mod_wsgi -y

然后配置 Keystone 配置文件

[root@controller ~]# vi /etc/keystone/keystone.conf

# 配置数据库入口

[database]

connection = mysql+pymysql://keystone:000000@controller/keystone

# 配置token provider

[token]

provider = fernet

然后同步数据库

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

然后初始化 Fernet 密钥仓库

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

然后启动服务

[root@controller ~]# keystone-manage bootstrap --bootstrap-password 000000  \

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

然后配置 Apache HTTP Server

打开 httpd.conf 文件配置

[root@controller ~]# vi /etc/httpd/conf/httpd.conf

# 修改以下项,如果没有则新添加

ServerName controller

然后创建软连接

[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

然后启动 Apache HTTP 服务

[root@controller ~]# systemctl enable --now httpd.service

[root@controller ~]# systemctl status httpd.service

然后创建环境变量配置

[root@controller ~]# cat << EOF >> ~/.admin-openrc

export OS_PROJECT_DOMAIN_NAME=Default

export OS_USER_DOMAIN_NAME=Default

export OS_PROJECT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=000000

export OS_AUTH_URL=http://controller:5000/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

EOF

然后一次创建 domain, projects, users, roles

但是首先需要安装 python3-openstackclient

[root@controller ~]# dnf install python3-openstackclient -y

然后导入环境

[root@controller ~]# source ~/.admin-openrc

[root@controller ~]# env | grep OS_

创建 Project Service,其中 Domain Default 在 Keystone-mange bootstrap 时已创建

[root@controller ~]# openstack domain create --description "An Example Domain" example

[root@controller ~]# openstack project create --domain default --description "Service Project" service

创建(non-admin)project myproject,user myuser 和 role myrole,为 myproject 和 myuser 添加角色myrole

[root@controller ~]# openstack project create --domain default --description "Demo Project" myproject

[root@controller ~]# openstack user create --domain default --password-prompt myuser

密码:000000

[root@controller ~]# openstack role create myrole

将角色 myrole 分配给用户 myuser,并关联到项目 myproject,并验证角色是否已成功分配

[root@controller ~]# openstack role add --project myproject --user myuser myrole

[root@controller ~]# openstack role assignment list --project myproject --user myuser

然后对此进行验证

取消临时环境变量 OS_AUTH_URL和OS_PASSWORD

[root@controller ~]# source ~/.admin-openrc

[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD

为 admin 用户请求 token

[root@controller ~]# 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

Password: 000000

为 myuser 用户请求 token

[root@controller ~]# openstack --os-auth-url http://controller:5000/v3 \

--os-project-domain-name Default --os-user-domain-name Default \

--os-project-name myproject --os-username myuser token issue

Password: 000000

2.2 Glance

Glance 是 OpenStack 中的镜像服务(Image Service),负责管理和存储虚拟机镜像。它允许用户上传、下载、删除和查询虚拟机镜像,并支持多种镜像格式(如 QCOW2、RAW、VMDK 等)。Glance 是 OpenStack 计算服务(Nova)的核心组件之一,为虚拟机提供启动镜像,必须安装

Controller 节点

首先创建 glance 数据库并授权

[root@controller ~]# mysql -u root -p

Enter password:

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 30

Server version: 10.5.16-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE glance;

Query OK, 1 row affected (0.011 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '000000 ';

Query OK, 0 rows affected (0.018 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '000000';

Query OK, 0 rows affected (0.011 sec)

MariaDB [(none)]> exit

Bye

初始化 glance 资源对象

[root@controller ~]# source ~/.admin-openrc

[root@controller ~]# env | grep OS_

创建用户时,命令行会提示输入密码,请输入自定义的密码

[root@controller ~]# openstack user create --domain default --password-prompt glance

User Password: 000000

Repeat User Password: 000000

添加 glance 用户到 Service Project 并指定 admin 角色

[root@controller ~]# openstack role add --project service --user glance admin

创建 glance 服务实例

[root@controller ~]# openstack service create --name glance --description "OpenStack Image" image

创建 glance API 服务

[root@controller ~]# openstack endpoint create --region RegionOne image public http://controller:9292

[root@controller ~]# openstack endpoint create --region RegionOne image internal http://controller:9292

[root@controller ~]# openstack endpoint create --region RegionOne image admin http://controller:9292

然后安装软件包

[root@controller ~]# dnf install openstack-glance -y

然后修改 glance 配置文件

[root@controller ~]# vi /etc/glance/glance-api.conf

# 添加/修改 以下内容

[database]

connection = mysql+pymysql://glance:000000@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 = 000000

[paste_deploy]

flavor = keystone

[glance_store]

stores = file,http

default_store = file

filesystem_store_datadir = /var/lib/glance/images/

启动数据库

[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance

然后启动服务

[root@controller ~]# systemctl enable --now openstack-glance-api.service

然后导入环境变量并验证

[root@controller ~]# source ~/.admin-openrc

[root@controller ~]# env | grep OS_

然后下载镜像

[root@controller ~]# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

然后再向 Image 服务上传镜像

[root@controller ~]# openstack image create --disk-format qcow2 --container-format bare \

--file cirros-0.4.0-x86_64-disk.img --public cirros

确认镜像上传并验证属性

[root@controller ~]# openstack image list

    2.3 Placement

    Placement 是 OpenStack 中的一个核心服务,主要负责资源调度和分配。它是 OpenStack 计算服

    务(Nova)的重要组成部分,用于管理计算节点的资源(如 CPU、内存、存储等),并确保资源的有效利用和负载均衡

    Controller 节点

    安装、配置Placement服务前,需要先创建相应的数据库、服务凭证和API endpoints

    [root@controller ~]# mysql -u root -p

    Enter password:

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 49

    Server version: 10.5.16-MariaDB MariaDB Server

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> CREATE DATABASE placement;

    Query OK, 1 row affected (0.010 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.055 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.005 sec)

    MariaDB [(none)]> exit

    Bye

    然后配置用户和Endpoint

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# env | grep OS_

    创建 placement 用户并设置用户密码

    [root@controller ~]# openstack user create --domain default --password-prompt placement

    User Password: 000000

    Repeat User Password: 000000

    添加placement用户到service project并指定admin角色

    [root@controller ~]# openstack role add --project service --user placement admin

    创建 plancement 服务实体

    [root@controller ~]# openstack service create --name placement \

    --description "Placement API" placement

    创建 Plance API 服务 Endpoints

    [root@controller ~]# openstack endpoint create --region RegionOne \

    placement public http://controller:8778

    [root@controller ~]# openstack endpoint create --region RegionOne \

    placement internal http://controller:8778

    [root@controller ~]# openstack endpoint create --region RegionOne \

    placement admin http://controller:8778

    然后安装相关软件包

    [root@controller ~]# dnf install openstack-placement-api -y

    编辑 /etc/placement/placement.conf配置文件

    [root@controller ~]# vi /etc/placement/placement.conf

    [placement_database]

    connection = mysql+pymysql://placement:000000@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 = 000000

    数据库同步,填充 Placement 数据库

    [root@controller ~]# su -s /bin/sh -c "placement-manage db sync" placement

    然后通过重启 httpd 服务来启动服务

    [root@controller ~]# systemctl restart httpd

    然后我们来验证一下

    通过 source admin 凭证,以获取 admin 命令行权限

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# env | grep OS_

    执行状态检查

    [root@controller ~]# placement-status upgrade check

    这里可以看到Policy File JSON to YAML Migration的结果为Failure

    这是因为在Placement中,JSON格式的policy文件从Wallaby版本开始已处于deprecated状态

    可以参考提示,使用oslopolicy-convert-json-to-yaml工具 将现有的JSON格式policy文件转化为YAML格式

    [root@controller ~]# oslopolicy-convert-json-to-yaml  --namespace placement \

      --policy-file /etc/placement/policy.json \

      --output-file /etc/placement/policy.yaml

    [root@controller ~]# mv /etc/placement/policy.json{,.bak}

    注:当前环境中此问题可忽略,不影响运行。

    然后针对 placement API 运行命令

    首先来安装 osc-placement 插件

    [root@controller ~]# dnf install python3-osc-placement -y

    然后列出可用的资源类别以及特性

    [root@controller ~]# openstack --os-placement-api-version 1.2 resource class list --sort-column name

    [root@controller ~]# openstack --os-placement-api-version 1.6 trait list --sort-column name

    2.4 Nova

    Nova 是 OpenStack 中的核心组件之一,负责管理虚拟机实例(VM)的生命周期

    它提供了虚拟机的创建、调度、启动、停止、重启、删除等功能

    Nova 依赖于其他 OpenStack 组件(如 Keystone 用于身份认证,Glance 用于镜像管理,Neutron 用于网络管理等)来完成其工作

    Controller节点

    安装、配置Placement服务前,需要先创建相应的数据库、服务凭证和API endpoints

    [root@controller ~]# mysql -u root -p

    Enter password:

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 24

    Server version: 10.5.16-MariaDB MariaDB Server

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> CREATE DATABASE nova_api;

    Query OK, 1 row affected (0.000 sec)

    MariaDB [(none)]> CREATE DATABASE nova;

    Query OK, 1 row affected (0.000 sec)

    MariaDB [(none)]> CREATE DATABASE nova_cell0;

    Query OK, 1 row affected (0.000 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> exit

    Bye

    然后配置用户和 Engpoints

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# env | grep OS_

    创建nova用户并设置用户密码

    [root@controller ~]# openstack user create --domain default --password-prompt nova

    User Password:000000

    Repeat User Password:000000

    然后添加nova用户到service project并指定admin角色

    [root@controller ~]# openstack role add --project service --user nova admin

    创建nova服务实体

    [root@controller ~]# openstack service create --name nova --description "OpenStack Compute" compute

    创建NovaAPI服务endpoints

    [root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1

    [root@controller ~]# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1

    [root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

    然后安装及配置组件

    [root@controller ~]# dnf install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler -y

    编辑 /etc/nova/nova.conf 配置文件

    [root@controller~]# vi /etc/nova/nova.conf

    [DEFAULT]

    enabled_apis = osapi_compute,metadata

    transport_url = rabbit://openstack:000000@controller:5672/

    my_ip = 192.168.184.110

    log_dir = /var/log/nova

    [api]

    auth_strategy = keystone

    [api_database]

    connection = mysql+pymysql://nova:000000@controller/nova_api

    [database]

    connection = mysql+pymysql://nova:000000@controller/nova

    [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 = nova

    password = 000000

    [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 = 000000

    然后同步数据库

    首先同步nova-api数据库

    [root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova

    注册 cell0数据库

    [root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

    注册cell1 cell

    [root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

    同步nova数据库

    [root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova

    验证cell0和cell1注册正确

    [root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

    然后启动服务

    [root@controller ~]# systemctl enable --now \

      openstack-nova-api.service \

      openstack-nova-scheduler.service \

      openstack-nova-conductor.service \

      openstack-nova-novncproxy.service

    Compute节点

    首先让我们来安装软件包

    [root@compute ~]# dnf install openstack-nova-compute -y

    编辑 /etc/nova/nova.conf 配置文件

    [root@compute ~]# vi /etc/nova/nova.conf

    [DEFAULT]

    enabled_apis = osapi_compute,metadata

    transport_url = rabbit://openstack:000000@controller:5672

    /my_ip = 192.168.184.111

    compute_driver = libvirt.LibvirtDriver

    instances_path = /var/lib/nova/instances

    log_dir = /var/log/nova

    [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 = nova

    password = 000000

    [vnc]

    enabled = true

    server_listen = $my_ip

    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 = 000000

    根据情况需要可以省略的步骤

    然后确认compute节点是否支持虚拟机硬件加速(x86_64-Intel)

           处理器为x86_64架构时,可通过运行如下命令确认是否支持硬件加速:

    [root@compute ~]# egrep -c '(vmx|svm)' /proc/cpuinfo

    如果返回值为0则不支持硬件加速,需要配置libvirt使用QEMU而不是默认的KVM。编辑 /etc/nova/nova.conf 的 [libvirt] 部分:

    [root@compute ~]# vi /etc/nova/nova.conf

    [libvirt]

    virt_type = qemu

    如果返回值为1或更大的值,则支持硬件加速,不需要进行额外的配置。

    确认计算节点是否支持虚拟机硬件加速(arm64-AMD)

    处理器为arm64架构时,可通过运行如下命令确认是否支持硬件加速

    [root@compute ~]# virt-host-validate

    该命令由libvirt提供,此时libvirt应已作为openstack-nova-compute依赖被安装,环境中已有此命令

    显示FAIL时,表示不支持硬件加速,需要配置libvirt使用QEMU而不是默认的KVM。

    QEMU: Checking if device /dev/kvm exists: FAIL (Check that CPU and firmware supports virtualization and kvm module is loaded)

    编辑/etc/nova/nova.conf的[libvirt]部分

    [root@compute ~]# /etc/nova/nova.conf

    [libvirt]

    virt_type = qemu

    显示PASS时,表示支持硬件加速,不需要进行额外的配置。

    QEMU: Checking if device /dev/kvm exists: PASS

    配置qemu(仅arm64)

    仅当处理器为arm64架构时需要执行此操作。

    编辑/etc/libvirt/qemu.conf

    [root@compute ~]# vi /etc/libvirt/qemu.conf

    nvram = ["/usr/share/AAVMF/AAVMF_CODE.fd: \

             /usr/share/AAVMF/AAVMF_VARS.fd", \

             "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw: \

             /usr/share/edk2/aarch64/vars-template-pflash.raw"]

    编辑/etc/qemu/firmware/edk2-aarch64.json

    [root@compute ~]# vi /etc/qemu/firmware/edk2-aarch64.json

    {

        "description": "UEFI firmware for ARM64 virtual machines",

        "interface-types": [

            "uefi"

        ],

        "mapping": {

            "device": "flash",

            "executable": {

                "filename": "/usr/share/edk2/aarch64/QEMU_EFI-pflash.raw",

                "format": "raw"

            },

            "nvram-template": {

                "filename": "/usr/share/edk2/aarch64/vars-template-pflash.raw",

                "format": "raw"

            }

        },

        "targets": [

            {

                "architecture": "aarch64",

                "machines": [

                    "virt-*"

                ]

            }

        ],

        "features": [

        ],

        "tags": [

        ]}

    继续步骤

    启动服务

    [root@compute ~]# systemctl enable --now libvirtd.service openstack-nova-compute.service

    Controller节点

    然后回到 Controller 节点,添加计算节点到 OpenStack 集群

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# env | grep OS_

    确认 nova-compute 服务已识别到数据库中

    [root@controller ~]# openstack compute service list --service nova-compute

    发现计算节点,将计算节点添加到cell数据库

    [root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

    然后验证一下

    首先列出服务组件,验证每个流程都成功启动和注册

    [root@controller ~]# openstack compute service list

    然后列出身份服务中的API端点,验证身份服务的连接

    [root@controller ~]# openstack catalog list

    之后列出镜像服务中的镜像,验证与镜像服务的连接

    [root@controller ~]# openstack image list

    最后验证一下 cells 是否运作成功,以及其他必要条件是否已具备

    [root@controller ~]# nova-status upgrade check

    2.5 Neutron

    Neutron 是 OpenStack 中的网络服务组件,负责为 OpenStack 环境提供网络连接和 IP 地址管理

    它允许用户创建和管理虚拟网络、子网、路由器、安全组等网络资源,从而为虚拟机(VM)提供网络功能

    Controller节点

    首先创建 keystone 数据库并授权

    [root@controller ~]# mysql -u root -p

    Enter password:

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 61

    Server version: 10.5.16-MariaDB MariaDB Server

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> CREATE DATABASE neutron;

    Query OK, 1 row affected (0.000 sec)

       

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> exit

    Bye

    设置环境变量

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# env | grep OS_

    创建用户和服务

    [root@controller ~]# openstack user create --domain default --password-prompt neutron

    User Password:000000

    Repeat User Password:000000

    [root@controller ~]# openstack role add --project service --user neutron admin

    [root@controller ~]# openstack service create --name neutron --description "OpenStack Networking" network

    部署Neutron API服务

    [root@controller ~]# openstack endpoint create --region RegionOne network public http://controller:9696

    [root@controller ~]# openstack endpoint create --region RegionOne network internal http://controller:9696

    [root@controller ~]# openstack endpoint create --region RegionOne network admin http://controller:9696

    之后安装软件包

    [root@controller ~]# dnf install -y openstack-neutron openstack-neutron-linuxbridge ebtables ipset openstack-neutron-ml2 -y

    配置Neutron

    [root@controller ~]# vi /etc/neutron/neutron.conf

    [database]

    connection = mysql+pymysql://neutron:000000@controller/neutron

    [DEFAULT]

    core_plugin = ml2

    service_plugins = router

    allow_overlapping_ips = true

    transport_url = rabbit://openstack:000000@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 = 000000

    [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 = 000000

    [oslo_concurrency]

    lock_path = /var/lib/neutron/tmp

    配置ML2,ML2,具体配置可以根据需求自行修改,这里使用的是provider network + linuxbridge**

    修改/etc/neutron/plugins/ml2/ml2_conf.ini(直接添加

    [root@controller ~]# vi /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

    修改/etc/neutron/plugins/ml2/linuxbridge_agent.ini(直接添加

    [root@controller ~]# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [linux_bridge]

    physical_interface_mappings = provider:ens33

    [vxlan]

    enable_vxlan = true

    local_ip = 192.168.184.110

    l2_population = true

    [securitygroup]

    enable_security_group = true

    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

    配置Layer-3代理

    修改 /etc/neutron/l3_agent.ini

    [root@controller ~]# vi /etc/neutron/l3_agent.ini

    [DEFAULT]

    interface_driver = linuxbridge

    配置DHCP代理 修改 /etc/neutron/dhcp_agent.ini

    [root@controller ~]# vi /etc/neutron/dhcp_agent.ini

    [DEFAULT]

    interface_driver = linuxbridge

    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

    enable_isolated_metadata = true

    配置metadata代理

    修改 /etc/neutron/metadata_agent.ini

    [root@controller ~]# vi /etc/neutron/metadata_agent.ini

    [DEFAULT]

    nova_metadata_host = controller

    metadata_proxy_shared_secret = METADATA_SECRET

    配置nova服务使用neutron,修改 /etc/nova/nova.conf

    [root@controller ~]# vi /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 = 000000

    service_metadata_proxy = true

    metadata_proxy_shared_secret = METADATA_SECRET

    创建 /etc/neutron/plugin.ini的符号链接

    [root@controller ~]# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

    然后同步数据库

    [root@controller ~]# 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服务

    [root@controller ~]# systemctl restart openstack-nova-api

    最后启动网络服务

    [root@controller ~]# systemctl enable --now neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service

    Compute节点

    首先安装软件包

    [root@compute ~]# dnf install openstack-neutron-linuxbridge ebtables ipset -y

    然后配置Neutron

    修改 /etc/neutron/neutron.conf

    [root@compute ~]# vi /etc/neutron/neutron.conf

    [DEFAULT]

    transport_url = rabbit://openstack:000000@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 = 000000

    [oslo_concurrency]

    lock_path = /var/lib/neutron/tmp

    修改 /etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [root@compute ~]# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini

    [linux_bridge]

    physical_interface_mappings = provider:ens33

    [vxlan]

    enable_vxlan = true

    local_ip = 192.168.184.111

    l2_population = true

    [securitygroup]

    enable_security_group = true

    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

    配置nova compute服务使用neutron,修改 /etc/nova/nova.conf

    [root@compute ~]# vi /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 = 000000

    然后重启nova-compute服务

    [root@compute ~]# systemctl restart openstack-nova-compute.service

    最后启动服务

    [root@compute ~]# systemctl enable --now neutron-linuxbridge-agent

    [root@compute ~]# systemctl status neutron-linuxbridge-agent

    2.6 Cinder

           Cinder 是 OpenStack 项目中的一个核心组件,负责块存储(Block Storage)服务。

    它是 OpenStack 的存储服务模块,允许用户创建和管理持久化的块存储卷(volumes),这些卷可以附加到虚拟机(VMs)上,作为虚拟机的存储设备

    Controller节点

    首先创建cinder数据库

    [root@controller ~]# mysql -u root -p

    Enter password:

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 155

    Server version: 10.5.16-MariaDB MariaDB Server

    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> CREATE DATABASE cinder;

    Query OK, 1 row affected (0.000 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '000000';

    Query OK, 0 rows affected (0.001 sec)

    MariaDB [(none)]> exit

    Bye

    初始化Keystone资源对象

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# openstack user create --domain default --password-prompt cinder

    User Password:000000

    Repeat User Password:000000

    [root@controller ~]# openstack role add --project service --user cinder admin

    [root@controller ~]# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

    [root@controller ~]# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s

    [root@controller ~]# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s

    然后安装软件包

    [root@controller ~]# dnf install openstack-cinder-api openstack-cinder-scheduler -y

    修改cinder配置文件 /etc/cinder/cinder.conf

    [root@controller ~]# vi /etc/cinder/cinder.conf

    [DEFAULT]

    transport_url = rabbit://openstack:000000@controller

    auth_strategy = keystone

    my_ip = 192.168.184.110

    [database]

    connection = mysql+pymysql://cinder:000000@controller/cinder

    [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 = cinder

    password = 000000

    [oslo_concurrency]

    lock_path = /var/lib/cinder/tmp

    数据库同步

    [root@controller ~]# su -s /bin/sh -c "cinder-manage db sync" cinder

    修改nova配置 /etc/nova/nova.conf

    [root@controller ~]# vi /etc/nova/nova.conf

    [cinder]

    os_region_name = RegionOne

    启动服务

    [root@controller ~]# systemctl restart openstack-nova-api

    [root@controller ~]# systemctl enable --now openstack-cinder-api openstack-cinder-scheduler

    [root@controller ~]# systemctl status openstack-cinder-api openstack-cinder-scheduler

    Storage节点

    Storage节点要提前准备至少一块硬盘,作为cinder的存储后端

    下文默认storage节点已经存在一块未使用的硬盘,设备名称为 /dev/sdb

    首先来安装软件包

    [root@storage ~]# dnf install lvm2 device-mapper-persistent-data scsi-target-utils rpcbind nfs-utils openstack-cinder-volume openstack-cinder-backup -y

    然后配置lvm卷组

    [root@storage ~]# pvcreate /dev/sdb

    [root@storage ~]# vgcreate cinder-volumes /dev/sdb

    修改cinder配置 /etc/cinder/cinder.conf

    [root@storage ~]# vi /etc/cinder/cinder.conf

    [DEFAULT]

    transport_url = rabbit://openstack:000000@controller

    auth_strategy = keystone

    my_ip = 192.168.184.112

    enabled_backends = lvm

    glance_api_servers = http://controller:9292

    [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 = cinder

    password = 000000

    [database]

    connection = mysql+pymysql://cinder:000000@controller/cinder

    [lvm]

    volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

    volume_group = cinder-volumes

    target_protocol = iscsi

    target_helper = lioadm

    [oslo_concurrency]

    lock_path = /var/lib/cinder/tmp

    然后启动服务

    [root@storage ~]# systemctl start openstack-cinder-volume target

    [root@storage ~]# systemctl start openstack-cinder-backup

    然后我们回到 Controller 节点验证一下是否正确

    [root@controller ~]# source ~/.admin-openrc

    [root@controller ~]# openstack volume service list

    创建一个卷来验证配置是否正确

    [root@controller ~]# openstack volume create --size 1 test-volume

    [root@controller ~]# openstack volume list

    2.7 Horizon

           Horizon是OpenStack提供的前端页面,可以让用户通过网页鼠标的操作来控制OpenStack集群,而不用繁琐的CLI命令行。Horizon一般部署在控制节点。

           在 Controller 节点进行操作

    首先来安装软件包

    [root@controller ~]# dnf install openstack-dashboard -y

    然后修改配置文件 /etc/openstack-dashboard/local_settings

    [root@controller ~]# vi /etc/openstack-dashboard/local_settings

    OPENSTACK_HOST = "controller"

    ALLOWED_HOSTS = ['*', ]

    OPENSTACK_KEYSTONE_URL =  "http://controller:5000/v3"

    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

    CACHES = {

    'default': {

        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',

        'LOCATION': 'controller:11211',

        }

    }

    OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

    OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

    OPENSTACK_KEYSTONE_DEFAULT_ROLE = "member"

    WEBROOT = '/dashboard'

    POLICY_FILES_PATH = "/etc/openstack-dashboard"

    OPENSTACK_API_VERSIONS = {

        "identity": 3,

        "image": 2,

        "volume": 3,

    }

    然后重启服务

    [root@controller ~]# systemctl restart httpd

    至此,Horizon服务的部署已全部完成,打开浏览器,输入http://192.168.184.110/dashboard,打开horizon登录页面。

    点击“登入”按钮登陆 Dashboard 操作界面

    功能验证
    1. 账户管理模块

    在Dashboard操作界面中单击“身份管理→用户”,单击右上角的“创建用户”按钮,进入创建用户界面,在输入对应参数之后,单击“创建用户”按钮,创建用户

    返回主界面,在Dashboard操作界面的用户列表中可以查看到创建成功的用户

    使用远程工具连接controller节点,可以查看到创建的用户列表

    [root@controller ~]# openstack user list | grep GCX

    可以使用openstack user show命令,查询openstack-test用户详细信息

    [root@controller ~]# openstack user show GCX

    1. 镜像模块

    在Dashboard操作界面中单击“管理员→计算→镜像→创建镜像”,进入镜像创建界面,在创建镜像界面中,可以自定义镜像名称,并且添加本地镜像文件(cirros-0.3.4-x86_64-disk.img)

    在设置镜像格式为QCOW2后,可以根据其他相应要求进行配置,最后单击“创建镜像”按钮来完成镜像的创建。

    1. 网络模块

    在Dashboard操作界面中单击“网络”,根据要求创建相应的网络“testnet”

    下拉框选择项目“admin”,勾选“共享的”以及“外部网络”选项,使云主机能够连通外网

    然后单击“下一步”按钮,进入创建子网界面,填写子网名称testsubnet,网络地址192.168.184.115/24,网关IP为192.168.184.2

    然后单击“下一步”按钮,进入最后的确认界面,单击“创建网络”按钮

    1. 云主机模块

    为了顺利创建实例,还需要提前创建实例类型。

    在Dashboard操作界面中单击“管理员→计算→实例类型”,然后单击“创建实例类型”按钮,在弹出的窗口输入相应的属性参数,名称为“test”,vCPU数量1,内存512M,根磁盘1GB

    最后单击右下方“创建实例类型”按钮即可完成创建

    在以上几个模块都完成之后,就可以创建实例来使用。如果缺少了上述任何一个操作,都可能使实例创建失败

    在Dashboard操作界面中单击“项目→计算→实例”按钮,单击右方“创建实例”按钮,进入创建实例界面,输入实例名称“test-instance”

    接下来依次选择上述模块创建的 “源*” “实例类型*” “网络”,单击“创建实例”按钮,完成实例的创建

    创建完成后,等待片刻,即可在云主机列表中看到云主机 “test-instance” 正在运行中

    选择当前实例 “Actions” 下拉列表中的 “控制台” 选项,进入云主机控制台界面,按照提示输入正确的登录名及密码,即可成功登录云主机

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2309531.html

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    【Linux实践系列】:用c语言实现一个shell外壳程序

    &#x1f525;本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;博主主页&#xff1a;努力努力再努力wz 那么今天我们就要进入Linux的实践环节&#xff0c;那么我们之前学习了进程控制相关的几个知识点&#xff0c;比如进程的终止以及进程的等待和进程的替换&#xff0c;…

    conda安装及超详细避坑实战

    1. Anaconda介绍。 Anaconda是一站式数据科学与机器学习平台&#xff0c;专为开发者、数据分析师设计,并带有python中超过180个科学包及其依赖项。通过 Anaconda&#xff0c;您可以轻松管理数据环境、安装依赖包&#xff0c;快速启动数据分析、机器学习项目。 Anaconda集成了…

    LM studio 加载ollama的模型

    1.LM 下载&#xff1a; https://lmstudio.ai/ 2.ollama下载&#xff1a; https://ollama.com/download 3.打开ollama&#xff0c;下载deepseek-r1。 本机设备资源有限&#xff0c;选择7B的&#xff0c;执行ollama run deepseek-r1:7b 4.windows chocolatey下载&#xff1a; P…

    深入探索像ChatGPT这样的大语言模型-02-POST training supervised finetuning

    参考 【必看珍藏】2月6日&#xff0c;安德烈卡帕西最新AI普及课&#xff1a;深入探索像ChatGPT这样的大语言模型&#xff5c;Andrej Karpathy fineweb知乎翻译介绍 fineweb-v1原始连接 fineweb中文翻译版本 Chinese Fineweb Edu数据集 查看网络的内部结果&#xff0c;可以参…

    Kaldi环境配置与Aishell训练

    一、项目来源 代码来源&#xff1a;kaldi-asr/kaldi: kaldi-asr/kaldi is the official location of the Kaldi project. (github.com) 官网文档&#xff1a;Kaldi: The build process (how Kaldi is compiled) (kaldi-asr.org) 踩着我的同门李思成-CSDN博客填上的坑kaldi环境…

    数据集/API 笔记:新加坡PSI(空气污染指数)API

    data.gov.sg 数据范围&#xff1a;2016年2月 - 2025年3月 1 获取API方式 curl --request GET \--url https://api-open.data.gov.sg/v2/real-time/api/psi 2 返回数据 API 的数据结构可以分为 3 大部分&#xff1a; 区域元数据&#xff08;regionMetadata&#xff09; →…

    【GPU使用】如何在物理机和Docker中指定GPU进行推理和训练

    我的机器上有4张H100卡&#xff0c;我现在只想用某一张卡跑程序&#xff0c;该如何设置。 代码里面设置 import os # 记住要写在impot torch前 os.environ[CUDA_VISIBLE_DEVICES] "0, 1"命令行设置 export CUDA_VISIBLE_DEVICES0,2 # Linux 环境 python test.py …

    【Java项目】基于SpringBoot的CSGO赛事管理系统

    【Java项目】基于SpringBoot的CSGO赛事管理系统 技术简介&#xff1a;采用SpringBoot框架、Java语言、MySQL数据库等技术实现。 系统简介&#xff1a;CSGO赛事管理系统是一个基于B/S架构的管理系统&#xff0c;主要功能包括前台和后台管理模块。前台系统功能模块分为&#xf…

    MIPI接口:(4)MIPI CSI-2协议详解(上)

    1. 什么是CSI&#xff1f; CSI&#xff08;Camera Serial Interface&#xff09;是MIPI联盟早期制定的摄像头接口标准&#xff0c;主要用于连接摄像头和处理器。 CSI-2是CSI的第二代版本&#xff0c;在原有基础上进行了全面优化&#xff1a; &#xff08;1&#xff09;分层架…

    防火墙旁挂组网双机热备负载均衡

    一&#xff0c;二层交换网络&#xff1a; 使用MSTPVRRP组网形式 VLAN 2--->SW3为主,SW4 作为备份 VLAN 3--->SW4为主,SW3 作为备份 MSTP 设计 --->SW3 、 4 、 5 运行 实例 1 &#xff1a; VLAN 2 实例 2 &#xff1a; VLAN 3 SW3 是实例 1 的主根&#xff0c;实…

    视频教育网站开源系统的部署安装 (roncoo-education)服务器为ubuntu22.04.05

    一、说明 前端技术体系&#xff1a;Vue3 Nuxt3 Vite5 Vue-Router Element-Plus Pinia Axios 后端技术体系&#xff1a;Spring Cloud Alibaba2021 MySQL8 Nacos Seata Mybatis Druid redis 后端系统&#xff1a;roncoo-education&#xff08;核心框架&#xff1a;S…

    CF 886A.ACM ICPC(Java实现)

    题目分析 输入6个值&#xff0c;判断某三个值的和能够等于另外三个值的和 思路分析 首先判断总和是不是一个偶数&#xff0c;如果不是就“NO”。由于小何同学算法不好&#xff0c;只能使用三层for循环强行判断某三个值是否能等于总和的一半&#xff0c;可以就“YES”。 代码 …

    Spring Boot 自动装配深度解析与实践指南

    目录 引言&#xff1a;自动装配如何重塑Java应用开发&#xff1f; 一、自动装配核心机制 1.1 自动装配三大要素 1.2 自动装配流程 二、自定义自动配置实现 2.1 创建自动配置类 2.2 配置属性绑定 2.3 注册自动配置 三、条件注解深度应用 3.1 常用条件注解对比 3.2 自定…

    【windows driver】 开发环境简明安装教程

    一、下载路径 https://learn.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads 二、安装步骤&#xff1a; 1、安装Visual Studio IDE 笔者建议安装最新版本&#xff0c;可以向下兼容。发文截止到目前&#xff0c;VS2022是首选&#xff0c;当前笔者由于项…

    探秘基带算法:从原理到5G时代的通信变革【八】QAM 调制 / 解调

    文章目录 2.7 QAM 调制 / 解调2.7.1 概述2.7.2 星座图星座图的结构与性能发射端的信息编码与接收端的解码差分编码的分类与实现差分编码的模4格雷加法器公式16QAM星座图与映射关系 2.7.3 信号表达式正交振幅调制的基本原理与系统分析相位误差对QAM性能的影响多电平正交振幅调制…

    Flink性能指标详解MetricsAnalysis

    文章目录 Flink 组成1.JobManager2.TaskManager3.ResourceManager4.Dispatcher5.Client6. Env JobManager MetricsTaskManager Metrics Flink 组成 1.JobManager 管理任务 作业调度&#xff1a;负责接收和调度作业&#xff0c;分配任务到 TaskManager。资源管理&#xff1a;…

    Halcon 车牌识别-超精细教程

    车牌示例 流程: 读取图片转灰度图阈值分割,找车牌内容将车牌位置设置变换区域形状找到中心点和弧度利用仿射变换,斜切车牌旋转转正,把车牌抠出来利用形态学操作拼接车牌号数字训练ocr开始识别中文车牌 本文章用到的算子(解析) Halcon 算子-承接车牌识别-CSDN博客 rgb1_to_gray…

    Redis实战篇《黑马点评》8 附近商铺

    8.附近商户 8.1GEO数据结构的基本用法 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据&#xff0c;常见的命令有 GEOADD&#xff1a;添加一个地理空间…

    【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡

    【02】Cocos游戏开发引擎从0开发一款游戏-cocos项目目录结构熟悉-调试运行项目-最重要的assets资源文件认识-场景sense了解-优雅草卓伊凡 开发背景 接下来我们直接打开我们的项目开始进一步操作&#xff0c; 实战开发 导入项目 我把得到的项目解压到本地&#xff0c;我们开…

    kafka-web管理工具cmak

    一. 背景&#xff1a; 日常运维工作中&#xff0c;采用cli的方式进行kafka集群的管理&#xff0c;还是比较繁琐的(指令复杂&#xff1f;)。为方便管理&#xff0c;可以选择一些开源的webui工具。 推荐使用cmak。 二. 关于cmak&#xff1a; cmak是 Yahoo 贡献的一款强大的 Apac…