目录

 

OpenStack Queens版搭建详解

1.基础环境配置

1.2 节点网络规划

1.3 关闭防火墙

1.4 配置yum源

1.5 配置节点IP

1.6 配置主机名

1.7 配置主机名解析(hosts)

1.8 配置NTP服务

2.安装基础软件包

2.1 安装OpenStack软件包

2.2 安装mariadb数据库

2.3 安装RabbitMQ消息队列

2.4 安装Memcached缓存数据库

2.5 安装Etcd服务

3 安装OpenStack服务

3.1 安装keystone服务

3.1.1 认证服务概述

3.1.2 安装和配置keystone

3.1.3 创建项目和用户

3.1.4 验证认证服务操作

3.1.5 创建客户端环境脚本

3.2 安装Glance服务

3.2.1 镜像服务概述

3.2.2 创建glance数据库

3.2.3 安装和配置组件

3.2.4 验证操作

3.3 安装compute服务(nova)

3.3.1 计算服务概述

3.3.2 安装和配置控制节点

3.3.3 安装和配置计算节点

3.3.4 验证计算服务操作

3.4 安装neutron服务

3.4.1 网络服务概述

3.4.3 安装和配置controller节点

3.4.4 安装和配置compute节点

3.5 安装Horizon服务

3.5.1 安装和配置组件

3.5.2 完成安装启动服务

3.5.3 登录web验证配置

3.6 安装Cinder服务

3.6.1 块存储服务概述

3.6.2 安装和配置cinder节点

3.6.3 安装和配置controller节点

3.6.4 验证cinder配置

4 创建虚拟机实例

4.1 创建外部网络

4.1.1 创建provider外部网络

4.1.2 网络中创建子网

4.1.3 查看节点网卡变化

4.2 创建租户网络

4.2.1 创建self-service网络

4.2.2 网络中创建子网

4.2.3 创建路由器

4.2.4 租户网络添加到路由器

4.2.5 路由器连接到外部网络

4.2.6 验证操作

4.3 创建实例类型

4.4 生成秘钥对

4.5 添加安全组规则

4.6 确认实例选项

4.7 创建实例

4.8 虚拟控制台访问实例

4.9 为实例分配浮动IP地址

4.10 远程SSH访问实例

4.11 网卡变化

4.12 块存储

4.12.1 创建一个卷

4.12.2 将卷添加到实例

5 使用官方云镜像创建实例

5.1 下载官方通用云镜像

5.3 创建实例

5.5 为实例分配浮动IP地址

5.6 远程SSH访问实例

6 查看当前网卡状态

6.1 控制节点

6.2 计算节点

6.3 存储节点


OpenStack Queens版搭建详解

1.基础环境配置

1.1 节点硬件规划

本次搭建使用VMware Workstation虚拟出3台CentOS7虚拟机作为主机节点,节点架构:1个controller控制节点、1个compute计算节点、1个cinder块存储节点。硬件配置具体如下:

 

说明:这里使用CentOS-7-x86_64-Minimal-1810.iso,minimal版占用资源更少,下载地址:https://www.centos.org/

Vmware Workstation虚拟机开启虚拟化引擎:

https://img-blog.csdn.net/20180706172330381?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25ldHdvcmtlbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

查看操作系统及内核版本:

[root@controller ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@controller ~]# uname -sr
Linux 3.10.0-957.21.2.el7.x86_64

1.2 节点网络规划

本次搭建网络使用linuxbridge+vxlan模式,包含三个网络平面:管理网络,外部网络和租户隧道网络,具体规划如下:

节点名称

网卡名称

网卡模式

虚拟交换机

网络类型

IP地址

controller

ens33

NAT模式

vmnet8

外部网络

192.168.241.129

ens34

仅主机模式

Vmnet1

隧道网络

192.168.72.129

ens35

仅主机模式

Vmnet2

管理网络

192.168.234.129

compute1

ens33

NAT模式

Vmnet8

部署网络

192.168.241.130

ens34

仅主机模式

Vmnet1

隧道网络

192.168.72.130

ens35

仅主机模式

Vmnet2

管理网络

192.168.234.130

cinder1

ens33

NAT模式

vmnet8

部署网络

192.168.241.131

ens35

仅主机模式

Vmnet2

管理网络

192.168.234.131

1.3 关闭防火墙

1.关闭selinux

# sed -i 's/enforcing/disabled/g' /etc/selinux/config
# setenforce 0

2.关闭firewalld防火墙

# systemctl stop firewalld.service && systemctl disable firewalld.service
# firewall-cmd --state  #查看是否关闭

1.4 配置yum源

以下操作在所有节点执行

1.备份CentOS官方源:

# cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2.下载阿里云yum源:

# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.测试yum源是否正常

# yum clean all && yum makecache

也可以搭建本地yum源:

参考链接:https://blog.csdn.net/networken/article/details/80729234

1.5 配置节点IP

# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
#UUID=d1fa93da-4033-4198-b741-a271939430e7
DEVICE=ens33
ONBOOT=yes
 
IPADDR=192.168.241.129
PREFIX=24
GATEWAY=192.168.241.2
DNS1=119.29.29.29
DNS2=1.1.1.1
HWADDR=00:0c:29:8e:eb:b1
=================================================================
# cat /etc/sysconfig/network-scripts/ifcfg-ens34
……
IPADDR=192.168.72.129
PREFIX=24
HWADDR=00:0c:29:8e:eb:bb
=================================================================
# cat /etc/sysconfig/network-scripts/ifcfg-ens35
……
IPADDR=192.168.234.129
PREFIX=24
HWADDR=00:0c:29:8e:eb:c5

1.6 配置主机名

控制节点执行:# hostnamectl set-hostname controller

计算节点执行:# hostnamectl set-hostname compute1

存储节点执行:# hostnamectl set-hostname cinder1

1.7 配置主机名解析(hosts)

1.所有节点执行,配置相同,注意这里使用管理网络IP地址:

[root@controller ~]# cat /etc/hosts
192.168.234.129 controller
192.168.234.130 compute1
192.168.234.131 cinder1

2.验证主机名解析是否正常:

ping计算节点:ping -c 4 compute1

ping存储节点:ping -c 4 cinder1

1.8 配置NTP服务

以下在控制节点进行配置

1.安装软件包:

# yum install chrony

2.修改配置文件:

# vim /etc/chrony.conf
allow 192.168.0.0/16  去掉注释,允许其他节点网段同步时间,请配置为对应网段

3.重启服务并加入开机启动项:

# systemctl enable chronyd.service && systemctl start chronyd.service

4.查看时间同步状态: 
MS列中包含^*的行,指明NTP服务当前同步的服务器。

# chronyc sources

5.查看当前时间是否准确

# timedatectl
其中NTP synchronized: yes说明同步成功

以下在计算节点进行配置:

  1. 安装软件包:
# yum install chrony
  1. 修改配置文件,使计算节点与控制节点同步时间:
# vim /etc/chrony.conf   #注释3-6行,并增加第7行内容
  1 # Use public servers from the pool.ntp.org project.
  2 # Please consider joining the pool (http://www.pool.ntp.org/join.html).
  3 #server 0.centos.pool.ntp.org iburst
  4 #server 1.centos.pool.ntp.org iburst
  5 #server 2.centos.pool.ntp.org iburst
  6 #server 3.centos.pool.ntp.org iburst
  7 server 192.168.234.129 iburst
  1. 重启服务并设置开机启动
# systemctl enable chronyd.service && systemctl start chronyd.service
  1. 查看时间同步状态,当前同步的源为controller

  1. 查看时间是否与控制节点一致
# timedatectl

存储节点配置同计算节点,这里省略

NTP的其他操作命令:

# timedatectl set-ntp yes                  #启用ntp同步服务
# timedatectl set-timezone Asia/Shanghai    #设置时区
# yum install –y ntpdate         #安装时间同步工具
# ntpdate 0.centos.pool.ntp.org   #强制与网络NTP服务器同步时间
# ntpdate 192.168.92.70           #强制与控制节点同步时间

注意:各个节点时间不同步后续可能出现各种问题,建议配置准确在进行后续操作。

2.安装基础软件包

2.1 安装OpenStack软件包

以下操作在所有节点执行

  1. 启用OpenStack存储库,安装queens版本的存储库
# yum install centos-release-openstack-queens
  1. 升级所有软件包,如果升级后内核更新,请重启节点启用新内核。
# yum upgrade
  1. 安装openstack客户端
# yum install python-openstackclient
  1. 安装 openstack-selinux软件包以自动管理OpenStack服务的安全策略:
# yum install openstack-selinux

2.2 安装mariadb数据库

以下操作在控制节点执行

大多数OpenStack服务使用SQL数据库来存储信息。数据库通常在控制器节点上运行。本次搭建使用MariaDB数据库, OpenStack服务还支持其他SQL数据库,包括 PostgreSQL等。

1.安装软件包

# yum install mariadb mariadb-server python2-PyMySQL

2.创建并编辑/etc/my.cnf.d/openstack.cnf文件并完成以下操作:

配置以下内容,bind-address设置为控制节点的管理IP地址,以使其他节点能够通过管理网络进行访问:

# vim /etc/my.cnf.d/openstack.cnf    
[mysqld]
bind-address = 192.168.234.129
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

3.启动数据库服务并设置服务开机启动:

# systemctl start mariadb.service && systemctl enable mariadb.service

4.运行mysql_secure_installation 脚本初始化数据库服务,并为数据库root帐户设置密码(这里设为liuxin):

# mysql_secure_installation
……
Enter current password for root (enter for none): 
OK, successfully used password, moving on...
 
Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!
……
Remove anonymous users? [Y/n] Y
 ... Success!
……
# 是否禁止root远程访问数据库
Disallow root login remotely? [Y/n] Y
 ... Success!
……
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
……
will take effect immediately.
# 让前面修改生效
Reload privilege tables now? [Y/n] Y
 ... Success!
……
Thanks for using MariaDB!

2.3 安装RabbitMQ消息队列

以下在控制节点执行

OpenStack使用消息队列(Message queue)来协调服务之间的操作和状态信息,消息队列服务通常在控制节点上运行,OpenStack支持多种消息队列服务,包括RabbitMQ, Qpid和ZeroMQ。

  1. 安装软件包:
# yum install rabbitmq-server

2.启动消息队列服务并设置服务开机启动

# systemctl enable rabbitmq-server.service && systemctl start rabbitmq-server.service

3.添加openstack 用户,并设置密码,这里设置为liuxin

# rabbitmqctl add_user openstack liuxin

4.为openstack用户增加配置、读取及写入相关权限

# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...

2.4 安装Memcached缓存数据库

