node1 控制节点

yum -y install centos-release-openstack-newton

yum upgrade

yum -y install python-openstackclient

yum -y install mariadb mariadb-server python2-PyMySQL

yum -y  install rabbitmq-server

yum -y install memcached python-memcached

yum install -y openstack-keystone httpd mod_wsgi

yum install openstack-glance

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

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

yum install openstack-dashboard

yum install openstack-cinder

yum install openstack-cinder targetcli python-keystone

node2  计算节点

yum -y install centos-release-openstack-newton

yum upgrade

yum -y install python-openstackclient

yum -y install mariadb mariadb-server python2-PyMySQL

yum install openstack-nova-compute

yum install openstack-neutron-linuxbridge ebtables ipset

###############################################总览##################################

本向导描述了OpenStack Newton版本发布说明

#######################################################################################

两台虚拟机搭建

opensstack N版本搭建

192.168.80.181

192.168.80.182

vim /etc/hosts

192.168.80.181 linux-node1.com 控制节点

192.168.80.182 linux-node2.com 计算节点

#######################################################################################

官方文档地址

http://docs.openstack.org/newton/zh_CN/install-guide-rdo/

中文文档

https://docs.openstack.org/newton/zh_CN/install-guide-rdo/common/conventions.html

######################################################################################

                                                                                     概况

######################################################################################

示例的架构

控制器

计算

块设备存储

对象存储

网络

网络选项1:提供者网络

网络选项2:自服务网络

#####################################################################################

示例的架构

为了启动一个基本 :term:`virtual machine <virtual machine (VM)>`或者实例,这个示例架构要求至少两个节点(主机)。诸如块存储和对象存储这样的可选服务需要额外的节点。

这个示例架构不同于下面这样的最小生产结构

    1.网络代理驻留在控制节点上而不是在一个或者多个专用的网络节点上。

    2.私有网络的覆盖流量通过管理网络而不是专用网络


控制节点:至少两块网卡

The controller node runs the Identity service, Image service, management portions of Compute, management portion of Networking, various Networking agents, and the dashboard. It also includes supporting services such as an SQL database, message queue, and NTP.

计算:每个节点至少两块网卡

计算节点运行操作实例的 :term:`hypervisor`计算部分。默认情况下使用 :term:`KVM <kernel-based VM (KVM)>`作为hypervisor。计算节点同样运行网络服务代理,用来连接实例到虚拟网络,通过:term:`security groups <security group>`为实例提供防火墙服务。instances via .

块设备存储:

可选的块存储节点上包含了磁盘,块存储服务和共享文件系统会向实例提供这些磁盘。

为了简单起见,计算节点和本节点之间的服务流量使用管理网络。生产环境中应该部署一个单独的存储网络以增强性能和安全。 你可以部署超过一个块存储节点。每个块存储节点要求至少一块网卡。

对象存储:

可选的对象存储节点包含了磁盘。对象存储服务用这些磁盘来存储账号,容器和对象。

为了简单起见,计算节点和本节点之间的服务流量使用管理网络。生产环境中应该部署一个单独的存储网络以增强性能和安全。 这个服务要求两个节点。每个节点要求最少一块网卡。你可以部署超过两个对象存储节点。

网络

1.提供者服务


2.自服务网络


###########################################环境#####################################

控制节点: 1 处理器, 4 GB 内存, 及5 GB 存储

计算节点: 1 处理器, 2 GB 内存, 及10 GB 存储

######################################################################################

1.安全

下面的表格给出了需要密码的服务列表以及它们在指南中关联关系:

密码名称

描述

数据库密码(不能使用变量)

数据库的root密码

ADMIN_PASS

admin 用户密码

CINDER_DBPASS

块设备存储服务的数据库密码

CINDER_PASS

块设备存储服务的 cinder 密码

DASH_DBPASSDatabase password for the dashboard
DEMO_PASS

demo 用户的密码

GLANCE_DBPASS

镜像服务的数据库密码

GLANCE_PASS

镜像服务的 glance 用户密码

KEYSTONE_DBPASS

认证服务的数据库密码

NEUTRON_DBPASS

网络服务的数据库密码

NEUTRON_PASS

网络服务的 neutron 用户密码

NOVA_DBPASS

计算服务的数据库密码

NOVA_PASS

计算服务中``nova``用户的密码

RABBIT_PASS

RabbitMQ的guest用户密码

2.主机网络

在你按照你选择的架构,完成各个节点操作系统安装以后,你必须配置网络接口。我们推荐你禁用自动网络管理工具并手动编辑你相应版本的配置文件。更多关于如何配置你版本网络信息内容,参考 documentation 。

为了管理,所有节点都要求可以访问互联网,如安装包,安全更新,:term:’DNS <Domain Name System (DNS)>’和:term:’NTP<Network Time Protocol (NTP)>’。大部分情况下,节点应该通过管理网络接口访问互联网。为了突出网络隔离的重要性,这个架构示例中使用“私有地址空间 <https://tools.ietf.org/html/rfc1918>”用于网络管理,并假定物理网络设备通过:term:’NAT <Network Address Translation (NAT)>’或其他方式访问互联网。示例架构使用可路由的IP地址空间隔离服务商(外部)网络,并假定物理网络设备直接提供互联网访问。

在提供者网络架构中,所有实例直接连接到提供商网络。在自服务(私有)网络架构,实例可以连接到自服务或提供网络。自服务网络可以完全在openstack环境中或者通过外部网络使用:term:’NAT<Network Address Translation (NAT)>’提供某种级别的外部网络访问


示例架构假设使用如下网络:

    管理使用 10.0.0.0/24 带有网关 10.0.0.1,这个网络需要一个网关为所有节点提供网络访问用来管理,如安装包、安全更新,:term:’DNS<Domain Name System (DNS)>’和:term:’NTP <Network Time Protocol (NTP)>’。

    提供者网段 203.0.113.0/24,网关203.0.113.1这个网络需要一个网关来提供在环境中内部实例的访问。

3.网络时间NTP

你需要安装Chrony,一个在不同节点同步服务实现:term:’NTP <Network Time Protocol (NTP)>’的方案。我们建议你配置控制节点引用更准确的(lower stratum)NTP服务其,然后其他节点引用控制节点。

配置时间 

     ntpdate time1.aliyun.com 阿里云时间 或者

(1)在控制节点上执行这些步骤。

