Openstack的帮助文档:https://docs.openstack.org/stein/

一个购买私有云的网站:https://console.qingcloud.com/

一、云计算 基本概念

云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。云是网络、互联网的一种 比喻说法。过去在图中往往用云来表示电信网,后来也用来表示互联网和底层基础设施的抽象。因此,云计算甚至可以让你体验每秒10万亿次的运算能力,拥有这 么强大的计算能力可以模拟核爆炸、预测气候变化和市场发展趋势。用户通过电脑、笔记本、手机等方式接入数据中心,按自己的需求进行运算。

二、云计算分类

简单来说,就是把应用程序和数据都放在由大量服务器组成的云中,用户需要什么只要购买相应服务并使用即可。

云计算分为私有云、公有云、混合云。

云计算的服务分类:基础设施即服务、平台即服务、软件即服务。

  1. 超大规模。“云”具有相当的规模,Google云计算已经拥有100多万台服务器,亚马逊、IBM、微软和Yahoo等公司的“云”均拥有几十万台服务器。“云”能赋予用户前所未有的计算能力。
  2. 虚拟化。云计算支持用户在任意位置使用各种终端获取服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解应用运行的具体位置,只需要一台笔记本或一个PDA,就可以通过网络服务来获取各种能力超强的服务。
  3. 高可靠性。“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机更加可靠。
  4. 通用性。云计算不针对特定的应用,在“云”的支撑下可以构造出于变万化的应用,同一片“云”可以同时支撑不同的应用运行。
  5. 高可伸缩性。“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
  6. 按需服务。“云”是一个庞大的资源池,用户按需购买,像自来水、电和煤气那样计费。
  7. 极其廉价。“云”的特殊容错措施使得可以采用极其廉价的节点来构成云;“云”的自动化管理使数据中心管理成本大幅降低;“云”的公用性和通用性使资源的利用率大幅提升;“云”设施可以建在电力资源丰富的地区,从而大幅降低能源成本。

三、Openstack基本概念

OpenStack是一个开源的云计算管理平台项目,由几个主要的组件组合起来完成

具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、

可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的

服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。

常见组件:

  • Dashboard(web项目)
  • Keystone(权限管理)
  • Nova(管理虚拟机)
  • Nova-network(管理网络流量和ip)
  • Glance(镜像管理项目)
  • Cinder(磁盘管理)
  • Swift(网盘,对象)

四、实验环境(rhel7.3版本)

1selinux和firewalld状态为disabled

2各主机信息如下:

主机 ip
server1(控制节点—controller)。内存至少2G 172.25.83.1
server2(计算节点—compute)。内存至少2G 172.25.83.1

3、可以将openstack的帮助文档,全部下载到本地,然后放到httpd服务的默认发布目录下,进行查看。

[root@foundation83 ~]# ll /var/www/html/
total 12
drw-r--r--.  5 root root 4096 Apr 18 16:53 install-guide-rdo
dr-xr-xr-x. 10 root root 4096 Oct 20  2016 rhel7.3[root@foundation83 ~]# chmod -R go+x /var/www/html/install-guide-rdo/   #该该目录赋予可读的权限[root@foundation83 ~]# ll /var/www/html/
total 12
drw-r-xr-x.  5 root root 4096 Apr 18 16:53 install-guide-rdo
dr-xr-xr-x. 10 root root 4096 Oct 20  2016 rhel7.3
  • 浏览器进行访问

五、Openstack安装部署私有云

配置控制节点:

1、环境

<1>主机网络

(1)配置网络接口

【1】、添加一块网卡:

[root@server1 ~]# ip a   #两块网卡(eth0和eth1)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:fb:25:1b brd ff:ff:ff:ff:ff:ffinet 172.25.83.1/24 brd 172.25.83.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::5054:ff:fefb:251b/64 scope link valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 52:54:00:28:4a:31 brd ff:ff:ff:ff:ff:ff

【2】、将第一个接口配置为管理网络接口:

[root@server1 ~]# cd /etc/sysconfig/network-scripts/
[root@server1 network-scripts]# vim ifcfg-eth01 BOOTPROTO=none2 NAME=eth03 DEVICE=eth04 ONBOOT=yes5 IPADDR=172.25.83.16 NETMASK=255.255.255.07 GATEWAY=172.25.83.838 DNS1=114.114.114.114

【3】、提供者网络接口使用一个特殊的配置,不分配给它IP地址。并进行激活

[root@server1 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@server1 network-scripts]# vim ifcfg-eth11 BOOTPROTO=none2 DEVICE=eth13 ONBOOT=yes[root@server1 network-scripts]# ifup eth1   #激活eth1网卡
[root@server1 network-scripts]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:28:4a:31 brd ff:ff:ff:ff:ff:ffinet6 fe80::5054:ff:fe28:4a31/64 scope link valid_lft forever preferred_lft forever

(2)配置域名解析

【1】、设置节点主机名为 controller。

[root@server1 ~]# hostnamectl set-hostname controller
[root@server1 ~]# logout
Connection to 172.25.83.1 closed.
[student@foundation83 ~]$ ssh root@172.25.83.1
root@172.25.83.1's password:
[root@controller ~]# hostname
controller

【2】、编辑 /etc/hosts 文件包含以下内容:

[root@controller ~]# vim /etc/hosts
172.25.83.1     controller
172.25.83.2     compute1
172.25.83.3     block1

<2>网络时间协议(NTP)

(1)安全并配置组件

我这里配置虚拟机server1和server2同步我的物理机

#配置物理机,允许其他主机同步该物理机的时间
[root@foundation83 ~]# vim /etc/chrony.conf   #将第22行修改为如下的内容,允许172.25网段的主机同步该主机 22 allow 172.25/16
[root@foundation83 ~]# systemctl restart chronyd.service   #修改万配置文件之后,重启chronyd服务[root@foundation83 ~]# systemctl enable chronyd.service   #设置chronyd服务开机自启

【1】、安装软件包:

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

【2】、编辑 /etc/chrony.conf 文件:

[root@controller ~]# vim /etc/chrony.conf   #删除第4行,第5行,第6行;并将第3行改为如下的内容3 server 172.25.83.83 iburst

【3】、启动chronyd服务并将其配置为随系统启动:

[root@controller ~]# systemctl restart chronyd
[root@controller ~]# chronyc sources -v   #查看是否同步成功
210 Number of sources = 1.-- Source mode  '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* foundation83.ilt.example.     3   6    17     2  -4352ns[+1000ns] +/-  123ms
[root@controller ~]# systemctl enable chronyd
[root@controller ~]# systemctl is-enabled chronyd   #判断chronyd服务是否开机自启
enabled

<3>Openstack包

将有关Openstack软件包mitaka目录(在网上下载的)放置在httpd服务的默认发布目录/var/www/html目录下

[root@foundation83 ~]# ll -d /var/www/html/mitaka/
drwx------. 3 root root 16384 Apr 18 17:41 /var/www/html/mitaka/
[root@foundation83 ~]# chmod -R go+rx /var/www/html/mitaka/
[root@foundation83 ~]# ll -d /var/www/html/mitaka/
drwxr-xr-x. 3 root root 16384 Apr 18 17:41 /var/www/html/mitaka/
  • web界面进行访问,看能否访问到

(1)编辑yun源

[root@controller ~]# vim /etc/yum.repos.d/openstack.repo
[openstack]
name=mitaka
baseurl=http://172.25.83.83/mitaka
gpgcheck=0[root@controller ~]# yum clean all
[root@controller ~]# yum repolist
dvd                                   rhel7.3                             4,751
openstack                             mitaka                                279
repolist: 5,030

(2)安装Openstack软件包

[root@controller ~]# yum upgrade -y   #在主机上升级包
[root@controller ~]# yum install python-openstackclient -y   #安装 OpenStack 客户端

<4>SQL数据库

(1)安全并配置组件

【1】、安装软件包:

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

【2】、创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作:

[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf1 [mysqld]2 bind-address = 172.25.83.13 default-storage-engine = innodb4 innodb_file_per_table5 max_connections = 40966 collation-server = utf8_general_ci7 character-set-server = utf8#其中第二行表示:在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库:
3-7行表示:在``[mysqld]`` 部分,设置如下键值来启用一起有用的选项和 UTF-8 字符集:

(2)完成安装

【1】、启动数据库服务,并将其配置为开机自启:

[root@controller ~]# systemctl enable mariadb.service
[root@controller ~]# systemctl start mariadb.service

【2】、为了保证数据库服务的安全性,运行``mysql_secure_installation``脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。

[root@controller ~]# mysql_secure_installation   #第一个敲空格,其余均敲y

<4>消息队列

(1)安全并配置组件

【1】、安装包:

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

【2】、启动消息队列服务并将其配置为随系统启动:

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

【3】、添加 openstack 用户:

[root@controller ~]# rabbitmqctl add_user openstack openstack   #设置openstack用户的密码为openstack
Creating user "openstack" ...

【4】、给``openstack``用户配置写和读权限:

[root@controller ~]# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Setting permissions for user "openstack" in vhost "/" ...

测试授权是否成功

[root@controller ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:mochiwebwebmachinerabbitmq_web_dispatchamqp_clientrabbitmq_management_agentrabbitmq_managementApplying plugin configuration to rabbit@controller... started 6 plugins.
[root@controller ~]# netstat -antulpe | grep 15672
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      995        37418      12150/beam 

用户名guest,密码guest

点击“Login”进行登陆

点击“Admin”

点击“openstack”

从上图,我们可以看到给openstack用户授权成功。

<5>Memcached

(1)安全并配置组件

【1】、安装软件包:

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

【2】、编辑配置文件/etc/sysconfig/memcached

[root@controller ~]# vim /etc/sysconfig/memcached   #将其中的第5行进行注释即可1 PORT="11211"2 USER="memcached"3 MAXCONN="1024"4 CACHESIZE="64"5 #OPTIONS="-l 127.0.0.1,::1"  

(2)完成安装

【1】、启动Memcached服务,配置它随机启动,并查看11211端口是否打开

[root@controller ~]# systemctl enable memcached.service
[root@controller ~]# systemctl start memcached.service[root@controller ~]# netstat -antulpe | grep 11211
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      994        38500      13127/memcached 

2、配置认证服务

<1>安装与配置

(1)先决条件

【1】、完成下面的步骤以创建数据库:

[root@controller ~]# mysql -u root -p   #用数据库连接客户端以 root 用户连接到数据库服务器
Enter password:   #输入密码
MariaDB [(none)]> CREATE DATABASE keystone;   #创建 keystone 数据库:
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ ->   IDENTIFIED BY 'keystone';   #对``keystone``数据库授予恰当的权限
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'    IDENTIFIED BY 'keystone';   #对``keystone``数据库授予恰当的权限
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> ^DBye   #退出数据库客户端。

【2】、生成一个随机值在初始的配置中作为管理员的令牌。

[root@controller ~]# openssl rand -hex 10
ca34150208112479d7b3

(2)安全并配置组件

【1】、运行以下命令来安装包

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

【2】、编辑文件 /etc/keystone/keystone.conf 并完成如下动作:

  • 查看配置文件/etc/keystone/keystone.conf中有那些组件

[root@controller ~]# vim  /etc/keystone/keystone.conf
#在``[DEFAULT]``部分,定义初始管理令牌的值:
[DEFAULT]
admin_token = ca34150208112479d7b3#在 [database] 部分,配置数据库访问:
[database]
connection = mysql+pymysql://keystone:keystone@controller/keystone#在``[token]``部分,配置Fernet UUID令牌的提供者。
[token]
provider = fernet

【3】、初始化身份认证服务的数据库,并登陆数据库查看是否认证成功

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone[root@controller ~]# mysql -uroot -p
Enter password:
MariaDB [(none)]> use keystone;
MariaDB [keystone]> show tables;
+------------------------+
| Tables_in_keystone     |
+------------------------+
| access_token           |
| assignment             |
| config_register        |
| consumer               |
| credential             |
| domain                 |
| endpoint               |
| endpoint_group         |
| federated_user         |
| federation_protocol    |
| group                  |
| id_mapping             |
| identity_provider      |
| idp_remote_ids         |
| implied_role           |
| local_user             |
| mapping                |
| migrate_version        |
| password               |
| policy                 |
| policy_association     |
| project                |
| project_endpoint       |
| project_endpoint_group |
| region                 |
| request_token          |
| revocation_event       |
| role                   |
| sensitive_config       |
| service                |
| service_provider       |
| token                  |
| trust                  |
| trust_role             |
| user                   |
| user_group_membership  |
| whitelisted_config     |
+------------------------+
37 rows in set (0.00 sec)
MariaDB [keystone]> ^DBye   #按"Ctrl+d"退出数据库客户端

【4】、初始化Fernet keys,并测试是否初始化成功

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone[root@controller ~]# cd /etc/keystone/   #该目录下生成了fernet-keys目录,表示初始化成功
[root@controller keystone]# ll
total 100
-rw-r----- 1 root     keystone  2303 Sep 22  2016 default_catalog.templates
drwx------ 2 keystone keystone    24 Apr 18 19:50 fernet-keys
-rw-r----- 1 root     keystone 73221 Apr 18 19:42 keystone.conf
-rw-r----- 1 root     keystone  2400 Sep 22  2016 keystone-paste.ini
-rw-r----- 1 root     keystone  1046 Sep 22  2016 logging.conf
-rw-r----- 1 keystone keystone  9699 Sep 22  2016 policy.json
-rw-r----- 1 keystone keystone   665 Sep 22  2016 sso_callback_template.html

(3)配置 Apache HTTP 服务器

【1】、编辑``/etc/httpd/conf/httpd.conf`` 文件,配置``ServerName`` 选项为控制节点:

[root@controller ~]# vim /etc/httpd/conf/httpd.conf   #在第96行添加如下的内容96 ServerName controller

【2】、创建文件 /etc/httpd/conf.d/wsgi-keystone.conf,并进行编辑

[root@controller ~]# vim /etc/httpd/conf.d/wsgi-keystone.conf
Listen 5000
Listen 35357<VirtualHost *:5000>WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}WSGIProcessGroup keystone-publicWSGIScriptAlias / /usr/bin/keystone-wsgi-publicWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization OnErrorLogFormat "%{cu}t %M"ErrorLog /var/log/httpd/keystone-error.logCustomLog /var/log/httpd/keystone-access.log combined<Directory /usr/bin>Require all granted</Directory>
</VirtualHost><VirtualHost *:35357>WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}WSGIProcessGroup keystone-adminWSGIScriptAlias / /usr/bin/keystone-wsgi-adminWSGIApplicationGroup %{GLOBAL}WSGIPassAuthorization OnErrorLogFormat "%{cu}t %M"ErrorLog /var/log/httpd/keystone-error.logCustomLog /var/log/httpd/keystone-access.log combined<Directory /usr/bin>Require all granted</Directory>
</VirtualHost>