以下在控制节点执行

身份认证服务使用Memcached缓存令牌,memcached服务通常在控制节点上运行。 

为keystone服务缓存tokens
1.安装软件包

# yum install memcached python-memcached

2.编辑/etc/sysconfig/memcached文件并完成以下操作: 
使用
控制节点的管理IP地址配置服务。这使其他节点能够通过管理网络进行访问:

# vim  /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.234.129,::1"    #增加一行

3.启动Memcached服务并将其配置为在系统引导时启动:

# systemctl enable memcached.service && systemctl start memcached.service

2.5 安装Etcd服务

以下操作在控制节点执行

OpenStack服务可能使用Etcd,这是一个可靠的分布式键值存储,用于分布式密钥锁定,存储配置,跟踪服务的实时性和其他场景。 
1.安装软件包

# yum install etcd

2.编辑/etc/etcd/etcd.conf文件,以控制节点管理IP地址设置相关选项,以使其他节点通过管理网络进行访问

# vi /etc/etcd/etcd.conf
[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.234.129:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.234.129:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="controller"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.234.129:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.234.129:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="default=http://192.168.234.129:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"

3.启动etcd服务并设为开机启动:

# systemctl enable etcd && systemctl start etcd

3 安装OpenStack服务

3.1 安装keystone服务

以下在控制节点执行

本节描述如何在控制节点上安装和配置OpenStack身份认证服务,即称为keystone。出于可扩展性的目的,此配置部署了Fernet tokens和Apache HTTP服务器来处理请求。

3.1.1 认证服务概述

OpenStack认证服务提供单一的集成点,用于管理身份验证、授权和服务目录。 

认证服务通常是用户与之交互的第一个服务。一旦经过身份验证,最终用户可以使用其身份来访问其他OpenStack服务。同样,其他OpenStack服务利用认证服务来确保用户是他们本人,并且发现部署中的其他服务在哪里。认证服务还可以与一些外部用户管理系统(如LDAP)集成。

用户和服务可以通过使用由认证服务管理的服务目录来定位其他服务。顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点,每个端点可以是三种类型之一:管理员、内部或公共。在生产环境中,出于安全原因,不同的端点类型可能驻留在暴露给不同类型用户的单独网络上。例如,公共API网络可能从因特网上可见,因此客户可以管理他们的云。管理API网络可能局限于管理云基础设施的组织内的操作员。内部API网络可能局限于包含OpenStack服务的主机。此外,OpenStack支持多个区域的可扩展性。为了简单起见,本指南使用管理网络来实现所有端点类型和默认的TrimOne区域。在认证服务中创建的区域、服务和端点一起构成部署的服务目录。部署中的每个OpenStack服务需要一个服务条目,其中存储在标识服务中的相应端点。这一切都可以在认证服务安装和配置之后完成。

认证服务包含这些组件:

Server

一个中央服务器使用RESTful接口提供认证和授权服务。

Drivers

驱动程序或服务后端集成到中央服务器。它们用于访问OpenStack外部的库中的身份信息,并且可能已经存在于部署OpenStack的基础设施中(例如,SQL数据库或LDAP服务器)。

Modules

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

3.1.2 安装和配置keystone

创建keystone数据库

1.以root用户连接到数据库服务器:

$ mysql -uroot -p

2.创建keystone数据库:

MariaDB [(none)]> CREATE DATABASE keystone;

3.授予keystone数据库适当的访问权限:这里密码设置为liuxin

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

安装和配置keystone组件

1.安装软件包

# yum install openstack-keystone httpd mod_wsgi

2.编辑并修改/etc/keystone/keystone.conf配置文件

# vim /etc/keystone/keystone.conf

 [database]

# 配置数据库访问权限
connection = mysql+pymysql://keystone:liuxin@controller/keystone

 [token]

# 配置Fernet token provider
provider = fernet

3.同步认证服务数据库:

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

4.初始化Fernet key库:

# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

5.引导身份认证服务:

# keystone-manage bootstrap --bootstrap-password liuxin --bootstrap-admin-url http://controller:35357/v3/ --bootstrap-internal-url http://controller:5000/v3/ --bootstrap-public-url http://controller:5000/v3/ --bootstrap-region-id RegionOne

替换ADMIN_PASS为管理用户的合适密码,这里为liuxin

配置apache http服务

1.编辑/etc/httpd/conf/httpd.conf文件并配置ServerName选项以引用控制节点:

# vim /etc/httpd/conf/httpd.conf
ServerName controller

2.创建到/usr/share/keystone/wsgi-keystone.conf文件的链接:

# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

3.启动Apache HTTP服务并配置开机启动

# systemctl enable httpd.service && systemctl start httpd.service

4.配置administrative 账户

export OS_USERNAME=admin
export OS_PASSWORD=liuxin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3

注意这里admin密码为liuxin,这里的密码要和keystone-manage bootstrap命令中使用的密码相同

3.1.3 创建项目和用户

身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合(domain, projects, users, and roles)。

1.创建域,尽管上面keystone-manage bootstrap步骤已经存在“default”域,但创建新域的正式方法是:

# openstack domain create --description "Domain" example           

2.创建服务项目,本指南使用一个服务项目,其中包含您添加到环境中的每项服务的唯一用户。

# openstack project create --domain default --description "Service Project" service

 3.创建平台demo项目,普通(非管理员)任务应该使用非特权项目和用户。 作为示例,这里创建演示项目和用户。创建演示项目:

# openstack project create --domain default --description "Demo Project" demo

 4.创建demo用户 (密码:demo)

# openstack user create --domain default --password-prompt demo

 5.创建用户角色:

# openstack role create user

 

6.将用户角色添加到demo项目和用户:

$ openstack role add --project demo --user demo user

注意:该命令没有输出,另外可以重复此过程来创建其他项目和用户。

3.1.4 验证认证服务操作

1.取消设置临时OS_AUTH_URL和OS_PASSWORD环境变量:

$ unset OS_AUTH_URL OS_PASSWORD

2.作为管理员admin用户,请求身份验证令牌(liuxin)

# openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue

3.作为demo用户,请求身份验证令牌(demo)

# openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue

注意:此命令使用演示用户和API端口5000的密码,该端口只允许对Identity Service API进行常规(非管理员)访问。

3.1.5 创建客户端环境脚本

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

创建脚本

为管理员和演示项目和用户创建客户端环境脚本。后续所有操作将引用这些脚本来为客户端操作加载适当的凭据。

1.创建并编辑admin-openrc文件并添加以下内容:(这里/root目录下)

# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=liuxin
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

2.创建并编辑demo-openrc文件并添加以下内容:

# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=demo
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

使用脚本 

要以特定项目和用户身份运行客户端,只需在运行客户端环境脚本之前加载相关的客户端环境脚本即可。 例如:

1.加载admin-openrc文件以使用Identity服务的位置以及管理项目和用户凭据执行环境变量:

# . admin-openrc

2.请求身份验证令牌:

# openstack token issue

 

3.2 安装Glance服务

以下操作在控制节点执行

本节介绍如何在控制节点上安装和配置镜像服务,即glance。 为了简单起见,该配置将镜像存储在本地文件系统上。

3.2.1 镜像服务概述

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

为了简单起见,本指南描述了将Image服务配置为使用文件后端,该后端上载并存储在托管Image服务的控制节点上的目录中。 默认情况下,该目录是/ var / lib / glance / images /。

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

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

glance-api

接受镜像API调用以进行镜像发现,检索和存储。

glance-registry

存储,处理和检索有关镜像的元数据。 元数据包括例如大小和类型等项目。

Database

存储镜像元数据,您可以根据自己的喜好选择数据库。 大多数部署使用MySQL或SQLite。

Storage repository for image files(镜像文件的存储库)

支持各种存储库类型,包括常规文件系统(或安装在glance-api控制节点上的任何文件系统),Object Storage,RADOS块设备,VMware数据存储和HTTP。 请注意,某些存储库仅支持只读用法。

Metadata definition service(元数据定义服务)

用于供应商,管理员,服务和用户的通用API来有意义地定义他们自己的定制元数据。 此元数据可用于不同类型的资源,如镜像,开发,卷,定制和聚合。 定义包括新属性的关键字,描述,约束和它可以关联的资源类型。

3.2.2 创建glance数据库

1.创建glance数据库 
以root用户连接到数据库:

# mysql -uroot -p

创建glance数据库,密码liuxin

MariaDB [(none)]> CREATE DATABASE glance;

授予对glance数据库的正确访问权限:

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

2.获取admin用户的环境变量

$ . admin-openrc

3.要创建服务凭据,请完成以下步骤 
创建glance用户:(密码:glance)

#  openstack user create --domain default --password-prompt glance

把admin角色添加到glance用户和项目中

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

创建glance服务实体

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

4.创建镜像服务API端点 

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

3.2.3 安装和配置组件

1.安装软件包:

# yum install openstack-glance

2.编辑/etc/glance/glance-api.conf文件,完成以下操作

Glanceapi服务配置文件

# vim /etc/glance/glance-api.conf

 [database]

connection = mysql+pymysql://glance:liuxin@controller/glance

 [keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]

flavor = keystone

[glance_store]

# 配置本地文件系统存储和映像文件的位置
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

3.编辑/etc/glance/glance-registry.conf配置文件

Glance registry服务配置文件,用户存储镜像有关的元数据

# vim /etc/glance/glance-registry.conf

 [database]

connection = mysql+pymysql://glance:liuxin@controller/glance

 [keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = glance
password = glance

[paste_deploy]

flavor = keystone

4.同步镜像服务数据库

# su -s /bin/sh -c "glance-manage db_sync" glance

5.完成安装,启动镜像服务并设为开机启动:

# systemctl enable openstack-glance-api.service openstack-glance-registry.service
# systemctl start openstack-glance-api.service openstack-glance-registry.service

3.2.4 验证操作

使用CirrOS验证Image服务的操作,这是一个小型Linux映像,可帮助您测试OpenStack部署。 

有关如何下载和构建映像的更多信息,请参阅OpenStack虚拟机映像指南:

https://docs.openstack.org/image-guide/

       有关如何管理映像的信息,请参阅OpenStack最终用户指南:

https://docs.openstack.org/queens/user/

1.获取admin用户的环境变量

# . admin-openrc

2.下载镜像

# wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

3.将镜像上传到image服务,指定磁盘格式为QCOW2,指定裸容器格式和公开可见性,以便所有项目都可以访问它:

# openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public
=================================================================
 file          跟一个本地的文件路径
 copy-from     跟一个url,会把url对应的镜像拷贝到存储后端
 location      跟一个url,不会去拷贝下来,是直接去使用

3.查看上传的镜像,镜像状态应为active状态

# openstack image list

glance具体配置选项可参考:

https://docs.openstack.org/glance/queens/configuration/index.html

3.3 安装compute服务(nova

本节介绍如何在控制节点上安装和配置计算服务,代号为nova

3.3.1 计算服务概述

使用OpenStack Compute来托管和管理云计算系统。OpenStack Compute是基础架构即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。

      OpenStack Compute与OpenStack Identity进行交互以进行身份验证; 用于磁盘和服务器映像的OpenStack映像服务; 和用于用户和管理界面的OpenStack Dashboard。镜像访问受到项目和用户的限制; 每个项目的限额是有限的(例如,实例的数量)。OpenStack Compute可以在标准硬件上水平扩展,并下载映像以启动实例。

OpenStack Compute包含以下内容及组件:

nova-api service

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

nova-api-metadata service

接受来自实例的元数据请求。nova-api-metadata通常在nova-network 安装多主机模式下运行时使用该服务。有关详细信息,请参阅计算管理员指南中的元数据服务。

nova-compute service

通过管理程序API创建和终止虚拟机实例的工作守护程序。例如:

XenAPI for XenServer/XCP

libvirt for KVM or QEMU

VMwareAPI for VMware

处理相当复杂。基本上,守护进程接受来自队列的动作并执行一系列系统命令,例如启动KVM实例并更新其在数据库中的状态。

nova-placement-api service

跟踪每个提供者的库存和使用情况。有关详情,请参阅 Placement API。

nova-scheduler service

从队列中获取虚拟机实例请求,并确定它在哪个计算服务器主机上运行。

nova-conductor module

调解nova-compute服务和数据库之间的交互。它消除了由nova-compute服务直接访问云数据库的情况 。该nova-conductor模块水平缩放。但是,请勿将其部署到nova-compute运行服务的节点上。有关更多信息,请参阅配置选项中的conductor部分 。

nova-consoleauth daemon(守护进程)

为控制台代理提供的用户授权令牌。见 nova-novncproxy和nova-xvpvncproxy。此服务必须运行以使控制台代理正常工作。您可以在群集配置中针对单个nova-consoleauth服务运行任一类型的代理。有关信息,请参阅关于nova-consoleauth。

nova-novncproxy daemon

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

nova-spicehtml5proxy daemon

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

nova-xvpvncproxy daemon

提供通过VNC连接访问正在运行的实例的代理。支持OpenStack特定的Java客户端。

The queue队列

守护进程之间传递消息的中心集线器。通常用RabbitMQ实现 ,也可以用另一个AMQP消息队列实现,例如ZeroMQ。

SQL database

存储云基础架构的大部分构建时间和运行时状态,其中包括:

Available instance types 可用的实例类型

Instances in use 正在使用的实例

Available networks 可用的网络

Projects 项目

理论上,OpenStack Compute可以支持SQLAlchemy支持的任何数据库。通用数据库是用于测试和开发工作的SQLite3,MySQL,MariaDB和PostgreSQL。

3.3.2 安装和配置控制节点

以下在控制节点执行

3.3.2.1 创建数据库

1.以root账户登录数据库

# mysql -uroot -p

2.创建nova_api, nova, nova_cell0数据库

MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

数据库登录授权

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

2.执行admin-openrc凭证

# . admin-openrc

3.创建nova用户(密码:nova)

# openstack user create --domain default --password-prompt nova

为nova用户添加admin角色(加入管理员组)

# openstack role add --project service --user nova admin

创建nova服务端点

# openstack service create --name nova --description "OpenStack Compute" compute

4.创建compute API 服务端点:

# openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 
# openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 
# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

5.创建一个placement服务用户:(密码:placement

#openstack user create --domain default --password-prompt placement
 

6.添加placement用户为项目服务admin角色

# openstack role add --project service --user placement admin

7.在服务目录中创建Placement API条目:

# openstack service create --name placement --description "Placement API" placement

8.创建Placement API服务端点

# openstack endpoint create --region RegionOne placement public http://controller:8778
# openstack endpoint create --region RegionOne placement internal http://controller:8778
# openstack endpoint create --region RegionOne placement admin http://controller:8778

3.3.2.2 安装和配置组件

1.安装软件包

# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api

2.编辑 /etc/nova/nova.conf文件并完成以下操作

# vim /etc/nova/nova.conf

 [DEFAULT]

# 只启用计算和元数据API
enabled_apis = osapi_compute,metadata
# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 使用控制节点的管理接口IP地址配置my_ip选项
my_ip = 192.168.234.129
# 启用对网络服务的支持
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

 [api_database]

# 配置数据库访问
connection = mysql+pymysql://nova:liuxin@controller/nova_api

[database]

# 配置数据库访问
connection = mysql+pymysql://nova:liuxin@controller/nova

[api]

# 配置认证服务访问
auth_strategy = keystone

[keystone_authtoken]

# 配置认证服务访问
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova

 [vnc]

# 使用控制节点的管理接口IP地址配置VNC代理
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip

 [glance]

# 配置Image服务API的位置
api_servers = http://controller:9292

 [oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/nova/tmp

 [placement]

# 配置 Placement API
os_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

由于软件包的一个bug,需要在/etc/httpd/conf.d/00-nova-placement-api.conf文件中添加如下配置,来启用对Placement API的访问:

# vim /etc/httpd/conf.d/00-nova-placement-api.conf
[root@controller ~]# vim /etc/httpd/conf.d/00-nova-placement-api.conf
Listen 8778
 
<VirtualHost *:8778>
  WSGIProcessGroup nova-placement-api
  ……
  <IfVersion >= 2.4>
    ErrorLogFormat "%M"
  </IfVersion>
  ErrorLog /var/log/nova/nova-placement-api.log #这里放在此行之后
  <Directory /usr/bin>
   <IfVersion >= 2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
  </Directory>
  #SSLEngine On
  #SSLCertificateFile ...
  #SSLCertificateKeyFile ...
</VirtualHost>
 
Alias /nova-placement-api /usr/bin/nova-placement-api
<Location /nova-placement-api>
……
</Location>

重新启动httpd服务

# systemctl restart httpd

3.同步nova-api数据库

# su -s /bin/sh -c "nova-manage api_db sync" nova

4.注册cell0数据库

# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

5.创建cell1 cell

# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

6.同步nova数据库

# su -s /bin/sh -c "nova-manage db sync" nova

7.验证 nova、 cell0、 cell1数据库是否注册正确

# nova-manage cell_v2 list_cells

3.3.2.3 完成安装启动服务

启动计算服务并配置为开机启动

# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

3.3.3 安装和配置计算节点

以下操作在计算节点执行

1.安装软件包

# yum install openstack-nova-compute

2.编辑/etc/nova/nova.conf配置文件并完成以下操作

# vim /etc/nova/nova.conf

[DEFAULT]

# 只启用计算和元数据API
enabled_apis = osapi_compute,metadata
# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 这里使用计算节点管理IP地址
my_ip = 192.168.234.130
# 启用对网络服务的支持
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[api]

# 配置认证服务访问
auth_strategy = keystone

[keystone_authtoken]

# 配置认证服务访问
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = nova

[vnc]

# 启用和配置远程控制台访问
enabled = True
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

服务器组件侦听所有IP地址,并且代理组件只侦听计算节点的管理接口IP地址。 基本URL指示您可以使用Web浏览器访问此计算节点上实例的远程控制台的位置。 
如果用于访问远程控制台的Web浏览器驻留在无法解析控制器主机名的主机上,则必须用控制节点的管理接口IP地址替换控制器。

[glance]

# 配置Image服务API的位置
api_servers = http://controller:9292

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/nova/tmp

[placement]

# 配置 Placement API
os_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

3.3.3.2 完成配置启动服务

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

$ egrep -c '(vmx|svm)' /proc/cpuinfo

如果此命令返回值为1或更大,则您的计算节点支持通常不需要额外配置的硬件加速。

如果此命令返回零值,则您的计算节点不支持硬件加速,并且您必须配置libvirt才能使用QEMU而不是KVM。(我这里返回值为2,所有并没有执行下面这一步,配置文件未做任何更改) 
在/etc/nova/nova.conf文件中编辑 [libvirt] 部分:

# vim /etc/nova/nova.conf

[libvirt]

virt_type = qemu

2.启动计算服务(包括其相关性),并将其配置为在系统引导时自动启动:

# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service

注意:如果NOVA计算服务无法启动,检查/var/log/nova/nova-compute.log。控制节点上的错误消息AMQP服务器:5672是不可达的,可能指示控制节点上的防火墙阻止对端口5672的访问。配置防火墙以打开控制节点上的端口5672,并重新启动计算节点上的Nova计算服务。 
如果想要清除防火墙规则执行以下命令:

# iptables -F
# iptables -X
# iptables -Z

3.3.3.3 添加compute节点到cell数据库

以下在控制节点上执行

1.执行admin-openrc,验证有几个计算节点在数据库中

# . admin-openrc
# openstack compute service list --service nova-compute

 2.发现计算节点

# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

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

vim /nova/nova.conf

[scheduler]

discover_hosts_in_cells_interval = 300

3.3.4 验证计算服务操作

以下操作在控制节点执行

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

#. admin-openrc
# openstack compute service list

此输出应显示在控制节点上启用三个服务组件,并在计算节点上启用一个服务组件。

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

#  openstack catalog list

3.列出Image服务中的镜像以验证与Image服务的连通性:

# openstack image list

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

# nova-status upgrade check

若是报错:

ConnectFailure: Unable to establish connection to http://controller:8778/....

则清除防火墙规则:看’3.3.3.2的2’

nova配置参考:https://docs.openstack.org/nova/queens/admin/index.html

3.4 安装neutron服务

3.4.1 网络服务概述

OpenStack Networking(neutron)允许您创建由其他OpenStack服务管理的接口设备并将其连接到网络。可以实现插件以适应不同的网络设备和软件,为OpenStack架构和部署提供灵活性。 

网络服务包含以下组件: 
neutron-server 

接受API请求并将其路由到适当的OpenStack Networking插件以便采取行动。 
OpenStack Networking plug-ins and agents 

插拔端口,创建网络或子网,并提供IP地址。这些插件和代理根据特定云中使用的供应商和技术而有所不同。OpenStack Networking带有用于思科虚拟和物理交换机,NEC OpenFlow产品,Open vSwitch,Linux桥接和VMware NSX产品的插件和代理。

通用代理是L3(第3层),DHCP(动态主机IP寻址)和插件代理。

Messaging queue 

大多数OpenStack Networking安装用于在neutron-server和各种代理之间路由信息。还充当存储特定插件的网络状态的数据库。

OpenStack Networking主要与OpenStack Compute进行交互,为其实例提供网络和连接。

3.4.3 安装和配置controller节点

以下操作在控制节点执行

3.4.3.1 创建数据库

1.要创建数据库,需要完成以下操作 

以root用户使用数据库连接客户端连接到数据库服务器:

# mysql -uroot -p

创建neutron数据库:

MariaDB [(none)] CREATE DATABASE neutron;

授予neutron数据库适当访问权,这里密码为liuxin:

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

2.加载管理员凭据以获得仅管理员访问的CLI命令:

$ . admin-openrc

3.创建服务凭证,完成以下操作

创建neutron用户,密码neutron

# openstack user create --domain default --password-prompt neutron

添加admin角色到neutron用户

# openstack role add --project service --user neutron admin

创建neutron服务实体

# openstack service create --name neutron --description "OpenStack Networking" network

4.创建网络服务API端点 

$ openstack endpoint create --region RegionOne network public http://controller:9696 
$ openstack endpoint create --region RegionOne network internal http://controller:9696 
$ openstack endpoint create --region RegionOne network admin http://controller:9696

3.4.3.2 配置网络部分

可以使用选项1和2所代表的两种体系结构之一来部署网络服务。

* 选项1部署了仅支持将实例附加到提供者(外部)网络的最简单的可能架构。 没有自助服务(专用)网络,路由器或浮动IP地址。

只有管理员或其他特权用户才能管理提供商网络。

* 选项2增加了选项1,其中支持将实例附加到自助服务网络的第3层服务。

演示或其他非特权用户可以管理自助服务网络,包括提供自助服务和提供商网络之间连接的路由器。此外,浮动IP地址可提供与使用来自外部网络(如Internet)的自助服务网络的实例的连接。 自助服务网络通常使用隧道网络。隧道网络协议(如VXLAN),选项2还支持将实例附加到提供商网络。

以下两项配置二选一:

 Networking Option 1: Provider networks 
 Networking Option 2: Self-service networks

这里选择Networking Option 2: Self-service networks

1.安装组件

# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables

2.配置服务组件 

# vim /etc/neutron/neutron.conf

[database]

# 配置数据库访问
connection = mysql+pymysql://neutron:liuxin@controller/neutron

[DEFAULT]

# 启用模块化第2层(ML2)插件,路由器服务和overlapping IP addresses
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true
# 配置RabbitMQ消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置认证服务访问
auth_strategy = keystone
# 配置网络通知计算网络拓扑更改
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[keystone_authtoken]

# 配置认证服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[nova]

#配置网络通知计算网络拓扑更改 
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/neutron/tmp

3.配置网络二层插件

ML2插件使用Linux桥接机制为实例构建第2层(桥接和交换)虚拟网络基础结构。编辑/etc/neutron/plugins/ml2/ml2_conf.ini 文件:

# vim /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]

# 启用 flat, VLAN, and VXLAN 网络
type_drivers = flat,vlan,vxlan
# 租户创建的默认网络类型
tenant_network_types = vxlan
# 启用Linux网桥和第2层集群机制
# mechanism_ drivers 是一个数组,包含了 Neutron 可以接纳(加载)的具体厂家(含开源) 的 Mechanism Driver 的名称
mechanism_drivers = linuxbridge,l2population
# 启用端口安全扩展驱动程序
extension_drivers = port_security

[ml2_type_flat]

# 将提供者虚拟网络配置为扁平网络
flat_networks = provider

[ml2_type_vlan]

# vlan范围(租户)
network_vlan_ranges = provider:1001:2000

[ml2_type_vxlan]

# vxlan范围(租户)
vni_ranges = 1:1000

[securitygroup]

# 启用ipset以提高安全组规则的效率
enable_ipset = true

 

4.配置linux网桥代理

Linux桥接代理为实例构建层-2(桥接和交换)虚拟网络基础结构,并处理安全组。编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini

# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]

# vlan network 与物理网卡的对应关系
physical_interface_mappings = provider:ens33
注意:这里的ens33物理网卡是外部网络的网卡(underlying provider physical network interface)。

[vxlan]

# 启用vxlan隧道网络,配置处理隧道网络的物理网络接口的IP地址,并启用
enable_vxlan = true
local_ip = 192.168.72.129
l2_population = true
注意这里的ip地址192.168.72.129为隧道网络的ip地址(IP address of the underlying physical network interface that handles overlay networks)

[securitygroup]

# 启用安全组并配置Linux网桥iptables防火墙驱动程序
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

通过验证下列所有SysTL值设置为1以确保Linux操作系统内核支持网桥过滤器

# vim /usr/lib/sysctl.d/00-system.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# sysctl -p

5.配置三层代理

Layer-3(L3)代理为自助虚拟网络提供路由和NAT服务。

# vim /etc/neutron/l3_agent.ini

[DEFAULT]

# 配置Linux网桥接口驱动程序和外部网络桥接器
interface_driver = linuxbridge

7.配置DHCP agent 

DHCP代理为虚拟网络提供DHCP服务。 

$ vim /etc/neutron/dhcp_agent.ini

[DEFAULT]

# 配置Linux网桥接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据
interface_driver = linuxbridge
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

3.4.3.5 配置metadata

元数据代理为实例提供配置信息,例如凭据。 
编辑 /etc/neutron/metadata_agent.ini文件并完成以下操作:

# vim /etc/nova/nova.conf

[neutron]

url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = true
metadata_proxy_shared_secret = liuxin

3.4.3.7 完成安装启动服务

1.网络服务初始化脚本需要一个指向ML2插件配置文件

/etc/neutron/plugins/ml2/ml2_conf.ini的符号链接

/etc/neutron/plugin.ini

如果此符号链接不存在,请使用以下命令创建它

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

2.同步数据库

# 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

3.重启compute API服务

# systemctl restart openstack-nova-api.service

4.启动网络服务并设为开机启动

# systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service
# systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service

5.对于联网选项2,还启用并启动第三层服务

# systemctl enable neutron-l3-agent.service && systemctl start neutron-l3-agent.service

3.4.4 安装和配置compute节点

以下操作在计算节点执行

计算节点处理实例的连接和安全组。

3.4.4.1 安装和配置组件

1.安装组件

# yum install openstack-neutron-linuxbridge ebtables ipset

2.配置公共组件 
网络通用组件配置包括身份验证机制,消息队列和插件。 

# vim /etc/neutron/neutron.conf

[DEFAULT]

注释掉任何connection选项,因为计算节点不直接访问数据库。

# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置身份服务访问
auth_strategy = keystone

[keystone_authtoken]

# 配置身份服务访问
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/neutron/tmp

3.4.4.2 配置网络部分

选择您为控制器节点选择的相同网络选项以配置特定的服务。 之后,返回此处并继续配置计算服务以使用网络服务。 
网络选项1:提供商网络 
网络选项2:自助服务网络

这里选择网络选项2:自助服务网络

1.配置Linux网桥 
编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:

# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[vxlan]

# 启用VXLAN隧道网络,配置处理隧道网络的物理网络接口的IP地址,并启用第2层群体
enable_vxlan = true
local_ip = 192.168.72.130
l2_population = true
注意:这里的192.168.72.130为计算节点隧道网络的IP地址(underlying physical network interface that handles overlay networks)

[securitygroup]

# 启用安全组并配置Linux网桥iptables防火墙驱动程序
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

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

# vim /etc/nova/nova.conf 

[neutron]

url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron

确保Linux操作系统内核支持网桥过滤器,方法是验证以下所有sysctl值均设置为1

$ vim /usr/lib/sysctl.d/00-system.conf 
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
$ sysctl -p

3.4.4.5 完成安装启动服务

1.重启compute服务

# systemctl restart openstack-nova-compute.service

2.设置网桥服务开机启动

# systemctl enable neutron-linuxbridge-agent.service && systemctl start neutron-linuxbridge-agent.service

3.5 安装Horizon服务

以下操作在控制节点执行

本节介绍如何在控制节点上安装和配置仪表板。

仪表板所需的唯一核心服务是身份服务。 您可以将仪表板与其他服务结合使用,例如镜像服务,计算和网络。 您还可以在具有独立服务(如对象存储)的环境中使用仪表板。

3.5.1 安装和配置组件

1.安装软件包

# yum install openstack-dashboard -y

2.编辑 /etc/openstack-dashboard/local_settings 文件并完成以下操作

# vim /etc/openstack-dashboard/local_settings

配置仪表板以在controller节点上使用OpenStack服务

OPENSTACK_HOST = "controller"

允许您的主机访问仪表板:

ALLOWED_HOSTS = ['*']
或者ALLOWED_HOSTS = [‘one.example.com’, ‘two.example.com’] 
ALLOWED_HOSTS也可以[‘*’]接受所有主机。这对开发工作可能有用,但可能不安全,不应用于生产。

配置memcache会话存储服务

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}
* 注释掉任何其他会话存储配置。 

开启身份认证API 版本v3

OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST

启用对域的支持

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

配置API版本

OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 2,
}

配置Default为您通过仪表板创建的用户的默认域

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

将用户配置为通过仪表板创建的用户的默认角色

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

配置时区(可选)

TIME_ZONE = "Asia/Shanghai"

4.如果未包括,则将以下行添加到openstack-dashboard.conf

# vim /etc/httpd/conf.d/openstack-dashboard.conf
WSGIApplicationGroup %{GLOBAL}

3.5.2 完成安装启动服务

完成安装,重启web服务和会话存储

# systemctl restart httpd.service memcached.service

3.5.3 登录web验证配置

在浏览器中输入http://192.168.234.129/dashboard.,访问openstack的dashboard界面,

  • domain:default
  • 用户名(管理员):     admin(管理员),demo(租户)
  • 密码:liuxin

3.6 安装Cinder服务

块存储服务(cinder)为访客实例提供块存储设备。 存储配置和使用的方法由块存储驱动程序确定,或者在多后端配置的情况下由驱动程序确定。 有多种可用的驱动程序:NAS / SAN,NFS,iSCSI,Ceph等。

块存储API和调度程序服务通常在控制节点上运行。 根据所使用的驱动程序,卷服务可以在控制节点,计算节点或独立存储节点上运行。

一旦能够在OpenStack环境中“启动实例”,请按照以下说明将Cinder添加到基本环境。

3.6.1 块存储服务概述

OpenStack块存储服务(Cinder)将持久性存储添加到虚拟机。块存储为管理卷提供基础架构,并与OpenStack Compute进行交互以提供实例卷。该服务还支持管理卷快照和卷类型。

块存储服务包含以下组件: 
cinder-api 

接受API请求,并将它们路由到cinder-volume操作。

cinder-volume 

       直接与Block Storage服务进行交互,以及诸如cinder-scheduler。它也通过消息队列与这些进程交互。该cinder-volume服务响应发送到块存储服务的读取和写入请求以保持状态。它可以通过驱动程序架构与各种存储提供商进行交互。

cinder-scheduler daemon守护进程

选择要在其上创建卷的最佳存储提供者节点。 与nova-scheduler类似的组件。

cinder-backup daemon守护进程 

该cinder-backup服务可将任何类型的卷备份到备份存储提供程序。与cinder-volume服务一样,它可以通过驱动程序体系结构与各种存储提供商进行交互。

Messaging queue消息队列

路由块存储过程之间的信息。

3.6.2 安装和配置cinder节点

以下操作在cinder节点执行

3.6.2.1 安装配置LVM

本节介绍如何为Block Storage服务安装和配置存储节点。 为简单起见,此配置引用具有空本地块存储设备的一个存储节点。 这些指令使用/ dev / sdb,但您可以将特定节点的值替换为不同的值。

该服务使用LVM驱动程序在该设备上配置逻辑卷,并通过iSCSI传输将其提供给实例。 您可以按照这些说明进行小的修改,以便使用其他存储节点水平扩展您的环境。

1.安装支持的软件包

安装LVM软件包

# yum install lvm2 device-mapper-persistent-data 

启动LVM元数据服务并将其配置为在系统引导时启动

# systemctl enable lvm2-lvmetad.service && systemctl start lvm2-lvmetad.service
说明:一些发行版默认包含LVM。

2.创建LVM物理逻辑卷/dev/sdb

# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

3.创建cinder-volumes逻辑卷组

# vgcreate cinder-volumes /dev/sdb
Volume group "cinder-volumes" successfully created

4 . 编辑/etc/lvm/lvm.conf文件

只有实例才能访问块存储卷。 但是,底层操作系统管理与卷关联的设备。 默认情况下,LVM卷扫描工具会扫描包含卷的块存储设备的/ dev目录。 如果项目在其卷上使用LVM,则扫描工具将检测这些卷并尝试缓存它们,这可能会导致底层操作系统和项目卷出现各种问题。 您必须重新配置LVM以仅扫描包含cinder-volumes卷组的设备。

在devices部分中,添加一个接受/ dev / sdb设备的过滤器并拒绝所有其他设备:

# vim /etc/lvm/lvm.conf
devices {
...
filter = [ "a/sdb/", "r/.*/"]

每个过滤器组中的元素都以``a``开头,即为 accept,或以 r 开头,即为**reject**,并且包括一个设备名称的正则表达式规则。过滤器组必须以``r/.*/``结束,过滤所有保留设备。您可以使用 :命令:`vgs -vvvv` 来测试过滤器。

如果您的存储节点在操作系统磁盘上使用LVM,则还必须将关联的设备添加到过滤器。 例如,如果/ dev / sda设备包含操作系统:

filter = [ "a/sda/", "a/sdb/", "r/.*/"]

同样,如果您的计算节点在操作系统磁盘上使用LVM,则还必须修改这些节点上/etc/lvm/lvm.conf文件中的过滤器,将操作系统磁盘包含到过滤器中。例如,如果/dev/sda 设备包含操作系统:

filter = [ "a/sda/", "r/.*/"]

3.6.2.2 安装和配置组件

1.安装软件包

# yum install openstack-cinder targetcli python-keystone -y

2.编辑/etc/cinder/cinder.conf文件并完成以下操作:

# vim /etc/cinder/cinder.conf

[database]

# 配置数据库访问
connection = mysql+pymysql://cinder:liuxin@controller/cinder

[DEFAULT]

# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置身份服务访问
auth_strategy = keystone
# 存储节点上管理网络接口的IP地址
my_ip = 192.168.234.131
# 启用LVM后端
后端名称是任意的。作为示例,本指南使用驱动程序的名称作为后端的名称
enabled_backends = lvm
# 配置Image Service API的位置
glance_api_servers = http://controller:9292

[keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder

[lvm] 不存在,则创建它

# 使用LVM驱动程序,cinder-volumes卷组,iSCSI协议和相应的iSCSI服务配置LVM后端。如果该[lvm]部分不存在,请创建它
volume_driver  =  cinder.volume.drivers.lvm.LVMVolumeDriver 
volume_group  =  cinder-volumes 
iscsi_protocol  =  iscsi 
iscsi_helper  =  lioadm

[oslo_concurrency]

# 配置锁定路径
lock_path = /var/lib/cinder/tmp

3.6.2.3 完成安装启动服务

设置存储服务开机启动

# systemctl enable openstack-cinder-volume.service target.service 
# systemctl start openstack-cinder-volume.service target.service

3.6.3 安装和配置controller节点

本节介绍如何在控制节点上安装和配置代码为cinder的块存储服务。 此服务至少需要一个为实例提供卷的额外存储节点。

以下操作在控制节点执行

3.6.3.1 创建cinder数据库

在安装和配置块存储服务之前,您必须创建数据库,服务凭据和API端点。

1.使用数据库访问客户端以root用户身份连接到数据库服务器:

$ mysql -u root -p

创建cinder数据库:

MariaDB [(none)]> CREATE DATABASE cinder;

授予对cinder数据库的适当访问权限

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

2.加载admin凭据

$ . admin-openrc

3.要创建服务凭据,请完成以下步骤

创建一个cinder用户:密码:cinder

# openstack user create --domain default --password-prompt cinder
User Password: cinder
Repeat User Password: cinder

添加admin角色到cinder用户:

$ openstack role add --project service --user cinder admin

创建cinderv2和cinderv3服务实体:

# openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
# openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
注意:块存储服务需要两个服务实体。

4.创建块存储服务API端点:

# openstack endpoint create --region RegionOne volumev2 public http://controller:8776/v2/%\(project_id\)s
# openstack endpoint create --region RegionOne volumev2 internal http://controller:8776/v2/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev2 admin http://controller:8776/v2/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s 
# openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s 

3.6.3.2 安装和配置组件

1.安装软件包:

# yum install openstack-cinder

2.编辑/etc/cinder/cinder.conf文件并完成以下操作

# vim /etc/cinder/cinder.conf

[database]

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

[DEFAULT]

# 配置RabbitMQ 消息队列访问
transport_url = rabbit://openstack:liuxin@controller
# 配置身份服务访问
auth_strategy = keystone
# 该my_ip选项配置为使用控制节点的管理接口IP地址
my_ip = 192.168.234.129

[keystone_authtoken]

auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_id = default
user_domain_id = default
project_name = service
username = cinder
password = cinder

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

4.同步块存储数据库

# su -s /bin/sh -c "cinder-manage db sync" cinder
Option "logdir" from group "DEFAULT" is deprecated. Use option "log-dir" from group "DEFAULT".
忽略此输出中的任何弃用消息。

3.6.3.3 配置计算服务使用块存储

# vim /etc/nova/nova.conf

[cinder]

os_region_name = RegionOne

3.6.3.4 完成安装启动服务

重新启动Compute API服务

# systemctl restart openstack-nova-api.service

启动块存储服务并将其配置为在系统引导时启动

# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

3.6.4 验证cinder配置

验证Cinder操作,在控制器节点上执行这些命令。

1.输入管理员凭据以访问仅限管理员的CLI命令

$ . admin-openrc

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

# openstack volume service list

 

4 创建虚拟机实例

创建过程: 

1) 创建虚拟网络

2) 创建m1.nano规格的主机(相等于定义虚拟机的硬件配置)

3) 生成一个密钥对(openstack的原理是不使用密码连接,而是使用密钥对进行连接)

4) 增加安全组规则(用iptables做的安全组)

5) 启动一个实例(启动虚拟机有三种类型:1.命令CLI 2.api 3.Dashboard)实际上Dashboard也是通过api进行操作