安装软件包:

# yum install chrony

编辑“/etc/chrony.conf”文件并在你的环境需要的情况下增加、修改或者删除这些键值:

server NTP_SERVER iburst

使用NTP服务器的主机名或者IP地址替换 NTP_SERVER 。配置支持设置多个 server 值。

#注解

控制节点默认跟公共服务器池同步时间。但是你也可以选择性配置其他服务器,比如你组织中提供的服务器。

为了让其它节点可以连接到控制节点上的chrony守护程序,请在“/etc/chrony.conf”文件中增加这个键值:

allow 10.0.0.0/24

如有必要,将 10.0.0.0/24 替换成你子网的相应描述。

启动 NTP 服务并将其配置为随系统启动:

# systemctl enable chronyd.service

# systemctl start chronyd.service

(2)其他节点服务器:

安装软件包:

# yum install chrony

编辑``/etc/chrony.conf`` 文件并注释除``server`` 键之外的所有内容。修改它引用控制节点:

server controller iburst

启动 NTP 服务并将其配置为随系统启动:

# systemctl enable chronyd.service

# systemctl start chronyd.service

(3)验证

我们建议您在继续进一步的操作之前验证 NTP 的同步。有些节点,特别是哪些引用了控制节点的,需要花费一些时间去同步。

在控制节点上执行这个命令:

# chronyc sources

  210 Number of sources = 2

  MS Name/IP address         Stratum Poll Reach LastRx Last sample

  ===============================================================================

  ^- 192.0.2.11                    2   7    12   137  -2814us[-3000us] +/-   43ms

  ^* 192.0.2.12                    2   6   177    46    +17us[  -23us] +/-   68ms

在 Name/IP address 列的内容应显示NTP服务器的主机名或者IP地址。在 S 列的内容应该在NTP服务目前同步的上游服务器前显示 *。

在所有其他节点执行相同命令:

# chronyc sources

  210 Number of sources = 1

  MS Name/IP address         Stratum Poll Reach LastRx Last sample

  ===============================================================================

  ^* controller                    3    9   377   421    +15us[  -87us] +/-   15ms

在 Name/IP address 列的内容应显示控制节点的主机名。

######################################################################################

镜像

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

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

3.openstack包

启用OpenStack库

在CentOS中, ``extras``仓库提供用于启用 OpenStack 仓库的RPM包。 CentOS 默认启用``extras``仓库,因此你可以直接安装用于启用OpenStack仓库的包。

yum -y install centos-release-openstack-newton   

主机升级包

yum upgrade 

安装openstack客户端

yum -y install python-openstackclient 

不安装,不启用selinux

RHEL和 CentOS 默认启用 SELinux 。安装 openstack-selinux 包实现对OpenStack服务的安全策略进行自动管理:

# yum install openstack-selinux


4.SQL数据库

