Openstack-Train

1、环境准备

1.1、主机配置

hostname system host resource IP
controller centos7 4G内存、4核 192.168.100.10
10.10.128.10
compute centos7 2G内存、2核 192.168.100.20
10.10.128.20

1.2、网络配置

在这里插入图片描述

本次实验管理网络192.168.100.0/24 能够连接互联网

provider网络10.10.128.0/8

controller节点

[root@localhost ~]# hostnamectl set-hostname controller
[root@controller ~]#  vi /etc/hosts	
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 controller		
192.168.100.20 compute

compute节点

[root@localhost ~]# hostnamectl set-hostname compute
[root@compute ~]#  vi /etc/hosts	
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.10 controller		
192.168.100.20 compute

controller & compute测试连通性

controller节点访问互联网测试

[root@controller ~]# ping -c 4 g.cn
PING g.cn (203.208.40.79) 56(84) bytes of data.
64 bytes from 203.208.40.79: icmp_seq=1 ttl=128 time=40.1 ms
64 bytes from 203.208.40.79: icmp_seq=2 ttl=128 time=38.5 ms
64 bytes from 203.208.40.79: icmp_seq=3 ttl=128 time=37.7 ms
64 bytes from 203.208.40.79: icmp_seq=4 ttl=128 time=34.9 ms--- g.cn ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 16259ms
rtt min/avg/max/mdev = 34.985/37.850/40.110/1.867 ms

controller节点与compute节点通信测试

[root@controller ~]# ping -c 4 compute
PING compute (192.168.100.20) 56(84) bytes of data.
64 bytes from compute (192.168.100.20): icmp_seq=1 ttl=64 time=0.601 ms
64 bytes from compute (192.168.100.20): icmp_seq=2 ttl=64 time=0.270 ms
64 bytes from compute (192.168.100.20): icmp_seq=3 ttl=64 time=0.330 ms
64 bytes from compute (192.168.100.20): icmp_seq=4 ttl=64 time=0.302 ms--- compute ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.270/0.375/0.601/0.133 ms

compute节点访问互联网测试

[root@compute ~]# ping -c 4 g.cn
PING g.cn (203.208.40.79) 56(84) bytes of data.
64 bytes from 203.208.40.79: icmp_seq=1 ttl=128 time=35.6 ms
64 bytes from 203.208.40.79: icmp_seq=2 ttl=128 time=36.2 ms
64 bytes from 203.208.40.79: icmp_seq=3 ttl=128 time=38.7 ms
64 bytes from 203.208.40.79: icmp_seq=4 ttl=128 time=40.1 ms--- g.cn ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 35.671/37.697/40.113/1.832 ms

compute节点与controller节点通信测试

[root@compute ~]# ping -c 4 controller
PING controller (192.168.100.10) 56(84) bytes of data.
64 bytes from controller (192.168.100.10): icmp_seq=1 ttl=64 time=0.429 ms
64 bytes from controller (192.168.100.10): icmp_seq=2 ttl=64 time=0.293 ms
64 bytes from controller (192.168.100.10): icmp_seq=3 ttl=64 time=0.307 ms
64 bytes from controller (192.168.100.10): icmp_seq=4 ttl=64 time=0.223 ms--- controller ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 0.223/0.313/0.429/0.074 ms

1.3、配置NTP

controller节点

要在节点之间正确同步服务,可以安装Chrony,这是NTP的实现。2个节点都同步阿里ntp服务器time1.aliyun.com

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

编辑/etc/chrony.conf文件,删除:

server NTP_SERVER iburst
实际为
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

添加:

server time1.aliyun.com iburst

启动服务并添加开机自启:

[root@controller ~]# mkdir /var/run/chrony
[root@controller ~]# systemctl status chronyd
[root@controller ~]#  systemctl enable chronyd

compute节点

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

删除或注释:

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

添加:

server time1.aliyun.com iburst

启动服务并添加开机自启:

[root@compute ~]# mkdir /var/run/chrony
[root@compute ~]# systemctl start chronyd.service
[root@compute ~]# systemctl enable chronyd.service

1.4、准备软件包

controller节点与compute

现在openstack最新版是ussuri,要求centos是8。我的是centos7做之前没注意,所以本次安装版本为train

[root@controller ~]# yum install centos-release-openstack-train -y
[root@controller ~]# yum upgrade -y 

安装一个适宜的openstack 客户端

[root@controller ~]# yum install python-openstackclient -y 

由于centos默认开启了selinux,安装openstack-selinux包自动管理openstack 服务安全策略

[root@controller ~]# yum install openstack-selinux -y
[root@compute ~]# yum install openstack-selinux -y

1.5、SQL数据库准备

大多数OpenStack服务都使用SQL数据库来存储信息。数据库一般运行在controller节点上,本次使用mariadb。

[root@controller ~]# yum install mariadb mariadb-server python2-PyMySQL -y

创建/etc/my.cnf.d/openstack.cnf文件,并添加如下内容

[root@controller ~]# touch /etc/my.cnf.d/openstack.cnf
[root@controller ~]# vi /etc/my.cnf.d/openstack.cnf 
[mysqld]
bind-address = 192.168.100.10		#此地址为controller节点ipdefault-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