6) 虚拟网络分为提供者网络和私有网络,提供者网络就是跟主机在同一个网络里,私有网络自定义路由器等,跟主机不在一个网络

4.1 创建外部网络

控制节点执行

为配置Neutron时选择的网络选项创建虚拟网络。 如果您选择选项1,则只创建提供商网络。 如果您选择了选项2,请创建提供商和自助服务网络。

Provider network 
Self-service network

在为您的环境创建适当的网络后,您可以继续准备环境以启动实例。

提供者网络-provider网络

在启动实例之前,您必须创建必要的虚拟网络基础结构,管理员或其他特权用户必须创建此网络,因为它直接连接到物理网络基础结构。

4.1.1 创建provider外部网络

在控制节点上,获取admin用户凭证以访问仅管理员的CLI命令

$ . admin-openrc

创建虚拟网络(网络名为provider)

$ openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider

参数说明: 
- -share选项允许所有项目使用虚拟网络。 
- -external选项将虚拟网络定义为外部。 如果你想创建一个内部网络,你可以使用–internal代替。 默认值是内部的。

--provider-physical-network提供者和--provider-network-type平面选项使用来自以下文件的信息将扁平虚拟网络连接到主机上eth33接口上的扁平(本地/非标记)物理网络:

/etc/neutron/plugins/ml2/ml2_conf.ini :
[ml2_type_flat]
flat_networks = provider
 