大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上。指南中的步骤依据不同的发行版使用MariaDB或 MySQL。OpenStack 服务也支持其他 SQL 数据库,包括`PostgreSQL

(1)在linux-node1上安装:

yum -y install mariadb mariadb-server python2-PyMySQL

vim /etc/my.cnf.d/openstack.cnf

[mysqld]

bind-address = 192.168.80.181

default-storage-engine = innodb

innodb_file_per_table

max_connections = 10000

collation-server = utf8_general_ci

character-set-server = utf8

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

systemctl enable mariadb.service

systemctl start mariadb.service

mysql_secure_installation

(2)openstack-node1

安装消息队列:

     yum -y  install rabbitmq-server

开机自启

     systemctl enable rabbitmq-server.service

     systemctl start rabbitmq-server.service

添加openstack用户并设置密码为openstack

rabbitmqctl add_user openstack openstack

给openstack用户设置读写权限

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

安装rabbitmq web管理插件

rabbitmq-plugins enable rabbitmq_management

systemctl restart rabbitmq-server.service

http://192.168.80.181:15672/

用户名:guest

密  码:guest

(3)openstack-node1

安装包

yum -y install memcached python-memcached 

vim /etc/memcached.conf

192.168.80.181

开机自启

systemctl enable memcached.service

systemctl start memcached.service

########################################认证服务################################################

1.Identity service overview

服务器

一个中心化的服务器使用RESTful 接口来提供认证和授权服务。

Drivers

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

Modules

中间件模块运行于使用身份认证服务的OpenStack组件的地址空间中。这些模块拦截服务请求,取出用户凭据,并将它们送入中央是服务器寻求授权。中间件模块和OpenStack组件间的整合使用Python Web服务器网关接口。

2.安装和配置:

(1)先决条件:

openstack身份认证前,需要配置数据库和管理员令牌

创建keystone数据库,并授权和配置密码

 mysql -u root -p123456

 CREATE DATABASE keystone;

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';"

验证数据库是否创建成功

[root@linux-node1 keystone]# mysql -h 192.168.80.181 -ukeystone -pkeystone -e "use keystone; show tables;"

(2)安全并配置组件

yum install -y openstack-keystone httpd mod_wsgi 

vim /etc/keystone/keystone.conf   配置数据库访问 keystone账号和密码

[database]

connection = mysql+pymysql://keystone:keystone@192.168.80.181/keystone

[token]

provider = fernet

driver = memcache

[memcache]

servers = 192.168.80.181:11211

systemctl start memcached.service

systemctl enable memcached.service

[root@linux-node1 keystone]# vim /etc/sysconfig/memcached

PORT="11211"

USER="memcached"

MAXCONN="1024"

CACHESIZE="64"

OPTIONS="-l 192.168.80.181,::1"

systemctl start memcached.service

systemctl enable memcached.service

systemctl restart memcached.service

[root@linux-node1 keystone]# netstat -ntlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      12892/beam.smp     

tcp        0      0 192.168.80.181:3306     0.0.0.0:*               LISTEN      12089/mysqld       

tcp        0      0 192.168.80.181:11211    0.0.0.0:*               LISTEN      43577/memcached     

tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      12907/epmd         

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1484/sshd           

tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      12892/beam.smp     

tcp6       0      0 :::5672                 :::*                    LISTEN      12892/beam.smp     

tcp6       0      0 ::1:11211               :::*                    LISTEN      43577/memcached     

tcp6       0      0 :::4369                 :::*                    LISTEN      12907/epmd         

tcp6       0      0 :::22                   :::*                    LISTEN      1484/sshd


[root@linux-node1 keystone]# egrep -n "^[a-Z]" /etc/keystone/keystone.conf

640:connection = mysql+pymysql://keystone:keystone@192.168.80.181/keystone

1472:servers = 192.168.80.181:11211

2655:provider = fernet

2665:driver = memcache


从Keystone的配置文件中,我们可见,Token的提供者目前支持四种。 Token Provider:UUID, PKI, PKIZ, or Fernet

结合源码及官方文档,我们用一个表格来阐述一下它们之间的差异。


Provider方式

生成方式|长度|加密方式

优点

缺点

UUID

uuid.uuid4().hex,32字符,没有加密方式。

生成的Token,长度较短,使用方便。url使用方便,回收的方式,就是从后端删除即可,实现逻辑较为清晰。需要持久化后端存储,每次访问需要keystone相关服务进行认证。
PKIcms_sign_data(),使用base64 encoded进行编码(替换不安全的字符)粗略统计过长度4602字符,使用 Cryptographic Message Syntax (CMS)进行加密(默认的方式sha256)。使用证书及私钥生成,可以线下验证(不需要走keystone认证服务),长度负载重,不推荐用于生产部署 :keystone-manage pki_setup ,需要使用由一个受信任的CA颁发的证书
PKIZ同PKI,使用base64url encoding进行编码,在此基础上,使用压缩机制,长度上减小了一半,并且Token使用PKIZ_开头。较PKI长度上缩小了很多,长度负载较重,同上PKI
FernetMessagePacked负载数据,并使用crypto.encrypt(payload)加密,粗略统计长度183字符。使用对称加密,为了安全度提升,同时支持定期轮换。设计的逻辑,引入序列化,负载格式加以控制,基于此进行加密,长度比PKI(Z)要短。对称加密算法,安全性低

初始化认证服务的数据库:

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

 

初始化Fernet key:

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

Bootstrap the Identity service:

keystone-manage bootstrap --bootstrap-password admin \

--bootstrap-admin-url http://192.168.80.181:35357/v3/ \

--bootstrap-internal-url http://192.168.80.181:35357/v3/ \

--bootstrap-public-url http://192.168.80.181:5000/v3/ \

--bootstrap-region-id RegionOne

配置apache服务

#vim  /etc/httpd/conf/httpd.conf

ServerName 192.168.80.181:80

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

systemctl enable httpd.service

systemctl start httpd.service

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_PROJECT_NAME=admin

export OS_USER_DOMAIN_NAME=default

export OS_PROJECT_DOMAIN_NAME=default

export OS_AUTH_URL=http://192.168.80.181:35357/v3

export OS_IDENTITY_API_VERSION=3

(3)创建域。项目。用户和角色

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

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

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

创建“”demo“”项目

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

创建demo用户

openstack user create --domain default --password-prompt demo     密码我用的demo

创建demo角色

openstack role create user

添加user角色到demo项目和用户:

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

(4)验证操作

######################################不用做####################

     #因为安全性的原因,关闭临时认证令牌机制:

     #编辑 /etc/keystone/keystone-paste.ini 文件,从``[pipeline:public_api]``,[pipeline:admin_api]``和``[pipeline:api_v3]``部分删除           ``admin_token_auth 。

##################################################################

撤销临时环境变量``OS_AUTH_URL``和``OS_PASSWORD``

unset OS_AUTH_URL OS_PASSWORD

作为admin用户,请求认证令牌  输入admin

openstack --os-auth-url http://192.168.80.181:35357/v3 \

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

  --os-project-name admin --os-username admin token issue

作为demo用户,请求认证令牌    输入demo

 openstack --os-auth-url http://192.168.80.181:5000/v3 \

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

  --os-project-name demo --os-username demo token issue

(5)创建openstack 客户端环境脚本

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

[root@linux-node1 ~]# vim admin-openstack.sh

export OS_PROJECT_DOMAIN_NAME=Default

export OS_USER_DOMAIN_NAME=Default

export OS_PROJECT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=admin

export OS_AUTH_URL=http://192.168.80.181:35357/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

vim demo-openstack.sh

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://192.168.80.181:5000/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

加载脚本 来身份认证服务的环境变量位置和``admin``项目和用户证书:

[root@linux-node1 ~]# source admin-openstack.sh

请求认证令牌

[root@linux-node1 ~]# openstack token issue


同上

[root@linux-node1 ~]# source demo-openstack.sh

[root@linux-node1 ~]# openstack token issue


####################################镜像服务####################################

1.Image service overview

OpenStack镜像服务是IaaS的核心服务,如同 :ref:`get_started_conceptual_architecture`所示。它接受磁盘镜像或服务器镜像API请求,和来自终端用户或OpenStack计算组件的元数据定义。它也支持包括OpenStack对象存储在内的多种类型仓库上的磁盘镜像或服务器镜像存储。

大量周期性进程运行于OpenStack镜像服务上以支持缓存。同步复制(Replication)服务保证集群中的一致性和可用性。其它周期性进程包括auditors, updaters, 和 reapers。

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

glance-api

接收镜像API的调用,诸如镜像发现、恢复、存储。

glance-registry

存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。

警告:glance-registry是私有内部服务,用于服务OpenStack Image服务。不要向用户暴露该服务

数据库

存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。

镜像文件的存储仓库

Various repository types are supported including normal file systems (or any filesystem mounted on the glance-api controller node), Object Storage, RADOS block devices, VMware datastore, and HTTP. Note that some repositories will only support read-only usage.

元数据定义服务

通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。

(2)安装和配置openstack-node1

mysql -u root -p123456 -e "CREATE DATABASE glance;"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';"

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

[root@linux-node1 ~]# source admin-openstack.sh

创建glance用户

openstack user create --domain default --password-prompt glance    设置密码为glance

添加admin角色到glance用户和service项目上

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

创建glance服务实体

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

创建镜像服务的API端点

openstack endpoint create --region RegionOne  image public http://192.168.80.181:9292

openstack endpoint create --region RegionOne  image internal http://192.168.80.181:9292

openstack endpoint create --region RegionOne  image admin http://192.168.80.181:9292

安装包

 yum install openstack-glance -y

vim  /etc/glance/glance-api.conf

配置数据库访问

1748

connection = mysql+pymysql://glance:glance@192.168.80.181/glance

#在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:

3178

[keystone_authtoken]

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = glance

[paste_deploy]

3990

flavor = keystone

#在 [glance_store] 部分,配置本地文件系统存储和镜像文件位置:

[glance_store]

1864

stores = file,http

1896

default_store = file

2196

filesystem_store_datadir = /var/lib/glance/images/

数据库验证

mysql -h 192.168.80.181 -uglance -pglance -e "use glance; show tables;"

vim /etc/glance/glance-registry.conf

#在 [database] 部分,配置数据库访问:

1038

connection = mysql+pymysql://glance:glance@192.168.80.181/glance

#在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问:

1127

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = glance

[paste_deploy]

1911

flavor = keystone

写入镜像服务器数据库    忽略输出中任何不推荐使用的信息。

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

启动镜像服务并将其配置为随机启动:

systemctl enable openstack-glance-api.service \

  openstack-glance-registry.service

systemctl start openstack-glance-api.service \

  openstack-glance-registry.service

(3)验证操作

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

openstack image list

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

source admin-openstack.sh

下载源镜像:

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

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

openstack image create "cirros" \

  --file cirros-0.3.4-x86_64-disk.img \

  --disk-format qcow2 --container-format bare \

  --public

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

openstack image list

################################计算服务################################

1.Compute service overview

Use OpenStack Compute to host and manage cloud computing systems. OpenStack Compute is a major part of an Infrastructure-as-a-Service (IaaS) system. The main modules are implemented in Python.

OpenStack计算组件请求OpenStack Identity服务进行认证;请求OpenStack Image服务提供磁盘镜像;为OpenStack dashboard提供用户与管理员接口。磁盘镜像访问限制在项目与用户上;配额以每个项目进行设定(例如,每个项目下可以创建多少实例)。OpenStack组件可以在标准硬件上水平大规模扩展,并且下载磁盘镜像启动虚拟机实例。

OpenStack计算服务由下列组件所构成:

``nova-api``服务

接收和响应来自最终用户的计算API请求。此服务支持OpenStack计算服务API,Amazon EC2 API,以及特殊的管理API用于赋予用户做一些管理的操作。它会强制实施一些规则,发起多数的编排活动,例如运行一个实例。

``nova-api-metadata``服务

接受来自虚拟机发送的元数据请求。``nova-api-metadata``服务一般在安装``nova-network``服务的多主机模式下使用。更详细的信息,请参考OpenStack管理员手册中的链接`Metadata service <http://docs.openstack.org/admin-guide/compute-networking-nova.html#metadata-service>`。