(4)完成安装

【1】、启动 Apache HTTP 服务并配置其随系统启动,并查看80端口,5000端口和35357端口是否已经打开

 
[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.service[root@controller ~]# netstat -antulpe | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      0          25943      2827/httpd
[root@controller ~]# netstat -antulpe | grep 5000
tcp6       0      0 :::5000                 :::*                    LISTEN      0          25951      2827/httpd
[root@controller ~]# netstat -antulpe | grep 35357
tcp6       0      0 :::35357                :::*                    LISTEN      0          25955      2827/httpd  

<2>创建服务实体和API端点

(1)先决条件

【1】、配置认证令牌:

[root@controller ~]# export OS_TOKEN=ca34150208112479d7b3

【2】、配置端点URL:

[root@controller ~]# export OS_URL=http://controller:35357/v3

【3】、配置认证 API 版本:

[root@controller ~]# export OS_IDENTITY_API_VERSION=3

(2)创建服务实体和API端点

【1】、在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。

创建服务实体和身份认证服务:

[root@controller ~]# openstack service create \
>   --name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Identity               |
| enabled     | True                             |
| id          | e0109484377e4886b385fdf8e9467f79 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+

【2】、身份认证服务管理了一个与您环境相关的 API 端点的目录。服务使用这个目录来决定如何与您环境中的其他服务进行通信。OpenStack使用三个API端点变种代表每种服务:admin,internal和public。默认情况下,管理API端点允许修改用户和 租户而公共和内部APIs不允许这些操作。在生产环境中,处于安全原因,变种为了服务不同类型的用户可能驻留在单独的网络上。对实例而言,公共API网络 为了让顾客管理他们自己的云在互联网上是可见的。管理API网络在管理云基础设施的组织中操作也是有所限制的。内部API网络可能会被限制在包含 OpenStack服务的主机上。此外,OpenStack支持可伸缩性的多区域。为了简单起见,本指南为所有端点变种和默认``RegionOne`` 区域都使用管理网络。

创建认证服务的 API 端点:

[root@controller ~]# openstack endpoint create --region RegionOne \
>   identity public http://controller:5000/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | b622d05e1cf14b9aa46ce0b67fc282d8 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | e0109484377e4886b385fdf8e9467f79 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v3        |
+--------------+----------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne \
>   identity internal http://controller:5000/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | fb5705a8143d4cc7a912c18df7f499c6 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | e0109484377e4886b385fdf8e9467f79 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:5000/v3        |
+--------------+----------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne \
>   identity admin http://controller:35357/v3
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1316fa22cd1b402dbb7795804878007f |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | e0109484377e4886b385fdf8e9467f79 |
| service_name | keystone                         |
| service_type | identity                         |
| url          | http://controller:35357/v3       |
+--------------+----------------------------------+

查看服务实体,身份认证服务和API端点是否创建成功

#方法一:非交互模式进行查看(缺点是命令不能补齐)[root@controller ~]# openstack service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| e0109484377e4886b385fdf8e9467f79 | keystone | identity |
+----------------------------------+----------+----------+
[root@controller ~]# openstack endpoint list
+----------+----------+--------------+--------------+---------+-----------+-------------+
| ID       | Region   | Service Name | Service Type | Enabled | Interface | URL         |
+----------+----------+--------------+--------------+---------+-----------+-------------+
| 1316fa22 | RegionOn | keystone     | identity     | True    | admin     | http://cont |
| cd1b402d | e        |              |              |         |           | roller:3535 |
| bb779580 |          |              |              |         |           | 7/v3        |
| 4878007f |          |              |              |         |           |             |
| b622d05e | RegionOn | keystone     | identity     | True    | public    | http://cont |
| 1cf14b9a | e        |              |              |         |           | roller:5000 |
| a46ce0b6 |          |              |              |         |           | /v3         |
| 7fc282d8 |          |              |              |         |           |             |
| fb5705a8 | RegionOn | keystone     | identity     | True    | internal  | http://cont |
| 143d4cc7 | e        |              |              |         |           | roller:5000 |
| a912c18d |          |              |              |         |           | /v3         |
| f7f499c6 |          |              |              |         |           |             |
+----------+----------+--------------+--------------+---------+-----------+-------------+#方法二:交互模式进行查看(优点是命令可以补齐)
[root@controller ~]# openstack
(openstack) service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| e0109484377e4886b385fdf8e9467f79 | keystone | identity |
+----------------------------------+----------+----------+
(openstack) endpoint list
+----------+----------+--------------+--------------+---------+-----------+-------------+
| ID       | Region   | Service Name | Service Type | Enabled | Interface | URL         |
+----------+----------+--------------+--------------+---------+-----------+-------------+
| 1316fa22 | RegionOn | keystone     | identity     | True    | admin     | http://cont |
| cd1b402d | e        |              |              |         |           | roller:3535 |
| bb779580 |          |              |              |         |           | 7/v3        |
| 4878007f |          |              |              |         |           |             |
| b622d05e | RegionOn | keystone     | identity     | True    | public    | http://cont |
| 1cf14b9a | e        |              |              |         |           | roller:5000 |
| a46ce0b6 |          |              |              |         |           | /v3         |
| 7fc282d8 |          |              |              |         |           |             |
| fb5705a8 | RegionOn | keystone     | identity     | True    | internal  | http://cont |
| 143d4cc7 | e        |              |              |         |           | roller:5000 |
| a912c18d |          |              |              |         |           | /v3         |
| f7f499c6 |          |              |              |         |           |             |
+----------+----------+--------------+--------------+---------+-----------+-------------+

<3>创建域、项目、用户和角色

(1)创建域``default``:

[root@controller ~]# openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Default Domain                   |
| enabled     | True                             |
| id          | de961da844e84398821316b22d52d7c6 |
| name        | default                          |
+-------------+----------------------------------+

(2)在你的环境中,为进行管理操作,创建管理的项目、用户和角色:

【1】、创建 admin 项目:

[root@controller ~]# openstack project create --domain default \
>   --description "Admin Project" admin
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Admin Project                    |
| domain_id   | de961da844e84398821316b22d52d7c6 |
| enabled     | True                             |
| id          | 0ab00c48d2b94493b654f33f2eb5a579 |
| is_domain   | False                            |
| name        | admin                            |
| parent_id   | de961da844e84398821316b22d52d7c6 |
+-------------+----------------------------------+

【2】、创建 admin 用户:

[root@controller ~]# openstack user create --domain default \
>   --password admin admin   #指定admin用户的密码为admin。非交互式创建admin用户
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | de961da844e84398821316b22d52d7c6 |
| enabled   | True                             |
| id        | 74fbbef71f3a4c958b2006a8e0cdcb8c |
| name      | admin                            |
+-----------+----------------------------------+#也可以使用下面的命令来交互式创建admin用户
openstack user create --domain default \--password-prompt admin

【3】、创建 admin 角色:

[root@controller ~]# openstack role create admin
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 842b43ee3259494ab6f9ab467cd9d8dd |
| name      | admin                            |
+-----------+----------------------------------+

【4】、添加``admin`` 角色到 admin 项目和用户上:

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

(3)本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建``service``项目:

[root@controller ~]# openstack project create --domain default \
>   --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | de961da844e84398821316b22d52d7c6 |
| enabled     | True                             |
| id          | dace50099735499a8cceb4fe8ffad750 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | de961da844e84398821316b22d52d7c6 |
+-------------+----------------------------------+

(4)常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。

【1】、创建``demo`` 项目:

[root@controller ~]# openstack project create --domain default \
>   --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | de961da844e84398821316b22d52d7c6 |
| enabled     | True                             |
| id          | 4bf385a6bf92458194acf7a2faef794b |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | de961da844e84398821316b22d52d7c6 |
+-------------+----------------------------------+

【2】、创建``demo`` 用户:

[root@controller ~]# openstack user create --domain default \
>   --password demo demo   #指定demo用户的密码为demo。非交互式创建glance用户
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | de961da844e84398821316b22d52d7c6 |
| enabled   | True                             |
| id        | c058d3e4f37940dc94ee618826e4ef6f |
| name      | demo                             |
+-----------+----------------------------------+#也可以使用下面的命令来交互式创建demo用户
openstack user create --domain default \--password-prompt demo

【3】、创建 user 角色:

[root@controller ~]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | ef665ff3bb02459d91fc7f634cd36ea1 |
| name      | user                             |
+-----------+----------------------------------+

【4】、添加 user``角色到 ``demo 项目和用户:

[root@controller ~]# openstack role add --project demo --user demo user

查看域,项目,用户和角色是否创建成功

[root@controller ~]# openstack
(openstack) domain list
+----------------------------------+---------+---------+----------------+
| ID                               | Name    | Enabled | Description    |
+----------------------------------+---------+---------+----------------+
| de961da844e84398821316b22d52d7c6 | default | True    | Default Domain |
+----------------------------------+---------+---------+----------------+
(openstack) project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 0ab00c48d2b94493b654f33f2eb5a579 | admin   |
| 4bf385a6bf92458194acf7a2faef794b | demo    |
| dace50099735499a8cceb4fe8ffad750 | service |
+----------------------------------+---------+
(openstack) user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 74fbbef71f3a4c958b2006a8e0cdcb8c | admin |
| c058d3e4f37940dc94ee618826e4ef6f | demo  |
+----------------------------------+-------+
(openstack) role list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 842b43ee3259494ab6f9ab467cd9d8dd | admin |
| ef665ff3bb02459d91fc7f634cd36ea1 | user  |
+----------------------------------+-------+

<4>验证操作

(1)重置``OS_TOKEN``和``OS_URL`` 环境变量:

[root@controller ~]# unset OS_TOKEN OS_URL

(2)作为 admin 用户,请求认证令牌:

[root@controller ~]# unset OS_TOKEN OS_URL
[root@controller ~]# 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
Password:     #输入密码"admin"
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2019-04-18T13:28:27.564216Z                                     |
| id         | gAAAAABcuG1rVqz6FQcqYJBOBc4rRPb_1R3njUl6RDuQuWYcuUVj7s9m0Xu0SXH |
|            | _Ka3fRG9WpnTTtHyGA9scEYwgCu8sP1RnpadCEy9z7lfmnxyMX80mPucIC6ArFh |
|            | OqnxWyhgRk-UqsoNKDjrrT2_T0xQkLz8kKwTKk1Q5Hp6FltLc-u0oTGZ0       |
| project_id | 0ab00c48d2b94493b654f33f2eb5a579                                |
| user_id    | 74fbbef71f3a4c958b2006a8e0cdcb8c                                |
+------------+----------------------------------------------------------------

(3)作为``demo`` 用户,请求认证令牌:

[root@controller ~]# 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
Password:
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2019-04-18T13:29:18.418594Z                                     |
| id         | gAAAAABcuG2evXvUcaogMeQ1CRzqa1uELVCSotxIIm520pElps-4NkoYAmUq31l |
|            | dSa1Q5H0T_DYm7PtBooaHMykk80ehnjDFJrMZVF3VKGBK4yQpcT9aXEPnMMV9oP |
|            | camyem-iPe7brpWR8SlHaebbZlf2dd1HVvwVBuFiDQruCmzYsyr0ahJIw       |
| project_id | 4bf385a6bf92458194acf7a2faef794b                                |
| user_id    | c058d3e4f37940dc94ee618826e4ef6f                                |
+------------+-----------------------------------------------------------------+

<5>创建Openstack客户端环境脚本

(1)创建脚本

创建 admin 和 ``demo``项目和用户创建客户端环境变量脚本。本指南的接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证。

(1)编辑文件 admin-openrc 并添加如下内容:

[root@controller ~]# 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=admin
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

(2)编辑文件 demo-openrc 并添加如下内容:

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

(2)使用脚本

[root@controller ~]# source admin-openrc   #执行admin-openrc脚本,获取admin用户的身份
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID                               | Name  |
+----------------------------------+-------+
| 74fbbef71f3a4c958b2006a8e0cdcb8c | admin |
| c058d3e4f37940dc94ee618826e4ef6f | demo  |
+----------------------------------+-------+[root@controller ~]# source demo-openrc   #执行demo-openrc脚本,获取demo用户的身份
[root@controller ~]# openstack user list   #因为普通用户demo没有查看的权限,所以这里会报错
You are not authorized to perform the requested action: identity:list_users (HTTP 403) (Request-ID: req-2afdae43-c77b-4a3f-b14e-6166ab054428)

3、配置镜像服务

<1>安装和配置

(1)先决条件

【1】、完成下面的步骤以创建数据库:

[root@controller ~]# mysql -u root -p   #用数据库连接客户端以 root 用户连接到数据库服务器
Enter password:   #输入密码
MariaDB [(none)]> CREATE DATABASE glance;   #创建 glance 数据库
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \->   IDENTIFIED BY 'glance';   #对``glance``数据库授予恰当的权限
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%'    IDENTIFIED BY 'glance';   #对``glance``数据库授予恰当的权限
Query OK, 0 rows affected (0.01 sec)MariaDB [(none)]> ^DBye   #退出数据库客户端。

【2】、获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

[root@controller ~]# source admin-openrc

【3】、要创建服务证书,完成这些步骤:

  • 创建 glance 用户:
[root@controller ~]# openstack user create --domain default --password glance glance   #指定glance用户的密码为glance。非交互式创建glance用户
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | de961da844e84398821316b22d52d7c6 |
| enabled   | True                             |
| id        | c7fc73f73e9a49b0ac77d642b32e2997 |
| name      | glance                           |
+-----------+----------------------------------+#也可以使用下面的命令来交互式创建glance用户
openstack user create --domain default --password-prompt glance
  • 添加 admin 角色到 glance 用户和 service 项目上。
[root@controller ~]# openstack role add --project service --user glance admin
  • 创建``glance``服务实体:
[root@controller ~]# openstack service create --name glance \
>   --description "OpenStack Image" image
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image                  |
| enabled     | True                             |
| id          | 2a6c4ed243d4476ca1085892657ec645 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+

【4】、创建镜像服务的 API 端点:

[root@controller ~]#  openstack endpoint create --region RegionOne \
>   image public http://controller:9292
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | b32f2696e1c34a4395139f373a234792 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2a6c4ed243d4476ca1085892657ec645 |
| 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           | 12401819a8e24539b3e6a878fda0530b |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2a6c4ed243d4476ca1085892657ec645 |
| 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           | 7d0917aea7e3475aad3fa8deaeac28d0 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2a6c4ed243d4476ca1085892657ec645 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

查看用户,服务实体,API端点是否创建成功

[root@controller ~]# openstack
(openstack) user list
+----------------------------------+--------+
| ID                               | Name   |
+----------------------------------+--------+
| 74fbbef71f3a4c958b2006a8e0cdcb8c | admin  |
| c058d3e4f37940dc94ee618826e4ef6f | demo   |
| c7fc73f73e9a49b0ac77d642b32e2997 | glance |
+----------------------------------+--------+
(openstack) service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 2a6c4ed243d4476ca1085892657ec645 | glance   | image    |
| e0109484377e4886b385fdf8e9467f79 | keystone | identity |
+----------------------------------+----------+----------+
(openstack) endpoint list
+----------+----------+--------------+--------------+---------+-----------+-------------+
| ID       | Region   | Service Name | Service Type | Enabled | Interface | URL         |
+----------+----------+--------------+--------------+---------+-----------+-------------+
| 12401819 | RegionOn | glance       | image        | True    | internal  | http://cont |
| a8e24539 | e        |              |              |         |           | roller:9292 |
| b3e6a878 |          |              |              |         |           |             |
| fda0530b |          |              |              |         |           |             |
| 1316fa22 | RegionOn | keystone     | identity     | True    | admin     | http://cont |
| cd1b402d | e        |              |              |         |           | roller:3535 |
| bb779580 |          |              |              |         |           | 7/v3        |
| 4878007f |          |              |              |         |           |             |
| 7d0917ae | RegionOn | glance       | image        | True    | admin     | http://cont |
| a7e3475a | e        |              |              |         |           | roller:9292 |
| ad3fa8de |          |              |              |         |           |             |
| aeac28d0 |          |              |              |         |           |             |
| b32f2696 | RegionOn | glance       | image        | True    | public    | http://cont |
| e1c34a43 | e        |              |              |         |           | roller:9292 |
| 95139f37 |          |              |              |         |           |             |
| 3a234792 |          |              |              |         |           |             |
| b622d05e | RegionOn | keystone     | identity     | True    | public    | http://cont |
| 1cf14b9a | e        |              |              |         |           | roller:5000 |
| a46ce0b6 |          |              |              |         |           | /v3         |
| 7fc282d8 |          |              |              |         |           |             |
| fb5705a8 | RegionOn | keystone     | identity     | True    | internal  | http://cont |
| 143d4cc7 | e        |              |              |         |           | roller:5000 |
| a912c18d |          |              |              |         |           | /v3         |
| f7f499c6 |          |              |              |         |           |             |
+----------+----------+--------------+--------------+---------+-----------+-----

(2)安全并配置组件

【1】、安装软件包:

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

【2】、编辑文件 /etc/glance/glance-api.conf 并完成如下动作:

[root@controller ~]# vim /etc/glance/glance-api.conf
在 [database] 部分,配置数据库访问:
[database]
connection = mysql+pymysql://glance:glance@controller/glance在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:
[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] 部分,配置本地文件系统存储和镜像文件位置:
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/

【3】、编辑文件 ``/etc/glance/glance-registry.conf``并完成如下动作:

[root@controller ~]# vim /etc/glance/glance-registry.conf
在 [database] 部分,配置数据库访问:
[database]
connection = mysql+pymysql://glance:glance@controller/glance在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:
[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】、写入镜像服务数据库,并登陆数据库查看是否写入成功

[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance
Option "verbose" from group "DEFAULT" is deprecated for removal.  Its value may be silently ignored in the future.
/usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:1056: OsloDBDeprecationWarning: EngineFacade is deprecated; please use oslo_db.sqlalchemy.enginefacadeexpire_on_commit=expire_on_commit, _conf=conf)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `ix_image_properties_image_id_name`. This is deprecated and will be disallowed in a future release.')result = self._query(query)#忽略输出中任何不推荐使用的信息。[root@controller ~]# mysql -uroot -p
Enter password:   #输入密码
MariaDB [(none)]> use glance;
MariaDB [glance]> show tables;
+----------------------------------+
| Tables_in_glance                 |
+----------------------------------+
| artifact_blob_locations          |
| artifact_blobs                   |
| artifact_dependencies            |
| artifact_properties              |
| artifact_tags                    |
| artifacts                        |
| image_locations                  |
| image_members                    |
| image_properties                 |
| image_tags                       |
| images                           |
| metadef_namespace_resource_types |
| metadef_namespaces               |
| metadef_objects                  |
| metadef_properties               |
| metadef_resource_types           |
| metadef_tags                     |
| migrate_version                  |
| task_info                        |
| tasks                            |
+----------------------------------+
20 rows in set (0.00 sec)MariaDB [glance]> ^DBye   #按"Ctrl+d"退出数据库客户端

(3)完成安装

【1】、启动镜像服务、配置他们随机启动:

[root@controller ~]# systemctl enable openstack-glance-api.service \
>   openstack-glance-registry.service
[root@controller ~]# systemctl start openstack-glance-api.service \
>   openstack-glance-registry.service

<2>验证操作

(1)下载源镜像:

[root@controller ~]# ls
admin-openrc  cirros-0.3.5-x86_64-disk.img  demo-openrc

(2)使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:

[root@controller ~]# openstack image create "cirros"   --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| checksum         | f8ab98ff5e73ebab884d80c9dc9c7290                     |
| container_format | bare                                                 |
| created_at       | 2019-04-18T13:13:55Z                                 |
| disk_format      | qcow2                                                |
| file             | /v2/images/fe68d600-2b20-45de-8391-2d3eecdaca4e/file |
| id               | fe68d600-2b20-45de-8391-2d3eecdaca4e                 |
| min_disk         | 0                                                    |
| min_ram          | 0                                                    |
| name             | cirros                                               |
| owner            | 0ab00c48d2b94493b654f33f2eb5a579                     |
| protected        | False                                                |
| schema           | /v2/schemas/image                                    |
| size             | 13267968                                             |
| status           | active                                               |
| tags             |                                                      |
| updated_at       | 2019-04-18T13:13:55Z                                 |
| virtual_size     | None                                                 |
| visibility       | public                                               |
+------------------+------------------------------------------------------+

(3)确认镜像的上传并验证属性:

[root@controller ~]# openstack image list   #状态是active表示成功
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| fe68d600-2b20-45de-8391-2d3eecdaca4e | cirros | active |
+--------------------------------------+--------+--------+

4、计算服务

(1)先决条件

【1】、为了创建数据库,必须完成这些步骤:

[root@controller ~]# mysql -uroot -p   #用数据库连接客户端以 root 用户连接到数据库服务器
Enter password:   #输入密码
MariaDB [(none)]> CREATE DATABASE nova_api;   #创建 nova_api 数据库
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> CREATE DATABASE nova;   #创建 nova 数据库:
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \->   IDENTIFIED BY 'nova';   #对数据库进行正确的授权:
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';   #对数据库进行正确的授权:
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \->   IDENTIFIED BY 'nova';   #对数据库进行正确的授权:
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';   #对数据库进行正确的授权:
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> ^DBye   #退出数据库客户端。

【2】、获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

[root@controller ~]# source admin-openrc

【3】、要创建服务证书,完成这些步骤:

  • 创建 nova 用户:
[root@controller ~]# openstack user create --domain default \   #指定nova用户的密码为nova。非交互式创建nova用户
>   --password nova nova
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | de961da844e84398821316b22d52d7c6 |
| enabled   | True                             |
| id        | 21cc7d5766c241bf8de6e2dd2c1fa4e1 |
| name      | nova                             |
+-----------+----------------------------------+#也可以使用下面的命令来交互式创建glance用户
openstack user create --domain default \--password-prompt nova
  • 给 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          | 9011c0f89bed4f8184661b22dfe60729 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

【4】、创建 Compute 服务 API 端点 :

[root@controller ~]# openstack endpoint create --region RegionOne \
>   compute public http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 50063bd98af24f1c82bdfb75d78c0dde          |
| interface    | public                                    |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 9011c0f89bed4f8184661b22dfe60729          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne \
>   compute internal http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | bced68ae5cc141c69ed0e18de09fc708          |
| interface    | internal                                  |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 9011c0f89bed4f8184661b22dfe60729          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+[root@controller ~]# openstack endpoint create --region RegionOne \
>   compute admin http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 2a3bcdde1ea040219e667a6b0ffd7d54          |
| interface    | admin                                     |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 9011c0f89bed4f8184661b22dfe60729          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+

查看用户,服务实体,API端点是否创建成功

[root@controller ~]# openstack
(openstack) user list
+----------------------------------+--------+
| ID                               | Name   |
+----------------------------------+--------+
| 21cc7d5766c241bf8de6e2dd2c1fa4e1 | nova   |
| 74fbbef71f3a4c958b2006a8e0cdcb8c | admin  |
| c058d3e4f37940dc94ee618826e4ef6f | demo   |
| c7fc73f73e9a49b0ac77d642b32e2997 | glance |
+----------------------------------+--------+
(openstack) service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 2a6c4ed243d4476ca1085892657ec645 | glance   | image    |
| 9011c0f89bed4f8184661b22dfe60729 | nova     | compute  |
| e0109484377e4886b385fdf8e9467f79 | keystone | identity |
+----------------------------------+----------+----------+
(openstack) endpoint list
+----------+----------+--------------+--------------+---------+-----------+-------------+
| ID       | Region   | Service Name | Service Type | Enabled | Interface | URL         |
+----------+----------+--------------+--------------+---------+-----------+-------------+
| 12401819 | RegionOn | glance       | image        | True    | internal  | http://cont |
| a8e24539 | e        |              |              |         |           | roller:9292 |
| b3e6a878 |          |              |              |         |           |             |
| fda0530b |          |              |              |         |           |             |
| 1316fa22 | RegionOn | keystone     | identity     | True    | admin     | http://cont |
| cd1b402d | e        |              |              |         |           | roller:3535 |
| bb779580 |          |              |              |         |           | 7/v3        |
| 4878007f |          |              |              |         |           |             |
| 2a3bcdde | RegionOn | nova         | compute      | True    | admin     | http://cont |
| 1ea04021 | e        |              |              |         |           | roller:8774 |
| 9e667a6b |          |              |              |         |           | /v2.1/%(ten |
| 0ffd7d54 |          |              |              |         |           | ant_id)s    |
| 50063bd9 | RegionOn | nova         | compute      | True    | public    | http://cont |
| 8af24f1c | e        |              |              |         |           | roller:8774 |
| 82bdfb75 |          |              |              |         |           | /v2.1/%(ten |
| d78c0dde |          |              |              |         |           | ant_id)s    |
| 7d0917ae | RegionOn | glance       | image        | True    | admin     | http://cont |
| a7e3475a | e        |              |              |         |           | roller:9292 |
| ad3fa8de |          |              |              |         |           |             |
| aeac28d0 |          |              |              |         |           |             |
| b32f2696 | RegionOn | glance       | image        | True    | public    | http://cont |
| e1c34a43 | e        |              |              |         |           | roller:9292 |
| 95139f37 |          |              |              |         |           |             |
| 3a234792 |          |              |              |         |           |             |
| b622d05e | RegionOn | keystone     | identity     | True    | public    | http://cont |
| 1cf14b9a | e        |              |              |         |           | roller:5000 |
| a46ce0b6 |          |              |              |         |           | /v3         |
| 7fc282d8 |          |              |              |         |           |             |
| bced68ae | RegionOn | nova         | compute      | True    | internal  | http://cont |
| 5cc141c6 | e        |              |              |         |           | roller:8774 |
| 9ed0e18d |          |              |              |         |           | /v2.1/%(ten |
| e09fc708 |          |              |              |         |           | ant_id)s    |
| fb5705a8 | RegionOn | keystone     | identity     | True    | internal  | http://cont |
| 143d4cc7 | e        |              |              |         |           | roller:5000 |
| a912c18d |          |              |              |         |           | /v3         |
| f7f499c6 |          |              |              |         |           |             |
+----------+----------+--------------+--------------+---------+-----------+-------------+

(2)安全并配置组件

【1】、安装软件包:

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

【2】、编辑``/etc/nova/nova.conf``文件并完成下面的操作:

[root@controller ~]# vim /etc/nova/nova.conf
在``[DEFAULT]``部分,只启用计算和元数据API:
[DEFAULT]
enabled_apis = osapi_compute,metadata在``[api_database]``和``[database]``部分,配置数据库的连接:
[api_database]
connection = mysql+pymysql://nova:nova@controller/nova_api[database]
connection = mysql+pymysql://nova:nova@controller/nova在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列访问:
[DEFAULT]
...
rpc_backend = rabbit[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT]
...
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 = nova
password = nova在 [DEFAULT 部分,配置``my_ip`` 来使用控制节点的管理接口的IP 地址。
[DEFAULT]
...
my_ip = 172.25.83.1在 [DEFAULT] 部分,使能 Networking 服务:
[DEFAULT]
...
firewall_driver = nova.virt.firewall.NoopFirewallDriver在``[vnc]``部分,配置VNC代理使用控制节点的管理接口IP地址 :
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip在 [glance] 区域,配置镜像服务 API 的位置:
[glance]
api_servers = http://controller:9292在 [oslo_concurrency] 部分,配置锁路径:
[oslo_concurrency]
lock_path = /var/lib/nova/tmp

【3】、同步Compute 数据库,并登陆数据库查看是否同步成功

[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `block_device_mapping_instance_uuid_virtual_name_device_name_idx`. This is deprecated and will be disallowed in a future release.')result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:166: Warning: (1831, u'Duplicate index `uniq_instances0uuid`. This is deprecated and will be disallowed in a future release.')result = self._query(query)[root@controller ~]# mysql -uroot -p
Enter password:
MariaDB [(none)]> use nova;
MariaDB [nova]> show tables;
+--------------------------------------------+
| Tables_in_nova                             |
+--------------------------------------------+
| agent_builds                               |
| aggregate_hosts                            |
| aggregate_metadata                         |
| aggregates                                 |
| allocations                                |
| block_device_mapping                       |
| bw_usage_cache                             |
| cells                                      |
| certificates                               |
| compute_nodes                              |
| console_pools                              |
| consoles                                   |
| dns_domains                                |
| fixed_ips                                  |
| floating_ips                               |
| instance_actions                           |
| instance_actions_events                    |
| instance_extra                             |
| instance_faults                            |
| instance_group_member                      |
| instance_group_policy                      |
| instance_groups                            |
| instance_id_mappings                       |
| instance_info_caches                       |
| instance_metadata                          |
| instance_system_metadata                   |
| instance_type_extra_specs                  |
| instance_type_projects                     |
| instance_types                             |
| instances                                  |
| inventories                                |
| key_pairs                                  |
| migrate_version                            |
| migrations                                 |
| networks                                   |
| pci_devices                                |
| project_user_quotas                        |
| provider_fw_rules                          |
| quota_classes                              |
| quota_usages                               |
| quotas                                     |
| reservations                               |
| resource_provider_aggregates               |
| resource_providers                         |
| s3_images                                  |
| security_group_default_rules               |
| security_group_instance_association        |
| security_group_rules                       |
| security_groups                            |
| services                                   |
| shadow_agent_builds                        |
| shadow_aggregate_hosts                     |
| shadow_aggregate_metadata                  |
| shadow_aggregates                          |
| shadow_block_device_mapping                |
| shadow_bw_usage_cache                      |
| shadow_cells                               |
| shadow_certificates                        |
| shadow_compute_nodes                       |
| shadow_console_pools                       |
| shadow_consoles                            |
| shadow_dns_domains                         |
| shadow_fixed_ips                           |
| shadow_floating_ips                        |
| shadow_instance_actions                    |
| shadow_instance_actions_events             |
| shadow_instance_extra                      |
| shadow_instance_faults                     |
| shadow_instance_group_member               |
| shadow_instance_group_policy               |
| shadow_instance_groups                     |
| shadow_instance_id_mappings                |
| shadow_instance_info_caches                |
| shadow_instance_metadata                   |
| shadow_instance_system_metadata            |
| shadow_instance_type_extra_specs           |
| shadow_instance_type_projects              |
| shadow_instance_types                      |
| shadow_instances                           |
| shadow_key_pairs                           |
| shadow_migrate_version                     |
| shadow_migrations                          |
| shadow_networks                            |
| shadow_pci_devices                         |
| shadow_project_user_quotas                 |
| shadow_provider_fw_rules                   |
| shadow_quota_classes                       |
| shadow_quota_usages                        |
| shadow_quotas                              |
| shadow_reservations                        |
| shadow_s3_images                           |
| shadow_security_group_default_rules        |
| shadow_security_group_instance_association |
| shadow_security_group_rules                |
| shadow_security_groups                     |
| shadow_services                            |
| shadow_snapshot_id_mappings                |
| shadow_snapshots                           |
| shadow_task_log                            |
| shadow_virtual_interfaces                  |
| shadow_volume_id_mappings                  |
| shadow_volume_usage_cache                  |
| snapshot_id_mappings                       |
| snapshots                                  |
| tags                                       |
| task_log                                   |
| virtual_interfaces                         |
| volume_id_mappings                         |
| volume_usage_cache                         |
+--------------------------------------------+
109 rows in set (0.00 sec)MariaDB [nova]> ^DBye   #按"Ctrl+d退出数据库客户端"
[root@controller ~]# mysql -unova -pnova nova
MariaDB [nova]> ^DBye
[root@controller ~]# mysql -unova -pnova nova_api
MariaDB [nova_api]> ^DBye

(3)完成安装

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

查看关于compute服务的相关服务,是否已经开启

[root@controller ~]# openstack
(openstack) compute service list
+----+--------------+------------+----------+---------+-------+--------------+
| Id | Binary       | Host       | Zone     | Status  | State | Updated At   |
+----+--------------+------------+----------+---------+-------+--------------+
|  1 | nova-        | controller | internal | enabled | up    | 2019-04-19T0 |
|    | conductor    |            |          |         |       | 2:34:49.0000 |
|    |              |            |          |         |       | 00           |
|  2 | nova-        | controller | internal | enabled | up    | 2019-04-19T0 |
|    | consoleauth  |            |          |         |       | 2:34:49.0000 |
|    |              |            |          |         |       | 00           |
|  3 | nova-        | controller | internal | enabled | up    | 2019-04-19T0 |
|    | scheduler    |            |          |         |       | 2:34:49.0000 |
|    |              |            |          |         |       | 00           |
+----+--------------+------------+----------+---------+-------+--------------+

配置计算节点:

1、环境

<1>主机网络

(1)配置网络接口

【1】、添加一块网卡:

[root@server2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:74:37:cd brd ff:ff:ff:ff:ff:ffinet 172.25.83.2/24 brd 172.25.83.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::5054:ff:fe74:37cd/64 scope link valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 52:54:00:bf:b4:09 brd ff:ff:ff:ff:ff:ff

【2】、将第一个接口配置为管理网络接口:

[root@server2 ~]# cd /etc/sysconfig/network-scripts/
[root@server2 network-scripts]# vim ifcfg-eth0
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=172.25.83.2
NETMASK=255.255.255.0
GATEWAY=172.25.83.83
DNS1=114.114.114.114

【3】、提供者网络接口使用一个特殊的配置,不分配给它IP地址。并进行激活

[root@server2 network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@server2 network-scripts]# vim ifcfg-eth1 1 BOOTPROTO=none2 DEVICE=eth13 ONBOOT=yes[root@server2 network-scripts]# ifup eth1   #激活eth1网卡
[root@server2 network-scripts]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 52:54:00:bf:b4:09 brd ff:ff:ff:ff:ff:ffinet6 fe80::5054:ff:febf:b409/64 scope link valid_lft forever preferred_lft forever

(2)配置域名解析

【1】、设置节点主机名为``compute1``。

[root@server2 ~]# hostnamectl set-hostname compute1
[root@server2 ~]# logout
Connection to 172.25.83.2 closed.
[student@foundation83 ~]$ ssh root@172.25.83.2
root@172.25.83.2's password:
Last login: Fri Apr 19 10:30:55 2019 from foundation83.ilt.example.com
[root@compute1 ~]# hostname
compute1

【2】、编辑 /etc/hosts 文件包含以下内容:

[root@compute1 ~]# vim /etc/hosts
172.25.83.1     controller
172.25.83.2     compute1
172.25.83.3     block1

<2>网络时间协议(NTP)

(1)安全并配置组件

【1】、安装软件包:

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

【2】、编辑``/etc/chrony.conf`` 文件:

[root@compute1 ~]# vim /etc/chrony.conf   #删除第4行,第5行,第6行;并将第3行改为如下的内容3 server 172.25.83.83 iburst

【3】、启动chronyd服务并将其配置为随系统启动:

[root@compute1 ~]# systemctl restart chronyd.service
[root@compute1 ~]# chronyc sources -v
210 Number of sources = 1.-- Source mode  '^' = server, '=' = peer, '#' = local clock./ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* foundation83.ilt.example.     3   6    17     3   +665ns[+1610us] +/-   79ms
[root@compute1 ~]# systemctl enable chronyd.service
[root@compute1 ~]# systemctl is-enabled chronyd.service
enabled

2、计算服务

在进行配置之前,先配置yum源

[root@compute1 ~]# scp 172.25.83.1:/etc/yum.repos.d/openstack.repo /etc/yum.repos.d/
root@172.25.83.1's password:
openstack.repo                                100%   70     0.1KB/s   00:00
[root@compute1 ~]# ll -d /etc/yum.repos.d/
drwxr-xr-x. 2 root root 63 Apr 19 11:13 /etc/yum.repos.d/[root@compute1 ~]# yum clean all
[root@compute1 ~]# yum repolist
repo id                               repo name                           status
dvd                                   rhel7.3                             4,751
openstack                             mitaka                                279
repolist: 5,030

(1)安全并配置组件

【1】、安装软件包:

[root@compute1 ~]# yum upgrade -y  #升级软件包
[root@compute1 ~]# yum install openstack-nova-compute -y

【2】、编辑``/etc/nova/nova.conf``文件并完成下面的操作:

[root@compute1 ~]# vim /etc/nova/nova.conf
在``[DEFAULT]`` 和 [oslo_messaging_rabbit]部分,配置``RabbitMQ``消息队列的连接:
[DEFAULT]
rpc_backend = rabbit[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT]
...
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 = nova
password = nova在 [DEFAULT] 部分,配置 my_ip 选项:
[DEFAULT]
...
my_ip = 172.25.83.2在 [DEFAULT] 部分,使能 Networking 服务:
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver在``[vnc]``部分,启用并配置远程控制台访问:
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_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

(2)完成安装

【1】、确定您的计算节点是否支持虚拟机的硬件加速。

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

如果这个命令返回了 one or greater 的值,那么你的计算节点支持硬件加速且不需要额外的配置。

如果这个命令返回了 zero 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM

  • 在 /etc/nova/nova.conf 文件的 [libvirt] 区域做出如下的编辑:

[libvirt]
virt_type = qemu

【2】、启动计算服务及其依赖,并将其配置为随系统自动启动:

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

在控制节点:茶卡关于compute服务的相关服务,是否已经开启(多开启了一个nova-compute服务)

[root@controller ~]# openstack
(openstack) compute service list
+----+--------------+------------+----------+---------+-------+--------------+
| Id | Binary       | Host       | Zone     | Status  | State | Updated At   |
+----+--------------+------------+----------+---------+-------+--------------+
|  1 | nova-        | controller | internal | enabled | up    | 2019-04-19T0 |
|    | conductor    |            |          |         |       | 3:28:20.0000 |
|    |              |            |          |         |       | 00           |
|  2 | nova-        | controller | internal | enabled | up    | 2019-04-19T0 |
|    | consoleauth  |            |          |         |       | 3:28:20.0000 |
|    |              |            |          |         |       | 00           |
|  3 | nova-        | controller | internal | enabled | up    | 2019-04-19T0 |
|    | scheduler    |            |          |         |       | 3:28:20.0000 |
|    |              |            |          |         |       | 00           |
|  6 | nova-compute | compute1   | nova     | enabled | up    | 2019-04-19T0 |
|    |              |            |          |         |       | 3:28:21.0000 |
|    |              |            |          |         |       | 00           |
+----+--------------+------------+----------+---------+-------+--------------+

接着继续配置控制节点:

5、Networking服务

(1)先决条件

【1】、完成下面的步骤以创建数据库:

[root@controller ~]# mysql -u root -p   #用数据库连接客户端以 root 用户连接到数据库服务器
Enter password:   #输入密码
MariaDB [(none)]> CREATE DATABASE neutron;   #创建``neutron`` 数据库
Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \->   IDENTIFIED BY 'neutron';   #对``neutron`` 数据库授予合适的访问权限
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%'    IDENTIFIED BY 'neutron';   #对``neutron`` 数据库授予合适的访问权限
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> ^DBye   #按"Ctrl+d"退出数据库客户端。

【2】、获得 admin 凭证来获取只有管理员能执行的命令的访问权限:

[root@controller ~]# source admin-openrc

【3】、要创建服务证书,完成这些步骤:

  • 创建``neutron``用户:
[root@controller ~]# openstack user create --domain default --password neutron neutron   #指定neutron用户的密码为neutron。非交互式创建neutron用户
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | de961da844e84398821316b22d52d7c6 |
| enabled   | True                             |
| id        | a688eb041a064399a7c4fe238841ea07 |
| name      | neutron                          |
+-----------+----------------------------------+#也可以使用下面的命令来交互式创建neutron用户
openstack user create --domain default --password-prompt neutron
  • 添加``admin`` 角色到``neutron`` 用户:
[root@controller ~]# openstack role add --project service --user neutron admin
  • 创建``neutron``服务实体:
[root@controller ~]# openstack service create --name neutron \
>   --description "OpenStack Networking" network
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | 79b2641148f347228ba96c3900c292c6 |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

【4】、创建网络服务API端点:

[root@controller ~]# openstack endpoint create --region RegionOne \
>   network public http://controller:9696
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 44f0e573c738438fbf97fe97a50163b7 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 79b2641148f347228ba96c3900c292c6 |
| 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           | 9850f10060584221ab91381e4224b3d7 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 79b2641148f347228ba96c3900c292c6 |
| 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           | fab7e826606945f085e11765ecf7b75f |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 79b2641148f347228ba96c3900c292c6 |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

查看用户,服务实体,API端点是否创建成功

[root@controller ~]# openstack
(openstack) user list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 21cc7d5766c241bf8de6e2dd2c1fa4e1 | nova    |
| 74fbbef71f3a4c958b2006a8e0cdcb8c | admin   |
| a688eb041a064399a7c4fe238841ea07 | neutron |
| c058d3e4f37940dc94ee618826e4ef6f | demo    |
| c7fc73f73e9a49b0ac77d642b32e2997 | glance  |
+----------------------------------+---------+
(openstack) service list
+----------------------------------+----------+----------+
| ID                               | Name     | Type     |
+----------------------------------+----------+----------+
| 2a6c4ed243d4476ca1085892657ec645 | glance   | image    |
| 79b2641148f347228ba96c3900c292c6 | neutron  | network  |
| 9011c0f89bed4f8184661b22dfe60729 | nova     | compute  |
| e0109484377e4886b385fdf8e9467f79 | keystone | identity |
+----------------------------------+----------+----------+
(openstack) endpoint list
+----------+----------+--------------+--------------+---------+-----------+-------------+
| ID       | Region   | Service Name | Service Type | Enabled | Interface | URL         |
+----------+----------+--------------+--------------+---------+-----------+-------------+
| 12401819 | RegionOn | glance       | image        | True    | internal  | http://cont |
| a8e24539 | e        |              |              |         |           | roller:9292 |
| b3e6a878 |          |              |              |         |           |             |
| fda0530b |          |              |              |         |           |             |
| 1316fa22 | RegionOn | keystone     | identity     | True    | admin     | http://cont |
| cd1b402d | e        |              |              |         |           | roller:3535 |
| bb779580 |          |              |              |         |           | 7/v3        |
| 4878007f |          |              |              |         |           |             |
| 2a3bcdde | RegionOn | nova         | compute      | True    | admin     | http://cont |
| 1ea04021 | e        |              |              |         |           | roller:8774 |
| 9e667a6b |          |              |              |         |           | /v2.1/%(ten |
| 0ffd7d54 |          |              |              |         |           | ant_id)s    |
| 44f0e573 | RegionOn | neutron      | network      | True    | public    | http://cont |
| c738438f | e        |              |              |         |           | roller:9696 |
| bf97fe97 |          |              |              |         |           |             |
| a50163b7 |          |              |              |         |           |             |
| 50063bd9 | RegionOn | nova         | compute      | True    | public    | http://cont |
| 8af24f1c | e        |              |              |         |           | roller:8774 |
| 82bdfb75 |          |              |              |         |           | /v2.1/%(ten |
| d78c0dde |          |              |              |         |           | ant_id)s    |
| 7d0917ae | RegionOn | glance       | image        | True    | admin     | http://cont |
| a7e3475a | e        |              |              |         |           | roller:9292 |
| ad3fa8de |          |              |              |         |           |             |
| aeac28d0 |          |              |              |         |           |             |
| 9850f100 | RegionOn | neutron      | network      | True    | internal  | http://cont |
| 60584221 | e        |              |              |         |           | roller:9696 |
| ab91381e |          |              |              |         |           |             |
| 4224b3d7 |          |              |              |         |           |             |
| b32f2696 | RegionOn | glance       | image        | True    | public    | http://cont |
| e1c34a43 | e        |              |              |         |           | roller:9292 |
| 95139f37 |          |              |              |         |           |             |
| 3a234792 |          |              |              |         |           |             |
| b622d05e | RegionOn | keystone     | identity     | True    | public    | http://cont |
| 1cf14b9a | e        |              |              |         |           | roller:5000 |
| a46ce0b6 |          |              |              |         |           | /v3         |
| 7fc282d8 |          |              |              |         |           |             |
| bced68ae | RegionOn | nova         | compute      | True    | internal  | http://cont |
| 5cc141c6 | e        |              |              |         |           | roller:8774 |
| 9ed0e18d |          |              |              |         |           | /v2.1/%(ten |
| e09fc708 |          |              |              |         |           | ant_id)s    |
| fab7e826 | RegionOn | neutron      | network      | True    | admin     | http://cont |
| 606945f0 | e        |              |              |         |           | roller:9696 |
| 85e11765 |          |              |              |         |           |             |
| ecf7b75f |          |              |              |         |           |             |
| fb5705a8 | RegionOn | keystone     | identity     | True    | internal  | http://cont |
| 143d4cc7 | e        |              |              |         |           | roller:5000 |
| a912c18d |          |              |              |         |           | /v3         |
| f7f499c6 |          |              |              |         |           |             |
+----------+----------+--------------+--------------+---------+-----------+-------------+

(2)配置网络选项1:公共网络

【1】、安装组件

[root@controller ~]# yum install openstack-neutron openstack-neutron-ml2 \
>   openstack-neutron-linuxbridge ebtables -y

【2】、配置服务组件

编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作:

[root@controller ~]# vim /etc/neutron/neutron.conf
在 [database] 部分,配置数据库访问:
[database]
connection = mysql+pymysql://neutron:neutron@controller/neutron在``[DEFAULT]``部分,启用ML2插件并禁用其他插件:
[DEFAULT]
core_plugin = ml2
service_plugins =在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:
[DEFAULT]
...
rpc_backend = rabbit[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT]
...
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在``[DEFAULT]``和``[nova]``部分,配置网络服务来通知计算节点的网络拓扑变化:
[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True[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] 部分,配置锁路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

【3】、配置 Modular Layer 2 (ML2) 插件

编辑``/etc/neutron/plugins/ml2/ml2_conf.ini``文件并完成以下操作:

[root@controller ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini
在``[ml2]``部分,启用flat和VLAN网络:
[ml2]
type_drivers = flat,vlan在``[ml2]``部分,禁用私有网络:
[ml2]
...
tenant_network_types =在``[ml2]``部分,启用Linuxbridge机制:
[ml2]
...
mechanism_drivers = linuxbridge在``[ml2]`` 部分,启用端口安全扩展驱动:
[ml2]
...
extension_drivers = port_security在``[ml2_type_flat]``部分,配置公共虚拟网络为flat网络
[ml2]
extension_drivers = port_security在 ``[securitygroup]``部分,启用 ipset 增加安全组规则的高效性:
[securitygroup]
enable_ipset = True

【4】、配置Linuxbridge代理

编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:

[root@controller ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.in
在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来:
[linux_bridge]
physical_interface_mappings = provider:eth1在``[vxlan]``部分,禁止VXLAN覆盖网络:
[vxlan]
enable_vxlan = False在 ``[securitygroup]``部分,启用安全组并配置 Linuxbridge iptables firewall driver:
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

【5】、配置DHCP代理

编辑``/etc/neutron/dhcp_agent.ini``文件并完成下面的操作:

[root@controller ~]# vim /etc/neutron/dhcp_agent.ini
在``[DEFAULT]``部分,配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True

(3)配置元数据代理

编辑``/etc/neutron/metadata_agent.ini``文件并完成以下操作:

[root@controller ~]# vim /etc/neutron/metadata_agent.ini
在``[DEFAULT]`` 部分,配置元数据主机以及共享密码:
[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = westos   #指定共享密码为westos

(4)为计算节点配置网络服务

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

[root@controller ~]# 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 = neutronservice_metadata_proxy = True
metadata_proxy_shared_secret = westos

(5)完成安装

【1】、网络服务初始化脚本需要一个超链接 /etc/neutron/plugin.ini``指向ML2插件配置文件/etc/neutron/plugins/ml2/ml2_conf.ini``。如果超链接不存在,使用下面的命令创建它:

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

【2】、同步数据库,并查看数据库是否同步成功

[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
...
OK[root@controller ~]# mysql -uroot -p
Enter password:   #输入密码
MariaDB [(none)]> use neutron;
MariaDB [neutron]> show tables;
+-----------------------------------------+
| Tables_in_neutron                       |
+-----------------------------------------+
| address_scopes                          |
| agents                                  |
| alembic_version                         |
| allowedaddresspairs                     |
| arista_provisioned_nets                 |
| arista_provisioned_tenants              |
| arista_provisioned_vms                  |
| auto_allocated_topologies               |
| bgp_peers                               |
| bgp_speaker_dragent_bindings            |
| bgp_speaker_network_bindings            |
| bgp_speaker_peer_bindings               |
| bgp_speakers                            |
| brocadenetworks                         |
| brocadeports                            |
| cisco_csr_identifier_map                |
| cisco_hosting_devices                   |
| cisco_ml2_apic_contracts                |
| cisco_ml2_apic_host_links               |
| cisco_ml2_apic_names                    |
| cisco_ml2_n1kv_network_bindings         |
| cisco_ml2_n1kv_network_profiles         |
| cisco_ml2_n1kv_policy_profiles          |
| cisco_ml2_n1kv_port_bindings            |
| cisco_ml2_n1kv_profile_bindings         |
| cisco_ml2_n1kv_vlan_allocations         |
| cisco_ml2_n1kv_vxlan_allocations        |
| cisco_ml2_nexus_nve                     |
| cisco_ml2_nexusport_bindings            |
| cisco_port_mappings                     |
| cisco_router_mappings                   |
| consistencyhashes                       |
| default_security_group                  |
| dnsnameservers                          |
| dvr_host_macs                           |
| externalnetworks                        |
| extradhcpopts                           |
| firewall_policies                       |
| firewall_rules                          |
| firewalls                               |
| flavors                                 |
| flavorserviceprofilebindings            |
| floatingipdnses                         |
| floatingips                             |
| ha_router_agent_port_bindings           |
| ha_router_networks                      |
| ha_router_vrid_allocations              |
| healthmonitors                          |
| ikepolicies                             |
| ipallocationpools                       |
| ipallocations                           |
| ipamallocationpools                     |
| ipamallocations                         |
| ipamavailabilityranges                  |
| ipamsubnets                             |
| ipavailabilityranges                    |
| ipsec_site_connections                  |
| ipsecpeercidrs                          |
| ipsecpolicies                           |
| lsn                                     |
| lsn_port                                |
| maclearningstates                       |
| members                                 |
| meteringlabelrules                      |
| meteringlabels                          |
| ml2_brocadenetworks                     |
| ml2_brocadeports                        |
| ml2_dvr_port_bindings                   |
| ml2_flat_allocations                    |
| ml2_geneve_allocations                  |
| ml2_geneve_endpoints                    |
| ml2_gre_allocations                     |
| ml2_gre_endpoints                       |
| ml2_network_segments                    |
| ml2_nexus_vxlan_allocations             |
| ml2_nexus_vxlan_mcast_groups            |
| ml2_port_binding_levels                 |
| ml2_port_bindings                       |
| ml2_ucsm_port_profiles                  |
| ml2_vlan_allocations                    |
| ml2_vxlan_allocations                   |
| ml2_vxlan_endpoints                     |
| multi_provider_networks                 |
| networkconnections                      |
| networkdhcpagentbindings                |
| networkdnsdomains                       |
| networkgatewaydevicereferences          |
| networkgatewaydevices                   |
| networkgateways                         |
| networkqueuemappings                    |
| networkrbacs                            |
| networks                                |
| networksecuritybindings                 |
| neutron_nsx_network_mappings            |
| neutron_nsx_port_mappings               |
| neutron_nsx_router_mappings             |
| neutron_nsx_security_group_mappings     |
| nexthops                                |
| nsxv_edge_dhcp_static_bindings          |
| nsxv_edge_vnic_bindings                 |
| nsxv_firewall_rule_bindings             |
| nsxv_internal_edges                     |
| nsxv_internal_networks                  |
| nsxv_port_index_mappings                |
| nsxv_port_vnic_mappings                 |
| nsxv_router_bindings                    |
| nsxv_router_ext_attributes              |
| nsxv_rule_mappings                      |
| nsxv_security_group_section_mappings    |
| nsxv_spoofguard_policy_network_mappings |
| nsxv_tz_network_bindings                |
| nsxv_vdr_dhcp_bindings                  |
| nuage_net_partition_router_mapping      |
| nuage_net_partitions                    |
| nuage_provider_net_bindings             |
| nuage_subnet_l2dom_mapping              |
| poolloadbalanceragentbindings           |
| poolmonitorassociations                 |
| pools                                   |
| poolstatisticss                         |
| portbindingports                        |
| portdnses                               |
| portqueuemappings                       |
| ports                                   |
| portsecuritybindings                    |
| providerresourceassociations            |
| qos_bandwidth_limit_rules               |
| qos_network_policy_bindings             |
| qos_policies                            |
| qos_port_policy_bindings                |
| qospolicyrbacs                          |
| qosqueues                               |
| quotas                                  |
| quotausages                             |
| reservations                            |
| resourcedeltas                          |
| router_extra_attributes                 |
| routerl3agentbindings                   |
| routerports                             |
| routerroutes                            |
| routerrules                             |
| routers                                 |
| securitygroupportbindings               |
| securitygrouprules                      |
| securitygroups                          |
| serviceprofiles                         |
| sessionpersistences                     |
| standardattributes                      |
| subnetpoolprefixes                      |
| subnetpools                             |
| subnetroutes                            |
| subnets                                 |
| tags                                    |
| tz_network_bindings                     |
| vcns_router_bindings                    |
| vips                                    |
| vpnservices                             |
+-----------------------------------------+
157 rows in set (0.00 sec)
MariaDB [neutron]> ^DBye   #退出数据库客户端

【3】、重启计算API 服务:

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

【4】、当系统启动时,启动 Networking 服务并配置它启动。

对于两种网络选项:

[root@controller ~]# systemctl enable neutron-server.service \
>   neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
>   neutron-metadata-agent.service
[root@controller ~]# systemctl start neutron-server.service \
>   neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
>   neutron-metadata-agent.service

查看代理是否配置成功

[root@controller ~]# neutron agent-list
+----------+------------+----------+-------------------+-------+----------------+---------------+
| id       | agent_type | host     | availability_zone | alive | admin_state_up | binary        |
+----------+------------+----------+-------------------+-------+----------------+---------------+
| 054d7873 | Metadata   | controll |                   | :-)   | True           | neutron-      |
| -d9d8    | agent      | er       |                   |       |                | metadata-     |
| -468a-   |            |          |                   |       |                | agent         |
| 86bd-622 |            |          |                   |       |                |               |
| e899b6b2 |            |          |                   |       |                |               |
| d        |            |          |                   |       |                |               |
| 3c56880f | DHCP agent | controll | nova              | :-)   | True           | neutron-dhcp- |
| -e307    |            | er       |                   |       |                | agent         |
| -4bfa-8f |            |          |                   |       |                |               |
| 39-547cb |            |          |                   |       |                |               |
| 2fc0313  |            |          |                   |       |                |               |
| e36e88bb | Linux      | controll |                   | :-)   | True           | neutron-      |
| -7395-4b | bridge     | er       |                   |       |                | linuxbridge-  |
| 00-9d19- | agent      |          |                   |       |                | agent         |
| fb3fab47 |            |          |                   |       |                |               |
| 6061     |            |          |                   |       |                |               |
+----------+------------+----------+-------------------+-------+----------------+---------------+

接着继续配置计算节点:

3、Networking服务

(1)安装组件

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

(2)配置通用组件

编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作:

[root@compute1 ~]# vim /etc/neutron/neutron.conf
在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:
[DEFAULT]
rpc_backend = rabbit[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:
[DEFAULT]
...
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] 部分,配置锁路径:
[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

(3)配置网络选项1:公共网络

【1】、配置Linuxbridge代理

编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:

[root@compute1 ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini
在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来:
[linux_bridge]
physical_interface_mappings = provider:eth1在``[vxlan]``部分,禁止VXLAN覆盖网络:
[vxlan]
enable_vxlan = False在 ``[securitygroup]``部分,启用安全组并配置 Linuxbridge iptables firewall driver:
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

(4)为计算节点配置网络服务

编辑``/etc/nova/nova.conf``文件并完成下面的操作:

[root@compute1 ~]# vim /etc/nova/nova.conf
在``[neutron]`` 部分,配置访问参数:
[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

(5)完成安装

【1】、重启计算服务:

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

【2】、启动Linuxbridge代理并配置它开机自启动:

[root@compute1 ~]# systemctl enable neutron-linuxbridge-agent.service
[root@compute1 ~]# systemctl start neutron-linuxbridge-agent.service

在控制节点上:查看代理是否配置成功(是否增加了来自于compute1主机的Linux  bridge agent)

[root@controller ~]# neutron agent-list
+----------+------------+----------+-------------------+-------+----------------+---------------+
| id       | agent_type | host     | availability_zone | alive | admin_state_up | binary        |
+----------+------------+----------+-------------------+-------+----------------+---------------+
| 054d7873 | Metadata   | controll |                   | :-)   | True           | neutron-      |
| -d9d8    | agent      | er       |                   |       |                | metadata-     |
| -468a-   |            |          |                   |       |                | agent         |
| 86bd-622 |            |          |                   |       |                |               |
| e899b6b2 |            |          |                   |       |                |               |
| d        |            |          |                   |       |                |               |
| 3c56880f | DHCP agent | controll | nova              | :-)   | True           | neutron-dhcp- |
| -e307    |            | er       |                   |       |                | agent         |
| -4bfa-8f |            |          |                   |       |                |               |
| 39-547cb |            |          |                   |       |                |               |
| 2fc0313  |            |          |                   |       |                |               |
| be3f1b28 | Linux      | compute1 |                   | :-)   | True           | neutron-      |
| -cced-47 | bridge     |          |                   |       |                | linuxbridge-  |
| b0-b497- | agent      |          |                   |       |                | agent         |
| 3e8acd45 |            |          |                   |       |                |               |
| fb04     |            |          |                   |       |                |               |
| e36e88bb | Linux      | controll |                   | :-)   | True           | neutron-      |
| -7395-4b | bridge     | er       |                   |       |                | linuxbridge-  |
| 00-9d19- | agent      |          |                   |       |                | agent         |
| fb3fab47 |            |          |                   |       |                |               |
| 6061     |            |          |                   |       |                |               |
+----------+------------+----------+-------------------+-------+----------------+---------------+

接下来继续配置控制节点:

6、启动一个实例

<1>创建虚拟网络

(1)提供者网络——>创建提供者网络

【1】、在控制节点上,加载 admin 凭证来获取管理员能执行的命令访问权限:

[root@controller ~]# source admin-openrc 

【2】、创建网络:

[root@controller ~]# neutron net-create --shared --provider:physical_network provider \
>   --provider:network_type flat provider
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2019-04-19T07:27:01                  |
| description               |                                      |
| id                        | d8b14128-0eab-4ad2-8f5f-9a7ffd46ed25 |
| ipv4_address_scope        |                                      |
| ipv6_address_scope        |                                      |
| mtu                       | 1500                                 |
| name                      | provider                             |
| port_security_enabled     | True                                 |
| provider:network_type     | flat                                 |
| provider:physical_network | provider                             |
| provider:segmentation_id  |                                      |
| router:external           | False                                |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | 0ab00c48d2b94493b654f33f2eb5a579     |
| updated_at                | 2019-04-19T07:27:01                  |
+---------------------------+--------------------------------------+

【3】、在网络上创建一个子网:

[root@controller ~]# neutron subnet-create --name provider   --allocation-pool start=172.25.83.100,end=172.25.83.200 --dns-nameserver 114.114.114.114 --gateway 172.25.83.83 provider 172.25.83.0/24
Created a new subnet:
+-------------------+----------------------------------------------------+
| Field             | Value                                              |
+-------------------+----------------------------------------------------+
| allocation_pools  | {"start": "172.25.83.100", "end": "172.25.83.200"} |
| cidr              | 172.25.83.0/24                                     |
| created_at        | 2019-04-19T07:29:20                                |
| description       |                                                    |
| dns_nameservers   | 114.114.114.114                                    |
| enable_dhcp       | True                                               |
| gateway_ip        | 172.25.83.83                                       |
| host_routes       |                                                    |
| id                | 0662303e-9eb9-4de4-94b8-488b5829d096               |
| ip_version        | 4                                                  |
| ipv6_address_mode |                                                    |
| ipv6_ra_mode      |                                                    |
| name              | provider                                           |
| network_id        | d8b14128-0eab-4ad2-8f5f-9a7ffd46ed25               |
| subnetpool_id     |                                                    |
| tenant_id         | 0ab00c48d2b94493b654f33f2eb5a579                   |
| updated_at        | 2019-04-19T07:29:20                                |
+-------------------+----------------------------------------------------+

<2>创建m1.nano规格的主机

[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    |
| ram                        | 64      |
| rxtx_factor                | 1.0     |
| swap                       |         |
| vcpus                      | 1       |

<3>生成一个键值对

(1)导入租户``demo``的凭证

[root@controller ~]# source demo-openrc

(2)生成和添加秘钥对:

[root@controller ~]# ssh-keygen -q -N ""
Enter file in which to save the key (/root/.ssh/id_rsa):   #直接敲击回车
[root@controller ~]#[root@controller ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | 59:9f:db:f0:b6:b8:0d:a4:d5:5e:06:45:06:d2:96:a7 |
| name        | mykey                                           |
| user_id     | c058d3e4f37940dc94ee618826e4ef6f                |

(3)验证公钥的添加:

[root@controller ~]# openstack keypair list
+-------+-------------------------------------------------+
| Name  | Fingerprint                                     |
+-------+-------------------------------------------------+
| mykey | 59:9f:db:f0:b6:b8:0d:a4:d5:5e:06:45:06:d2:96:a7 |
+-------+-------------------------------------------------+

<4>增加安全组规则

(1)添加规则到 default 安全组。

  • 允许 ICMP (ping):

[root@controller ~]# openstack security group rule create --proto icmp default
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| id                    | c6457fa3-d12a-4003-bb38-e37c371b90d1 |
| ip_protocol           | icmp                                 |
| ip_range              | 0.0.0.0/0                            |
| parent_group_id       | 3ea37732-fff0-47a9-aacb-27c1eb0f736a |
| port_range            |                                      |
| remote_security_group |                                      |
+-----------------------+--------------------------------------+
  • 允许安全 shell (SSH) 的访问:
[root@controller ~]# openstack security group rule create --proto tcp --dst-port 22 default
+-----------------------+--------------------------------------+
| Field                 | Value                                |
+-----------------------+--------------------------------------+
| id                    | aa5fb305-7a76-487e-8015-3ef693151247 |
| ip_protocol           | tcp                                  |
| ip_range              | 0.0.0.0/0                            |
| parent_group_id       | 3ea37732-fff0-47a9-aacb-27c1eb0f736a |
| port_range            | 22:22                                |
| remote_security_group |                                      |
+-----------------------+--------------------------------------+

<5>启动一个实例——>在公有网络上创建实例

(1)确定实例选项

【1】、在控制节点上,获得 demo 凭证

[root@controller ~]# source demo-openrc 

【2】、一个实例指定了虚拟机资源的大致分配,包括处理器、内存和存储。

列出可用类型:

[root@controller ~]# openstack flavor list
+----+-----------+-------+------+-----------+-------+-----------+
| ID | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+-------+------+-----------+-------+-----------+
| 0  | m1.nano   |    64 |    1 |         0 |     1 | True      |
| 1  | m1.tiny   |   512 |    1 |         0 |     1 | True      |
| 2  | m1.small  |  2048 |   20 |         0 |     1 | True      |
| 3  | m1.medium |  4096 |   40 |         0 |     2 | True      |
| 4  | m1.large  |  8192 |   80 |         0 |     4 | True      |
| 5  | m1.xlarge | 16384 |  160 |         0 |     8 | True      |
+----+-----------+-------+------+-----------+-------+-----------+

【3】、列出可用镜像:

[root@controller ~]# openstack image list
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| fe68d600-2b20-45de-8391-2d3eecdaca4e | cirros | active |
+--------------------------------------+--------+--------+

【4】、列出可用网络:

[root@controller ~]# openstack network list
+--------------------------------------+----------+--------------------------------------+
| ID                                   | Name     | Subnets                              |
+--------------------------------------+----------+--------------------------------------+
| d8b14128-0eab-4ad2-8f5f-9a7ffd46ed25 | provider | 0662303e-9eb9-4de4-94b8-488b5829d096 |
+--------------------------------------+----------+--------------------------------------+

【5】、列出可用的安全组:

[root@controller ~]#  openstack security group list
+--------------------------+---------+------------------------+---------------------------+
| ID                       | Name    | Description            | Project                   |
+--------------------------+---------+------------------------+---------------------------+
| 3ea37732-fff0-47a9-aacb- | default | Default security group | 4bf385a6bf92458194acf7a2f |
| 27c1eb0f736a             |         |                        | aef794b                   |
+--------------------------+---------+------------------------+---------------------------+

(2)创建实例

【1】、启动实例:

[root@controller ~]# openstack server create --flavor m1.nano --image cirros --nic net-id=d8b14128-0eab-4ad2-8f5f-9a7ffd46ed25 --security-group default --key-name mykey server1+--------------------------------------+-----------------------------------------------+
| Field                                | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          |                                               |
| OS-EXT-STS:power_state               | 0                                             |
| 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                            | k9Bw95Z3dpMv                                  |
| config_drive                         |                                               |
| created                              | 2019-04-19T08:09:18Z                          |
| flavor                               | m1.nano (0)                                   |
| hostId                               |                                               |
| id                                   | 5d7c18d4-d9d4-4edf-a0b6-0503b31421db          |
| image                                | cirros (fe68d600-2b20-45de-8391-2d3eecdaca4e) |
| key_name                             | mykey                                         |
| name                                 | server1                                       |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| project_id                           | 4bf385a6bf92458194acf7a2faef794b              |
| properties                           |                                               |
| security_groups                      | [{u'name': u'default'}]                       |
| status                               | BUILD                                         |
| updated                              | 2019-04-19T08:09:19Z                          |
| user_id                              | c058d3e4f37940dc94ee618826e4ef6f              |
+--------------------------------------+-----------------------------------------------+

【2】、检查实例的状态:

[root@controller ~]# openstack server list
+--------------------------------------+---------+--------+------------------------+
| ID                                   | Name    | Status | Networks               |
+--------------------------------------+---------+--------+------------------------+
| 5d7c18d4-d9d4-4edf-a0b6-0503b31421db | server1 | ACTIVE | provider=172.25.83.101 |
+--------------------------------------+---------+--------+------------------------+

(3)使用虚拟控制台访问实例

【1】、获取你实例的 Virtual Network Computing (VNC) 会话URL并从web浏览器访问它:

[root@controller ~]# openstack console url show server1
+-------+---------------------------------------------------------------------------------+
| Field | Value                                                                           |
+-------+---------------------------------------------------------------------------------+
| type  | novnc                                                                           |
| url   | http://controller:6080/vnc_auto.html?token=79076f9f-4af0-41e5-b122-f008ce471f88 |
+-------+---------------------------------------------------------------------------------+
 

【2】、浏览器访问该url

在物理机的本地解析文件中添加controller的解析(这是因为要在物理机的浏览器中进行访问)

[root@foundation83 ~]# vim /etc/hosts
172.25.83.1     controller

从上图,我们可以看到该实例有问题。导致这个问题的原因在于centos7.3源中的qemu1.5版本低,更新一下qemu版本即可。解决方法如下:参见博客(https://blog.csdn.net/wjciayf/article/details/73741146

在计算节点上进行操作:

[root@compute1 ~]# virsh version
Compiled against library: libvirt 2.0.0
Using library: libvirt 2.0.0
Using API: QEMU 2.0.0
Running hypervisor: QEMU 1.5.3[root@compute1 ~]# ls   #在网上下载关于qemu的软件
qemu
[root@compute1 ~]# cd qemu/
[root@compute1 qemu]# ls
libcacard-2.5.2-2.1.el7.x86_64.rpm        qemu-kvm-common-ev-2.6.0-28.el7.10.1.x86_64.rpm
qemu-img-ev-2.6.0-28.el7.10.1.x86_64.rpm  qemu-kvm-ev-2.6.0-28.el7.10.1.x86_64.rpm[root@compute1 qemu]# yum install * -y[root@compute1 qemu]# virsh version
Compiled against library: libvirt 2.0.0
Using library: libvirt 2.0.0
Using API: QEMU 2.0.0
Running hypervisor: QEMU 2.6.0   #可以看到版本由原来的1.5.3变为了现在的2.6.0

在控制节点上:重启server1

[root@controller ~]# openstack server stop server1
[root@controller ~]# openstack server list
+----------------------+---------+---------+-----------------------+
| ID                   | Name    | Status  | Networks              |
+----------------------+---------+---------+-----------------------+
| 5d7c18d4-d9d4-4edf-  | server1 | SHUTOFF | provider=172.25.83.10 |
| a0b6-0503b31421db    |         |         | 1                     |
+----------------------+---------+---------+-----------------------+[root@controller ~]# openstack server start server1
[root@controller ~]# openstack server list
+-----------------------+---------+--------+-----------------------+
| ID                    | Name    | Status | Networks              |
+-----------------------+---------+--------+-----------------------+
| 5d7c18d4-d9d4-4edf-   | server1 | ACTIVE | provider=172.25.83.10 |
| a0b6-0503b31421db     |         |        | 1                     |
+-----------------------+---------+--------+-----------------------+[root@controller ~]# openstack console url show server1
+-------+----------------------------------------------------------+
| Field | Value                                                    |
+-------+----------------------------------------------------------+
| type  | novnc                                                    |
| url   | http://controller:6080/vnc_auto.html?token=b022d4aa-     |
|       | 37ea-459b-a3ff-2049db66333e                              |
+-------+----------------------------------------------------------+

在浏览器访问这个新的url

从上图,我们可以看到该实例有问题。、解决方法如下:参见博客(https://blog.csdn.net/a610616898/article/details/69788360

在计算节点上进行操作:

[root@compute1 ~]# vim /etc/nova/nova.conf
[libvirt]
virt_type = qemu
cpu_mode = none   #新添加的内容[root@compute1 ~]# systemctl restart openstack-nova-compute   #修改完配置文件之后,重启服务

在控制节点上:重启server1

[root@controller ~]# openstack server stop server1
[root@controller ~]# openstack server list
+----------------------+---------+---------+-----------------------+
| ID                   | Name    | Status  | Networks              |
+----------------------+---------+---------+-----------------------+
| 5d7c18d4-d9d4-4edf-  | server1 | SHUTOFF | provider=172.25.83.10 |
| a0b6-0503b31421db    |         |         | 1                     |
+----------------------+---------+---------+-----------------------+[root@controller ~]# openstack server start server1
[root@controller ~]# openstack server list
+-----------------------+---------+--------+-----------------------+
| ID                    | Name    | Status | Networks              |
+-----------------------+---------+--------+-----------------------+
| 5d7c18d4-d9d4-4edf-   | server1 | ACTIVE | provider=172.25.83.10 |
| a0b6-0503b31421db     |         |        | 1                     |
+-----------------------+---------+--------+-----------------------+[root@controller ~]# openstack console url show server1
+-------+---------------------------------------------------------------------------------+
| Field | Value                                                                           |
+-------+---------------------------------------------------------------------------------+
| type  | novnc                                                                           |
| url   | http://controller:6080/vnc_auto.html?token=46662814-8a2c-49dd-910a-47e5606a4993 |
+-------+---------------------------------------------------------------------------------+

在浏览器访问这个新的url

出现上图表示我们配置成功。

以“cirrors”用户的身份,“cubswin:)“密码,进行登陆

从上图,我们可以看到server1分配到的ip为172.25.83.101。

在web界面登陆成功之后,我们可以在远程利用ssh的方式,进行免密连接

[root@controller ~]# ssh cirros@172.25.83.101
The authenticity of host '172.25.83.101 (172.25.83.101)' can't be established.
RSA key fingerprint is 1e:bd:0e:10:4c:cb:d5:b5:d2:79:51:91:d9:ed:f3:9c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.83.101' (RSA) to the list of known hosts.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000link/ether fa:16:3e:94:eb:0a brd ff:ff:ff:ff:ff:ffinet 172.25.83.101/24 brd 172.25.83.255 scope global eth0inet6 fe80::f816:3eff:fe94:eb0a/64 scope link valid_lft forever preferred_lft forever
$ ping 172.25.83.2
PING 172.25.83.2 (172.25.83.2): 56 data bytes
64 bytes from 172.25.83.2: seq=0 ttl=64 time=1.136 ms
^C
--- 172.25.83.2 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 1.136/1.136/1.136 ms

下面我们再创建一个云主机server2

[root@controller ~]# openstack server create --flavor m1.nano --image cirros --nic net-id=d8b14128-0eab-4ad2-8f5f-9a7ffd46ed25 --security-group default --key-name mykey server2
+--------------------------------------+-----------------------------------------------+
| Field                                | Value                                         |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                        |
| OS-EXT-AZ:availability_zone          |                                               |
| OS-EXT-STS:power_state               | 0                                             |
| 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                            | 3Lme7tei4JDE                                  |
| config_drive                         |                                               |
| created                              | 2019-04-19T09:08:50Z                          |
| flavor                               | m1.nano (0)                                   |
| hostId                               |                                               |
| id                                   | 28aa033b-db84-4497-abef-34e6e5c1d949          |
| image                                | cirros (fe68d600-2b20-45de-8391-2d3eecdaca4e) |
| key_name                             | mykey                                         |
| name                                 | server2                                       |
| os-extended-volumes:volumes_attached | []                                            |
| progress                             | 0                                             |
| project_id                           | 4bf385a6bf92458194acf7a2faef794b              |
| properties                           |                                               |
| security_groups                      | [{u'name': u'default'}]                       |
| status                               | BUILD                                         |
| updated                              | 2019-04-19T09:08:50Z                          |
| user_id                              | c058d3e4f37940dc94ee618826e4ef6f              |
+--------------------------------------+-----------------------------------------------+
[root@controller ~]# openstack server list
+--------------------------------------+---------+--------+------------------------+
| ID                                   | Name    | Status | Networks               |
+--------------------------------------+---------+--------+------------------------+
| 28aa033b-db84-4497-abef-34e6e5c1d949 | server2 | ACTIVE | provider=172.25.83.102 |
| 5d7c18d4-d9d4-4edf-a0b6-0503b31421db | server1 | ACTIVE | provider=172.25.83.101 |
+--------------------------------------+---------+--------+------------------------+
[root@controller ~]# openstack console url show server2
+-------+---------------------------------------------------------------------------------+
| Field | Value                                                                           |
+-------+---------------------------------------------------------------------------------+
| type  | novnc                                                                           |
| url   | http://controller:6080/vnc_auto.html?token=31353e55-4682-4d84-a56a-7fd4364e8b22 |
+-------+---------------------------------------------------------------------------------+

在浏览器访问server2的url

从上图,我们可以看到server2分配到的ip为172.25.83.102。

在web界面登陆成功之后,我们可以在远程利用ssh的方式,进行免密连接

#在真机对iptables进行设置,使得虚拟机可以上网
[root@foundation83 ~]# iptables -t nat -I POSTROUTING -s 172.25.83.0/24 -j MASQUERADE 
[root@controller ~]# ssh cirros@172.25.83.102
The authenticity of host '172.25.83.102 (172.25.83.102)' can't be established.
RSA key fingerprint is 54:cb:b0:70:16:0f:d4:f7:77:ab:d8:cd:4c:04:a8:e3.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.83.102' (RSA) to the list of known hosts.
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000link/ether fa:16:3e:70:16:1d brd ff:ff:ff:ff:ff:ffinet 172.25.83.102/24 brd 172.25.83.255 scope global eth0inet6 fe80::f816:3eff:fe70:161d/64 scope link valid_lft forever preferred_lft forever
$ ping 172.25.83.101
PING 172.25.83.101 (172.25.83.101): 56 data bytes
64 bytes from 172.25.83.101: seq=0 ttl=64 time=7.321 ms
^C
--- 172.25.83.101 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 7.321/7.321/7.321 ms
PING www.baidu.com (220.181.112.244): 56 data bytes
64 bytes from 220.181.112.244: seq=0 ttl=50 time=24.378 ms
64 bytes from 220.181.112.244: seq=1 ttl=50 time=23.232 ms
^C
--- www.baidu.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 23.232/23.805/24.378 ms

在计算节点端可以看到开启了几个云主机

[root@compute1 ~]# virsh listId    Name                           State
----------------------------------------------------3     instance-00000001              running4     instance-00000002              running

Linux下基于Openstack安装部署私有云相关推荐

  1. Linux下Tomcat的安装部署

    Linux下Tomcat的安装部署 一. linux下安装JDK1.6 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以 ...

  2. Linux下使用docker安装部署Sonar Qube

    文章目录 Linux下使用docker安装部署Sonar Qube 一.环境准备 二.部署步骤 三.使用 四.结束 Linux下使用docker安装部署Sonar Qube 一.环境准备 本文默认会使 ...

  3. 基于openstack安装部署私有云详细图文教程

    本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内 ...

  4. 基于openstack安装部署私有云详细

    本文主要分享的是云计算.openstack的使用.私有云平台建设.云服务器云硬盘的构建和使用.从基本概念入手到私有云建设,信息量非常大.对于openstack的安装部署都是从官方文档中一步步的介绍,内 ...

  5. linux jetty 安装目录结构,Linux下Jetty 9安装部署

    Jetty简介 Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布. ...

  6. Linux学习——废旧电脑再利用Ubuntu部署私有云Nextcloud

    Linux学习--废旧电脑再利用Ubuntu部署私有云Nextcloud 一.引言 最近在网络上学到如何在电脑Ubuntu系统上部署私有云Nextcloud,部署完发现相当实用,可以当作自己的私有网盘 ...

  7. Linux 下 离线下载服务部署 CCAA的安装使用

    Linux 下 离线下载服务部署 CCAA的安装使用 我的小站.Github CCAA 是服务器离线下载解决⽅案包,组件包含了Aria2 提供离线下载,ccaa_web⽀撑AriaNg运⾏, Aria ...

  8. Linux下redis的安装及部署

    Linux下redis的安装及部署 一.安装 1. 下载redis安装包 可去官网http://redis.io ,也可通过wget命令, wget http://download.redis.io/ ...

  9. Linux下nginx的安装及部署

    Linux下nginx的安装及部署 一. nginx的安装 1. nginx安装需要很多依赖包(并不知道是干神马的,连接好网络,敲命令直接安便是了) 安装GCC 和GCC-C++(若没有安装gcc) ...

最新文章

  1. 辩论届人机大战:IBM新AI完胜人类冠军!
  2. 谷歌发布新编程语言,专治SQL各种“不服”
  3. foreach是同步还是异步JAVA,Java中foreach与正常for循环效率对比
  4. python模拟购物车购物过程_python实现购物车+ATM机 第五天
  5. python安装pip_在MAC下安装pip,并关联到相应的python版本
  6. 二维数组(解引用、指针数组、数组的指针)——C语言
  7. C# 解决窗体假死的状态
  8. 【转载】URL中的文本IPv6地址的格式RFC2732
  9. python处理金融数据_python-金融数据处理demo
  10. 反编译 破解crash html editor winform [WinHTMLEditorControl.dll][.NET Win HTML Editor Control]
  11. Spring→简介核心作用范围、框架、接口编程、IOC控制反转、单元测试、Bean容器、注入、作用域、生命周期、自动装配注入、自动扫描@注解
  12. asp.net抓取网页html源代码失败 只因UserAgent作怪
  13. 中文字符频率统计python_使用 Python 统计中文字符的数量
  14. gifimageview 大小不受控制_大小不变,提示换药?别紧张!三个案例解读“肿瘤大小与疗效关系”...
  15. 125、什么是核心交换机的链路聚合、冗余、堆叠、热备份
  16. php opendir(),php之opendir()函数的用法
  17. bootstrap冻结表头功能实现
  18. 洛谷:P1653 猴子(图存储、逆向思维 删边 -->加边)
  19. 为什么你招不到合适的猎头顾问?浅谈猎企内部招聘
  20. C语言试题165之求三色旗问题

热门文章

  1. redis的daemonize设置为yes和no有啥区别呀,为啥我两个都试了之后的效果不是像网上说的那样,设置成No的话,redis也会一直运行呀
  2. 解决使用css元素放大动画导致的文字抖动模糊问题
  3. hdf heg 批量拼接_MODIS数据处理新工具(HDF-EOS To GeoTIFF Conversion Tool,HEG_2.15)官方使用说明...
  4. python文章抄袭检测_CSDN文章被洗稿、抄袭严重!用Python做一个“基于搜索引擎的文章查重工具”,解决!...
  5. html怎么设置网页的大小怎么设置,css怎么设置字体大小
  6. iOS设备 历代 机型对照表
  7. 医疗检查报告和影像资料,扫二维码就能查看!
  8. 互联网营销新模式,泰山众筹sun4.0模式了解一下
  9. dp入门(01/28)
  10. 内存规格的解释(Unbuffered DIMM,Registered DIMM和SODIMM)