/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge]
physical_interface_mappings = provider:ens33

使用命令查看创建的网络:

# openstack network list

以admin用户登录dashboard查看创建的网络

查看网络拓扑图

4.1.2 网络中创建子网

在外部网络上创建一个子网

# openstack subnet create --network provider \
  --allocation-pool start=192.168.241.80,end=192.168.241.90 \
  --dns-nameserver 114.114.114.114 --gateway 192.168.241.2 \
  --subnet-range 192.168.241.0/24 provider

参数说明 

用CIDR表示法将PROVIDER_NETWORK_CIDR替换为提供商物理网络上的子网。

将START_IP_ADDRESS和END_IP_ADDRESS替换为要为实例分配的子网内范围的第一个和最后一个IP地址。 该范围不得包含任何现有的活动IP地址。

将DNS_RESOLVER替换为DNS解析器的IP地址。 在大多数情况下,您可以使用主机上/etc/resolv.conf文件中的一个。

将PROVIDER_NETWORK_GATEWAY替换为提供商网络上的网关IP地址,通常为“.1”IP地址。

--network,指定创建的子网名称 

--subnet-range 后边的provider为要创建子网的网络

(要跟上面创建网络的名称对应起来) 
查看创建的子网

# openstack subnet list

以admin用户登录dashboard查看创建的子网