``nova-compute``服务

一个持续工作的守护进程,通过Hypervior的API来创建和销毁虚拟机实例。例如:

    XenServer/XCP 的 XenAPI

    KVM 或 QEMU 的 libvirt

    VMware 的 VMwareAPI

过程是蛮复杂的。最为基本的,守护进程同意了来自队列的动作请求,转换为一系列的系统命令如启动一个KVM实例,然后,到数据库中更新它的状态。

``nova-scheduler``服务

拿到一个来自队列请求虚拟机实例,然后决定那台计算服务器主机来运行它。

``nova-conductor``模块

Mediates interactions between the nova-compute service and the database. It eliminates direct accesses to the cloud database made by the nova-compute service. The nova-conductor module scales horizontally. However, do not deploy it on nodes where the nova-compute service runs. For more information, see Configuration Reference Guide.

nova-cert 模块

服务器守护进程向Nova Cert服务提供X509证书。用来为``euca-bundle-image``生成证书。仅仅是在EC2 API的请求中使用

nova-network worker 守护进程

与``nova-compute``服务类似,从队列中接受网络任务,并且操作网络。执行任务例如创建桥接的接口或者改变IPtables的规则。

nova-consoleauth 模块

授权控制台代理所提供的用户令牌。详情可查看``nova-novncproxy``和 nova-xvpvncproxy。该服务必须为控制台代理运行才可奏效。在集群配置中你可以运行二者中任一代理服务而非仅运行一个nova-consoleauth服务。更多关于nova-consoleauth的信息,请查看`About nova-consoleauth <http://docs.openstack.org/admin-guide/compute-remote-console-access.html#about-nova-consoleauth>`__。

nova-novncproxy 模块

提供一个代理,用于访问正在运行的实例,通过VNC协议,支持基于浏览器的novnc客户端。

``nova-spicehtml5proxy``守护进程

提供一个代理,用于访问正在运行的实例,通过 SPICE 协议,支持基于浏览器的 HTML5 客户端。

nova-xvpvncproxy 守护进程

提供一个代理,用于访问正在运行的实例,通过VNC协议,支持OpenStack特定的Java客户端。

nova-cert 守护进程

X509 证书。

nova 客户端

用于用户作为租户管理员或最终用户来提交命令。

队列

A central hub for passing messages between daemons. Usually implemented with RabbitMQ, also can be implemented with another AMQP message queue, such as ZeroMQ.

SQL数据库

存储构建时和运行时的状态,为云基础设施,包括有:

    可用实例类型

    使用中的实例

    可用网络

    项目

理论上,OpenStack计算可以支持任何和SQL-Alchemy所支持的后端数据库,通常使用SQLite3来做测试可开发工作,MySQL和PostgreSQL 作生产环境。

(2)安装并配置控制节点

mysql -u root -p123456 -e "CREATE DATABASE nova;"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';"

mysql -u root -p123456 -e "CREATE DATABASE nova_api;"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova';"

数据库验证

mysql -h 192.168.80.181 -unova -pnova -e "use nova;show tables;"

mysql -h 192.168.80.181 -unova -pnova -e "use nova_api;show tables;"

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

[root@linux-node1 ~]# source admin-openstack.sh

创建服务证书

     创建nova用户

openstack user create --domain default --password=nova nova

     给nova添加admin角色

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

创建 nova 服务实体:

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

创建 Compute 服务 API 端点 :

openstack endpoint create --region RegionOne \

  compute public http://192.168.80.181:8774/v2.1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  compute internal http://192.168.80.181:8774/v2.1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  compute admin http://192.168.80.181:8774/v2.1/%\(tenant_id\)s

安装包

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

[root@linux-node1 ~]# vim /etc/nova/nova.conf

3661

connection= mysql+pymysql://nova:nova@192.168.80.181/nova_api

4678

connection = mysql+pymysql://nova:nova@192.168.80.181/nova

3052