进行初始化

  1. 启动并设置开机自启

    [root@controller ~]# systemctl start mariadb
    [root@controller ~]# systemctl enable mariadb
    
  2. 执行mysql_secure_installation安全脚本。

    [root@controller ~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDBSERVERS 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
    you haven't set the root password yet, the password will be blank,
    so you should just press enter here.Enter current password for root (enter for none): 	#直接回车
    OK, successfully used password, moving on...Setting the root password ensures that nobody can log into the MariaDB
    root user without the proper authorisation.Set root password? [Y/n] y		#是否设置root密码 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.Remove anonymous users? [Y/n] y		#移除匿名用户	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.Disallow root login remotely? [Y/n] n		#拒绝root远程登陆 n... skipping.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.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.Reload privilege tables now? [Y/n] y		#重新加载权限表 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!
    

1.6、消息队列

OpenStack使用消息队列来协调服务之间的操作和状态信息。 消息队列服务通常在controller点上运行。 本次使用RabbitMQ消息队列

安装配置

  1. 安装软件包
[root@controller ~]# yum install rabbitmq-server -y
  1. 启动并设置开机自启
[root@controller ~]# systemctl start rabbitmq-server
[root@controller ~]# systemctl enable rabbitmq-server
  1. 添加openstack用户,并设置密码000000
[root@controller ~]# rabbitmqctl add_user openstack 000000
Creating user "openstack"
  1. 授予openstack用户读写权限
[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/"

1.7、memcache

服务的身份服务身份验证机制使用Memcached来缓存令牌。 memcached服务通常在controller节点上运行。

  1. 安装软件包
[root@controller ~]# yum install memcached python-memcached -y
  1. 编辑/etc/sysconfig/memcached添加如下内容
OPTIONS="-l 127.0.0.1,::1,controller"
  1. 启动并设置开机自启
[root@controller ~]# systemctl start memcached
[root@controller ~]# systemctl enable memcached

2、部署一个最小化的Train版本openstack

2.1、身份认证——keystone

OpenStack Identity Service提供了一个集成点,用于管理身份验证,授权和服务目录。

身份服务通常是用户与之交互的第一项服务。身份验证后,最终用户可以使用其身份访问其他OpenStack服务。同样,其他OpenStack服务也利用身份服务来确保用户是他们所说的人,并发现其他服务在部署中的位置。身份服务还可以与某些外部用户管理系统(例如LDAP)集成。

用户和服务可以使用由身份服务管理的服务目录来查找其他服务。服务目录是OpenStack部署中可用服务的集合。每个服务可以具有一个或多个端点(endpoints),并且每个端点可以是以下三种类型之一:admininternalpublic。在生产环境中,出于安全原因,不同的endpoints类型可能驻留在暴露给不同类型用户的单独网络上。

例如:公共API网络可能在Internet上可见,因此客户可以管理它们自己的cloud。 admin API网络可能仅限于管理云基础架构的组织内的运营商。内部API网络可能仅限于包含OpenStack服务的主机。此外,OpenStack支持多个区域以实现可伸缩性。为简单起见,本次将管理网络用于所有端点类型和默认的RegionOne区域。身份服务中创建的区域,服务和端点共同构成了部署的服务目录。部署中的每个OpenStack服务都需要一个服务条目,并在Identity服务中存储相应的端点。

keystone服务包含以下组件:

  • Server:

    使用RESTful服务接口提供集中式的身份验证和授权服务。

  • Drivers:

    Drivers或服务后端集成到集中式Server。用于访问OpenStack外部存储库中的身份信息,并且可能已经存在于部署OpenStack的基础架构中。

  • Modules:

    中间件Modules在使用身份服务的OpenStack组件的地址空间中运行。 这些模块拦截服务请求,提取用户凭证,并将其发送到集中式服务器进行授权。 中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。

使用keystone前的条件—controller节点

  1. 创建keystone数据库
[root@controller ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.3.20-MariaDB MariaDB ServerCopyright (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.001 sec)
  1. 授予keystone用户对keystone数据库本地和远程的所有操作权限。
GRANT ALL PRIVILEGES ON [数据库名].[表名] to '[用户名]@localhost/%' IDENTIFIED BY '[密码]';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.005 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.000 sec)

安装配置keystone

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

编辑/etc/keystone/keystone.conf在[database]部分添加如下内容:

connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[KEYSTON_DBPASS]修改为数据库中设置的密码
connection = mysql+pymysql://keystone:000000@controller/keystone

在[token]部分添加如下内容

provider = fernet

然后执行如下命令

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

初始化Fernet密钥仓库:

–keystone-user和–keystone-group标志用于指定将用于运行keystone的操作系统的用户/组。这些参数是为了允许在另一个操作系统用户/组下运行keystone。

[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

配置HTTP服务

  1. 配置/etc/httpd/conf/httpd.conf文件的ServerName 为controller
ServerName controller
  1. 创建链接文件/usr/share/keystone/wsgi-keystone.conf
[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

完成安装

  1. 启动并设置http开机自启
[root@controller ~]# systemctl start httpd
[root@controller ~]# systemctl enable httpd
  1. 设置适当的环境变量来配置管理帐户
[root@controller ~]# vi openstack-admin.sh 
export OS_USERNAME=admin
export OS_PASSWORD=000000
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 openstack-admin.sh 来生效配置

创建domain、projects、users和roles

  1. 创建一个新的example domain
[root@controller ~]# openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | An Example Domain                |
| enabled     | True                             |
| id          | e7a4ef4e82d54dd48d42c4e21373613f |
| name        | example                          |
| options     | {}                               |
| tags        | []                               |
+-------------+----------------------------------+
  1. 创建service project
[root@controller ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 16ca1d55269d4f16a79662611bd70df3 |
| is_domain   | False                            |
| name        | service                          |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+
  1. 常规(非管理员)任务应使用没有特权的project和user。 例如,创建myproject项目和myuser用户。
[root@controller ~]# openstack project create --domain default --description "Demo Project" myproject
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 51f50c3a2a68454a8f2122f90bdad89d |
| is_domain   | False                            |
| name        | myproject                        |
| options     | {}                               |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

创建myuser的用户

[root@controller ~]# openstack user create --domain default   --password-prompt myuser
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 15042e2377d24be2bd831a03842aa775 |
| name                | myuser                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

创建myrole的角色

[root@controller ~]# openstack role create myrole
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | None                             |
| domain_id   | None                             |
| id          | 52fd6fcf572d4534a36ea4a640d6e6ea |
| name        | myrole                           |
| options     | {}                               |
+-------------+----------------------------------+

将myrole角色添加到myproject项目和myuser用户:

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

认证操作

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 issuePassword: 
Password: 
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                                                                   |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2020-06-28T09:54:31+0000                                                                                                                                                                |
| id         | gAAAAABe-FrHunkJlroXcSVjq1zrJ1JCu4oDAGzr7JutjmMgYg3CcUp2kyu-MCyebTu48i0E0ZRSHDLjAOhR7buPHfmlhXjsxgadRZoM_OBhFBUEw1dAaSYterixSDqYGOY2bGf8ovhHapJ4rc3QetifjhzUEd1fOW_pVBfS_qwOYS53f9BLgdE |
| project_id | 51f50c3a2a68454a8f2122f90bdad89d                                                                                                                                                        |
| user_id    | 15042e2377d24be2bd831a03842aa775                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

创建脚本

前面的部分使用了环境变量和命令选项的组合,以通过openstack客户端与Identity Service进行交互。 为了提高客户端操作的效率,OpenStack支持简单的客户端环境脚本,也称为OpenRC文件。 这些脚本通常包含所有客户端的通用选项,也支持唯一选项。

创建admin-openrc

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

创建demo-openrc

[root@controller ~]# vi  demo-openrc export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=000000
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

脚本的使用

要将客户端作为特定项目和用户运行,可以在运行它们之前简单地加载关联的客户端环境脚本

加载admin-openrc文件以使用Identity服务的位置以及admin项目和用户凭据填充环境变量

[root@controller ~]# . admin-openrc

请求认证token


[root@controller ~]# openstack token issue
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                                                                                   |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| expires    | 2020-06-28T10:00:02+0000                                                                                                                                                                |
| id         | gAAAAABe-FwSX8Yi3y4NsHe0B5CujrMvR5L0Ff7oPolybfVouJsSJIvZGiJ1e4Qo2E4jYAVQ0RRoZGh_0yPtQrENnNv-FUwYJVTbDoRwEtp_i6MJ4J4ZDf9GMKkfy4TbB7Jv8FIswiFk0l0NvKPz0YMqp2yZWarQu58qtQ-QELUFl9c_IIl3qGU |
| project_id | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                                                        |
| user_id    | d0451d8b9a7245c09d47b85197ccc80c                                                                                                                                                        |
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

keystone架构

Service

Keystone在一个或多个endpoints上公开的一组内部服务。前端将这些服务结合使用。例如,一个身份验证将使用Identity Service验证用户/项目凭据,并在成功后使用令牌服务创建并返回令牌。

Identity

Identity service提供身份验证凭证以及有关用户和组的数据。一般情况下,这些数据由Identity service管理,进行相关的CRUD(增删改查)操作。在复杂的情况下,这些数据也可以由后端进行管理。例如,Identity service作为LDAP的前端。LDAP服务器进行认证,Identity service的作用是准确地传递该信息。

Users

User代表单个API使用者。 User本身必须由特定domain拥有,因此所有用户名不是全局唯一的,而仅是其domain唯一的。

Groups

Groups使User的集合。Group本身必须由特定domain拥有,因此所有group名称不是全局唯一的,而仅是其domain唯一的。

Resource

Resource Service提供了有关project和domain的数据。

Projects

Project代表OpenStack所有权的基本单位,因为OpenStack中的所有Resource均应由特定Project拥有。 一个Project本身必须由一个特定的domain拥有,因此所有的Project名称都不是全局唯一的,而是对其domain唯一的。 如果未指定Project的domain,则将其添加到default domain。

Domains

domain包含Projects、Users和groups,每一个domain是唯一的。每个domain都定义一个存在API可见名称属性的名称空间。 Keystone提供了一个默认domain,名为“Default”。

在Identity v3 API中,属性的唯一性如下:

  • domain名。 在所有域中都是唯一的。

  • role名称。 在所属域中唯一。

  • user名。 在所属域中唯一。

  • Project名称。 在所属域中唯一。

  • group名字。 在所属域中唯一。

Assignment

Assignment service提供了有关user和role的分配

Roles

Role决定了最终user可以获得的授权级别。 可以在domain或Project级别授予Role。 可以在单个User或group级别分配Role。 Role名称在所属domain中是唯一的。

Roles Assignment

具有Role、 Resource 和Identity的三元组.

Token

一旦验证了用户的证书,Token服务便会验证和管理用于认证请求的token。

Catalog

Catalog service 用于提供通过endponit发现的endpoint注册表

应用操作

Keystone是一些服务的HTTP前端。 像其他OpenStack应用程序一样,使用python WSGI接口完成,并且使用Paste一起配置了应用程序。 该应用程序的HTTP端点由WSGI中间件的管道组成,例如:

[pipeline:api_v3]
pipeline = healthcheck cors sizelimit http_proxy_to_wsgi osprofiler url_normalize request_id build_auth_context json_body ec2_extension_v3 s3_extension service_v3

这些依次使用keystone.common.wsgi.ComposedRouter的子类将URL链接到控制器(keystone.common.wsgi.Application的子类)。 在每个控制器中,将加载一个或多个管理器,这些管理器是精简包装类,它们根据keystone配置加载适当的服务驱动程序。

  • Assignment
    • keystone.assignment.controllers.GrantAssignmentV3
    • keystone.assignment.controllers.ImpliedRolesV3
    • keystone.assignment.controllers.ProjectAssignmentV3
    • keystone.assignment.controllers.TenantAssignment
    • keystone.assignment.controllers.RoleAssignmentV3
    • keystone.assignment.controllers.RoleV3
  • Authentication
    • keystone.auth.controllers.Auth
  • Catalog
    • keystone.catalog.controllers.EndpointFilterV3Controller
    • keystone.catalog.controllers.EndpointGroupV3Controller
    • keystone.catalog.controllers.EndpointV3
    • keystone.catalog.controllers.ProjectEndpointGroupV3Controller
    • keystone.catalog.controllers.RegionV3
    • keystone.catalog.controllers.ServiceV3
  • Credentials
    • keystone.contrib.ec2.controllers.Ec2ControllerV3
    • keystone.credential.controllers.CredentialV3
  • Federation
    • keystone.federation.controllers.IdentityProvider
    • keystone.federation.controllers.FederationProtocol
    • keystone.federation.controllers.MappingController
    • keystone.federation.controllers.Auth
    • keystone.federation.controllers.DomainV3
    • keystone.federation.controllers.ProjectAssignmentV3
    • keystone.federation.controllers.ServiceProvider
    • keystone.federation.controllers.SAMLMetadataV3
  • Identity
    • keystone.identity.controllers.GroupV3
    • keystone.identity.controllers.UserV3
  • Oauth1
    • keystone.oauth1.controllers.ConsumerCrudV3
    • keystone.oauth1.controllers.AccessTokenCrudV3
    • keystone.oauth1.controllers.AccessTokenRolesV3
    • keystone.oauth1.controllers.OAuthControllerV3
  • Policy
    • keystone.policy.controllers.PolicyV3
  • Resource
    • keystone.resource.controllers.DomainV3
    • keystone.resource.controllers.DomainConfigV3
    • keystone.resource.controllers.ProjectV3
    • keystone.resource.controllers.ProjectTagV3
  • Revoke
    • keystone.revoke.controllers.RevokeController
  • Trust
    • keystone.trust.controllers.TrustV3

服务后端

可以将每个服务配置为使用endpoint,以使keystone适应各种环境和需求。 每个服务的后端在keystone.conf文件中定义,并且密钥驱动程序位于与每个服务关联的组下。

每个endpoint下都有一个通用类,可为任何实现提供抽象基类,以标识预期的服务实现。 抽象基类以base.py的形式存储在服务的后端目录中。 服务的相应驱动程序是:

  • keystone.assignment.backends.base.AssignmentDriverBase
  • keystone.assignment.role_backends.base.RoleDriverBase
  • keystone.auth.plugins.base.AuthMethodHandler
  • keystone.catalog.backends.base.CatalogDriverBase
  • keystone.credential.backends.base.CredentialDriverBase
  • keystone.endpoint_policy.backends.base.EndpointPolicyDriverBase
  • keystone.federation.backends.base.FederationDriverBase
  • keystone.identity.backends.base.IdentityDriverBase
  • keystone.identity.mapping_backends.base.MappingDriverBase
  • keystone.identity.shadow_backends.base.ShadowUsersDriverBase
  • keystone.oauth1.backends.base.Oauth1DriverBase
  • keystone.policy.backends.base.PolicyDriverBase
  • keystone.resource.backends.base.ResourceDriverBase
  • keystone.resource.config_backends.base.DomainConfigDriverBase
  • keystone.revoke.backends.base.RevokeDriverBase
  • keystone.token.providers.base.Provider
  • keystone.trust.backends.base.TrustDriverBase
backend 模板

模板化backend主要是针对Keystone项目中服务目录的常见用例而设计的,它是目录后端,它可以简单地扩展预配置的模板以提供目录数据。

例如paste.deploy配置

[DEFAULT]
catalog.RegionOne.identity.publicURL = http://localhost:$(public_port)s/v3
catalog.RegionOne.identity.adminURL = http://localhost:$(public_port)s/v3
catalog.RegionOne.identity.internalURL = http://localhost:$(public_port)s/v3
catalog.RegionOne.identity.name = 'Identity Service'

数据模型

Keystone的设计,可适应多种风格的后端。 因此,许多方法和数据类型将接受更多的数据,而不是知道如何处理并将这些数据传递给后端。

有几种主要的数据类型:

  • User: 具有帐户证书,与一个或多个project或domain关联
  • Group: User的集合,与一个或多个project或domain关联
  • Project: OpenStack中的所有权单位,包含一个或多个用户
  • Domain: OpenStack中的所有权单位, 包含 users, groups 和projects
  • Role: user—project相关联的元数据。
  • Token:识别与用户或用户和项目关联的证书。
  • Extras: 与user—project对关联的键值元数据存储区。
  • Rule: 描述执行一组操作的规则。

2.2、镜像服务——glance

映像服务使用户能够发现,注册和检索虚拟机映像。 它提供了REST API,可以查询虚拟机映像元数据并检索实际映像。 可以通过Image服务提供的虚拟机映像存储在从简单文件系统到对象存储系统(如OpenStack Object Storage)的各种位置。

为简单起见,将Image服务配置为使用文件后端的方法,该文件后端会将其上传并存储在托管Image服务的控制器节点上的目录中。 默认情况下,此目录为/var/lib/glance /images/

OpenStack 镜像服务对于基础架构即服务(IaaS)至关重要。 它接受来自磁盘或服务器镜像的API请求,以及来自最终用户或OpenStack Compute组件的元数据定义。 它还支持在各种存储库类型(包括OpenStack对象存储)上存储磁盘或服务器镜像。

OpenStack镜像服务包括以下组件:

  • glance-api:用于镜像发现,检索和存储的Image API调用。
  • glance-registry:存储,处理和检索有关镜像的元数据。 元数据包括大小和类型等项目。
  • Database:存储图像元数据,可以根据自己的喜好选择数据库。 大多数部署使用MySQL或SQLite。
  • Storage repository for image files:支持各种存储库类型,包括普通文件系统(或glance-api控制器节点上安装的任何文件系统),对象存储,RADOS块设备,VMware数据存储和HTTP。 请注意,某些存储库将仅支持只读用法。
  • Metadata definition service:供应商,管理员,服务和用户的通用API,可以定义他们自己的自定义元数据。 该元数据可用于不同类型的资源,包括新属性的键,描述,约束以及可以与之关联的资源类型。

使用glance前的条件—controller节点

  1. 创建glance数据库
[root@controller ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.20-MariaDB MariaDB ServerCopyright (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.001 sec)
  1. 授予glance用户对glance数据库本地和远程的所有操作权限。
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.001 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '000000';
Query OK, 0 rows affected (0.000 sec)
  1. 创建glance服务凭证,执行下述步骤

    1. 创建glance用户

      取得管理员凭据,以访问仅管理员的CLI命令:
      [root@controller ~]# source admin-openrc 
      [root@controller ~]# openstack user create --domain default --password-prompt glance
      User Password:
      Repeat User Password:
      +---------------------+----------------------------------+
      | Field               | Value                            |
      +---------------------+----------------------------------+
      | domain_id           | default                          |
      | enabled             | True                             |
      | id                  | 12af032add7740a1a5e469d2604d5aa9 |
      | name                | glance                           |
      | options             | {}                               |
      | password_expires_at | None                             |
      +---------------------+----------------------------------+
      
    2. 添加admin角色到glance用户和service project中。

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

      [root@controller ~]# openstack service create --name glance --description "OpenStack Image" image
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+----------------------------------+
      | description | OpenStack Image                  |
      | enabled     | True                             |
      | id          | 3eb979627b50476faab627aa302b84e1 |
      | name        | glance                           |
      | type        | image                            |
      +-------------+----------------------------------+
      
  2. 创建image 服务端点

    [root@controller ~]# openstack endpoint create --region RegionOne image public http://controller:9292
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | afd67248eafa4b64beadcc6b214b8100 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 3eb979627b50476faab627aa302b84e1 |
    | service_name | glance                           |
    | service_type | image                            |
    | url          | http://controller:9292           |
    +--------------+----------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne image internal  http://controller:9292
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 4577afb1371042d887522bee377c65ae |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 3eb979627b50476faab627aa302b84e1 |
    | service_name | glance                           |
    | service_type | image                            |
    | url          | http://controller:9292           |
    +--------------+----------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne image admin  http://controller:9292
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 1c25397e44cf4329a5d483e0bba37884 |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 3eb979627b50476faab627aa302b84e1 |
    | service_name | glance                           |
    | service_type | image                            |
    | url          | http://controller:9292           |
    +--------------+----------------------------------+
    

安装配置组件

  1. 安装软件包

    [root@controller ~]# yum install openstack-glance -y
    
  2. 编辑/etc/glance/glance-api.conf文件

    • [database]部分添加如下配置,注意:此处GLANCE_DBPASS为数据库设置的密码

      [database]
      # ...
      connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance
    • [keystone_authtoken][paste_deploy]部分添加如下内容,注意:此处GLANCE_PASS为openstack创建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]部分配置image本地文件存储系统和文件

      [glance_store]
      # ...
      stores = file,http
      default_store = file
      filesystem_store_datadir = /var/lib/glance/images/
      
    1. 同步数据库

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

    启动并设置开机自启

    [root@controller ~]# systemctl start openstack-glance-api
    [root@controller ~]# systemctl enable openstack-glance-api
    

验证操作

使用CirrOS(一个小型Linux映像,可帮助您测试OpenStack部署)验证Image Service的运行。

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

使用QCOW2磁盘格式,bare container格式和公共可见性将镜像上传到镜像服务,以便所有项目都可以访问它:

[root@controller ~]# glance image-create --name "cirros" \
>   --file cirros-0.4.0-x86_64-disk.img \
>   --disk-format qcow2 --container-format bare \
>   --visibility public+------------------+----------------------------------------------------------------------------------+
| Property         | Value                                                                            |
+------------------+----------------------------------------------------------------------------------+
| checksum         | 443b7623e27ecf03dc9e01ee93f67afe                                                 |
| container_format | bare                                                                             |
| created_at       | 2020-06-29T05:57:59Z                                                             |
| disk_format      | qcow2                                                                            |
| id               | 42b7a330-85ad-462a-9282-e6b09576b806                                             |
| min_disk         | 0                                                                                |
| min_ram          | 0                                                                                |
| name             | cirros                                                                           |
| os_hash_algo     | sha512                                                                           |
| os_hash_value    | 6513f21e44aa3da349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a153f735bb0982e |
|                  | 2161b5b5186106570c17a9e58b64dd39390617cd5a350f78                                 |
| os_hidden        | False                                                                            |
| owner            | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                 |
| protected        | False                                                                            |
| size             | 12716032                                                                         |
| status           | active                                                                           |
| tags             | []                                                                               |
| updated_at       | 2020-06-29T05:57:59Z                                                             |
| virtual_size     | Not available                                                                    |
| visibility       | public                                                                           |
+------------------+----------------------------------------------------------------------------------+

确认上传的镜像并验证属性

[root@controller ~]#  glance image-list
+--------------------------------------+--------+
| ID                                   | Name   |
+--------------------------------------+--------+
| 42b7a330-85ad-462a-9282-e6b09576b806 | cirros |
+--------------------------------------+--------+

2.3 Placement 服务

placement API服务是在nova中的14.0.0 Newton版本中引入的。是一个REST API堆栈和数据模型,用于跟踪资源提供者的清单和使用情况以及不同类别的资源。

例如,资源提供者可以是计算节点,共享存储池或IP分配池。placement服务跟踪每个提供商的库存和使用情况。

每个资源提供者也可以具有描述该资源提供者的质量方面的一组特征。特征描述了资源提供者的一个方面,该方面本身不能被消耗,但可能希望指定工作量。例如,可用磁盘可以是固态驱动器(SSD)。

placement提供了一个placement API的WSGI脚本,用于与Apache,nginx或其他支持WSGI的Web服务器一起运行服务。

使用placement的前提条件

  1. 创建placement数据库

    [root@controller ~]# mysql -uroot -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 22
    Server version: 10.3.20-MariaDB MariaDB ServerCopyright (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.001 sec)
  2. 授予placement用户对placement数据库本地和远程的所有操作权限。同样这里PLACEMENT_DBPASS替换为我们要设置的密码。

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

配置用户和endpoint

创建用户

[root@controller ~]# openstack user create --domain default --password-prompt placement
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | ba0d6f59cc174f3680eb3107b43d9071 |
| name                | placement                        |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------

授予placement对service project admin的角色

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

在服务目录创建placement API 条目

[root@controller ~]# openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Placement API                    |
| enabled     | True                             |
| id          | dbbf0e2a6df74af4aef3b0cf2141a1f0 |
| name        | placement                        |
| type        | placement                        |
+-------------+----------------------------------+

创建placement service endpoint

[root@controller ~]# openstack endpoint create --region RegionOne  placement public http://controller:8778+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 2f11c7900de84494bdd9eee6d0e82057 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | dbbf0e2a6df74af4aef3b0cf2141a1f0 |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne  placement internal  http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | a7c01895fd24477886f3932d190d4bdb |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | dbbf0e2a6df74af4aef3b0cf2141a1f0 |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
[root@controller ~]# openstack endpoint create --region RegionOne  placement admin  http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 32a63557a5cb47e08fd07fd426d111f1 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | dbbf0e2a6df74af4aef3b0cf2141a1f0 |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+

安装配置组件

安装软件包

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

编辑/etc/placement/placement.conf文件添加如下内容。

在添加之前可以对配置做适当整理

[root@controller ~]# cp /etc/placement/placement.conf /etc/placement/placement.conf.bak
[root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/placement/placement.conf
grep -Ev '(^#|^$)' /etc/placement/placement.conf.bak > /etc/placement/placement.conf
[root@controller ~]# cat /etc/placement/placement.conf
[DEFAULT]
[api]
[cors]
[keystone_authtoken]
[oslo_policy]
[placement]
[placement_database]
[profiler]
  • [placement_database] 部分 此处的PLACEMENT_DBPASS为数据库设置的密码
```
[placement_database]
# ...
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement
```
  • [api][keystone_authtoken]部分,此处PLACEMENT_PASS为创建openstack 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
    

填充placement数据库

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

重启httpd

systemctl restart httpd

认证测试

执行状态检查以确保一切正常:

[root@controller ~]# placement-status upgrade check
+----------------------------------+
| Upgrade Check Results            |
+----------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success                  |
| Details: None                    |
+----------------------------------+
| Check: Incomplete Consumers      |
| Result: Success                  |
| Details: None                    |
+----------------------------------+

2.4、计算(compute)服务——Nova

OpenStack项目是一个开源云计算平台,支持所有类型的云环境。该项目旨在实现简单的实现,大规模的可伸缩性和丰富的功能。

OpenStack通过各种补充服务提供了基础架构即服务(IaaS)解决方案。每个服务都提供一个促进此集成的应用程序编程接口(API)。

OpenStack Compute是基础架构即服务(IaaS)系统的主要部分。 主要模块是用Python实现的。

OpenStack Compute与OpenStack Identity进行交互以进行身份验证,与OpenStack Placement进行资源清单跟踪和选择,为磁盘和服务器映像提供OpenStack Image服务,并为用户和管理界面提供OpenStack Dashboard。

OpenStack Compute由以下部分组成:

  • nova-api service:接受并响应最终用户的计算API调用。 该服务支持OpenStack Compute API。 它执行一些策略并启动大多数编排活动,例如运行实例。

  • nova-api-metadata service:接受来自实例的元数据请求。 当具有nova-network安装的多主机模式下运行时,通常使用nova-api-metadata服务。

  • nova-compute service:通过守护程序API创建和终止虚拟机实例的辅助程序守护程序。 例如:

    • 适用于XenServer / XCP的XenAPI

    • 用于KVM或QEMU的libvirt

    • 适用于VMware的VMwareAPI

  • nova-scheduler service:从队列中获取虚拟机实例请求,并确定它在哪台计算服务器主机上运行。

  • nova-conductor module:充当nova-compute服务与数据库之间交互中间人的身份。 它消除了由nova-compute服务对云数据库的直接访问。请勿将其部署在运行nova-compute服务的节点上。

  • nova-novncproxy daemon:提供用于通过VNC连接访问正在运行的实例的代理。 支持基于浏览器的novnc客户端。

  • nova-spicehtml5proxy daemon:提供用于通过SPICE连接访问正在运行的实例的代理。 支持基于浏览器的HTML5客户端。

  • nova-xvpvncproxy daemon:提供用于通过VNC连接访问正在运行的实例的代理。 支持特定于OpenStack的Java客户端。从19.0.0(Stein)起不推荐使用nova-xvpvnxproxy,并且在以后的发行版中将其删除。

  • The queue:在程序之间传递消息的中心。 通常用RabbitMQ实现。

  • SQL database:存储云基础架构的大多数构建时和运行时状态。

controller节点部署

  1. 创建nova_api、nova、nova_cell0数据库

    [root@controller ~]# mysql -uroot -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 35
    Server version: 10.3.20-MariaDB MariaDB ServerCopyright (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.001 sec)MariaDB [(none)]> CREATE DATABASE nova;
    Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> CREATE DATABASE nova_cell0;
    Query OK, 1 row affected (0.000 sec)
    
  2. 授予nova用户对3个数据库的所有权限 ,此处NOVA_DBPASS为我们自定义的密码。

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \IDENTIFIED BY 'NOVA_DBPASS';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \IDENTIFIED BY 'NOVA_DBPASS';MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \IDENTIFIED BY 'NOVA_DBPASS';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \IDENTIFIED BY 'NOVA_DBPASS';MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \IDENTIFIED BY 'NOVA_DBPASS';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \IDENTIFIED BY 'NOVA_DBPASS';
    
  3. 创建计算服务的证书

    • 创建nova用户

      [root@controller ~]# openstack user create --domain default --password-prompt nova
      User Password:
      Repeat User Password:
      +---------------------+----------------------------------+
      | Field               | Value                            |
      +---------------------+----------------------------------+
      | domain_id           | default                          |
      | enabled             | True                             |
      | id                  | 09196e3534444e38af2483d34a0642da |
      | name                | nova                             |
      | options             | {}                               |
      | password_expires_at | None                             |
      +---------------------+----------------------------------+
      
    • 给nova用户添加admin角色

      [root@controller ~]# openstack role add --project service --user nova admin
      
    • 创建nova服务实体

      [root@controller ~]# openstack service create --name nova \
      >   --description "OpenStack Compute" compute
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+----------------------------------+
      | description | OpenStack Compute                |
      | enabled     | True                             |
      | id          | ed362f51b0c54979897bc1e98e5e14e9 |
      | name        | nova                             |
      | type        | compute                          |
      +-------------+----------------------------------+
      
  4. 创建compute API服务端点

    [root@controller ~]# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 29f76fc4025949698a03e63469c5c998 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | ed362f51b0c54979897bc1e98e5e14e9 |
    | service_name | nova                             |
    | service_type | compute                          |
    | url          | http://controller:8774/v2.1      |
    +--------------+----------------------------------+
    [root@controller ~]# openstack endpoint create --region RegionOne compute internal  http://controller:8774/v2.1 
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | e5f175955c094b968f3ab27f3e38f484 |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | ed362f51b0c54979897bc1e98e5e14e9 |
    | service_name | nova                             |
    | service_type | compute                          |
    | url          | http://controller:8774/v2.1      |
    +--------------+----------------------------------+
    [root@controller ~]# openstack endpoint create --region RegionOne compute admin  http://controller:8774/v2.1
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | b76c32a37e26482aa8841becdb3df4f1 |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | ed362f51b0c54979897bc1e98e5e14e9 |
    | service_name | nova                             |
    | service_type | compute                          |
    | url          | http://controller:8774/v2.1      |
    +--------------+----------------------------------+
    

安装配置如下内容

安装软件包

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

编辑/etc/nova/nova.conf文件完成如下配置:

整理下配置文件

[root@controller ~]# cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
[root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/nova/nova.conf
grep -Ev '(^#|^$)' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
  • 在[DEFAULT] 部分, 仅启用compute和metadata APIs:

    [DEFAULT]
    # ...
    enabled_apis = osapi_compute,metadata
    
  • [api_database][database] 部分,添加数据库会话连接,此处NOVA_DBPASS为数据库中的授权密码

    [api_database]
    # ...
    connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api[database]
    # ...
    connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova
    
  • [DEFAULT] 部分,配置RabbitMQ消息队列,此处RABBIT_PASS为openstack账号的密码

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
    
  • [api][keystone_authtoken] 部分。配置身份访问,此处NOVA_PASS为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
```
  • [DEFAULT] 部分,配置my_ip为controller节点管理IP接口地址

    [DEFAULT]
    # ...
    my_ip = 192.168.100.10
    
  • [DEFAULT] 部分,开启支持网络服务。

```
[DEFAULT]
# ...
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver
```>   默认情况下,Compute使用内部防火墙驱动程序。 由于网络服务包含防火墙驱动程序,因此必须使用nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用计算防火墙驱动程序。
  • 在**[vnc]部分,**使用controller节点管理IP接口地址配置VNC代理

    [vnc]
    enabled = true
    # ...
    server_listen = 192.168.100.10
    server_proxyclient_address = 192.168.100.10
    
  • [glance] 部分,配置镜像服务API

    [glance]
    # ...
    api_servers = http://controller:9292
    
  • [oslo_concurrency] ,配置锁路径

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp
    
  • [placement] 部分,配置访问placement服务,PLACEMENT_PASS为placement密码。

    [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
    

填充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单元

[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

验证 cell0cell1 注册情况

[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
|  Name |                 UUID                 |              Transport URL               |               Database Connection               | Disabled |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 |                  none:/                  | mysql+pymysql://nova:****@controller/nova_cell0 |  False   |
| cell1 | ac36e8e1-b1e5-4534-b991-40577e68d273 | rabbit://openstack:****@controller:5672/ |    mysql+pymysql://nova:****@controller/nova    |  False   |
+-------+--------------------------------------+------------------------------------------+-------------------------------------------------+----------+

启动并设置compute服务开机自启

[root@controller ~]# systemctl start \openstack-nova-api.service \openstack-nova-scheduler.service \openstack-nova-conductor.service \openstack-nova-novncproxy.service[root@controller ~]# systemctl enable \openstack-nova-api.service \openstack-nova-scheduler.service \openstack-nova-conductor.service \openstack-nova-novncproxy.service

compute节点部署

安装配置如下内容

  1. 安装软件包

    [root@compute ~]# yum install openstack-nova-compute -y 
    
  2. 编辑**/etc/nova/nova.conf**文件,完成如下配置

    [root@compute ~]# cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
    [root@compute ~]# grep -Ev '(^#|^$)' !$ > /etc/nova/nova.conf
    grep -Ev '(^#|^$)' /etc/nova/nova.conf.bak > /etc/nova/nova.conf
    

    [DEFAULT] 部分,开启compute 和metadata APIs,配置消息队列

    [DEFAULT]
    # ...
    enabled_apis = osapi_compute,metadata

    [DEFAULT] 部分,配置RabbitMQ消息队列,RABBIT_PASS为RabbitMQ中openstack账户的密码

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    

    [api] 和 [keystone_authtoken] 配置身份认证,NOVA_PASS为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
    

    [DEFAULT] 部分,配置 my_ip 选项。MANAGEMENT_INTERFACE_IP_ADDRESS为compute节点管理接口地址

    my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
    

    [DEFAULT] 部分,开启网络支持

    [DEFAULT]
    # ...
    use_neutron = true
    firewall_driver = nova.virt.firewall.NoopFirewallDriver
    

    [vnc] 部分,开启远程控制台访问配置,server_listen监听所有IP,server_proxyclient_address仅监听compute节点管理地址IP。URL可以使用Web浏览器访问此计算节点上的实例的远程控制台的位置。

    [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的位置

    [glance]
    # ...
    api_servers = http://controller:9292
    

    在 **[oslo_concurrency]**部分,配置锁的路径

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/nova/tmp
    

    [placement] 部分,配置placement API,PLACEMENT_PASS为placement密码

    [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
    

确定计算节点是否支持虚拟机的硬件加速:

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

如果此命令返回的值等于或大于1,则计算节点支持硬件加速,通常不需要其他配置。

如果此命令返回零值,则说明计算节点不支持硬件加速,并且必须将libvirt配置为使用QEMU而不是KVM。

编辑 /etc/nova/nova.conf 文件,添加如下配置

[libvirt]
# ...
virt_type = qemu

启动设置开机自启

[root@compute ~]# systemctl start libvirtd openstack-nova-compute
[root@compute ~]# systemctl enable libvirtd openstack-nova-compute

可以观察日志,/var/log/nova/nova-compute.log,很有可能连接失败,由于防火墙的问题。这里先将2个节点防火强暂时管理

[root@controller ~]# systemctl stop firewalld
[root@controller ~]# systemctl disable firewalld[root@compute ~]# systemctl stop firewalld
[root@compute ~]# systemctl disable firewalld

添加compute节点到cell数据库

认证compute主机是否在数据库

[root@controller ~]# openstack compute service list --service nova-compute
+----+--------------+---------+------+---------+-------+----------------------------+
| ID | Binary       | Host    | Zone | Status  | State | Updated At                 |
+----+--------------+---------+------+---------+-------+----------------------------+
|  9 | nova-compute | compute | nova | enabled | up    | 2020-06-29T09:54:06.000000 |
+----+--------------+---------+------+---------+-------+----------------------------+

发现compute主机

[root@controller ~]# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': ac36e8e1-b1e5-4534-b991-40577e68d273
Checking host mapping for compute host 'compute': 42b8cf63-a002-43ba-9bcb-7a99cbaae6e2
Creating host mapping for compute host 'compute': 42b8cf63-a002-43ba-9bcb-7a99cbaae6e2
Found 1 unmapped computes in cell: ac36e8e1-b1e5-4534-b991-40577e68d273

添加新的计算节点时,必须在controller节点上运行nova-manage cell_v2 discover_hosts才能注册这些新的计算节点。或者在/etc/nova/nova.conf中设置适当的时间间隔:

[scheduler]
discover_hosts_in_cells_interval = 300

验证操作

列出服务组件以验证每个进程成功启动和注册:

[root@controller ~]# openstack compute service list
+----+----------------+------------+----------+---------+-------+----------------------------+
| ID | Binary         | Host       | Zone     | Status  | State | Updated At                 |
+----+----------------+------------+----------+---------+-------+----------------------------+
|  1 | nova-conductor | controller | internal | enabled | up    | 2020-06-29T09:57:20.000000 |
|  3 | nova-scheduler | controller | internal | enabled | up    | 2020-06-29T09:57:20.000000 |
|  9 | nova-compute   | compute    | nova     | enabled | up    | 2020-06-29T09:57:26.000000 |
+----+----------------+------------+----------+---------+-------+----------------------------+

列出身份服务中的API端点以验证与身份服务的连接性:

[root@controller ~]# openstack catalog list
+-----------+-----------+-----------------------------------------+
| Name      | Type      | Endpoints                               |
+-----------+-----------+-----------------------------------------+
| glance    | image     | RegionOne                               |
|           |           |   admin: http://controller:9292         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:9292      |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9292        |
|           |           |                                         |
| keystone  | identity  | RegionOne                               |
|           |           |   internal: http://controller:5000/v3/  |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:5000/v3/     |
|           |           | RegionOne                               |
|           |           |   public: http://controller:5000/v3/    |
|           |           |                                         |
| placement | placement | RegionOne                               |
|           |           |   public: http://controller:8778        |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8778         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8778      |
|           |           |                                         |
| nova      | compute   | RegionOne                               |
|           |           |   public: http://controller:8774/v2.1   |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8774/v2.1    |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8774/v2.1 |
|           |           |                                         |
+-----------+-----------+-----------------------------------------+

列出镜像以验证镜像服务的连接性:

[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 42b7a330-85ad-462a-9282-e6b09576b806 | cirros | active |
+--------------------------------------+--------+--------+

检查cells和placement API是否正常运行

[root@controller ~]# nova-status upgrade check
Error:
Traceback (most recent call last):File "/usr/lib/python2.7/site-packages/nova/cmd/status.py", line 398, in mainret = fn(*fn_args, **fn_kwargs)File "/usr/lib/python2.7/site-packages/oslo_upgradecheck/upgradecheck.py", line 102, in checkresult = func(self)File "/usr/lib/python2.7/site-packages/nova/cmd/status.py", line 164, in _check_placementversions = self._placement_get("/")File "/usr/lib/python2.7/site-packages/nova/cmd/status.py", line 154, in _placement_getreturn client.get(path, raise_exc=True).json()File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 386, in getreturn self.request(url, 'GET', **kwargs)File "/usr/lib/python2.7/site-packages/keystoneauth1/adapter.py", line 248, in requestreturn self.session.request(url, method, **kwargs)File "/usr/lib/python2.7/site-packages/keystoneauth1/session.py", line 943, in requestraise exceptions.from_response(resp, method, url)
Forbidden: Forbidden (HTTP 403)

这可能是软件包的bug,解决如下:

[root@controller ~]# vi /etc/httpd/conf.d/00-nova-placement-api.conf
<Directory /usr/bin><IfVersion >= 2.4>Require all granted</IfVersion><IfVersion < 2.4>Order allow,denyAllow from all</IfVersion>
</Directory>
[root@controller ~]# systemctl restart httpd
[root@controller ~]# nova-status upgrade check
+--------------------------------+
| Upgrade Check Results          |
+--------------------------------+
| Check: Cells v2                |
| Result: Success                |
| Details: None                  |
+--------------------------------+
| Check: Placement API           |
| Result: Success                |
| Details: None                  |
+--------------------------------+
| Check: Ironic Flavor Migration |
| Result: Success                |
| Details: None                  |
+--------------------------------+
| Check: Cinder API              |
| Result: Success                |
| Details: None                  |
+--------------------------------+

2.5、网络服务——Neutron

OpenStack Networking(neutron)允许您创建由其他OpenStack服务管理的接口设备并将其连接到网络。 可以实施插件来容纳不同的网络设备和软件,从而为OpenStack体系结构和部署提供灵活性。它包含如下组件:

  • neutron-server: 接受API请求并将其路由到适当的OpenStack网络插件

  • OpenStack Networking plug-ins and agents: 创建网络或子网,并提供IP寻址。 这些插件和代理因特定云中使用的供应商和技术而异。 OpenStack Networking附带了用于思科虚拟和物理交换机,NEC OpenFlow产品,Open vSwitch,Linux bridge和VMware NSX产品的插件和代理。

  • Messaging queue: 大多数OpenStack Networking安装都使用它在neutron-server和各种代理之间路由信息。 还用作存储特定插件的网络状态的数据库。

controller节点配置

将controller节点第二块网卡进行如下修改,INTERFACE_NAME为网卡名,HWADDRUUID不修改

DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"

重启系统,应用更改的内容

使用neutron前的配置

  1. 创建数据库

    [root@controller ~]# mysql -uroot -p
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 43
    Server version: 10.3.20-MariaDB MariaDB ServerCopyright (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.001 sec)
  2. 授予neutron用户对neutron数据库的权限,NEUTRON_DBPASS自己设置

    MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \IDENTIFIED BY 'NEUTRON_DBPASS';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \IDENTIFIED BY 'NEUTRON_DBPASS';
    
  3. 创建neutron用户

    [root@controller ~]# openstack user create --domain default --password-prompt neutron
    User Password:
    Repeat User Password:
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | 3e609d3fc2764ca6a4ac82bce9ad84a4 |
    | name                | neutron                          |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+
    
  4. 添加admin角色到neutron用户

    [root@controller ~]# openstack role add --project service --user neutron admin
    
  5. 创建neutron服务实体

    [root@controller ~]# openstack service create --name neutron --description "OpenStack Networking" network+-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | OpenStack Networking             |
    | enabled     | True                             |
    | id          | 5d05e3a3ab0e4e96b93df61df38ae0ca |
    | name        | neutron                          |
    | type        | network                          |
    +-------------+----------------------------------+
  6. 创建网络服务API 端点

    [root@controller ~]# openstack endpoint create --region RegionOne network public http://controller:9696
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 20793dc0b7f74db18e642a6f5998bd55 |
    | interface    | public                           |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 5d05e3a3ab0e4e96b93df61df38ae0ca |
    | service_name | neutron                          |
    | service_type | network                          |
    | url          | http://controller:9696           |
    +--------------+----------------------------------+
    [root@controller ~]# openstack endpoint create --region RegionOne network internal  http://controller:9696
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 1d416c6ef2264a649d20ad9e9286eb73 |
    | interface    | internal                         |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 5d05e3a3ab0e4e96b93df61df38ae0ca |
    | service_name | neutron                          |
    | service_type | network                          |
    | url          | http://controller:9696           |
    +--------------+----------------------------------+
    [root@controller ~]# openstack endpoint create --region RegionOne network admin  http://controller:9696
    +--------------+----------------------------------+
    | Field        | Value                            |
    +--------------+----------------------------------+
    | enabled      | True                             |
    | id           | 07d33104a9ee47228c4c9108d3addd99 |
    | interface    | admin                            |
    | region       | RegionOne                        |
    | region_id    | RegionOne                        |
    | service_id   | 5d05e3a3ab0e4e96b93df61df38ae0ca |
    | service_name | neutron                          |
    | service_type | network                          |
    | url          | http://controller:9696           |
    +--------------+----------------------------------+
    

网络可选项

有两种选择

Option 1:部署仅支持将实例附加到外部网络的最简单的体系结构。 没有专用网络,路由器或浮动IP地址。 只有管理员或其他特权用户可以管理提供商网络。

Option 2:在1的基础上支持将实例附加到专用网络的第3层服务,用户可以管理专用网络。

专用网络通常使用覆盖网络。诸如VXLAN之类的覆盖网络协议包括其他标头,这些标头增加了开销并减少了可用于有效负载或用户数据的空间。

以Option2为例:

  1. 安装组件

    [root@controller ~]# yum install openstack-neutron openstack-neutron-ml2   openstack-neutron-linuxbridge ebtables -y
    
  2. 配置服务组件

    编辑/etc/neutron/neutron.conf文件,完成如下配置

    [root@controller ~]# cp /etc/neutron/neutron.conf /etc/neutron/neutron.conf.bak
    [root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/neutron.conf
    
    • [database] 部分, NEUTRON_DBPASS 数据库密码

      [database]
      # ...
      connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
      
    • [DEFAULT] 部分,启用模块化第2层(ML2)插件,由器服务和重叠的IP地址:

      [DEFAULT]
      # ...
      core_plugin = ml2
      service_plugins = router
      allow_overlapping_ips = true
      
  • [DEFAULT] 部分,配置消息队列连接,RABBIT_PASS为openstack用户密码

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    
  • [DEFAULT][keystone_authtoken] 部分,配置服务访问认证,NEUTRON_PASS为neutron用户密码

    [DEFAULT]
    # ...
    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
    
  • [DEFAULT][nova] 部分,将网络配置为通知Compute网络拓扑更改,NOVA_PASS为nova用户的密码

    [DEFAULT]
    # ...
    notify_nova_on_port_status_changes = true
    notify_nova_on_port_data_changes = true
    [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] 部分,配置锁路径

    [oslo_concurrency]
    lock_path = /var/lib/neutron/tmp
    

配置ml2插件

编辑 /etc/neutron/plugins/ml2/ml2_conf.ini文件

[root@controller ~]# cp /etc/neutron/plugins/ml2/ml2_conf.ini  /etc/neutron/plugins/ml2/ml2_conf.ini.bak
[root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/plugins/ml2/ml2_conf.ini
  • [ml2] 部分,开启vlan、vxlan和flat网络

    [ml2]
    # ...
    type_drivers = flat,vlan,vxlan
    
  • [ml2] 部分,开启vxlan私有网络

    [ml2]
    # ...
    tenant_network_types = vxlan
    
  • [ml2] 部分,启用Linux桥接器

    [ml2]
    # ...
    mechanism_drivers = linuxbridge,l2population
    
  • [ml2] 部分,启用端口安全扩展驱动程序

    [ml2]
    # ...
    extension_drivers = port_security
    
  • [ml2_type_flat] 部分,配置provider 虚拟网络作为flat网络

     [ml2_type_flat]# ...flat_networks = provider
    
  • [ml2_type_vxlan] 部分,配置私有网络的VXLAN网络标识符范围

    [ml2_type_vxlan]
    # ...
    vni_ranges = 1:1000
    
  • [securitygroup] 部分,启用ipset以提高安全组规则的效率

    [securitygroup]
    # ...
    enable_ipset = true
    

配置linux bridge代理

Linux bridge 代理为实例构建第2层(桥接和交换)虚拟网络基础结构并处理安全组。

编辑 /etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件完成如下配置

[root@controller ~]# cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini  /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak
[root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
  • [linux_bridge] 部分,将提供者虚拟网络映射到提供者物理网络接口:

    [linux_bridge]
    physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
    

    PROVIDER_INTERFACE_NAME为内部网卡接口

  • [vxlan] 部分,启用VXLAN覆盖网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层填充:

    [vxlan]
    enable_vxlan = true
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    l2_population = true
    

    OVERLAY_INTERFACE_IP_ADDRESS将OVERLAY_INTERFACE_IP_ADDRESS替换为处理覆盖网络的基础物理网络接口的IP地址。 示例体系结构使用管理接口将流量隧道传输到其他节点。 因此,将OVERLAY_INTERFACE_IP_ADDRESS替换为控制器节点的管理IP地址。

  • [securitygroup] 部分,启用安全组并配置Linux网桥iptables防火墙驱动程序:

    [securitygroup]
    # ...
    enable_security_group = true
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    
  • 验证以下所有sysctl值是否设置为1,确保Linux操作系统内核支持网桥过滤器

    net.bridge.bridge-nf-call-iptables
    net.bridge.bridge-nf-call-ip6tables
    

配置3层代理

Layer-3(L3)代理提供了专有网络的NAT和路由服务。

编辑/etc/neutron/l3_agent.ini文件,完成如下配置

[root@controller ~]# cp /etc/neutron/l3_agent.ini /etc/neutron/l3_agent.ini.bak
[root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/l3_agent.ini
  • [DEFAULT] 部分,配置linux bridge接口驱动

    [DEFAULT]
    # ...
    interface_driver = linuxbridge
    

配置DHCP代理

DHCP代理提供了虚拟网络的DHCP服务

编辑 /etc/neutron/dhcp_agent.ini 文件,完成如下配置

[root@controller ~]# cp /etc/neutron/dhcp_agent.ini /etc/neutron/dhcp_agent.ini.bak
[root@controller ~]# grep -Ev '(^$|^#)' !$ > /etc/neutron/dhcp_agent.ini
  • [DEFAULT] 部分,配置linux bridge驱动,Dnsmasq DHCP 驱动,开启元数据隔离,以便提供商网络上的实例可以通过网络访问元数据:

    [DEFAULT]
    # ...
    interface_driver = linuxbridge
    dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
    enable_isolated_metadata = true
    

配置元数据代理

编辑 /etc/neutron/metadata_agent.ini 完成如下配置

[root@controller ~]# cp /etc/neutron/metadata_agent.ini /etc/neutron/metadata_agent.ini.bak
[root@controller ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/metadata_agent.ini
  • [DEFAULT] 部分,添加如下内容

    [DEFAULT]
    # ...
    nova_metadata_host = controller
    metadata_proxy_shared_secret = METADATA_SECRET
    

    METADATA_SECRET替换为适宜的密码

配置计算服务适宜网络服务

编辑/etc/nova/nova.conf 完成如下配置

  • [neutron] 部分,添加如下内容

    [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
    

    NEUTRON_PASS替换为neutron用户认证服务的密码

    METADATA_SECRET替换为metadata proxy选择的密码

完成安装

网络服务初始化脚本需要一个指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini的符号链接/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

相关服务启动

[root@controller ~]# systemctl restart openstack-nova-api[root@controller ~]#  systemctl enable neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service neutron-l3-agent[root@controller ~]# systemctl start neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service neutron-l3-agent

compute节点

将compute节点第二块网卡进行如下修改,INTERFACE_NAME为网卡名,HWADDRUUID不修改

DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"

重启系统,应用更改的内容

安装组件

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

配置组件

编辑 /etc/neutron/neutron.conf 文件,完成如下配置

[root@compute ~]# cp  /etc/neutron/neutron.conf  /etc/neutron/neutron.conf.bak
[root@compute ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/neutron.conf
  • [DEFAULT] 部分,配置RabbitMQ消息队列访问

    [DEFAULT]
    # ...
    transport_url = rabbit://openstack:RABBIT_PASS@controller
    

    RABBIT_PASS替换为RabbitMQ中openstack账户的密码

  • [DEFAULT] and [keystone_authtoken] 部分,配置认证服务访问

[DEFAULT]
# ...
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

NEUTRON_PASS 替换为neutron用户在认证服务的密码

  • [oslo_concurrency] 部分,配置锁路径

    [oslo_concurrency]
    # ...
    lock_path = /var/lib/neutron/tmp
    

配置可选的网络,同controller节点选择一样

配置linux bridge 代理

编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件

[root@compute ~]# cp /etc/neutron/plugins/ml2/linuxbridge_agent.ini  /etc/neutron/plugins/ml2/linuxbridge_agent.ini.bak
[root@compute ~]# grep -Ev '(^#|^$)' !$ > /etc/neutron/plugins/ml2/linuxbridge_agent.ini
  • [linux_bridge] 部分,完成如下配置

    [linux_bridge]
    physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
    

    PROVIDER_INTERFACE_NAME替换为提供者物理网络接口。

  • [vxlan] 部分,开启vxlan overlay网络,配置用于处理覆盖网络的物理网络接口的IP地址

    [vxlan]
    enable_vxlan = true
    local_ip = OVERLAY_INTERFACE_IP_ADDRESS
    l2_population = true
    

    OVERLAY_INTERFACE_IP_ADDRESS替换为计算节点的管理IP地址。

  • 在[securitygroup]部分,配置linux bridge 驱动并开启安全组

    [securitygroup]
    # ...
    enable_security_group = true
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
    
  • 验证以下所有sysctl值是否设置为1,确保Linux操作系统内核支持网桥过滤器

    net.bridge.bridge-nf-call-iptables
    net.bridge.bridge-nf-call-ip6tables
    

配置计算服务使用网络服务

编辑 /etc/nova/nova.conf 文件,完成如下配置

  • 在**[neutron]**部分,配置访问参数

    [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
    

    替换NEUTRON_PASS为身份认证服务neutron用户的密码

完成安装

[root@compute ~]# systemctl restart openstack-nova-compute[root@compute ~]# systemctl enable neutron-linuxbridge-agent
[root@compute ~]# systemctl restart neutron-linuxbridge-agent

验证操作

[root@controller ~]# openstack extension list --network | more
+----------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Name                                                                                                                                                           | Alias                                 | Description                                                                                                                                              |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Subnet Pool Prefix Operations                                                                                                                                  | subnetpool-prefix-ops                 | Provides support for adjusting the prefix list of subnet pools                                                                                           |
| Default Subnetpools                                                                                                                                            | default-subnetpools                   | Provides ability to mark and use a subnetpool as the default.                                                                                            |
| Availability Zone                                                                                                                                              | availability_zone                     | The availability zone extension.                                                                                                                         |
| Network Availability Zone                                                                                                                                      | network_availability_zone             | Availability zone support for network.                                                                                                                   |
| Subnet Onboard                                                                                                                                                 | subnet_onboard                        | Provides support for onboarding subnets into subnet pools                                                                                                |
| Auto Allocated Topology Services                                                                                                                               | auto-allocated-topology               | Auto Allocated Topology Services.                                                                                                                        |
| Neutron L3 Configurable external gateway mode                                                                                                                  | ext-gw-mode                           | Extension of the router abstraction for specifying whether SNAT should occur on the external gateway                                                     |
| Port Binding                                                                                                                                                   | binding                               | Expose port bindings of a virtual port to external application                                                                                           |
| agent                                                                                                                                                          | agent                                 | The agent management extension.                                                                                                                          |
| Subnet Allocation                                                                                                                                              | subnet_allocation                     | Enables allocation of subnets from a subnet pool                                                                                                         |
| DHCP Agent Scheduler                                                                                                                                           | dhcp_agent_scheduler                  | Schedule networks among dhcp agents                                                                                                                      |
| Neutron external network                                                                                                                                       | external-net                          | Adds external network attribute to network resource.                                                                                                     |
| Empty String Filtering Extension                                                                                                                               | empty-string-filtering                | Allow filtering by attributes with empty string value                                                                                                    |
| Tag support for resources with standard attribute: subnet, trunk, network_segment_range, router, network, policy, subnetpool, port, security_group, floatingip | standard-attr-tag                     | Enables to set tag on resources with standard attribute.                                                                                                 |
| Neutron Service Flavors                                                                                                                                        | flavors                               | Flavor specification for Neutron advanced services.                                                                                                      |
| Network MTU                                                                                                                                                    | net-mtu                               | Provides MTU attribute for a network resource.                                                                                                           |
| Network IP Availability                                                                                                                                        | network-ip-availability               | Provides IP availability data for each network and subnet.                                                                                               |
| Quota management support                                                                                                                                       | quotas                                | Expose functions for quotas management per tenant                                                                                                        |
| If-Match constraints based on revision_number                                                                                                                  | revision-if-match                     | Extension indicating that If-Match based on revision_number is supported.                                                                                |
| Prevent L3 router ports IP address change extension                                                                                                            | l3-port-ip-change-not-allowed         | Prevent change of IP address for some L3 router ports                                                                                                    |
| Availability Zone Filter Extension                                                                                                                             | availability_zone_filter              | Add filter parameters to AvailabilityZone resource                                                                                                       |
| HA Router extension                                                                                                                                            | l3-ha                                 | Adds HA capability to routers.                                                                                                                           |
| Enforce Router's Admin State Down Before Update Extension                                                                                                      | router-admin-state-down-before-update | Ensure that the admin state of a router is down (admin_state_up=False) before updating the distributed attribute                                         |
| Filter parameters validation                                                                                                                                   | filter-validation                     | Provides validation on filter parameters.                                                                                                                |
| Multi Provider Network                                                                                                                                         | multi-provider                        | Expose mapping of virtual networks to multiple physical networks                                                                                         |
| Quota details management support                                                                                                                               | quota_details                         | Expose functions for quotas usage statistics per project                                                                                                 |
| Address scope                                                                                                                                                  | address-scope                         | Address scopes extension.                                                                                                                                |
| Neutron Extra Route                                                                                                                                            | extraroute                            | Extra routes configuration for L3 router                                                                                                                 |
| Network MTU (writable)                                                                                                                                         | net-mtu-writable                      | Provides a writable MTU attribute for a network resource.                                                                                                |
| Agent's Resource View Synced to Placement                                                                                                                      | agent-resources-synced                | Stores success/failure of last sync to Placement                                                                                                         |
| Subnet service types                                                                                                                                           | subnet-service-types                  | Provides ability to set the subnet service_types field                                                                                                   |
| Floating IP Pools Extension                                                                                                                                    | floatingip-pools                      | Provides a floating IP pools API.                                                                                                                        |
| Neutron Port MAC address regenerate                                                                                                                            | port-mac-address-regenerate           | Network port MAC address regenerate                                                                                                                      |
| Add security_group type to network RBAC                                                                                                                        | rbac-security-groups                  | Add security_group type to network RBAC                                                                                                                  |
| Provider Network                                                                                                                                               | provider                              | Expose mapping of virtual networks to physical networks                                                                                                  |
| Neutron Service Type Management                                                                                                                                | service-type                          | API for retrieving service providers for Neutron advanced services                                                                                       |
| Router Flavor Extension                                                                                                                                        | l3-flavors                            | Flavor support for routers.                                                                                                                              |
| Port Security                                                                                                                                                  | port-security                         | Provides port security                                                                                                                                   |
| Neutron Extra DHCP options                                                                                                                                     | extra_dhcp_opt                        | Extra options configuration for DHCP. For example PXE boot options to DHCP clients can be specified (e.g. tftp-server, server-ip-address, bootfile-name) |
| Port filtering on security groups                                                                                                                              | port-security-groups-filtering        | Provides security groups filtering when listing ports                                                                                                    |
| Resource timestamps                                                                                                                                            | standard-attr-timestamp               | Adds created_at and updated_at fields to all Neutron resources that have Neutron standard attributes.                                                    |
| Resource revision numbers                                                                                                                                      | standard-attr-revisions               | This extension will display the revision number of neutron resources.                                                                                    |
| Pagination support                                                                                                                                             | pagination                            | Extension that indicates that pagination is enabled.                                                                                                     |
| Sorting support                                                                                                                                                | sorting                               | Extension that indicates that sorting is enabled.                                                                                                        |
| security-group                                                                                                                                                 | security-group                        | The security groups extension.                                                                                                                           |
| L3 Agent Scheduler                                                                                                                                             | l3_agent_scheduler                    | Schedule routers among l3 agents                                                                                                                         |
| Floating IP Port Details Extension                                                                                                                             | fip-port-details                      | Add port_details attribute to Floating IP resource                                                                                                       |
| Router Availability Zone                                                                                                                                       | router_availability_zone              | Availability zone support for router.                                                                                                                    |
| RBAC Policies                                                                                                                                                  | rbac-policies                         | Allows creation and modification of policies that control tenant access to resources.                                                                    |
| Atomically add/remove extra routes                                                                                                                             | extraroute-atomic                     | Edit extra routes of a router on server side by atomically adding/removing extra routes                                                                  |
| standard-attr-description                                                                                                                                      | standard-attr-description             | Extension to add descriptions to standard attributes                                                                                                     |
| IP address substring filtering                                                                                                                                 | ip-substring-filtering                | Provides IP address substring filtering when listing ports                                                                                               |
| Neutron L3 Router                                                                                                                                              | router                                | Router abstraction for basic L3 forwarding between L2 Neutron networks and access to external networks via a NAT gateway.                                |
| Allowed Address Pairs                                                                                                                                          | allowed-address-pairs                 | Provides allowed address pairs                                                                                                                           |
| Port Bindings Extended                                                                                                                                         | binding-extended                      | Expose port bindings of a virtual port to external application                                                                                           |
| project_id field enabled                                                                                                                                       | project-id                            | Extension that indicates that project_id field is enabled.                                                                                               |
| Distributed Virtual Router                                                                                                                                     | dvr                                   | Enables configuration of Distributed Virtual Routers.                                                                                                    |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------+

输出应指示控制器节点上的四个代理,每个计算节点上的一个代理

[root@controller ~]# openstack network agent list
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 3ba49d5b-b613-469c-8d40-c9bb4106ec00 | DHCP agent         | controller | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 8f5a7876-60ec-4fa4-b475-54f03837de1e | Metadata agent     | controller | None              | :-)   | UP    | neutron-metadata-agent    |
| b3ad2e41-1d8d-4c9a-92d1-3e543d0e36ee | L3 agent           | controller | nova              | :-)   | UP    | neutron-l3-agent          |
| d3d6708b-6226-43d4-9469-25412d184a7a | Linux bridge agent | controller | None              | :-)   | UP    | neutron-linuxbridge-agent |
| f84b4b15-ed90-484f-9a70-e55caa5b117d | Linux bridge agent | compute    | None              | :-)   | UP    | neutron-linuxbridge-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+

2.6、仪表盘(dashboard)——horizon

安装配置组件

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

编辑 /etc/openstack-dashboard/local_settings 文件,完成如下配置

[root@controller ~]# cp /etc/openstack-dashboard/local_settings /etc/openstack-dashboard/local_settings.bak
[root@controller ~]# grep -Ev '(^#|^$|^*.#)' !$ > /etc/openstack-dashboard/local_settings
  • 配置dashboard在openstack controller节点

    OPENSTACK_HOST = "controller"
    
  • 配置memcached会话存储服务

    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': 'controller:11211',}
    }
    
  • 开启v3认证API

    OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
    
  • 开启domain支持

    OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
    
  • 配置API版本

    OPENSTACK_API_VERSIONS = {"identity": 3,"image": 2,"volume": 3,
    }
    
  • 将"Default"配置为通过dashboard创建的用户的默认域:

    OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
    
  • 将"user"配置为通过dashboard创建的用户的默认角色:

    OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
    
  • 如果未包含以下行,则将其添加到/etc/httpd/conf.d/openstack-dashboard.conf

    WSGIApplicationGroup %{GLOBAL}
    
  • /etc/httpd/conf.d/openstack-dashboard.conf文件进行如下更改

    #WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
    WSGIScriptAlias / /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
    #Alias /dashboard/static /usr/share/openstack-dashboard/static
    Alias /static /usr/share/openstack-dashboard/static

完成安装

[root@controller ~]#  systemctl restart httpd memcached

访问验证

通过http://controller_IP/

在这里插入图片描述

用户名为admin 或demon,域为default。

3、启动一个实例

在这里插入图片描述
在这里插入图片描述

本次实验环境配置最初的时候定义为

  • Management physical network:192.168.100.0/24

  • Provider physical network:10.10.128.0/24

  • self-service virtual network:172.16.1.0/24

3.1、创建Provider network

[root@controller ~]# openstack network create  --share --external --provider-physical-network provider  --provider-network-type flat provider 
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                     | Value                                                                                                                                                   |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| admin_state_up            | UP                                                                                                                                                      |
| availability_zone_hints   |                                                                                                                                                         |
| availability_zones        |                                                                                                                                                         |
| created_at                | 2020-06-30T05:33:28Z                                                                                                                                    |
| description               |                                                                                                                                                         |
| dns_domain                | None                                                                                                                                                    |
| id                        | b66bf1a4-1f9b-40ea-9dfe-0a72fdc40685                                                                                                                    |
| ipv4_address_scope        | None                                                                                                                                                    |
| ipv6_address_scope        | None                                                                                                                                                    |
| is_default                | False                                                                                                                                                   |
| is_vlan_transparent       | None                                                                                                                                                    |
| location                  | cloud='', project.domain_id=, project.domain_name='Default', project.id='86fc1bb169a443f98fdaf8e2fb25f9cd', project.name='admin', region_name='', zone= |
| mtu                       | 1500                                                                                                                                                    |
| name                      | provider                                                                                                                                                |
| port_security_enabled     | True                                                                                                                                                    |
| project_id                | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                        |
| provider:network_type     | flat                                                                                                                                                    |
| provider:physical_network | provider                                                                                                                                                |
| provider:segmentation_id  | None                                                                                                                                                    |
| qos_policy_id             | None                                                                                                                                                    |
| revision_number           | 1                                                                                                                                                       |
| router:external           | External                                                                                                                                                |
| segments                  | None                                                                                                                                                    |
| shared                    | True                                                                                                                                                    |
| status                    | ACTIVE                                                                                                                                                  |
| subnets                   |                                                                                                                                                         |
| tags                      |                                                                                                                                                         |
| updated_at                | 2020-06-30T05:33:28Z                                                                                                                                    |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+

3.2、创建provider network子网

[root@controller ~]# openstack subnet create --network provider --allocation-pool start=10.10.128.100,end=10.10.128.200 --dns-nameserver 8.8.4.4 --gateway 10.10.128.254 --subnet-range 10.10.128.0/24 provider
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field             | Value                                                                                                                                                   |
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| allocation_pools  | 10.10.128.100-10.10.128.200                                                                                                                             |
| cidr              | 10.10.128.0/24                                                                                                                                          |
| created_at        | 2020-06-30T05:36:25Z                                                                                                                                    |
| description       |                                                                                                                                                         |
| dns_nameservers   | 8.8.4.4                                                                                                                                                 |
| enable_dhcp       | True                                                                                                                                                    |
| gateway_ip        | 10.10.128.254                                                                                                                                           |
| host_routes       |                                                                                                                                                         |
| id                | bcf07ef2-5b80-4bd4-8fd0-ad7b92b78673                                                                                                                    |
| ip_version        | 4                                                                                                                                                       |
| ipv6_address_mode | None                                                                                                                                                    |
| ipv6_ra_mode      | None                                                                                                                                                    |
| location          | cloud='', project.domain_id=, project.domain_name='Default', project.id='86fc1bb169a443f98fdaf8e2fb25f9cd', project.name='admin', region_name='', zone= |
| name              | provider                                                                                                                                                |
| network_id        | b66bf1a4-1f9b-40ea-9dfe-0a72fdc40685                                                                                                                    |
| prefix_length     | None                                                                                                                                                    |
| project_id        | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                        |
| revision_number   | 0                                                                                                                                                       |
| segment_id        | None                                                                                                                                                    |
| service_types     |                                                                                                                                                         |
| subnetpool_id     | None                                                                                                                                                    |
| tags              |                                                                                                                                                         |
| updated_at        | 2020-06-30T05:36:25Z                                                                                                                                    |
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------

3.3、创建self-service virtual network

root@controller ~]#  openstack network create selfservice
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                     | Value                                                                                                                                                   |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| admin_state_up            | UP                                                                                                                                                      |
| availability_zone_hints   |                                                                                                                                                         |
| availability_zones        |                                                                                                                                                         |
| created_at                | 2020-06-30T05:25:44Z                                                                                                                                    |
| description               |                                                                                                                                                         |
| dns_domain                | None                                                                                                                                                    |
| id                        | 00e77183-d7d9-435c-9ad8-3a29c08c1b1d                                                                                                                    |
| ipv4_address_scope        | None                                                                                                                                                    |
| ipv6_address_scope        | None                                                                                                                                                    |
| is_default                | False                                                                                                                                                   |
| is_vlan_transparent       | None                                                                                                                                                    |
| location                  | cloud='', project.domain_id=, project.domain_name='Default', project.id='86fc1bb169a443f98fdaf8e2fb25f9cd', project.name='admin', region_name='', zone= |
| mtu                       | 1450                                                                                                                                                    |
| name                      | selfservice                                                                                                                                             |
| port_security_enabled     | True                                                                                                                                                    |
| project_id                | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                        |
| provider:network_type     | vxlan                                                                                                                                                   |
| provider:physical_network | None                                                                                                                                                    |
| provider:segmentation_id  | 1                                                                                                                                                       |
| qos_policy_id             | None                                                                                                                                                    |
| revision_number           | 1                                                                                                                                                       |
| router:external           | Internal                                                                                                                                                |
| segments                  | None                                                                                                                                                    |
| shared                    | False                                                                                                                                                   |
| status                    | ACTIVE                                                                                                                                                  |
| subnets                   |                                                                                                                                                         |
| tags                      |                                                                                                                                                         |
| updated_at                | 2020-06-30T05:25:44Z                                                                                                                                    |
+---------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+

3.4、给selfservice网络创建子网

[root@controller ~]# openstack subnet create --network selfservice --dns-nameserver 114.114.114.114 --gateway 172.16.1.1 --subnet-range 172.16.1.0/24 selfservice
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field             | Value                                                                                                                                                   |
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| allocation_pools  | 172.16.1.2-172.16.1.254                                                                                                                                 |
| cidr              | 172.16.1.0/24                                                                                                                                           |
| created_at        | 2020-06-30T05:28:38Z                                                                                                                                    |
| description       |                                                                                                                                                         |
| dns_nameservers   | 114.114.114.114                                                                                                                                         |
| enable_dhcp       | True                                                                                                                                                    |
| gateway_ip        | 172.16.1.1                                                                                                                                              |
| host_routes       |                                                                                                                                                         |
| id                | 4bc8c51e-7962-4cd5-8322-a71d1f369806                                                                                                                    |
| ip_version        | 4                                                                                                                                                       |
| ipv6_address_mode | None                                                                                                                                                    |
| ipv6_ra_mode      | None                                                                                                                                                    |
| location          | cloud='', project.domain_id=, project.domain_name='Default', project.id='86fc1bb169a443f98fdaf8e2fb25f9cd', project.name='admin', region_name='', zone= |
| name              | selfservice                                                                                                                                             |
| network_id        | 00e77183-d7d9-435c-9ad8-3a29c08c1b1d                                                                                                                    |
| prefix_length     | None                                                                                                                                                    |
| project_id        | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                        |
| revision_number   | 0                                                                                                                                                       |
| segment_id        | None                                                                                                                                                    |
| service_types     |                                                                                                                                                         |
| subnetpool_id     | None                                                                                                                                                    |
| tags              |                                                                                                                                                         |
| updated_at        | 2020-06-30T05:28:38Z                                                                                                                                    |
+-------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+

创建路由

[root@controller ~]# openstack router create router
+-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field                   | Value                                                                                                                                                   |
+-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| admin_state_up          | UP                                                                                                                                                      |
| availability_zone_hints |                                                                                                                                                         |
| availability_zones      |                                                                                                                                                         |
| created_at              | 2020-06-30T05:37:12Z                                                                                                                                    |
| description             |                                                                                                                                                         |
| distributed             | False                                                                                                                                                   |
| external_gateway_info   | null                                                                                                                                                    |
| flavor_id               | None                                                                                                                                                    |
| ha                      | False                                                                                                                                                   |
| id                      | a64e13d3-4a1e-4f83-bcb0-2d6e476f8d83                                                                                                                    |
| location                | cloud='', project.domain_id=, project.domain_name='Default', project.id='86fc1bb169a443f98fdaf8e2fb25f9cd', project.name='admin', region_name='', zone= |
| name                    | router                                                                                                                                                  |
| project_id              | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                        |
| revision_number         | 1                                                                                                                                                       |
| routes                  |                                                                                                                                                         |
| status                  | ACTIVE                                                                                                                                                  |
| tags                    |                                                                                                                                                         |
| updated_at              | 2020-06-30T05:37:12Z                                                                                                                                    |
+-------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+

3.5、添加 self-service网络子网到router

[root@controller ~]# openstack router add subnet router selfservice

3.6、在router上设置provider network网关

[root@controller ~]# openstack router set router --external-gateway provider

3.7、验证操作

列出网络名称空间,可以看到qdhcp和qrouter两个

[root@controller ~]# ip netns
qrouter-a64e13d3-4a1e-4f83-bcb0-2d6e476f8d83 (id: 2)
qdhcp-b66bf1a4-1f9b-40ea-9dfe-0a72fdc40685 (id: 1)
qdhcp-00e77183-d7d9-435c-9ad8-3a29c08c1b1d (id: 0)

列出router上的端口,以确定provider网络上的网关IP地址:

[root@controller ~]# openstack port list --router router
+--------------------------------------+------+-------------------+------------------------------------------------------------------------------+--------+
| ID                                   | Name | MAC Address       | Fixed IP Addresses                                                           | Status |
+--------------------------------------+------+-------------------+------------------------------------------------------------------------------+--------+
| 276a7ea1-f013-4d20-9e7c-d0ac757954c2 |      | fa:16:3e:32:73:c0 | ip_address='172.16.1.1', subnet_id='4bc8c51e-7962-4cd5-8322-a71d1f369806'    | ACTIVE |
| dc707682-495c-4de9-a6c8-ea5fa498d6e7 |      | fa:16:3e:4b:a6:11 | ip_address='10.10.128.152', subnet_id='bcf07ef2-5b80-4bd4-8fd0-ad7b92b78673' | ACTIVE |
+--------------------------------------+------+-------------------+------------------------------------------------------------------------------+--------+

ping以下provider网关地址

[root@controller ~]# ping 10.10.128.152
PING 10.10.128.152 (10.10.128.152) 56(84) bytes of data.
64 bytes from 10.10.128.152: icmp_seq=1 ttl=128 time=10.8 ms
64 bytes from 10.10.128.152: icmp_seq=2 ttl=128 time=1.04 ms
^X^C
--- 10.10.128.152 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.043/5.936/10.830/4.894 ms

3.8、创建一个实例类型

[root@controller ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
+----------------------------+---------+
| Field                      | Value   |
+----------------------------+---------+
| OS-FLV-DISABLED:disabled   | False   |
| OS-FLV-EXT-DATA:ephemeral  | 0       |
| disk                       | 1       |
| id                         | 0       |
| name                       | m1.nano |
| os-flavor-access:is_public | True    |
| properties                 |         |
| ram                        | 64      |
| rxtx_factor                | 1.0     |
| swap                       |         |
| vcpus                      | 1       |
+----------------------------+---------+

3.9、设置安全组。此次实验环境,我们放行所有ICMP、TCP、UDP

先删除所有规则

在这里插入图片描述

在这里插入图片描述

入口出口都放行

3.10、启动实例

3.10.1、在dashboard 界面完成。当然上述的网络创建也可以在dashboard完成

在这里插入图片描述

在这里插入图片描述

选择镜像——>然后下一步

在这里插入图片描述

选择实例类型

在这里插入图片描述

选择selfservice网络,点击创建实例

在这里插入图片描述

给实例绑定浮动IP

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后就可以通过远程连接工具连接这个浮动IP进行控制。这个浮动IP其实就相当于我们购买云主机时给的一个公网IP。选择的cirros镜像。默认用户名:cirros 密码:gocubsgo

3.10.2、通过命令行

  1. 查看实例类型

    [root@controller ~]# openstack flavor list
    +----+---------+-----+------+-----------+-------+-----------+
    | ID | Name    | RAM | Disk | Ephemeral | VCPUs | Is Public |
    +----+---------+-----+------+-----------+-------+-----------+
    | 0  | m1.nano |  64 |    1 |         0 |     1 | True      |
    +----+---------+-----+------+-----------+-------+-----------+
    
  2. 查看可用的镜像

    [root@controller ~]# openstack image list
    +--------------------------------------+--------+--------+
    | ID                                   | Name   | Status |
    +--------------------------------------+--------+--------+
    | 42b7a330-85ad-462a-9282-e6b09576b806 | cirros | active |
    +--------------------------------------+--------+--------+
  3. 查看可用的网络

    [root@controller ~]# openstack network list
    +--------------------------------------+-------------+--------------------------------------+
    | ID                                   | Name        | Subnets                              |
    +--------------------------------------+-------------+--------------------------------------+
    | 00e77183-d7d9-435c-9ad8-3a29c08c1b1d | selfservice | 4bc8c51e-7962-4cd5-8322-a71d1f369806 |
    | b66bf1a4-1f9b-40ea-9dfe-0a72fdc40685 | provider    | bcf07ef2-5b80-4bd4-8fd0-ad7b92b78673 |
    +--------------------------------------+-------------+--------------------------------------+
  4. 列出安全组

    [root@controller ~]# openstack security group list
    +--------------------------------------+---------+------------------------+----------------------------------+------+
    | ID                                   | Name    | Description            | Project                          | Tags |
    +--------------------------------------+---------+------------------------+----------------------------------+------+
    | f0d7b4f6-1aa3-49c2-a47b-7c57f4183d48 | default | Default security group | 86fc1bb169a443f98fdaf8e2fb25f9cd | []   |
    +--------------------------------------+---------+------------------------+----------------------------------+------+
  5. 启动实例,--nic net-id=是selfservice网络的ID

    [root@controller ~]# openstack server create --flavor m1.nano --image cirros --nic net-id=00e77183-d7d9-435c-9ad8-3a29c08c1b1d --security-group f0d7b4f6-1aa3-49c2-a47b-7c57f4183d48  selfservice-instance
    +-------------------------------------+-----------------------------------------------+
    | Field                               | Value                                         |
    +-------------------------------------+-----------------------------------------------+
    | OS-DCF:diskConfig                   | MANUAL                                        |
    | OS-EXT-AZ:availability_zone         |                                               |
    | OS-EXT-SRV-ATTR:host                | None                                          |
    | OS-EXT-SRV-ATTR:hypervisor_hostname | None                                          |
    | OS-EXT-SRV-ATTR:instance_name       |                                               |
    | OS-EXT-STS:power_state              | NOSTATE                                       |
    | OS-EXT-STS:task_state               | scheduling                                    |
    | OS-EXT-STS:vm_state                 | building                                      |
    | OS-SRV-USG:launched_at              | None                                          |
    | OS-SRV-USG:terminated_at            | None                                          |
    | accessIPv4                          |                                               |
    | accessIPv6                          |                                               |
    | addresses                           |                                               |
    | adminPass                           | CnTVkqc67WzA                                  |
    | config_drive                        |                                               |
    | created                             | 2020-06-30T06:10:51Z                          |
    | flavor                              | m1.nano (0)                                   |
    | hostId                              |                                               |
    | id                                  | fc8355a8-8035-4079-9023-8b79ced74490          |
    | image                               | cirros (42b7a330-85ad-462a-9282-e6b09576b806) |
    | key_name                            | None                                          |
    | name                                | selfservice-instance                          |
    | progress                            | 0                                             |
    | project_id                          | 86fc1bb169a443f98fdaf8e2fb25f9cd              |
    | properties                          |                                               |
    | security_groups                     | name='f0d7b4f6-1aa3-49c2-a47b-7c57f4183d48'   |
    | status                              | BUILD                                         |
    | updated                             | 2020-06-30T06:10:51Z                          |
    | user_id                             | d0451d8b9a7245c09d47b85197ccc80c              |
    | volumes_attached                    |                                               |
    +-------------------------------------+-----------------------------------------------+
  6. 查看server列表,test是刚才dashboard创建的,相对比可以发现selfservice-instance实例少了一个IP,缺少的就是浮动IP

    [root@controller ~]# openstack server list
    +--------------------------------------+----------------------+--------+-----------------------------------------+--------+---------+
    | ID                                   | Name                 | Status | Networks                                | Image  | Flavor  |
    +--------------------------------------+----------------------+--------+-----------------------------------------+--------+---------+
    | fc8355a8-8035-4079-9023-8b79ced74490 | selfservice-instance | ACTIVE | selfservice=172.16.1.118                | cirros | m1.nano |
    | b801ccd4-1a69-4c97-9b66-91dc7d50be2b | test                 | ACTIVE | selfservice=172.16.1.186, 10.10.128.105 | cirros | m1.nano |
    +--------------------------------------+----------------------+--------+-----------------------------------------+--------+---------+
    
  7. 创建浮动IP

    [root@controller ~]# openstack floating ip create provider
    +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Field               | Value                                                                                                                                                                              |
    +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | created_at          | 2020-06-30T06:14:11Z                                                                                                                                                               |
    | description         |                                                                                                                                                                                    |
    | dns_domain          | None                                                                                                                                                                               |
    | dns_name            | None                                                                                                                                                                               |
    | fixed_ip_address    | None                                                                                                                                                                               |
    | floating_ip_address | 10.10.128.116                                                                                                                                                                      |
    | floating_network_id | b66bf1a4-1f9b-40ea-9dfe-0a72fdc40685                                                                                                                                               |
    | id                  | 89524eb8-5bb2-4052-944c-49a0695e6d14                                                                                                                                               |
    | location            | Munch({'project': Munch({'domain_name': 'Default', 'domain_id': None, 'name': 'admin', 'id': u'86fc1bb169a443f98fdaf8e2fb25f9cd'}), 'cloud': '', 'region_name': '', 'zone': None}) |
    | name                | 10.10.128.116                                                                                                                                                                      |
    | port_details        | None                                                                                                                                                                               |
    | port_id             | None                                                                                                                                                                               |
    | project_id          | 86fc1bb169a443f98fdaf8e2fb25f9cd                                                                                                                                                   |
    | qos_policy_id       | None                                                                                                                                                                               |
    | revision_number     | 0                                                                                                                                                                                  |
    | router_id           | None                                                                                                                                                                               |
    | status              | DOWN                                                                                                                                                                               |
    | subnet_id           | None                                                                                                                                                                               |
    | tags                | []                                                                                                                                                                                 |
    | updated_at          | 2020-06-30T06:14:11Z                                                                                                                                                               |
    +---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    
  8. 将浮动IP绑定到selfservice-instance实例

    [root@controller ~]# openstack server add floating ip selfservice-instance 10.10.128.116
    [root@controller ~]# openstack server list
    +--------------------------------------+----------------------+--------+-----------------------------------------+--------+---------+
    | ID                                   | Name                 | Status | Networks                                | Image  | Flavor  |
    +--------------------------------------+----------------------+--------+-----------------------------------------+--------+---------+
    | fc8355a8-8035-4079-9023-8b79ced74490 | selfservice-instance | ACTIVE | selfservice=172.16.1.118, 10.10.128.116 | cirros | m1.nano |
    | b801ccd4-1a69-4c97-9b66-91dc7d50be2b | test                 | ACTIVE | selfservice=172.16.1.186, 10.10.128.105 | cirros | m1.nano |
    +--------------------------------------+----------------------+--------+-----------------------------------------+--------+---------+
  9. 可以通过远程连接工具或ssh命令行连接测试,选择的cirros镜像。默认用户名:cirros 密码:gocubsgo

    [root@controller ~]# ssh cirros@10.10.128.116
    The authenticity of host '10.10.128.116 (10.10.128.116)' can't be established.
    ECDSA key fingerprint is SHA256:SeWDL1ypr0s+jcmzUji9vx1umCkM9SXe/SqW8ItEKN0.
    ECDSA key fingerprint is MD5:43:f8:67:17:eb:20:0d:40:55:74:f6:49:90:f1:de:2e.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.10.128.116' (ECDSA) to the list of known hosts.
    cirros@10.10.128.116's password: 
    $ ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000link/ether fa:16:3e:bc:0b:7a brd ff:ff:ff:ff:ff:ffinet 172.16.1.118/24 brd 172.16.1.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::f816:3eff:febc:b7a/64 scope link valid_lft forever preferred_lft forever
    
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 免费在线阅读:用于计算机视觉、机器学习、机器人的线性代数丨资源

    郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI研究机器学习、计算机视觉,总离不开数学,尤其是……线性代数。要是没有一定数学基础的话,当你看到SVM、拉格朗日乘数等各种复杂术语的时候,可能会头秃。所以,为了有更坚实的理论基础,从根源上理解机器学习背后的数学问题,…...

    2024/4/17 8:28:53
  2. 嵌入式应该学习那些东西

    为什么80%的码农都做不了架构师?>>> 嵌入式应该学习那些东西  有些人一直在问,嵌入式要学哪些东西?今天我详细告诉你到底要学哪些技术: 刚开始: 1)学习 Linux系统安装、 常用命令、应用程序安装。 2) 学习 Linux 下的 C 编程、这本书必学《UNIX 环境高级编…...

    2024/4/17 8:29:47
  3. 微众银行区块链张开翔:数字时代的身份基础设施建设

    6月24日,中钞区块链技术研究院、飞天诚信科技股份有限公司、微众银行等17家单位共同发起成立分布式数字身份产业联盟(DID-Alliance,简称DIDA),共建分布式数字身份基础设施,打造可信开放数字新生态。本文系微众银行区块链首席架构师张开翔在 DIDA成立大会上的分享,也是微…...

    2024/4/26 18:52:07
  4. hibernate缓存机制详细分析(一级/二级/查询缓存)

    在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题。随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解。一、N+1问题首先我们来探讨一下N+1的…...

    2024/4/19 9:11:52
  5. 线性代数学习笔记(九)

    说在前面:这一章真的比较复杂,前前后后花了一天才理清楚,对应的视频是第23节,貌网易公开课这集的评论普遍也是比较难。微分方程一阶微分方程一句话总结:我已经给出公式u(t)=C1eλ1tx1C2eλ2tx2u(t)=C1eλ1tx1C2eλ2tx2 ,你们往里面带特征λ和特征向量x就行了!这章用线代…...

    2024/4/17 8:30:35
  6. 嵌入式开发教程哪家好?linux嵌入式系统开发

    嵌入式入门你知多少?对于一些初入门的初学者而言,对嵌入式入门的一些知识有助于后期的学习,从嵌入式技术的应用前景以及到ARM认知到开发板等等。嵌入式企业用人需求在增长。 如今的嵌入式开发大热是ARM+Linux,还有就是Android系统平台,但对于ARM的发展的前景来讲,可谓是一…...

    2024/4/17 8:30:53
  7. 详解操作系统中CPU、GPU

    概述今天主要介绍一下GPU、CPU和两者之间的区别。1、CPU即中央处理器CPU( Central Processing Unit, 中央处理器)就是机器的“大脑”,也是布局谋略、发号施令、控制行动的“总司令官”。CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元(CU, Control Unit)…...

    2024/4/19 9:01:11
  8. 机器学习的激励函数的故事

    1)七种激活函数列举:2)解析列举3)总结: 1)最早的是sigmoid,它与tanh换汤不换药,都有梯度饱和效应的局限,让大部分网络瘫痪, 2)目前最常用的是ReLU,但是一定要注意参数初始化和学习率的选择设置(这里还是个问题!!!) 3)为了提高模型精度,我们会去考虑那部分输出为…...

    2024/4/21 17:24:32
  9. 工程师直播带你逛慕尼黑上海电子展,观展路线、厂商提问你来定

    electronicaChina慕尼黑上海电子展,是电子行业内重要的专业展览之一,已成为带领未来电子科技的创新平台。以革新性帮助人们更直观地了解电子世界发展背后的动力。往年展览展示面积超过90000平方米,参展厂商1568家,专业观众92695名。 2020年,慕尼黑上海电子展终于冲破疫情阴…...

    2024/4/17 8:30:47
  10. 分享嵌入式入门学习指导

    最近有好多同学在咨询嵌入式该怎么入门,应该怎么学习,有什么好的学习方法推荐,以及嵌入式入门的学习路线。今天我就带着大家的问题,一一为大家解决。 首先嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,冬雪终将化去,春风定会吹来…...

    2024/4/17 8:30:29
  11. Hibernate之二级缓存详解

    前言在前文中也讲到了缓存机制和Hibernate一级缓存。一级缓存主要是针对session的缓存。只在session中有效,它的缺点也很明显就是应用范围小,缓存的时间短。而Hibernate的二级缓存正好解决了应用范围小等问题。二级缓存Hibernate提供了基于应用程序级别的缓存, 可以跨多个se…...

    2024/4/19 8:18:43
  12. 新MIT线性代数与机器学习18.065课程学习笔记1

    第一课:1,将矩阵与向量的乘法,我们要以向量化的方式来看待矩阵与向量的乘法,将矩阵与向量的乘法看成是矩阵列空间基的线性组合,不要以点积的形式来看待。2,A = CR 第一个矩阵分解方法A是一个矩阵C:列空间的基,直接来自于A中的列R:行空间的基3,将两个矩阵的乘法看成是…...

    2024/4/20 20:15:46
  13. 机器学习之激活函数

    激活函数目录激活函数一、为什么需要激活函数二、常见的激活函数1.Sigmoid2、tanh3、ReLU4、Leaky ReLU5、ELU6、Maxout三、如何选择合适的激活函数一、为什么需要激活函数神经网络单个神经元的基本结构由线性输出 Z 和非线性输出 A 两部分组成。如下图所示:其中,f(x) 即为线…...

    2024/4/17 8:29:53
  14. Net开源项目:SSO单点登录方案,Net开源工作流

    开源的SSO方案--SourceID.NET 柳暗花明又一村,在垂头丧气准备放弃单点登录SSO方案时,突然找到了开源的SSO方案——SourceID.NET,真让我信心百倍。下载打开解决方案后,真是庞大工程,用了Mentalis.org Security Library(提供pkcs12 X.509支持)及Nunit v2.0(测试用),十…...

    2024/4/17 8:30:53
  15. 这是我看过最好的对hibernate的二级缓存解析

    很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了。 我的经验主要来自hibernate2.1版本,基本原理和3.0、3.1是一样的,请原谅我的顽固不化。hibernate的session提供了一级缓存,每个session,对同一个id进…...

    2024/4/20 0:20:32
  16. 学习单片机的三个步骤

    作为一名电子技术从业人员,你学过单片机吗?你会运用单片机吗?我想你一定学过,但不一定会运用。因为学习单片机比学习其他学科需要付出更多的努力和代价,不仅要学习理论知识还要练习实际操作,而且主要是在实际操作中才能真正学到单片机技术。因主修专业的不同以及电子基础…...

    2024/4/18 4:58:22
  17. 手工推导---神经网络中的梯度爆炸与消失

    梯度爆炸与消失的推导 以一个3个神经元的网络为例,优化参数w1综上所述原因如下:梯度消失一般出现深层网络中采用了不合适的损失函数。 梯度爆炸一般出现在深层网络和权值初始化值太大的情况下。解决方案 (1)预训练加微调 (2)梯度剪切、正则 (3)ReLU、LeakyReLU、ELU等激…...

    2024/4/17 8:30:59
  18. 将时尚的互联网引入教学中来

    在目前高校的教学工作中,有些同学迷恋网络,以致于影响了学习成绩。很多人将此归罪于网络,甚至有些学校做出大一新生不准购买计算机等的规定。实际上,所谓这种负面的迷恋网络,是指学生将很大一部分的时间用在了打网络游戏、看视频、聊天、经营空间等各种以娱乐为主的应用上…...

    2024/4/4 22:43:54
  19. tensorflow:激活函数(Activation Function)

    激活函数(Activation Function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络。神经网络的数学基础是处处可微的,所以选取激活函数要保证数据输入与输出也是可微的。TensorFlow中提供哪些激活函数的API。激活函数不会改变数据的维度,也就是输入…...

    2024/4/17 8:32:59
  20. 马同学高等数学

    不相信数学的简单,那是没有意识到人生的复杂1 马同学-精选文章无法理解高等数学怎么办?为什么会有弧度制如何通俗地解释泰勒公式?如何通俗地解释欧拉公式(e^πi+1=0)?知乎:虚数i是真实存在的吗?如何理解洛必达法则?如何理解对数?为什么“1+1=2”,需要“证明”?如何…...

    2024/4/26 13:51:19

最新文章

  1. Docker基础+虚拟化概念

    目录 一、虚拟化简介 1、虚拟化概述 2、cpu的时间分片&#xff08;cpu虚拟化&#xff09; 3、cpu虚拟化性性能瓶颈 4、虚拟化工作 4.1虚拟机工作原理 4.2两大核心组件:QEMU、KVM 4.2.1QEMU&#xff1a; 4.2.2KVM&#xff1a; 5、虚拟化类型 ①全虚拟化&#xff1a; …...

    2024/4/26 22:11:15
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【Ubuntu】在 Windows 和 Ubuntu 之间传输文件

    在 Ubuntu 上安装 Samba&#xff1a; sudo apt-get update sudo apt-get install samba在 Ubuntu 上创建一个共享文件夹并设置权限&#xff1a; mkdir /home/your_username/shared sudo chown nobody:nogroup /home/your_username/shared sudo chmod 0777 /home/your_username/…...

    2024/4/19 1:35:24
  4. 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?

    问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null&#xff0c;那么typeof nullValue "?" const u …...

    2024/4/25 5:18:48
  5. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/4/24 3:27:38
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/25 18:38:39
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/25 18:39:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/25 18:39:12
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57