查看网络拓扑图变化

4.1.3 查看节点网卡变化

OpenStack中创建的实例想要访问外网必须要创建外部网络(即provider network),然后通过虚拟路由器连接外部网络和租户网络,Neutron网桥的方式实现外网的访问,当Neutron创建外部网络并创建子网后会创建一个新的网桥,并且将ens38这块外部网卡加入网桥,执行ifconfig可以看到多了一个brq6e8e2254-8a的网桥:

查看该网桥信息,其中,该网桥的 tap52369e85-ad接口分别连接了ens33物理网卡和dhcp节点

4.2 创建租户网络

如果选择联网选项2,则还可以创建通过NAT连接到物理网络基础结构的自助服务(专用)网络。该网络包括一个为实例提供IP地址的DHCP服务器。此网络上的实例可以自动访问外部网络,如Internet。但是,从外部网络(例如Internet)访问此网络上的实例需要浮动IP地址

这个demo或其他非特权用户可以创建这个网络,因为它仅提供与demo项目内实例的连接。 
Warning

您必须在自助服务网络之前创建提供商网络。

4.2.1 创建self-service网络

1.在控制节点上,获取凭据demo-openrc

$ . demo-openrc

2.创建网络

# openstack network create selfservice1

非特权用户通常不能为该命令提供额外的参数。该服务使用来自以下文件的信息自动选择参数