enabled_apis=osapi_compute,metadata

3602

transport_url = rabbit://openstack:openstack@192.168.80.181

14

auth_strategy=keystone

5429

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = nova

password = nova

2062

use_neutron = True

3265

firewall_driver = nova.virt.firewall.NoopFirewallDriver

8386

vncserver_listen=0.0.0.0

8398

vncserver_proxyclient_address=192.168.80.181

4814

api_servers=http://192.168.80.181:9292

6707

lock_path=/var/lib/nova/tmp

同步Compute 数据库:  忽略输出中任何不推荐使用的信息

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

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

启动 Compute 服务并将其设置为随系统启动:

systemctl enable openstack-nova-api.service \

  openstack-nova-consoleauth.service openstack-nova-scheduler.service \

  openstack-nova-conductor.service openstack-nova-novncproxy.service

systemctl start openstack-nova-api.service \

  openstack-nova-consoleauth.service openstack-nova-scheduler.service \

  openstack-nova-conductor.service openstack-nova-novncproxy.service

systemctl restart openstack-nova-api.service \

  openstack-nova-consoleauth.service openstack-nova-scheduler.service \

  openstack-nova-conductor.service openstack-nova-novncproxy.service

openstack host list


nova service-list


(3)安装和配置计算节点

在openstack-node2上

yum install centos-release-openstack-newton -y

yum upgrade -y

yum install python-openstackclient -y

yum install openstack-nova-compute -y

拷贝控制节点的配置文件,然后修改

[root@linux-node1 ~]# scp /etc/nova/nova.conf 192.168.80.182:/etc/nova/nova.conf

[root@openstack-node2 ~]#chown root:nova nova.conf  传过去后要修改权限

https://docs.openstack.org/newton/zh_CN/install-guide-rdo/nova-compute-install.html  

配置计算节点

[root@linux-node2 nova]# vim  /etc/nova/nova.conf

3662 注释掉 #connection=mysql+pymysql://nova:nova@192.168.80.181/nova_api

4678 注释掉 #connection=mysql+pymysql://nova:nova@192.168.80.181/nova

8396

vncserver_proxyclient_address=192.168.80.182

8415

novncproxy_base_url=http://192.168.80.181:6080/vnc_auto.html

8361

enabled=true

8377

keymap=en-us

5674

virt_type=kvm

#在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:

3602

transport_url = rabbit://openstack:openstack@192.168.80.181


[root@linux-node1 ~]#

systemctl restart openstack-nova-api.service \

  openstack-nova-consoleauth.service openstack-nova-scheduler.service \

  openstack-nova-conductor.service openstack-nova-novncproxy.service

[root@linux-node1 ~]#

systemctl status openstack-nova-api.service \

  openstack-nova-consoleauth.service openstack-nova-scheduler.service \

  openstack-nova-conductor.service openstack-nova-novncproxy.service


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

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

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

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

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

[libvirt]

...

virt_type = qemu

开机自启

[root@linux-node2 ~]#

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

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

systemctl status libvirtd.service openstack-nova-compute.service

(4)验证操作




####################################################网络服务##################################

1.Networking service overview

OpenStack Networking(neutron),允许创建、插入接口设备,这些设备由其他的OpenStack服务管理。插件式的实现可以容纳不同的网络设备和软件,为OpenStack架构与部署提供了灵活性。

它包含下列组件:

neutron-server

接收和路由API请求到合适的OpenStack网络插件,以达到预想的目的。

OpenStack网络插件和代理

Plug and unplug ports, create networks or subnets, and provide IP addressing. These plug-ins and agents differ depending on the vendor and technologies used in the particular cloud. OpenStack Networking ships with plug-ins and agents for Cisco virtual and physical switches, NEC OpenFlow products, Open vSwitch, Linux bridging, and the VMware NSX product.

常见的代理L3(3层),DHCP(动态主机IP地址),以及插件代理。

消息队列

大多数的OpenStack Networking安装都会用到,用于在neutron-server和各种各样的代理进程间路由信息。也为某些特定的插件扮演数据库的角色,以存储网络状态

OpenStack网络主要和OpenStack计算交互,以提供网络连接到它的实例。

2.网络(neutron)概念

网络服务提供网络,子网以及路由这些对象的抽象概念。每个抽象概念都有自己的功能,可以模拟对应的物理设备:网络包括子网,路由在不同的子网和网络间进行路由转发。

对于任意一个给定的网络都必须包含至少一个外部网络。不想其他的网络那样,外部网络不仅仅是一个定义的虚拟网络。相反,它代表了一种OpenStack安装之外的能从物理的,外部的网络访问的视图。外部网络上的IP地址可供外部网络上的任意的物理设备所访问

外部网络之外,任何 Networking 设置拥有一个或多个内部网络。这些软件定义的网络直接连接到虚拟机。仅仅在给定网络上的虚拟机,或那些在通过接口连接到相近路由的子网上的虚拟机,能直接访问连接到那个网络上的虚拟机。

如果外部网络想要访问实例或者相反实例想要访问外部网络,那么网络之间的路由就是必要的了。每一个路由都配有一个网关用于连接到外部网络,以及一个或多个连接到内部网络的接口。就像一个物理路由一样,子网可以访问同一个路由上其他子网中的机器,并且机器也可以访问路由的网关访问外部网络。

另外,你可以将外部网络的IP地址分配给内部网络的端口。不管什么时候一旦有连接连接到子网,那个连接被称作端口。你可以给实例的端口分配外部网络的IP地址。通过这种方式,外部网络上的实体可以访问实例.

网络服务同样支持安全组。安全组允许管理员在安全组中定义防火墙规则。一个实例可以属于一个或多个安全组,网络为这个实例配置这些安全组中的规则,阻止或者开启端口,端口范围或者通信类型。

每一个Networking使用的插件都有其自有的概念。虽然对操作VNI和OpenStack环境不是至关重要的,但理解这些概念能帮助你设置Networking。所有的Networking安装使用了一个核心插件和一个安全组插件(或仅是空操作安全组插件)。另外,防火墙即服务(FWaaS)和负载均衡即服务(LBaaS)插件是可用的。

3.安装并配置控制节点openstack-node1

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

mysql -u root -p123456 -e "CREATE DATABASE neutron;"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';"

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

[root@linux-node1 ~]# source admin-openstack.sh

创建``neutron``用户:

openstack user create --domain default --password=neutron neutron

添加``admin`` 角色到``neutron`` 用户:

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

创建``neutron``服务实体:

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

创建网络服务API端点:

openstack endpoint create --region RegionOne network public http://192.168.80.181:9696

openstack endpoint create --region RegionOne network internal http://192.168.80.181:9696

openstack endpoint create --region RegionOne network admin http://192.168.80.181:9696

从以下的网络选项中选择一个来配置网络服务。之后,返回到这里,进行下一步:ref:neutron-controller-metadata-agent。

以下是网络1

[root@linux-node1 ~]# vim /etc/neutron/neutron.conf

#在 [database] 部分,配置数据库访问:

722

connection = mysql+pymysql://neutron:neutron@192.168.80.181/neutron

27

auth_strategy = keystone

#在``[DEFAULT]``部分,启用ML2插件并禁用其他插件

30

core_plugin = ml2

33

service_plugins =

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

802

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = neutron

password = neutron

#在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:

530

transport_url = rabbit://openstack:openstack@192.168.80.181

#在``[DEFAULT]``和``[nova]``部分,配置网络服务来通知计算节点的网络拓扑变化:

118

notify_nova_on_port_status_changes = true

122

notify_nova_on_port_data_changes = true

1001

[nova]

auth_url = http://192.168.80.181:35357

auth_type = password

project_domain_name = Default

user_domain_name = Default

region_name = RegionOne

project_name = service

username = nova

password = nova

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

1123

lock_path = /var/lib/neutron/tmp

[root@linux-node1 ~]# egrep '^[a-Z]' /etc/neutron/neutron.conf

auth_strategy = keystone

core_plugin = ml2

service_plugins =

notify_nova_on_port_status_changes = true

notify_nova_on_port_data_changes = true

transport_url = rabbit://openstack:openstack@192.168.80.181

connection = mysql+pymysql://neutron:neutron@192.168.80.181/neutron

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = neutron

password = neutron

auth_url = http://192.168.80.181:35357

auth_type = password

project_domain_name = Default

user_domain_name = Default

region_name = RegionOne

project_name = service

username = nova

password = nova

lock_path = /var/lib/neutron/tmp


配置Modular Layer 2 (ML2) 插件

[root@linux-node1 ~]# vim /etc/neutron/plugins/ml2/ml2_conf.ini

ML2插件使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施

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

#在``[ml2]``部分,启用flat和VLAN网络:

109

type_drivers = flat,vlan,gre,vxlan,geneve

在``[ml2]``部分,启用Linuxbridge机制:

118

mechanism_drivers = linuxbridge

114

tenant_network_types = flat,vlan,gre,vxlan,geneve

#在``[ml2]`` 部分,启用端口安全扩展驱动:

123

extension_drivers = port_security

160

flat_networks = public

#在 ``[securitygroup]``部分,启用 ipset 增加安全组的方便性:

237

enable_ipset = true

配置Linuxbridge代理

[root@linux-node1 ~]# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

#在``[linux_bridge]``部分,将公共虚拟网络和公共物理网络接口对应起来:

143

physical_interface_mappings = public:eth0      我的是ens32

#在``[vxlan]``部分,禁止VXLAN覆盖网络:

177

enable_vxlan = False

#在 ``[securitygroup]``部分,启用安全组并配置 Linux 桥接 iptables 防火墙驱动:

156

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

162

enable_security_group = true

配置DHCP代理

在``[DEFAULT]``部分,配置Linuxbridge驱动接口,DHCP驱动并启用隔离元数据,这样在公共网络上的实例就可以通过网络来访问元数据

[root@linux-node1 ~]#  vim /etc/neutron/dhcp_agent.ini

17

interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

34

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

44

enable_isolated_metadata = True

配置元数据代理

在``[DEFAULT]`` 部分,配置元数据主机以及共享密码:

[root@linux-node1 ~]# vim /etc/neutron/metadata_agent.ini

22

nova_metadata_ip = 192.168.80.181

34

在``[DEFAULT]`` 部分,配置元数据主机以及共享密码:

metadata_proxy_shared_secret = wl

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

在``[neutron]``部分,配置访问参数,启用元数据代理并设置密码:

[root@linux-node1 ~]# vim /etc/nova/nova.conf

6472

url = http://192.168.80.181:9696

auth_url = http://192.168.80.181:35357

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = neutron

password = neutron

service_metadata_proxy = True

metadata_proxy_shared_secret = wl

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

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

同步数据库:

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


重启计算api服务

systemctl restart openstack-nova-api.service

当系统启动时,启动 Networking 服务并配置它启动。

systemctl enable neutron-server.service \

  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

  neutron-metadata-agent.service

systemctl restart neutron-server.service \

  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

  neutron-metadata-agent.service

最后再验证

[root@linux-node1 ~]# neutron agent-list



(4)安装并配置计算节点

在openstack-node2

 yum install openstack-neutron-linuxbridge ebtables ipset

[root@linux-node1 ~]# scp /etc/neutron/neutron.conf root@192.168.80.182:/etc/neutron/

再2上修改权限

[root@openstack-node2 neutron]# chown root:neutron neutron.conf

https://docs.openstack.org/newton/zh_CN/install-guide-rdo/neutron-compute-install.html

需要配置通用配置

以下记录并不全

[root@linux-node2 neutron]#  vim /etc/neutron/neutron.conf

722 删除

# connection = mysql+pymysql://neutron:neutron@192.168.80.181/neutron

1002删除

#删除如下内容-----------------

[nova]           #保留此行

auth_url = http://192.168.80.181:35357

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = nova

password = nova

118删除

# notify_nova_on_port_status_changes = true

122删除

# notify_nova_on_port_data_changes = true

30删除  

core_plugin = ml2

33删除 

service_plugins =

配置网络选项

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

在``[neutron]`` 部分,配置访问参数:

[root@linux-node2 neutron]# vim /etc/nova/nova.conf

6469

url = http://192.168.80.181:9696

auth_url = http://192.168.80.181:35357

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = neutron

password = neutron

[root@linux-node1 ~]# scp /etc/neutron/plugins/ml2/linuxbridge_agent.ini root@192.168.80.182:/etc/neutron/plugins/ml2/

选择与您之前在控制节点上选择的相同的网络选项。之后,回到这里并进行下一步