# cat /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
tenant_network_types = vxlan
[ml2_type_vxlan]
vni_ranges = 1:1000

创建的内部网络类型是由tenant_network_types中指定,为vxlan。该配置能指定内部网络类型,如flat,vlan,gre等。

查看创建的网络

# openstack network list

 

在dashboard上查看创建的网络

 

4.2.2 网络中创建子网

在网络上创建子网

$ openstack subnet create --network selfservice1 \
  --dns-nameserver 114.114.114.114 --gateway 172.16.1.1 \
  --subnet-range 172.16.1.0/24 selfservice1-net1

查看创建的子网

# openstack subnet list

在dashboard上查看创建的网络

切换到demo用户登录dashboard查看网络拓扑图

查看计算节点网卡变化

4.2.3 创建路由器

自助服务网络使用通常执行双向NAT的虚拟路由器连接到提供商网络。每个路由器至少包含一个自助服务网络上的接口和提供商网络上的网关。

提供商网络必须包含router:external选项以使自助服务路由器能够使用它来连接到外部网络,例如互联网。这个admin或其他特权用户必须在网络创建期间包含此选项或稍后添加它。在这种情况下,该 router:external选项–external在创建provider网络时通过使用该参数进行设置。

1.在控制节点上,demo获取凭据以访问仅限用户的CLI命令

$ . demo-openrc

2.创建路由器

# openstack router create router

查看创建的路由器

# openstack router list

登录dashboard查看创建的路由器

4.2.4 租户网络添加到路由器

将自助服务网络子网添加为路由器上的接口

# neutron router-interface-add router selfservice1-net1

4.2.5 路由器连接到外部网络

在路由器上的提供商网络上设置网关

# neutron router-gateway-set router provider

切换demo用户登录dashboard查看网络拓扑图变化

4.2.6 验证操作

我们建议您在继续之前验证操作并解决所有问题。 以下步骤使用网络和子网创建示例中的IP地址范围。

1.在控制器节点上,输入管理员凭据以访问仅限管理员的CLI命令

$ . admin-openrc

2.列出网络名称空间。你应该看到一个qrouter命名空间和两个 qdhcp命名空间

# ip netns

3.列出路由器上的端口以确定提供商网络上的网关IP(192.168.241.82)地址

# neutron router-port-list router    --路由名称

4.从控制节点或物理提供商网络上的任何主机ping此IP地址

4.3 创建实例类型

最小的默认flavor消耗每个实例512 MB的内存。 对于包含少于4 GB内存的计算节点的环境,我们建议创建每个实例仅需要64 MB的m1.nano特征。 为了测试目的,请仅将CirrOS图像用于此flavor。

# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
这里创建两种规格的实例类型
# openstack flavor create --id 1 --vcpus 1 --ram 1024 --disk 10 m2.nano

参数说明: 

openstack flavor create 创建主机 - -id 主机ID - -vcpus cpu数量 - -ram 64(默认是MB,可以写成G) - -disk 磁盘(默认单位是G)

查看创建的实例类型

# openstack flavor list

切换到admin用户查看创建的实例类型

4.4 生成秘钥对

大多数云镜像支持公钥认证,而不是传统的密码认证。 在启动实例之前,您必须将公钥添加到Compute服务。

1.加载demo项目凭证

$ . demo-openrc

2.生成密钥对并添加公钥

生成密钥文件(一个公钥文件和一个私钥文件),保存在/root/.ssh/id

# ssh-keygen -q -N ""
Enter file in which to save the key (/root/.ssh/id_rsa):    #Enter默认
# ll /root/.ssh/
-rw------- 1 root root 1675 6月  18 18:20 id_rsa    #生成的私钥文件
-rw-r--r-- 1 root root  397 6月  18 18:20 id_rsa.pub        #生成的公钥文件

创建秘钥对,并将生成的公钥文件添加到秘钥对

# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

3.验证密钥对是否添加成功

# openstack keypair list
登录dashboard查看创建的秘钥对

4.5 添加安全组规则

默认情况下,默认安全组适用于所有实例,并包含拒绝对实例进行远程访问的防火墙规则。 对于像CirrOS这样的Linux映像,我们建议至少允许ICMP(ping)和安全shell(SSH)。 

向default安全组添加规则:

1.允许ICMP(ping)

# openstack security group rule create --proto icmp default

2.允许安全shell(SSH)访问

#  openstack security group rule create --proto tcp --dst-port 22 default

查看安全组及创建的安全组规则

# openstack security group list

切换到demo用户登录dashboard查看创建的安全组规则

4.6 确认实例选项

要启动实例,必须至少指定flavor、镜像名称、网络、安全组、密钥和实例名称。 

1.在控制器节点上,获取演示凭据以访问仅限用户的CLI命令

$ . demo-openrc

2.flavor指定了包括处理器,内存和存储的虚拟资源分配概要文件。

列出可用的flavor:

# openstack flavor list

3.列出镜像

# openstack image list

本实例使用cirros镜像

4.列出可用的网络

# openstack network list

这个实例使用provider提供者网络。但是,您必须使用ID而不是名称来引用此网络。

如果你选择了选项2,则输出还应包含 selfservice自助服务网络。 

5.列出可用的安全组

# openstack security group list

此实例使用default安全组。

6.列出可用的秘钥

# openstack keypair list

4.7 创建实例

租户网络selfservice1上创建实例

$ . demo-openrc
$ openstack server create --flavor m1.nano --image “cirros”--nic net-id=eb85d1ec-0903-4ce8-a907-855482bafa94 --security-group default --key-name mykey selfservice1-cirros1

参数说明:

openstack server create 创建实例 
–flavor 主机类型名称 
–image 镜像名称 
–nic net-id=网络ID 
–security-group 安全组名称 
–key-name key名称 
最后一个是自定义实例名称 

检查实例状态

# openstack server list

目前实例地址无法ping通

4.8 虚拟控制台访问实例

加载demo-openrc环境

$ . demo-openrc

为您的实例获取虚拟网络计算(VNC)会话URL并从Web浏览器访问它

# openstack console url show selfservice1-cirros1
如果您的Web浏览器在无法解析控制器主机名的主机上运行,则可以使用控制节点上的管理接口的IP地址替换控制器。

测试实例对外网的访问

   ping 172.16.1.1    租户网络网关
   ping 192.168.92.2  本地外部网络网关
   ping www.baidu.com 外部互联网

测试全部能够正常ping通

CirrOS映像包含传统的用户名/密码认证,并在登录提示符处提供这些凭据。 登录到CirrOS后,我们建议您使用ping验证网络连接。默认用户名cirros默认密码gocubsgo

4.9 为实例分配浮动IP地址

如果想通过外网远程连接到实例,需要在外部网络上创建浮动IP地址,并将浮动ip地址关联到实例上,然后通过访问外部的浮动ip地址来访问实例

1.在外部网络上生成浮动ip地址

[root@controller ~]# openstack floating ip create provider

+---------------------+--------------------------------------+

| Field               | Value                                |

+---------------------+--------------------------------------+

| created_at          | 2018-06-14T07:27:59Z                 |

| description         |                                      |

| fixed_ip_address    | None                                 |

| floating_ip_address | 192.168.92.86                        |

| floating_network_id | 891787bb-ce4a-4b41-b222-1493ec30035c |

| id                  | 0aa48060-ed79-4f60-baa7-0cba7be74ac2 |

| name                | 192.168.92.86                        |

| port_id             | None                                 |

2.将浮动IP地址与实例关联

$ openstack server add floating ip selfservice1-cirros1 192.168.92.86

3.检查浮动IP地址的关联状态

[root@controller ~]# openstack server list

依次生成多个浮动ip对其他实例进行相同操作 

3.在控制节点或者外部网络上通过floating IP验证对实例的访问是否正常:

通过来自控制器节点或供应商物理网络上的任何主机的浮动IP地址验证与实例的连接性:

控制节点测试:

[root@controller ~]# ping 192.168.92.86
PING 192.168.92.86 (192.168.92.86) 56(84) bytes of data.
64 bytes from 192.168.92.86: icmp_seq=1 ttl=63 time=1.59 ms
64 bytes from 192.168.92.86: icmp_seq=2 ttl=63 time=0.856 ms

本地主机测试:

C:\Users\zwpos>ping 192.168.92.86
正在 Ping 192.168.92.86 具有 32 字节的数据:
来自 192.168.92.86 的回复: 字节=32 时间=1ms TTL=63
来自 192.168.92.86 的回复: 字节=32 时间=1ms TTL=63

4.10 远程SSH访问实例

通过控制节点或者远程主机登录实例

默认用户名cirros默认密码gocubsgo

[root@controller ~]# ssh cirros@192.168.92.86

The authenticity of host '192.168.92.86 (192.168.92.86)' can't be established.

ECDSA key fingerprint is SHA256:GiuwydTpzXUrQ0K7DYTv7+sJXA5afNJpCnU+t/xsgvE.

ECDSA key fingerprint is MD5:20:a9:81:33:16:0b:34:8e:2f:b6:42:8f:d2:3b:72:7c.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.92.86' (ECDSA) to the list of known hosts.

$

4.11 网卡变化

创建好内部网络和实例之后,vxlan隧道就建立起来。系统会在控制节点创建一个vxlan 的VTEP,在计算节点创建一个vxlan的VTEP。