[root@linux-node2 ~]# chown root:neutron /etc/neutron/plugins/ml2/linuxbridge_agent.ini

(5)验证操作

neutron ext-list

systemctl restart openstack-nova-compute.service

启动Linuxbridge代理并配置它开机自启动:

# systemctl enable neutron-linuxbridge-agent.service

# systemctl start neutron-linuxbridge-agent.service



##################################################################

                                        以下这部分可以先不做--先去安装仪表盘

###################################################################

(6)下一步


##########################################仪表盘#####################################

1.安装和配置  控制节点配置

# yum install openstack-dashboard

[root@linux-node1 neutron]# cd /etc/openstack-dashboard/

[root@linux-node1 openstack-dashboard]# ll

total 108

-rw-r----- 1 root apache   201 Nov  4 13:52 ceilometer_policy.json

-rw-r----- 1 root apache  5391 Nov  4 13:52 cinder_policy.json

-rw-r----- 1 root apache  1244 Nov  4 13:53 glance_policy.json

-rw-r----- 1 root apache  4544 Nov  4 13:52 heat_policy.json

-rw-r----- 1 root apache  9699 Nov  4 13:52 keystone_policy.json

-rw-r----- 1 root apache 30940 Jan 22 18:21 local_settings

-rw-r----- 1 root apache 10476 Nov  4 13:52 neutron_policy.json

-rw-r----- 1 root apache 28383 Nov  4 13:52 nova_policy.json

[root@linux-node2 openstack-dashboard]# vim local_settings

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

 29 ALLOWED_HOSTS = ['*','localhost']

配置API版本:

 55 OPENSTACK_API_VERSIONS = {

 56     "data-processing": 1.1,

 57     "identity": 3,

 58     "image": 2,

 59     "volume": 2,

 60     "compute": 2,

 61 }

启用对域的支持

 66 OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

 74 OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'default'

启用第3版认证API:

160 OPENSTACK_HOST = "192.168.80.182"

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

162 OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

如果您选择网络参数1,禁用支持3层网络服务:

273 OPENSTACK_NEUTRON_NETWORK = {

274     'enable_router': False,

275     'enable_quotas': False,

276     'enable_ipv6': False,

277     'enable_distributed_router': False,

278     'enable_ha_router': False,

279     'enable_lb': False,

280     'enable_firewall': False,

281     'enable_***': False,

282     'enable_fip_topology_check': False,

可以选择性地配置时区:

408 TIME_ZONE = "Asia/Shanghai"

# systemctl restart httpd.service memcached.service

2.验证操作

验证仪表盘的操作。

在浏览器中输入 ``http://controller/dashboard``访问仪表盘。

验证使用 admin 或者``demo``用户凭证和``default``域凭证。


##############################################块存储服务# #############

块存储服务(cinder)为实例提供块存储。存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SAN,NFS,ISCSI,Ceph等。

典型情况下,块服务API和调度器服务运行在控制节点上。取决于使用的驱动,卷服务器可以运行在控制节点、计算节点或单独的存储节点。

1.块存储服务概览

OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。

块存储服务通常包含下列组件:

cinder-api

接受API请求,并将其路由到``cinder-volume``执行。

cinder-volume

与块存储服务和例如``cinder-scheduler``的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。``cinder-volume``服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。

cinder-scheduler守护进程

选择最优存储提供节点来创建卷。其与``nova-scheduler``组件类似。

cinder-backup daemon

``cinder-backup``服务提供任何种类备份卷到一个备份存储提供者。就像``cinder-volume``服务,它与多种存储提供者在驱动架构下进行交互。

消息队列

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

装包

yum install openstack-cinder

2.安装并配置控制节点

mysql -u root -p123456 -e "CREATE DATABASE cinder;"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';"

mysql -u root -p123456 -e "GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';"

要创建服务证书,完成这些步骤:

创建一个 cinder 用户:

openstack user create --domain default --password=cinder cinder

添加 admin 角色到 cinder 用户上。

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

创建 cinder 和 cinderv2 服务实体:

openstack service create --name cinder \

  --description "OpenStack Block Storage" volume

 openstack service create --name cinderv2 \

  --description "OpenStack Block Storage" volumev2

创建块设备存储服务的 API 入口点:

openstack endpoint create --region RegionOne \

  volume public http://192.168.80.181:8776/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  volume internal http://192.168.80.181:8776/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  volume admin http://192.168.80.181:8776/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  volumev2 public http://192.168.80.181:8776/v2/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  volumev2 internal http://192.168.80.181:8776/v2/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

  volumev2 admin http://192.168.80.181:8776/v2/%\(tenant_id\)s

[root@openstack-node1 ~]#vim  /etc/cinder/cinder.conf

[DEFAULT]

auth_strategy = keystone

transport_url = rabbit://openstack:openstack@192.168.80.181

[database]

connection = mysql+pymysql://cinder:cinder@192.168.80.181/cinder

[keystone_authtoken]

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = cinder

password = cinder

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

初始化块设备服务的数据库:

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

配置计算节点使用块存储

[root@openstack-node1 ~]#vim  /etc/nova/nova.conf 

[cinder]os_region_name = RegionOne

重启计算API 服务:

# systemctl restart openstack-nova-api.service

启动块设备存储服务,并将其配置为开机自启:

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

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

安装并配置一个存储节点   我这里就在192.168.80.181 本地 添加两块盘 配置了

安装 LVM 包:

# yum install lvm2

启动LVM的metadata服务并且设置该服务随系统启动:

# systemctl enable lvm2-lvmetad.service

# systemctl start lvm2-lvmetad.service

创建LVM 物理卷 /dev/sdb:

# pvcreate /dev/sdb1 /dev/sdc1

创建 LVM 卷组 cinder-volumes:

# vgcreate cinder-volumes /dev/sdb1 /dev/sdc1

#vim  /etc/lvm/lvm.conf  以下可以限制磁盘     不要做  导致服务不是up

devices {

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

yum install openstack-cinder targetcli python-keystone

安装软件包:

# yum install openstack-cinder targetcli python-keystone

编辑 /etc/cinder/cinder.conf,同时完成如下动作:

[database]

connection = mysql+pymysql://cinder:cinder@192.168.80.181/cinder

在``[DEFAULT]``部分,配置``RabbitMQ``消息队列访问权限:

[DEFAULT]

transport_url = rabbit://openstack:openstack@192.168.80.181

在 “[DEFAULT]” 和 “[keystone_authtoken]” 部分,配置认证服务访问:

[DEFAULT]

auth_strategy = keystone

[keystone_authtoken]

...

auth_uri = http://192.168.80.181:5000

auth_url = http://192.168.80.181:35357

memcached_servers = 192.168.80.181:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = cinder

password = cinder

将其中的``MANAGEMENT_INTERFACE_IP_ADDRESS``替换为存储节点上的管理网络接口的IP 地址,例如样例架构 <overview-example-architectures>中所示的第一台节点 10.0.0.41 。

在``[lvm]``部分中,配置LVM后端,包括LVM驱动,``cinder-volumes``卷组 ,iSCSI 协议和适当的 iSCSI服务。如果``[lvm]``部分不存在,则创建它:

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

volume_group = cinder-volumes

iscsi_protocol = iscsi

iscsi_helper = lioadm

[DEFAULT]

enabled_backends = lvm

后端名字是任意的。比如,本教程使用驱动的名字作为后端的名字。

在 [DEFAULT] 区域,配置镜像服务 API 的位置:

[DEFAULT]

glance_api_servers = http://192.168.80.181:9292

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

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

启动块存储卷服务及其依赖的服务,并将其配置为随系统启动:

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

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

[root@openstack-node1 ~]# openstack volume service list

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

| Binary           | Host                | Zone | Status  | State | Updated At                 |

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

| cinder-scheduler | openstack-node1     | nova | enabled | up    | 2017-07-13T08:46:18.000000 |

| cinder-volume    | openstack-node1@lvm | nova | enabled | up    | 2017-07-13T08:46:18.000000 |

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

[root@openstack-node1 ~]#

####################################启动一个实例###########################

https://docs.openstack.org/newton/zh_CN/install-guide-rdo/launch-instance.html#launch-instance

创建虚拟网络

创建m1.nano类型

生成一个键值对

增加安全组规则

启动一个实例

块设备存储

编排

共享文件系统

创建m1.nano类型

默认的最小规格的主机需要512 MB内存。对于环境中计算节点内存不足4 GB的,我们推荐创建只需要64 MB的``m1.nano``规格的主机。若单纯为了测试的目的,请使用``m1.nano``规格的主机来加载CirrOS镜像

[root@linux-node1 ~]# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano

生成一个键值对

导入``demo``项目凭证

sh demo-openstack.sh

生成和添加秘钥对:

[root@linux-node1 ~]# ssh-keygen -q -N ""

Enter file in which to save the key (/root/.ssh/id_rsa):

[root@linux-node1 ~]# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

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

| Field       | Value                                           |

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

| fingerprint | 10:61:a4:8f:30:92:ac:ad:b8:8c:97:92:e4:61:a2:eb |

| name        | mykey                                           |

| user_id     | a6ec85b1bb7f47829403132fbc45a95f                |

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


nova keypair-list

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0

添加规则到 default 安全组。

  • Permit ICMP (ping):

[root@linux-node1 ~]# openstack security group rule create --proto icmp default

HttpException: Conflict

允许安全 shell (SSH) 的访问:

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

创建虚拟网络

根据你在网络选项中的选择来创建虚拟网络。如果你选择选项1,只需创建一个公有网络。如果你选择选项2,同时创建一个公有网络和一个私有网络

在你完成自己环境中合适网络的创建后,你可以继续后面的步骤来准备创建实例。

创建名为public 网络

neutron net-create -shared --:physical_network public2 -provider:network_type flat public-net2

#neutron net-create --shared  --provider:physical_network public --provider:network_type  flat public-net 

创建网络

openstack network create  --share   \

  --provider-physical-network public \

  --provider-network-type flat public

openstack subnet create --network public \

  --allocation-pool start=192.168.80.210,end=192.168.80.220 \

  --dns-nameserver 114.114.114.114 --gateway 192.168.80.1 \

  --subnet-range 192.168.80.0/24 public-subnet

neutron subnet-list

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

列出可用类型:

openstack flavor list

生成和添加秘钥对:

ssh-keygen -q -N ""

openstack keypaircreate --public-key ~/.ssh/id_rsa.pub mykey

验证公钥的添加:

openstack keypair list

[root@linux-node1 ~]# openstack image list

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

| ID                                   | Name   | Status |

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

| 7caa0da4-0b90-45c9-8769-692386094571 | cirros | active |

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

[root@linux-node1 ~]# openstack security group list

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

| ID                                   | Name    | Description            | Project                          |

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

| 5f×××65-e79d-4e1b-a0dd-00163c04fb48 | default | Default security group | da41e6982782463ab9ecc5a1fb4cf226 |

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

[root@linux-node1 ~]# openstack network list

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

| ID                                   | Name   | Subnets                              |

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

| 3a90570c-93bf-4069-9510-f682f5c8a332 | public | a992425e-6d09-43d7-9b7f-5b4088f70d58 |

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

[root@linux-node1 ~]#  openstack flavor list

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

| ID | Name    | RAM | Disk | Ephemeral | VCPUs | Is Public |

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

| 0  | m1.nano |  64 |    1 |         0 |     1 | True      |

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

启动云主机

openstack server create --flavor m1.nano --image cirros \

--nic net-id=3a90570c-93bf-4069-9510-f682f5c8a332 --security-group default \

--key-name mykey demo-instance

检查实例的状态:

openstack server list

获取你势力的 Virtual Network Computing (VNC) 会话URL并从web浏览器访问它:

openstack console url show demo-instance

systemctl restart httpd.service memcached.service

#########################################启动一个实例######################################

创建虚拟网络

创建m1.nano类型

生成一个键值对

增加安全组规则

启动一个实例

块设备存储

编排

共享文件系统

#########################################其他服务####################################

裸金属服务(ironic)

容器的基础设施管理服务(magnum)

数据库服务(trove)

秘钥管理器服务

云消息服务(zaqar)

对象存储服务(swift)

编排服务(heat)

共享文件系统服务(manila)

监测告警服务(aodh)

Telemetry 数据收集服务(ceilometer)

#############################################社区支持#################################

文档

<link href=”http://ask.openstack.org“>问答论坛</link>

OpenStack 邮件列表

OpenStack 维基百科

Launchpad的Bug区

The OpenStack 在线聊天室频道

文档反馈

OpenStack分发包

#############################################术语表###################################

0-9

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Z