如下图,第一张为控制节点,创建vxlan21;第二张为计算节点创建也为vxlan21。这两个VTEP设备组成了vxlan隧道的两个端点。

[root@controller ~]#  brctl show

bridge name     bridge id               STP enabled     interfaces

brqa248893f-02  8000.02516746fd7d       no             tapcae7f217-1e

                                                        vxlan-21

[root@compute1 ~]# brctl show

bridge name     bridge id               STP enabled     interfaces

brqa248893f-02  8000.a6aaa0e77f45       no              tap8cb57c9e-a7

                                                        vxlan-21

通过查看计算节点上vxlan21的详细信息可以看到其连接ens37网卡。

[root@compute1 ~]# ip -d link show dev vxlan-21 

10: vxlan-21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue master brqa248893f-02 state UNKNOWN mode DEFAULT group default qlen 1000

    link/ether a6:aa:a0:e7:7f:45 brd ff:ff:ff:ff:ff:ff promiscuity 1

vxlan id 21 dev ens37 srcport 0 0 dstport 8472 ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx

4.12 块存储

4.12.1 创建一个卷

$ . demo-openrc

创建1GB大小的卷:

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

+---------------------+--------------------------------------+

| Field               | Value                                |

+---------------------+--------------------------------------+

| attachments         | []                                   |

| availability_zone   | nova                                 |

| bootable            | false                                |

| consistencygroup_id | None                                 |

| created_at          | 2018-05-15T01:53:57.000000           |

| description         | None                                 |

| encrypted           | False                                |

| id                  | e3d30f58-6c0a-4f13-8433-c274e014fc3f |

| multiattach         | False                                |

| name                | volume1                              |

| properties          |                                      |

| replication_status  | None                                 |

| size                | 1                                    |

| snapshot_id         | None                                 |

| source_volid        | None                                 |

| status              | creating                             |

| type                | None                                 |

| updated_at          | None                                 |

| user_id             | 19ba7d00b87c4132b4fc0c6ee8555fef     |

+---------------------+--------------------------------------+

在短时间内,卷状态应该从创建变为可用:

$ openstack volume list

[root@controller ~]# openstack volume list

+--------------------------------------+---------+-----------+------+-------------+

| ID                                   | Name    | Status    | Size | Attached to |

+--------------------------------------+---------+-----------+------+-------------+

| e3d30f58-6c0a-4f13-8433-c274e014fc3f | volume1 | available |    1 |             |

+--------------------------------------+---------+-----------+------+-------------+

4.12.2 将卷添加到实例

$ openstack server add volume INSTANCE_NAME VOLUME_NAME 

Replace INSTANCE_NAME with the name of the instance and VOLUME_NAME with the name of the volume you want to attach to it.

 

Example

Attach the volume1 volume to the provider-instance instance:

$ openstack server add volume provider-instance volume1

Note

This command provides no output.

List volumes:

 

$ openstack volume list
[root@controller ~]# openstack server add volume provider-vm3 volume1     
[root@controller ~]# openstack volume list

+--------------------------------------+------+-----------+------+---------------------------------------------------------------+

| ID                                   | Name | Status    | Size | Attached to                                                   |

+--------------------------------------+------+-----------+------+---------------------------------------------------------------+

| 5e3c9ff9-dd13-402e-9377-065df66c3960 |      | in-use    |   10 | Attached to cde97911-dc1c-4265-8f14-2bc20ae77973 on /dev/vda  |

| b59a916f-7663-4bee-825f-1c6c240ac49b |      | available |   10 |                                                               |

+--------------------------------------+------+-----------+------+---------------------------------------------------------------+

Access your instance using SSH and use the fdisk command to verify presence of the volume as the /dev/vdb block storage device:

$ sudo fdisk -l

[root@provider-vm3 ~]# fdisk -l

 

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x000b2f10

 

   Device Boot      Start         End      Blocks   Id  System

/dev/vda1   *        2048    20971486    10484719+  83  Linux

 

Disk /dev/vdb: 1073 MB, 1073741824 bytes, 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

 

[root@provider-vm3 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        10G  1.1G  9.0G  11% /

devtmpfs        476M     0  476M   0% /dev

tmpfs           497M     0  497M   0% /dev/shm

tmpfs           497M   13M  484M   3% /run

tmpfs           497M     0  497M   0% /sys/fs/cgroup

tmpfs           100M     0  100M   0% /run/user/0

 

[root@provider-vm3 ~]# lsblk

NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

vda    253:0    0  10G  0 disk

└─vda1 253:1    0  10G  0 part /

vdb    253:16   0   1G  0 disk

You must create a file system on the device and mount it to use the volume

[root@provider-vm3 ~]# parted /dev/vdb

(parted) mkpart primary 0 -1

(parted) toggle 1 lvm 

 

[root@provider-vm3 ~]# mkfs.xfs /dev/vdb1

meta-data=/dev/vdb1              isize=512    agcount=4, agsize=65474 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0, sparse=0

data     =                       bsize=4096   blocks=261895, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal log           bsize=4096   blocks=855, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

 

[root@provider-vm3 ~]# fdisk -l

 

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x000b2f10

 

   Device Boot      Start         End      Blocks   Id  System

/dev/vda1   *        2048    20971486    10484719+  83  Linux

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

 

Disk /dev/vdb: 1073 MB, 1073741824 bytes, 2097152 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: gpt

Disk identifier: 8D328EE8-2A24-4F42-954A-3B817470C5AC

 

 

#         Start          End    Size  Type            Name

 1           34      2095199   1023M  Linux LVM       primary

[root@provider-vm3 ~]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

vda    253:0    0   10G  0 disk

└─vda1 253:1    0   10G  0 part /

vdb    253:16   0    1G  0 disk

└─vdb1 253:17   0 1023M  0 part 
[root@provider-vm3 ~]# mount /dev/vdb1 /data/
[root@provider-vm3 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        10G  1.1G  9.0G  11% /

devtmpfs        476M     0  476M   0% /dev

tmpfs           497M     0  497M   0% /dev/shm

tmpfs           497M   13M  484M   3% /run

tmpfs           497M     0  497M   0% /sys/fs/cgroup

tmpfs           100M     0  100M   0% /run/user/0

/dev/vdb1      1020M   33M  988M   4% /data

 

For more information about how to manage volumes, see the python-openstackclient documentation for Pike or the python-openstackclient documentation for Queens.

Return to Launch an instance.

5 使用官方云镜像创建实例

在openstack中,glance负责image,即镜像相关的服务,镜像是一个已经打包好的文件,内置有操作系统和预先部署好的软件。基于image创建虚拟机,在openstack中是以backing file的形式创建的,即新建的虚拟机和镜像文件之间建立一个连接。

OpenStack 的 instance(实例,就是虚拟机/云主机) 是通过 Glance 镜像部署的,下载clould 镜像使用标准镜像。主流的Linux发行版都提供可以在 OpenStack 中直接使用的cloud镜像。

5.1 下载官方通用云镜像

1、执行环境变量

# . admin-openrc

2、centos官网下载qcow2格式的openstack镜像

# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1802.qcow2c

官方链接:http://cloud.centos.org/centos/7/images 

5.2 上传镜像到Glance 

# openstack image create “CentOS7-image” \
--file CentOS-7-x86_64-GenericCloud-1802.qcow2c \
--disk-format qcow2 --container-format bare \ 
--public

查看上传的镜像

# openstack image list

5.3 创建实例

# openstack server create --flavor m2.nano /
--image “CentOS7-image” /
--nic net-id=eb85d1ec-0903-4ce8-a907-855482bafa94 /
--security-group default /
--key-name mykey selfservice1-centos7

5.5 为实例分配浮动IP地址

1.在外部网络上生成浮动ip地址:

# openstack floating ip create provider

2.将浮动IP地址与实例关联

$ openstack server add floating ip selfservice1-centos7 192.168.241.83

3.检查浮动IP地址的关联状态

# openstack server list

3.在控制节点或者外部网络上通过floating IP验证对实例的访问是否正常: 

通过来自控制器节点或供应商物理网络上的任何主机的浮动IP地址验证与实例的连接性: 

控制节点测试:

本地主机测试:

 

5.6 远程SSH访问实例

通过控制节点登录实例:

[root@controller ~]# ssh centos@192.168.241.83

修改实例root密码并开启SSH远程密码登录

# ssh centos@192.168.92.88

使用root账号及设置的密码访问实例:

6 查看当前网卡状态

6.1 控制节点

# nmcli connection show

[root@controller ~]# ifconfig

[root@controller ~]# ifconfig

brq6e8e2254-8a: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.241.129  netmask 255.255.255.0  broadcast 192.168.241.255

        inet6 fe80::249e:f5ff:feda:7b09  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:8e:eb:b1  txqueuelen 1000  (Ethernet)

        RX packets 102448  bytes 399354548 (380.8 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 79094  bytes 12632995 (12.0 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

brqeb85d1ec-09: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450

        inet6 fe80::789a:f0ff:fe86:4f46  prefixlen 64  scopeid 0x20<link>

        ether 1a:ee:83:25:99:b5  txqueuelen 1000  (Ethernet)

        RX packets 25  bytes 2526 (2.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 8  bytes 656 (656.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet6 fe80::b3a8:9179:b957:cebf  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:8e:eb:b1  txqueuelen 1000  (Ethernet)

        RX packets 304051  bytes 411709400 (392.6 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 83751  bytes 14916095 (14.2 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.72.129  netmask 255.255.255.0  broadcast 192.168.72.255

        inet6 fe80::8d58:10ca:75b4:9369  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:8e:eb:bb  txqueuelen 1000  (Ethernet)

        RX packets 1022  bytes 147128 (143.6 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 962  bytes 136713 (133.5 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

ens35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.234.129  netmask 255.255.255.0  broadcast 192.168.234.255

        inet6 fe80::5ca6:da49:a63e:2537  prefixlen 64  scopeid 0x20<link>

        ether 00:0c:29:8e:eb:c5  txqueuelen 1000  (Ethernet)

        RX packets 35884  bytes 13158229 (12.5 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 303231  bytes 704484745 (671.8 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 127.0.0.1  netmask 255.0.0.0

        inet6 ::1  prefixlen 128  scopeid 0x10<host>

        loop  txqueuelen 1000  (Local Loopback)

        RX packets 362520  bytes 546291655 (520.9 MiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 362520  bytes 546291655 (520.9 MiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tap52369e85-ad: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether e6:2a:53:2d:fa:6a  txqueuelen 1000  (Ethernet)

        RX packets 5  bytes 446 (446.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 2618  bytes 188657 (184.2 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tapb8ded7fb-ab: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450

        ether 4e:d6:fe:95:d0:2e  txqueuelen 1000  (Ethernet)

        RX packets 10  bytes 2022 (1.9 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 33  bytes 3784 (3.6 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tapc652a409-0b: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450

        ether 1a:ee:83:25:99:b5  txqueuelen 1000  (Ethernet)

        RX packets 877  bytes 86363 (84.3 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 822  bytes 88119 (86.0 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

tape8bc2892-b8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        ether 2e:df:59:f3:2f:b9  txqueuelen 1000  (Ethernet)

        RX packets 558  bytes 60762 (59.3 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 3270  bytes 249818 (243.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

vxlan-90: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450

        ether de:9f:f2:25:3e:94  txqueuelen 1000  (Ethernet)

        RX packets 821  bytes 76827 (75.0 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 874  bytes 75143 (73.3 KiB)

        TX errors 0  dropped 4 overruns 0  carrier 0  collisions 0

6.2 计算节点

[root@compute1 ~]# nmcli connection show 
 [root@compute1 ~]# ifconfig

6.3 存储节点

[root@cinder1 ~]# nmcli connection show 
[root@cinder1 ~]# ifconfig

附录:

出现错误

An unexpected error prevented the server from fulfilling your request. (HTTP 500) 

penstack环境搭建程度(安装完keystone

然后运行 openstack domain create --description "An Example Domain" example

出现报错 An unexpected error prevented the server from fulfilling your request. (HTTP 500) (Request-ID: req-5e6811f3-0671-4615-88aa-00f35b1e9258)

解决方法一: vim /etc/keystone/keystone.conf

connection = mysql://keystone:redhat@controller/keystone

去掉原先的 connection = mysql+pymysql://keystone:redhat@localhost/keystone 

然后按照官方指导从下面的命令开始重新操作一遍

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

 

解决方法 数据库中授权 grant all privileges on keystone.* to 'keystone'@'controller' identified by 'redhat';

然后按照官方指导从下面的命令开始重新操作一遍

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

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. spring beans源码解读之 ioc容器之始祖--DefaultListableBeanFactory

    https://www.cnblogs.com/davidwang456/p/4187012.html...

    2024/4/27 19:05:58
  2. java操作符(1)

    一、使用java操作符操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不同,但效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。操作符作用于操作数,生成一个新值。几乎所有…...

    2024/4/27 16:05:02
  3. 人性最大的善良是——换位思考

    杨绛先生曾写过一句话:当你身居高位时,看到的都是浮华春梦;当你身处卑微,才有机缘看到世态真相。 人间百态,各有所难,每个人只看到自己眼中的世界,看不到全貌。 生而为人,最可怕的就是:你生活在光亮里,就以为整个世界都是光亮的。 01 做人的最高境界,是感同身受 凌晨…...

    2024/4/27 13:48:45
  4. Python图像处理-7.pil ginput 交互式标注,标注点过的点坐标

    from PIL import Image from pylab import *im = array(Image.open(pic1.png)) imshow(im) print(Please click 3 point) x = ginput(3) print(you clicked:,x) show()...

    2024/4/27 17:25:00
  5. vSAN6.2 VM交换文件

    点击关注公众号:VirtualMan 查看更多解决方案! 那些在此阶段对vSAN有了很好理解的人会知道,部署在vSAN数据存储上的虚拟机是作为一组对象而不是像将VM部署在传统数据存储上一样作为一组文件部署的。这些对象包括VM Home命名空间,VMDK和VM Swap。VM Swap很有意思,因为它仅在…...

    2024/4/27 15:25:08
  6. 2019-07-02:AI量化投资之技术指标(ad)

    一、原理量在价先的原理,我们认为成交量在价格之前行动。我们从一根K线的最高价和收盘价以及最低价来衡量多空的对比。最高价与收盘价之差代表空方,收盘价与最低价之差代表多方。多方和空方的价格之差就代表了多空力量消长,我们再乘以成交量所得的数值就代表多空某一方力量的…...

    2024/4/26 18:20:48
  7. Mac安装lightGBM错误 image not found

    错误安装 pip install lightgbm 使用时直接调用: import lightgbm as lgb 然后在notebook中使用时会报错: 那么请先执行:这一步会卸载原来错误安装的库 pip uninstall lightgbm 安装cmake依赖 在命令行,依次执行以下命令,如果出现Error: invalid option: --without-multil…...

    2024/4/27 14:03:48
  8. node.js 脚手架使用 cors 插件快速实现 跨域请求

    我在学习uniapp的时候 学到了 请求这块 就想着 自己用node.js搭建一个本地的服务器 用来请求 意料之内碰见了 跨域问题 cors 同源策略 限制 安装 cors插件让你三分钟解决跨域问题1.安装 cors npm install cors2.配置//配置ajax跨域请求 app.use(cors({origin:"*&q…...

    2024/4/17 22:01:15
  9. 微人事第四天:@ControllerAdvice的两种种用法

    1.处理全局异常 根据文件上传的代码(在我博客的前一章),现在在配置文件中修改文件上传的大小 spring.servlet.multipart.max-file-size=1KB访问http://localhost:8080/index3.html 上传一张图片显示:可以得知上传的文件大小超过了1KB,但是现在的提示很不友好。我们现在要来…...

    2024/4/10 19:25:01
  10. [ pytorch ] —— 基本原理

    自动求导与权重更新import torch from torch.autograd import Variabledef func(input, theta):# functiony = theta * inputreturn y.mean(), theta #------------------# # Hyperparameter # #------------------# learning_rate = 0.1################ # Input Data # …...

    2024/4/25 20:34:27
  11. iOS开发笔记--CocoaPod引入库报错library not found for -lXXXXXXXX

    最近遇见一个通过CocoaPod引入xxxxx.a报错 library not found for -lxxxxx 的问题。 各种情况都排除以后发现是一个巨坑 xxxxx.a 的命名有问题导致Xcode找不到,xxxx.a的命名需要改为lib开头如:libxxxx.a...

    2024/4/26 8:16:15
  12. 大小写转换+全角转半角+清除空格+仅数字+仅字母+仅字母和数字 方法汇总

    大小写转换 1、转小写方法 var value = ABC value.toLowerCase() console.log(value) // abc2、转大写方法 var value = abc value.toUpperCase() console.log(value) // ABC全角转半角 fullToHalf(val) {let retVal = for (let i = 0; i < val.length; i++) {if (v…...

    2024/4/23 3:59:59
  13. Maven Archetype使用——自定义项目模板

    ​ Maven Archetype可以理解成Maven项目的模板,相信各位或多或少都是用过。我们刚开始学习maven创建项目时,经常会使用常规的Maven项目模板,例如maven-archetype-quickstart、maven-archetype-webapp;你只需要提供基本的元素(如groupId,artifactId与version等),项目模…...

    2024/3/29 12:36:57
  14. Quartz任务调度Job有无状态

    有状态的job和无状态的job @PersistJobDataAfterExecution注解的使用 有状态的job可以理解为多次Job调用期间可以持有一些状态信息,这些状态信息存储在JobDataMap中,而默认的无状态job每次调用时都会创建一个新的jobDataMap 添加count的setter和getter方法 public Integer getC…...

    2024/4/17 0:10:39
  15. JAVA强引用介绍

    引用架构图强引用(默认支持模式) 当内存不足,JVM开始垃圾回收,对应强引用的对象,就算是出现了OOM也不会对该对象进行回收。 强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象,在JAVA中最常见的就是强引…...

    2024/4/4 9:39:29
  16. Model&Form&ModelForm拾遗

    Model&Form&ModelForm拾遗 一、Model&Form&ModelFormModel:用于用户请求数据的验证(针对性弱),但有强大的数据库操作 Form:强大的数据验证(用于用户请求数据) ModelForm:强大的数据验证,适中的数据库操作。用于数据库操作(只针对部分操作);用于用户请…...

    2024/4/25 16:30:29
  17. oracle_index的建立、修改、删除 侵删

    索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查。建立索引是一项技术性要求高的工作。一般在数据库设计阶段的与数据库结构一道考虑。应用系统的性能直接与索引的合理直接有关。下面给出建立索引的方法和要点。 3.5.1 建立索引 1.…...

    2024/4/16 9:32:40
  18. .7编程基础之字符串--12:加密的病历单

    12:加密的病历单 原地址 总时间限制: 1000ms 内存限制: 65536kB 描述 小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。 在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时…...

    2024/3/29 12:36:52
  19. mui发送图片实现方法

    1.单张图片上传: <!doctype html> <html><head><meta charset="utf-8"><title></title><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalabl…...

    2024/4/24 18:24:59
  20. MySQL多表查询几种不同示例

    多表查询的概述: 同时查询多张表获取到需要的数据 例如:我们想查询到开发部有多少人,需要将部门表和员工表同时进行查询 多表查询的分类:内连接查询显示内连接隐式内连接外连接查询左外连接右外连接子查询子查询的结果是一个值的子查询的结果是单列多行的子查询的结果是多列多…...

    2024/4/25 21:31:48

最新文章

  1. 知识分享之cookie

    http协议中的cookie&#xff0c;什么是cookie如何获取cookie 一、什么是Cookie Cookie&#xff08;曲奇&#xff0c;小甜饼的译名&#xff09;在互联网技术领域中&#xff0c;是指一种小型文本文件&#xff0c;它由网站服务器发送给用户的浏览器&#xff0c;并被浏览器存储在用…...

    2024/4/27 21:06:51
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. ROS2高效学习第十章 -- ros2 高级组件之大型项目中的 launch 其二

    ros2 高级组件之大型项目中的 launch 1 前言和资料2 正文2.1 启动 turtlesim&#xff0c;生成一个 turtle &#xff0c;设置背景色2.2 使用 event handler 重写上节的样例2.3 turtle_tf_mimic_rviz_launch 样例 3 总结 1 前言和资料 早在ROS2高效学习第四章 – ros2 topic 编程…...

    2024/4/26 22:12:26
  4. java的gradle,maven工程中使用selenium

    一、下载selenium库 &#xff08;1&#xff09;gradle工程 工程中会有一个build.gradle.kts的文件&#xff0c;这个文件可以定制 Gradle 的行为 在文件中添加下面代码&#xff0c;然后sync // implementation ("org.seleniumhq.selenium:selenium-java:4.19.1") …...

    2024/4/24 9:20:47
  5. 【外汇早评】美通胀数据走低,美元调整

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

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

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

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

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

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

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

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

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

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

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

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

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

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

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

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

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

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

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

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

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

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

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

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

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

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

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

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

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

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

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

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

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

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

    2022/11/19 21:17:18
  26. 错误使用 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,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
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2022/11/19 21:16:58
  44. 如何在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