openstack

1.了解openopenstack各个服务组件

1.1.看板服务 / Dashboard
openopenstack中的管理界面,基于python的web框架Django构建而成的,Horizon使它的项目名称,项目(租户)和管理员都可以登录到Dashboard上面并对自己的资源进行管理,包括:虚拟机的管理、项目(租户)网络的管理、虚拟机磁盘的管理、镜像的管理、对象存储的管理。
1.2.身份认证服务 / Identity Service
openopenstack中负责身份认证的服务组件,keystone是它的项目名称,它另一个主要功能就是提供Catalog服务,通过配置服务的endpoint来提供cli工具提供服务终端地址,并提供rest api接口服务。
1.3.网络服务 / Network Service
openopenstack中提供网络服务的组件,Neutron是他的项目名称,主要提供网络自助服务给项目(租户)使用,并支持各种插件比如openvswitch、linux bridge等插件,并对网络的自助服务提供rest api接口服务。
1.4.块存储 / Volume Service
在openopenstack中为虚拟机提供磁盘服务,Cinder是它的项目名称,支持各种文件系统,默认使用了LVM,你可以使用其他的文件系统包括Gluster、Ceph、NFS。
1.5.计算服务 / Compute Service
为虚拟机提供计算服务,是openopenstack中的一个核心组件,Nova是它的项目名称,它好办和nova conductor和nova scheduler组件,前者负责数据库连接,后者负责虚拟机在计算节点上的调度,并将服务做成了rest api接口服务。
1.6.镜像服务 / Image Service
为计算服务提供镜像服务,它的项目代号叫做Glance,你可以从社区下载大部分的主流操作系统的Cloud Image,默认镜像保存在本地磁盘,你可以通过配置将它存放到对象存储(Swift、Ceph或者Gluster)中
1.7.对象存储 / Object Storage
提供对象存储服务,Swift是它的项目名称,你可以存放文件到对象存储中,经常被用于存放镜像和虚拟机磁盘的备份,并提供了rest api借口服务以便调用。
1.8.编排服务 / Orchestration
提供编排服务,Heat是它的项目名称,通过编辑yaml文件就可以将你要使用的资源预先定义在yaml文件中,然后一次性运行yaml文件,Heat Engine会将yaml文件转化为openopenstack可执行的命令行并调度或创建yaml文件中定义的资源,另外Heat也支持AWS的Cloud Formation格式。

2.身份认证服务/Identity Service(Keystone)

2.1.学习目标
管理endpoint,添加删除endpoint
管理项目(租户)、用户、角色、Domain
创建环境变量
检查服务运行正常
2.2.概述
Keystone主要是提供用户的身份认证和openopenstack各个项目之间的身份票据(token)认证服务,简单看下它是如何工作的,我们看下图。

从上图看到用户需要请求openopenstack资源的话,必须先跟keystone打交道,拿到token以后就可以请求openopenstack的资源了,当Nova拿到传递过来的token以后,Nova会将token发送给keystone再做验证,以确保客户没有自行更改token,nova再次向neutron请求网络资源并将token发送过去,neutron收到token以后同样也会向keystone做验证。其他的服务组件基本也遵循以上逻辑。
(Note:用户名和密码的检查要访问数据库,用token就不需要访问数据库,节省IO)
2.3.术语
a)User
openopenstack最基本的用户,一个通常意义上的账号有用户名和密码还有一些相关的比如邮件等信息,在openopenstack中只是创建一个用户是不可以使用openopenstack中的资源的。
b)Role
角色是限制用户对openopenstack中的资源访问权限的,角色只有当把用户添加到一个租户中去的时候才会和用户产生关联,而且一个用户在不同的租户当中可以属于不同的角色。
c)Group
组顾名思义就是一个用户的集合,一般我们会把一个用户关联到一个项目中,每次关联的时候都要设置一个角色比较麻烦,有了组以后我们可以把组加到租户当中去并关联一个角色,以后所有加入到这个组当中的用户就继承了这个组在这个租户中的角色。
d)Project
Project顾名思义是项目的意思或者用我们熟知的话就是租户,在本书中我们都会称之为项目而不是租户,租户是openopenstack中一个核心的概念,基本上左右的资源都是按照租户隔离,比如网络、实例、路由等资源,所以我们可以想象一个用户必须先关联到一个项目中去才能正确使用openopenstack资源。
e)Domain
这里域并非windows当中的域的定义,在openopenstack当中域是用来实现真正的多项目/租户模式的一种方法,在没有域出现之前openopenstack有着一个权限的场景,当你把一个用户加入到任何一个项目/租户当中去的时候,你如果关联的使admin的角色的话,这个时候这个用户突然就成为了openopenstack的超级管理员,这并非我们所希望的场景,使用了域以后我们就可以实现真正意义上的多项目/租户模式了,把一个用户加到default以外的域中的项目并关联到admin的时候,这个用户就不再是整个openopenstack的管理员了,他只能管理这个域下面所有的项目/租户,当然你要开启多项目/租户模式你得替换掉/etc/keystone/policy.json文件。
f)Service endpoint
服务终点即一个服务提供的地址比如http://10.200.45.130:5000/v3,这就是一个服务终点,服务终点是用来提供基于http请求的API方法的一个地址
g)openopenstack命令行工具
openopenstack命令行工具全名叫做openopenstack client,简称OSC,它是一个用python写的cli工具,详细的使用方法可以查看这个链接:http://docs.openopenstack.org/developer/python-openopenstackclient
2.4.服务概述
a)身份认证服务 / Identity service
提供身份认证的服务和提供user、group数据服务,在默认配置的情况下(非LDAP模式下),这些数据都是可以被认证服务来操作的,包括增删改查,但在LDAP模式下数据模型可能会有变化,在这不详细阐述。
b)资源服务 / Resource service
提供project和domains的数据服务,和身份认证一样它在非LDAP模式下数据可以被资源服务直接操作
c)分配服务 / Assignment service
提供roles和role的数据服务,角色分配完全受身份认证服务和资源服务控制。
d)票据服务 / Token service
负责验证token的票据的验证服务
e)目录服务 / Catalog service
负责服务keystone数据库中Endpoint的管理,只有注册了正确的Endpoint,服务才能正常被调用。
f)规则服务 / Policy service
管理规则服务,一般规则文件会在/etc/项目/policy.json,里面定义了每个方法需要用什么角色来访问。

2.5.动手实验
a)修改API Version
实验目标:使用CLI命令行工具来修改API Version
默认openopenstack安装过程中会使用keystone V3,你可以通过命令export | grep OS_命令来查看当前api的版本,注意OS_AUTH_URL、OS_IDENTITY_API_VERSION这两个环境变量,我们需要修改他们。
在使用CLI命令行工具之前,我们需要切换到admin用户,我们使用openopenstack内置需要运行以下命令:
[root@controller01 ~]# source ~/keystonerc_admin
[root@controller01 ~(keystone_admin)]$ export | grep OS_

确认V3 api运行正常
首先我们要确认keystone v3 api运行是正常的,我们可以使用curl工具来测试v3是运行正常的。
[root@controller01 ~(keystone_admin)]$ curl http://10.200.45.130:5000/v3
我们会看到以下结果,说明v3的rest api运行是正常的。

修改API Version
我们可以运行以下命令来修改API Version
[root@controller01 ~(keystone_admin)]$ export OS_AUTH_URL=http://127.0.0.1:5000/v2
[root@controller01 ~(keystone_admin)]$ export OS_IDENTITY_API_VERSION=“2”
验证结果
[root@controller01 ~(keystone_admin)]$ openopenstack domain list

我们看到已经无法使用openopenstack domain list命令了,因为keystone v2无法创建domain。
b)管理domain
实验目标:使用命令行工具来管理domain
Domain在keystone扮演着最上层的容器,真正意义上实现了openopenstack的多项目/租户的应用场景。
注意需要使domain起作用的话我们需要替换policy.json文件为policy.v3cloudsample.json
创建domain
使用openopenstack client,我们可以创建domain。输入以下命令,如果正常的话会返回如下结果:
[root@controller01 ~(keystone_admin)]$ openopenstack domain create mydomain --description “enterprise 1”

更新domain
使用openopenstack client,我们可以更新domain。输入以下命令,更新domain的name和description:
[root@controller01 ~(keystone_admin)]$ openopenstack domain set --name mydomain1 --description “enterprise 2” mydomain

查看domain列表
可以使用domian list来查看domain列表:
[root@controller01 ~(keystone_admin)]$ openopenstack domain list

可以看到之前创建的mydomain的name和description均已被修改

删除domain
我们是用openopenstack domain delete来删除domain,但需要注意的是删除domain前,我们必须要保证需要删除的domain是disable的状态。所以我们先要更新domain状态:
[root@controller01 ~(keystone_admin)]$ openopenstack domain set --disable mydomain1
[root@controller01 ~(keystone_admin)]$ openopenstack domain delete mydomain1

可以看到,domain已被删除。
c)管理project
实验目的
通过命令行工具来管理project。Project和前几个版本中的租户是一个概念,随着版本的变化改成了项目。在keystone api v2下面还是可以创建租户(tenant)的,这是为了兼容旧版本而保留的接口。
创建projcet
我们用以下命令来创建project,并将这个project添加到mydomain域中。首先重新创建domian,然后创建project。
[root@controller01 ~(keystone_admin)]$ openopenstack domain create mydomain --description “enterprise 1”
[root@controller01 ~(keystone_admin)]$ openopenstack project create --domain mydomain --description “company1” company1

更新project
[root@controller01 ~(keystone_admin)]$ openopenstack project set --description “for company1” company1
使用如下命令查看更新结果:
[root@controller01 ~(keystone_admin)]$ openopenstack project show company1

删除project
[root@controller01 ~(keystone_admin)]$ openopenstack project delete company1
使用如下命令查看删除结果:
[root@controller01 ~(keystone_admin)]$ openopenstack project list

重新添加project
[root@controller01 ~(keystone_admin)]$ openopenstack project set --description “for company1” company1
d)管理user
实验目的
使用命令行工具来添加、删除、修改用户。
创建user
注意我们使用–password-prompt参数,所以命令完成之后回车,会弹出两次密码输入,这样可以有效防止密码输入错误。如果希望只输入一次密码,使用–password参数即可。
[root@controller01 ~(keystone_admin)]$ openopenstack user create --domain mydomain --password-prompt user1

更新user
可以使用openopenstack user set命令来更新用户,这里尝试更新user1的email字段:
[root@controller01 ~(keystone_admin)]$ openopenstack user set --email [email protected] user1
使用如下命令查看更新结果:
[root@controller01 ~(keystone_admin)]$ openopenstack user show user1

删除user
可以通过openopenstack user delete [userid or id]命令来删除用户:
[root@controller01 ~(keystone_admin)]$ openopenstack user delete user1
使用如下命令查看删除结果:

为了后面的实验我们需要重新创建user1,请自己练习。
绑定user
将用户加入到项目中区,并和角色关联起来:
[root@controller01 ~(keystone_admin)]$ openopenstack role add --project company1 --user user1 admin
可以使用openopenstack role assignment list查看关联结果:
[root@controller01 ~(keystone_admin)]$ openopenstack role assignment list

e)管理group
实验目的
使用命令行工具把用户添加到group中。
创建group
创建group并将它关联到域mydomain中。
[root@controller01 ~(keystone_admin)]$ openopenstack group create --domain mydomain mygroup

将user关联到group
现在将用户user1添加到创建的group中
[root@controller01 ~(keystone_admin)]$ openopenstack group add user mygroup user

f)为user添加环境变量
实验目的
为刚才新建的用户创建环境变量参数
为user1创建环境变量文件
[root@controller01 ~(keystone_admin)]$ vim user1rc
输入以下内容:
export OS_AUTH_URL=http://127.0.0.1:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_PASSWORD=yourpassword
export OS_PROJECT_NAME=company1
export OS_REGION_NAME=RegionOne
export OS_TENANT_NAME=company1
export OS_USERNAME=user1
export OS_PROJECT_DOMAIN_NAME=mydomain
export OS_USER_DOMAIN_NAME=Default
为admin创建环境变量文件
[root@controller01 ~(keystone_admin)]$ vim keystonerc_admin
输入以下内容:
export OS_USERNAME=admin
export OS_PROJECT_NAME=admin
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PASSWORD=yourpassword
export OS_AUTH_URL=http://127.0.0.1:5000/v3
export OS_REGION_NAME=RegionOne
export PS1=’[\u@\h \W(keystone_admin)]$ ’
export OS_IDENTITY_API_VERSION=3
这样一来我们可以在user1和admin之间通过source keystonerc_admin、source user1rc来切换。
g)管理endpoint
实验目的:
学会使用CLI命令行工具来管理endpoint
试验场景
我们自己为openopenstack写了新cli工具,我们的服务以Rest API方式部署,我们的服务名称叫myService,我们的服务终端地址是http://10.200.45.130:3838
新建service
在新建endpoint前,我们需要新建一个服务:
[root@controller01 ~(keystone_admin)]# openopenstack service create --name myService --description “myService” myService

删除service将会自动删除和这个service关联的endpoint。注意添加服务的时候一定要记得添加region,否则会遇到keystone崩溃的bug。

新建endpoint
使用openopenstack endpoint create来创建endpoint
创建public endpoint:
[root@controller01 ~(keystone_admin)]# openopenstack endpoint create --publicurl http://10.200.45.xxx:3838 --region RegionOne myService

创建internal endpoint:
[root@controller01 ~(keystone_admin)]# openopenstack endpoint create --publicurl http://10.200.45.xxx:3838 --internalurl http://10.200.45.xxx:3838 --region RegionOne myService

创建admin endpoint:
[root@controller01 ~(keystone_admin)]# openopenstack endpoint create --publicurl http://10.200.45.xxx:3838 --adminurl http://10.200.45.xxx:3838 --region RegionOne myService

h)验证keystone服务运行
实验目的
验证keystone服务运行是否正常
验证
首先我们应该确认apache服务运行是否正常
[root@controller01 ~(keystone_admin)]# service httpd status

根据操作系统的版本不同,承载keystone的http服务的名称会有所不同,ubuntu的服务名称叫apache2,然而centos叫做httpd。

2.6.动手实验(dashboard)
a)实验目的
使用界面方式(dashboard)来管理
b)登陆dashboard
打开浏览器输入你的服务器ip地址

输入管理员的用户名和密码进行登陆

c)管理project
创建project
我们来管理一个项目,首先点击左侧菜单栏中“身份管理”下面的子菜单“管理”,然后点击右上方的创建项目。

在“名称”中输入项目名称,勾选“激活”,然后点击“创建项目”来创建项目。

删除、编辑project
如果需要删除可以勾选项目的单选框,然后点击右上方的“删除项目”按钮来完成删除,也可以点击项目后方的“管理成员”下拉箭头,选择“编辑项目”来编辑项目。

d)管理用户
创建用户
点击左侧菜单栏中的“身份管理”下方的子菜单“用户”,然后点击右上方的“创建用户”

填入相应的用户名和密码,选择一个项目分配给这个用户,并选择member角色,完成后点击右下方的“创建角色”按钮完成创建。

删除、编辑用户
通过右侧的编辑下拉菜单可以进行用户的删除或修改操作。

将用户添加到项目中去
回到项目管理界面,点击“管理成员”。

左边是可以添加的用户,右边是已经添加到项目中的用户,点击左侧列表中的用户“+”按钮来进行添加。

e)管理配额
我们可以通过项目管理界面来管理每个项目所持有的配额,回到项目管理界面,点击“编辑项目”的按钮进入编辑页面,点击“配额”选项卡进入配额管理,编辑完成之后点击下方“保存”按钮。

看板服务 / Dashboard(Horizon)
2.7.学习目标
使用curl工具来测试看板服务运行是否正常
使用浏览器登录,查看看板服务的运行是否正常
2.8.概述
Dashboard是openopenstack项目的自管理的界面化工具,项目可以登录到Dashboard上去管理分配自己所持有的资源。
2.9.术语
a)Django
Horizon项目后台是使用了python著名的web mvc框架Django
b)Angular JS
由Google研发的前台脚本,意在页面上实现mvc模式
2.10.动手实验
a)验证Dashboard正常运行
实验目标
确认Dashboard是可以正常访问的
访问Dashboard
打开浏览器输入相应的ip地址,可以看到登陆界面出现:

3.计算服务 / Compute Service (Nova)

3.1.学习目标
管理flavor
管理虚拟机实例(如启动、关闭、终止)
管理floating ip
管理安全组,包括分配安全组给实例、改变安全组中的策略
管理nova host consoles
管理keypair
使用keypair来链接一个实例
管理计算节点的server
管理项目(租户)配额(quotas)
检查nova的运行状态
Trouble Shooting
3.2.概述
Nova为openopenstack提供计算服务,nova设计初衷是为了有很好的扩展性,并提供自助式的服务,有效利用计算资源,默认使用的hypervisor是kvm,当然你可以修改配置来使用其他的hypervisor,当你在虚拟机安装openopenstack的话一般都会使用qemu来做hypervisor。
3.3.术语
a)Kvm
Kernel-based Virtual Machine基于内核的虚拟机,也是openopenstack默认的hypervisor。
b)Qemu
在openopenstack中扮演kvm的替补角色,当你的计算节点的cpu不支持硬件加速虚拟化的时候,我们可以使用qemu来作为替代。
c)Nova-api服务
提供nova Rest API服务
d)Flavor
预建的虚拟机配置的列表
e)Keypair
用来连接实例的密钥
安全组
控制实例的访问策略
f)Nova-scheduler服务
负责分配实例到具体的计算节点的服务
g)Nova-conductor服务
负责提供nova数据库链接的服务
h)Nova-consoleauth服务
负责vnc的代理的身份认证服务
i)Nova-novncproxy服务
提供基于浏览器的vnc客户端
j)Nova-compute服务
运行在计算节点上的服务
k)CPU allocation ratio
Cpu物理core和虚拟core的转换比例,默认是16:1,你可以通过/etc/nova/nova.conf中找到这个变量cpu_allocation_ratio并按照你实际的硬件性能对它进行修改,会影响nova-scheduler对计算节点的分配算法。
l)Ram allocation ratio
内存的配置比例,默认是1.5:1,假设你的物理机内存是48G的话,那么nova-scheduler会在数据库中记录的已使用的内存量达到72G以前,会持续向那个节点分配实例。
3.4.服务概述
a)Nova-api服务
提供rest api服务,处理基于http的请求和基于消息的请求,并调用其他组件。
b)Nova-scheduler服务
负责分配实例到具体的计算节点的服务,每次nova-scheduler分配实例,都会到nova使用的数据库中去查询(通过nova-conductor)所有配置好的计算节点上的负载数据,然后选择负载节点压力最小的那个计算节点将实例启动在那台计算节点。
c)Nova-conductor
从Grizzly版本开始,就取消了nova-compute对数据库的直接访问,主要是处于对安全因素的考虑,当然也有其他因素,比如容易升级、异步RPC调用等。
d)Nova-consoleauth服务
负责提供nova console的身份认证,比如VNC的身份认证等,并与IP地址和端口号映射。
e)Nova-spicehtml5proxy服务
负责提供spice连接代理的服务。
f)Nova-novncproxy服务
为基于浏览器的VNC的客户端提供服务。
g)Nova-compute服务
安装在计算节点上的计算服务。
3.5.动手实验(CLI工具)
a)试验场景
我们用demo用户来创建实例,并做一些相应的配置,我们要创建一个自定义的flavor,因为默认的flavor都不能满足我们的需求,我们要创建一个keypair,我们需要通过这个keypair来链接实例,我们还要创建一个安全组。
b)管理配额
openopenstack为每个项目(租户)都设定了配额,来更好地管理资源,我们可以通过设置配额来控制项目(租户)最大的资源使用量,比如我们可以设置项目(租户)demo的vcpu的最大个数和ram使用量
查看项目(租户)的配额
要查看项目(租户)的配额我们需要切换到admin身份
[root@controller01 ~]# source ~/keystonerc_admin
查看项目(租户)的配额
[root@controller01 ~(keystone_admin)]# openopenstack quota show 9c11e9066c1e4a5a8f29f81d959baf28

我们只需要管理关键的配额比如cores(vcpus)、ram、router、network、subnet、volumes、floating IP、instance
修改项目(租户)的配额
我们来修改项目(租户)demo的配额,我们把可以使用的vcpu数量设置为15并限制实例不超过8个
[root@controller01 ~(keystone_admin)]# openopenstack quota set --cores 15 --instance 8 9c11e9066c1e4a5a8f29f81d959baf28
c)上传镜像
为了实验方便,我们首先下载一个镜像,例如cirros-0.3.5-x86_64-disk.qcow2,然后把它上传到glance中
[root@controller01 src(keystone_admin)]# openopenstack image create --disk-format qcow2 --container-format bare --public --file cirros-0.3.5-x86_64-disk.qcow2 cirros

d)管理flavor
我们使用CLI工具来管理flavor
查看flavor列表
切换到admin用户以便来管理flavor(请自己练习),查看flavor列表:
[root@controller01 src(keystone_admin)]# openopenstack flavor list

更新flavor
我们在之后的界面上更新flavor
创建flavor
我们创建一个适合我们需要的flavor:2vcpus、5Gdisk、2048RAM:
[root@controller01 src(keystone_admin)]# openopenstack flavor create --vcpus 2 --disk 5 --ram 2048 m1.mysmall

e)创建keypair
每次创建一个实例我们一般都需要创建一个keypair来对实例。我们要创建一个安全组给demo用户所在的项目(租户)demo来使用,那么我们需要切换到demo用户:
[root@controller01 ~(keystone_admin)]# source ~/demorc
[root@controller01 ~(demorc)]# openopenstack keypair create key1 > key1.pem
f)管理安全组
默认的安全策略组default是不允许icmp、ssh、http等请求的,一般的做法是不去修改default的安全组,而是创建一个新的安全组。
查看安全组列表
[root@controller01 ~(keystone_admin)]# openopenstack security group list

创建安全组
[root@controller01 ~(keystone_admin)]# openopenstack security group create mysec

为安全组添加规则运行icmp、ssh、http:
添加icmp规则:
[root@controller01 ~(keystone_admin)]# openopenstack security group rule create --proto icmp mysec

添加ssh规则:
[root@controller01 ~(keystone_admin)]# openopenstack security group rule create --proto tcp --dst-port 22 mysec

添加http规则:
[root@controller01 ~(keystone_admin)]# openopenstack security group rule create --proto tcp --dst-port 80 mysec

g)管理floating IP
在项目(租户)网络的实例,是不能被外部直接访问的,这时我们需要分配一个floating ip给这个实例
查看floating ip列表
[root@controller01 ~(keystone_admin)]# openopenstack ip floating list

创建floating ip
[root@controller01 ~(keystone_admin)]# openopenstack ip floating create external
注意最后的那个external参数是openopenstack预建的网络,你可以使用openopenstack network list和openopenstack network show [network name]来查看哪个网络才是外部网络。

h)管理实例
查看现有的实例
[root@controller01 ~(keystone_admin)]# openopenstack server list

启动一个实例
[root@controller01 ~(keystone_admin)]# openopenstack server create --image cirros --flavor m1.mysmall --security-group default --key-name key1 --nic net-id=7b8a93cc-a28e-48d8-b6ac-926688eb8fe6 instance1

注意其中的net-id是通过openopenstack network list得来的,取private的网络id。
我们再检查一下实例的状态,当Status是ACTIVE的时候说明实例正常运行。
[root@controller01 ~(keystone_admin)]# openopenstack server list

可以使用openopenstack server stop 和openopenstack server delete来停止或删除实例
i)实例的安全组绑定
创建实例的时候我们为他设置default安全组,default安全组几乎限制了所有的ingress,这并不适合应用的场景,所以我们需要为它添加我们之前创建的安全组mysec
[root@controller01 ~(keystone_admin)]# openopenstack server add security group instance1 mysec
我们再查看下实例,我们可以看到security_groups的值多了一个mysec
[root@controller01 ~(keystone_admin)]# openopenstack server show instance1

j)实例绑定floating ip
我们要把之前创建的floating ip绑定到我们的实例instance1上去,我们可以首先查看一下floating ip的列表:
[root@controller01 ~(keystone_admin)]# openopenstack ip floating list

绑定floating ip
[root@controller01 ~(keystone_admin)]# openopenstack ip floating add 10.200.45.212 instance1

验证floating ip
[root@controller01 ~(keystone_admin)]# ping 10.200.45.212

使用key来连接这个实例:
我们可以用之前创建的key1来做ssh连接:
[root@controller01 ~(keystone_admin)]# ssh -i key1.pem [email protected]
k)管理实例snapshot
我们可以对运行着的实例做一个快照,快照完成后会自动保存为镜像,以便下次直接从快照的镜像启动。
创建镜像
我们首先使用命令行工具来创建一个快照,首先来看一下有哪些实例。

为instance1创建一个快照:
[root@controller01 ~(keystone_admin)]# openopenstack server image create --name myCirros instance1
检查快照是否正常被创建:
[root@controller01 ~(keystone_admin)]# openopenstack image list

l)检查计算服务
我们经常需要检查服务的运行是否正常,比如检查计算节点上的计算服务是否正常
检查计算节点
在计算节点运行以下命令,来查看计算服务是否正常运行着:
[root@controller01 ~(keystone_admin)]# service openopenstack-nova-compute status

检查控制节点
在控制节点上运行以下命令:
[root@controller01 ~(keystone_admin)]# service openopenstack-nova-api status
[root@controller01 ~(keystone_admin)]# service openopenstack-nova-consoleauth status
[root@controller01 ~(keystone_admin)]# service openopenstack-nova-scheduler status
[root@controller01 ~(keystone_admin)]# service openopenstack-nova-conductor status
[root@controller01 ~(keystone_admin)]# service openopenstack-nova-novncproxy status
也可以用nova service-list 来查看服务的状态
[root@controller01 ~(keystone_admin)]# nova service-list

3.6.动手实验(dashboard)
a)实验目的
我们要用界面的方式来为demo用户创建一个实例并为它分配一个floating ip和密钥,同时还要给实例加上安全组。
b)登陆dashboard
打开浏览器登陆dashboard,这次我们用demo用户来登录而非管理员用户
c)创建key
点击左侧菜单“项目”-“网络”-“安全组”

点击“密钥对”进入管理界面,点击右侧的“创建密钥对”

在弹出的界面中输入key的名称,完成后点击“创建密钥对”,然后点击“下载密钥对”

d)创建安全组
点击左侧菜单“项目”-“计算”-“访问&安全”,点击“安全组”进入管理界面,点击右侧“创建安全组”。

在名称中输入适合的名称,然后点击右侧的“创建安全组”:

为安全组添加规则,点击安全组纪录的右侧“管理规则”,点击右上角“添加规则”,来添加一条规则,也可以点击“删除规则”来删除规则。

在“规则”中,选择你要添加的规则,然后点击右下方的“添加”来完成添加

e)启动实例
点击左侧菜单“项目”-“计算”-“实例”来进入实例创建的界面,点击右侧的“运行”按钮,来创建实例

在“源”中选择“从镜像启动”,并选择合适的镜像。

在“云主机类型”当中选择合适的flavor

在“网络”中选择合适的网络

在“安全组”中选择适合的安全组并添加

在“密钥对”中选择适合的密钥对并添加

最后点击右下角的“启动实例”。
f)绑定floating ip
点击右侧“项目”-“实例”进入实例列表,点击实例右侧的下拉菜单箭头,并选择“绑定浮动IP”

选择适合的floating ip并绑定,在“待连接的接口”选择你要绑定到的实例,如果不存在的话可以点击右侧的加号来添加floating ip。

4.镜像服务 / Image Service(Glance)

4.1.学习目标
管理镜像服务,比如添加、更新、移除镜像
配置镜像服务的后台
检查镜像服务运行状态
Trouble Shooting
4.2.概述
Glance是为nova提供镜像服务,以便成功启动实例,这些镜像是预建的,一般都会预装cloud-init组件,你可以访问http://docs.openopenstack.org/zh_CN/image-guide/content/ch_obtaining_images.html来获得更多镜像,默认glance会把镜像都存放在本地文件系统/var/lib/glance/images,并且如果你安装了swift的话,它会默认设置后台为swift。
4.3.术语
a)Disk-format
raw–无格式镜像
iso–一个归档格式的光盘镜像格式
qcow2–被Qemu使用的格式,支持复制中写入。
b)glance-registry
主要负责与glance使用的数据库交互的rest api服务
c)glance-api
负责提供镜像服务的rest api服务
4.4.服务

a)Glance-registry
主要负责与glance使用的数据库交互,有点像nova-conductor服务一样,它也是rest api,经常会被glance-api请求,并将查询到的镜像元数据返回给glance-api。
b)Glance-api
负责提供镜像服务的rest api服务,比如创建、删除、修改镜像,它会调用glance-registry来完成数据库的操作。
4.5.动手实验(CLI工具)
a)实验场景
我们要为demo项目(租户)来上传一个镜像以便其他用户来使用
b)创建镜像
我们通过命令行为demo项目(租户)上传一个镜像,首先需要切换到admin用户才有权限创建镜像
创建镜像
创建一个镜像,disk format是qcow2,必须是大家都可以用的,所以需要加上–public参数
[root@controller01 src(keystone_admin)]# openopenstack image create --disk-format qcow2 --container-format bare --public --file cirros-0.3.5-x86_64-disk.qcow2 myCirros

此外,还可以通过openopenstack image set 和openopenstack image delete 来修改或删除镜像
4.6.动手实验(dashboard)
a)实验目的
我们要用界面的方式来为admin用户创建一个镜像并将它开发给所有租户来使用。
b)登陆dashboard
打开浏览器登陆dashboard,这次用admin用户来登陆。
c)上传镜像
点击左侧菜单中的“管理员”-“计算”-“镜像”进入镜像管理页面:

点击右侧“创建镜像”来创建镜像,输入名称和描述,在“镜像源”中选择适合的方式:
镜像地址:镜像不在本机,在远程的服务器上
镜像文件:镜像存在本地计算机上
在“镜像文件”中选择一个本地的镜像或者输入远程的镜像地址,内存和内核都可以跳过,在“镜像格式”中选择和镜像格式相符合的格式,单选下方“公开”的单选框来让这个镜像可以被其他项目(租户)来使用,完成后点击右下方“创建镜像”

d)更新镜像属性
点击你要编辑的镜像右侧“编辑镜像”按钮来编辑镜像。
e)更新进项的元数据
通过点击你要更新的镜像右侧的下拉菜单“更新元数据”来更新元数据。

5.块存储 / Block Storage(Cinder)

5.1.学习目标
创建块存储的卷组(LVM)
创建一个volume并把它挂载到实例上
管理volume配额
备份和恢复volume
管理volume快照
管理volume加密
监控存储设备的状态
Trouble Shooting
5.2.概述
Cinder 为openopenstack的实例提供volume,如果一个volume同时挂载到多个实例上面,你需要确认只有一个能对它进行写操作,其他的实例是只读的。Cinder支持大多数的文件系统的驱动包括LVM/ISCSI、ThinLVM、NFS、Net APP NFS、Gluster、Dell Equal Logic等,Cinder默认使用的是本地的LVM。
5.3.术语
a)Volume备份
为volume做备份,备份存放在备份的设备中,默认是swift,当然你可以通过配置将它存放到ceph中去。一旦备份完成,备份时要求volume没有被挂载,备份完成后volume和它的备份就失去了关系。
b)Volume快照
记录某个时间点volume的状态。在为volume 做快照前,必须要求volume没有被挂载,一旦创建完成被快照的volume将无法删除,除非先删除该volume的快照,当然你可以用volume快照生成一个新的volume。
5.4.服务

a)Cinder API Service
提供对cinder请求的rest api服务,当cinder api收到一个http请求后,它会将请求转成消息队列的形式发送到消息队列中,等待其他组件的响应。
b)Cinder Scheduler Service
Scheduler服务负责对提供块存储服务器分配任务,作用有点像nova scheduler一样,然后将分配好的任务丢到消息队列中,等待volume service来执行。
c)Cinder Volume Service
Volume服务负责和存储设备打交道,当它收到scheduler发来的消息后,它要处理新建、修改、删除等操作。
d)Cinder Backup Service
Backup服务负责通过驱动和备份的后台打交道,备份的后台包括Swift、Ceph和IBM Tivoli Storage
5.5.动手实验(CLI工具)
a)实验场景
我们需要为实例创建volume,但首先我们需要先创建本地LVM以供cinder来使用,然后我们要把创建完的volume挂载到实例上面,并对volume做备份和快照。
b)创建volume
我们来创建一个大小为2G的volume:
[root@controller01 ~(keystone_admin)]# openopenstack volume create --type iscsi --size 2 myvol1

查看vg使用情况
[root@controller01 ~(keystone_admin)]$ vgdisplay

可以看到cinder-volume已经被使用2G了。
查看volume列表
[root@controller01 ~(keystone_admin)]$ openopenstack volume list

c)挂载volume到实例
我们需要把新建的myvol1挂载到之前启动的实例instance1上面去
[root@controller01 ~(keystone_admin)]$ openopenstack server add volume instance1 myvol1
检查volume list
[root@controller01 ~(keystone_admin)]$ openopenstack volume list

可以看到Attached to属性已经变成Attached to instance1 on /dev/vdb,也可以用openopenstack server remove volume instance1 myvol1来移除挂载。
d)备份一个volume
我们通常需要对一个volume进行备份,默认cinder的备份时放在swift的container中的,我们可以通过以下命令来备份一个volume,但我们要先取消挂载
[root@controller01 ~(keystone_admin)]$ openopenstack server remove volume instance1 myvol1
备份volume并放入swift的container中:
[root@controller01 ~(keystone_admin)]$ openopenstack backup create --container cinder-backup --name myvol1_backup myvol1

e)从备份恢复一个volume
我们要把myvol1_backup覆盖现有的myvol1,首先确认myvol1没有被挂载
[root@controller01 ~(keystone_admin)]$ openopenstack volume list --name myvol1

如果有,请取消挂载,然后就可以恢复volume了。
[root@controller01 ~(keystone_admin)]$ openopenstack backup restore 14c16ef5-ad5b-43c2-b767-a484dd43d44f myvol1
f)Volume快照
为myvol1创建一个快照,请确认myvol1没有被挂载
[root@controller01 ~(keystone_admin)]$ openopenstack snapshot create --name myvol1_ss myvol1

快照一点被创建,myvol1就不能删除了。
g)从快照中创建新的volume
我们可以方便地从快照中创建新的volume,那样创建出来的volume不会和原来被快照的volume关联
[root@controller01 ~(keystone_admin)]$ openopenstack volume create --type iscsi --snapshot fc167a92-b0f0-4dec-9fd1-6ee74c8e4256 --size 2 myvol2

h)为volume加密
我们需要对volume type设置加密类型,过程中我们可能不能使用openopenstack命令
[root@controller01 ~(keystone_admin)]$ cinder encryption-type-create --cipher aes-xts-plain64 --key_size 512 --control_location front-end iscsi nova.volume.encryptors.luks.LuksEncryptor

5.6.动手实验(Dashboard)
a)实验场景
我们要使用Dashboard的方式来创建volume,并将它挂载到实例上去。
b)登陆dashboard
打开浏览器登陆dashboard,我们这次用demo用户来登陆
c)创建和挂载volume
点击左侧菜单栏中“项目”-“云硬盘”-“云硬盘”进入管理界面

点击右侧“创建云硬盘”来创建volume,输入名称,类型中选择默认的类型,设置符合需求的大小,可以忽略“云硬盘源”,除非你要做启动盘,可用区域选择nova,完成后点击右下角“创建云硬盘”来创建。

将volume挂载到实例,我们需要点击volume右侧下拉菜单中的“管理已挂载的云硬盘”,然后在“连接云主机”的下拉菜单中选择你要挂载到的实例。

d)管理volume快照
为一个volume创建快照,首先要确保该volume没有被挂载,进入volume管理界面,点击左侧菜单栏中的“项目”-“计算”-“云硬盘”进入管理页面,点击“创建快照”

为快照输入名称,然后点击右下方“创建云硬盘快照”。

我们可以从已创建的快照中创建新的volume,只需要点击快照右侧的“创建云硬盘”即可。

6.对象存储(Swift)

6.1.学习目标
管理对象存储的权限
管理过期的文件
设置ACL
验证对象存储运行正常
Trouble Shooting
6.2.概述
Swift最初是由rackspace公司开发的高可用分布式对象存储服务,并与2010年贡献给openopenstack开源社区作为其最初的核心子项目之一,为其nova子项目提供虚拟机镜像存储服务。Swift构筑在比较便宜的标准硬件存储基础设施之上,无需采用RAID,通过在软件层面引入一致性散列技术和数据冗余性,牺牲一定程度的数据一致性来达到高可用性和可伸缩性,支持多租户模式、容器和对象读写操作,适合解决互联网应用场景下非结构化数据存储的问题。
6.3.术语
a)环(ring)
用来记录用户、容器、对象之间的映射关系,分别有account ring、container ring、object ring

环中的一个重要概念是分区Partition,一般是2的幂次方来划分的,以便于添加和删除设备的时候减少移动数据需要的开销,一个分区至少要复制3份到zone中某个设备上,zone在这里是一个抽象的概念,可以是一个机器,某个机架,甚至某个建筑内的机器。
b)Account
在swift中account并非我们传统意义上的身份认证账号的概念,你可以把它想象成用户定义的存储的区域(storage area),存储很多的元数据(metadata)。
c)Container
用户定义的Container存储的区域(storage area),里面存储着一个相关的account和一些关于Container本身对象的元数据。
d)Object
用户定义的对象存储的区域,里面存储着对象本身和它的元数据信息。
e)Proxy Server
集群代理服务器,负责和集群通信。
f)Region
Swift允许集群,在不同的物理机中。
g)Zone
在region中为了隔离故障,需要定义zone 的概念,zone必须是物理上分开的。
h)Node
物理的设备被称为node,上面运行着一个或多个swift进程。

i)Account Server
主要负责列出Container列表
j)Container Server
主要负责列出Container中的对象
k)Object Server
主要负责对象在设备上的存储、获取和删除。
l)Storage Policy
让用户能够以Container为粒度,为不同需求的数据制定不同的副本数量、不同参数的纠删码、不同性能的存储介质、不同地理位置、不同的后端存储设备。存储策略充分体现了Swift“软件定义存储”(Software Defined Storage)的特点,policy可以设置在一个zone或者一个node甚至一个region上面
m)Replication
检测本地存储和远程的存储是否保持一致,如果不一致的时候回推送本地的文件覆盖远程。
6.4.服务
a)Proxy Server
对外提供对象服务API,会根据环的信息来查找服务地址并转发用户请求至相应的账户、容器或者对象服务;由于采用无状态的REST请求协议,可以进行横向扩展来均衡负载。
b)Account Server
提供账户元数据和统计信息,并维护所含容器列表的服务,每个账户的信息被存储在一个account ring 上面。
c)Container Server
提供容器元数据和统计信息,并维护所含对象列表的服务,每个容器的信息也存在一个container ring 上面。
d)Object Server
提供对象元数据和内容的服务,每个对象的内容会以文件的形式存储在文件系统中,元数据会作为文件属性来存储,建议采用支持扩展属性的XFS文件系统。
e)Replicator
会检测本地分区副本和远程副本是否一致,具体是通过对比散列文件和高级水印来完成,发现不一致时会采用推式(push)更新远程副本,例如对象复制服务会使用远程文件拷贝工具rsync来同步。另外一个任务是确保被标记删除的对象从文件系统中删除。
6.5.动手实验(CLI工具)
a)实验目的
我们要管理container的访问权限、启动swift-object-expirer、配置对象过期的设置等操作。
b)启动swift-object-expirer后台进程
默认没有启动swift-object-expirer后台进程,我们需要手动启动swift-object-expirer进程,但是我们首先要确认配置文件已经存在/etc/swift/object-expirer.conf,一般需要我们手动创建。输入以下内容
[DEFAULT]
user = openstack
[pipeline:main]
pipeline = catch_errors cache proxy-server

[app:proxy-server]
use = egg:swift#proxy

[filter:cache]
use = egg:swift#memcache
memcache_servers = 127.0.0.1:11211

[filter:catch_errors]
use = egg:swift#catch_errors
启动swift-object-expirer进程,我们可以使用两种方法:
[root@controller01 ~(keystone_admin)]# swift-init object-expirer start
[root@controller01 ~(keystone_admin)]# swift-object-expirer -o -v /etc/swift/object-expirer.conf &
c)设置对象过期时间
为了实验方便,我们创建一个实验的container:

使用swift命令行工具
我们把之前下载的key1.pem上传到container_expired中,并加上过期时间。
[root@controller01 ~(keystone_admin)]# swift upload container_expired key1.pem --header ‘X-Delete-After: 120’
过2分钟后去检查这个对象发现已经被删除。

6.6.动手实验(Dashboard)
a)实验场景
我们要使用Dashboard的方式来创建container并在container中上传对象。
b)登陆dashboard
打开浏览器登陆dashboard
c)创建一个container
点击左侧菜单中的“项目”-“对象存储”-“容器”

点击上方“创建容器”来创建容器

输入容器名称,并选择“公有”或“私有”来决定其他项目(租户)是否有权限使用这个container,完成后点击“创建容器”
d)上传对象到container
对象存储管理界面中点击之前创建的mycontainer,在右侧区域点击“上传对象”完成上传

8.网络服务(Neutron)
8.1.学习目标
管理网络资源包括路由、子网、项目(租户)的网络和外部网络
管理安全组
管理配额
Trouble Shooting
8.2.概述
Neutron是openopenstack中负责提供网络服务的组件,它基于软件定义网络的思想,实现了网络虚拟化下的资源管理,在实现上充分利用了Linux系统上的各种网络相关的技术,并支持很多第三方的插件,在课本环境中我们使用了ovs作为两层的插件。

8.3.术语
a)br-int
bridge-integration,综合网桥,常用语表示实现主要内部网络功能的网桥,tap设备会连接到br-int中,br-int中会有一个内部的vlan id,这样方便在同一个节点上的相同vlan通信
b)br-ex
bridge-external,外部网桥,通常表示负责跟外部网络通信的网桥。
c)GRE
General Routing Encapsulation,一种通过封装来实现隧道的方式。
d)VETH
虚拟Ethernet接口,通常以pair的方式出现,一端发出的网包,会被另一端接收,可以形成两个网桥之前的通道。
e)Qvb
Neutron的veth,使用linux bridge作为插件的时候使用的虚拟Ethernet接口。
f)Qvo
Neutron的veth,使用Openvswitch作为插件的时候使用的虚拟Ethernet接口。
g)TAP
Test Access Point,模拟一个二层的网络设备,可以接收和发送二层网包,每个实例都会有一个自己的tap device
h)Iptables
Linux上常见的实现安全策略的防火墙软件,实例通过br-ex前都会通过iptables实现Nat地址转换
i)Namespace
用来实现隔离的一套机制,不同namespace中的资源之间彼此不可见。
8.4.服务
a)Neutron server
Neutron server提供API接口,并把对API的调用请求传给已经配置好的插件进行后续处理。插件需要访问数据库来维护各种配置数据和对应关系,例如路由器、网络、子网、端口、floating ip、安全组等等。
b)Neutron linuxbridge agant
管理者vlan的插件,运行在每一个节点上,会接受neutron server的指令来创建相应的vlan。
c)Neutron dhcp agent
通过dnsmasq进程(轻量级服务器,可以提供dns、dhcp、tftp等服务)来实现的,该进程绑定到dhcp命名空间中的br-int的接口上。可以查看相关的进程。
d)Neutron metadata agent
运行在网络节点,负责响应接受到的获取metadata的请求,将网络相关的metadata发回给向它请求的nova-api-metadata。
e)Neutron I3 agent
负责项目(租户)网络和floating ip之间的地址转换的服务,它通过Linux iptables的SNAT、DNAT来完成地址的双向转换。
8.5.动手实验(CLI工具)
a)实验目的
我们要为项目(租户)创建内部网络、路由。然后我们要创建外部网络,并把租户网络连接到外部网络。
b)创建项目(租户)网络
我们可以使用命令行工具来创建一个项目(租户)网络。
创建网络myprivate
[root@controller01 ~(keystone_admin)]# openopenstack network create myprivate

创建网络myprivate的子网
[root@controller01 ~(keystone_admin)]$ neutron subnet-create --ip_version 4 --name prisub --enable-dhcp myprivate 10.0.0.0/24

c)创建外部网络
所有的实例对外部的请求都需要经过外部网络,我们需要创建一个外部网络,方法和创建项目(租户)网络的方法很像。只有admin用户才有权限创建外部网络。
[root@controller01 ~(keystone_admin)]$ neutron net-create --router:external=true public

创建子网
[root@controller01 ~(keystone_admin)]$ neutron subnet-create --ip_version 4 --name pubsub --gateway 10.200.43.254 --disable-dhcp public 10.200.43.0/24

d)创建router
我们需要为项目(租户)demo创建一个路由将项目(租户)的内部网络10.0.0.0/24连接到外部网络10.200.43.0/24上去
创建router
[root@controller01 ~(keystone_admin)]$ neutron router-create myrouter

为myrouter设置gateway
[root@controller01 ~(keystone_admin)]$ neutron router-gateway-set myrouter public

为myrouter设置interface
[root@controller01 ~(keystone_admin)]$ neutron router-interface-add myrouter prisub

e)管理网络资源配额
查看项目(租户)的配额
查看项目(租户)的配额需要切换到admin身份

管理项目(租户)的配额
[root@controller01 ~(keystone_admin)]# openopenstack quota show 9c11e9066c1e4a5a8f29f81d959baf28

这里我们只要注意router、subnet、secgroups、secgroup-rules、network这些配置
[root@controller01 ~(keystone_admin)]# openopenstack quota set --router 2 --subnet 5 --secgroups 10 --secgroup-rules 100 --network 5 9c11e9066c1e4a5a8f29f81d959baf28
f)确认网络服务的正常运行
我们需要检查以下这些服务
控制节点:
[root@controller01 ~(keystone_admin)]# service neutron-server status
[root@controller01 ~(keystone_admin)]# service neutron-openvswitch-agent status
[root@controller01 ~(keystone_admin)]# service neutron-dhcp-agent status
[root@controller01 ~(keystone_admin)]# service neutron-metadata-agent status
其他节点
[root@controller01 ~(keystone_admin)]# service neutron-metadata-agent status
用neutron命令行检查
[root@controller01 ~(keystone_admin)]# neutron agent-list

8.6.动手实验(Dashboard)
a)实验场景
我们要使用dashboard的方式来创建外部网络、项目(租户)网络、路由并将项目(租户)网络通过路由连接到外部网络中去。
b)登陆dashboard
打开浏览器登陆Dashboard,用admin用户登陆。
c)创建一个外部网络
点击左侧菜单中“管理员”-“系统”-“网络”进入网络管理界面。

点击右侧的“创建网络”来创建一个网络,在名称中输入网络名称,在项目的下拉框中选择admin,在网络类型中选择vxlan,在段ID中输入需要的段ID,并勾选下方的“外部网络”,完成后点击下方“创建网络”。

d)创建一个外部网络的子网
点击新建的外部网络的“网络名称”来进入管理界面,点击子网区域右侧的“创建子网”来创建子网。

在子网名称中输入子网名称,在“网络地址”中手动输入和环境相符合的ip地址,并输入正确的网关,完成后点击“下一步”

取消单选“激活DHCP”的单选框,然后在分配池中输入地址段来限制floating ip的范围,完成后点击“创建”按钮。

e)创建一个项目(租户)网络
我们需要使用demo用户重新登录dashboard,因为我们要为demo项目(租户)创建网络,然后在左侧菜单中“项目”-“网络”-“网络”进入管理界面。

点击“创建网络”来创建网络。为网络输入一个名称,然后勾选“创建子网”的单选框。

在子网创建的界面中输入子网的名称和ip地址,网关可以不设

单选“激活DHCP”的单选框,完成后点击右下方“创建”来创建网络。

f)创建管理路由
我们要为demo 项目(租户)创建路由,在左侧菜单中“项目”-“网络”-“路由”进入路由的管理界面,点击右侧的“新建路由”来创建一个路由。

输入合适的名称,在外部网络中选择我们之前创建的外部网络,完成后点击右下角的“新建路由器”来完成路由器的创建。

点击路由器管理界面下的名称列,进入路由器的管理界面。点击接口选项卡,点击“增加接口”来介入一个内部项目(租户)网络

在子网中我们选择之前添加的子网10.0.0.0/24,然后点击右下方的增加接口按钮,这样我们的项目(租户)网络就连接到了外部网络了。

9.编排服务(Heat)
9.1.学习目标
使用heat模板来生成openstack
使用heat命令行工具和dashboard来管理heat
验证启动的openstack是正常运行的
根据场景创建一个heat模板
更新一个openstack
9.2.概述
Heat是openopenstack核心项目之一,随着openopenstack的发展,heat扮演着重要的角色,通过编写yaml文件我们可以将需要使用的资源以特定的格式写入模板中,heat会通过heat engine来将这些文件定义的资源在openopenstack中启动,比如我们要创建一个实例在demo项目(租户)下面,并给它分配相应的floating ip以及安全组,这些操作我们可以不用一步一步输入命令,可以直接是用一个yaml的模板,直接将要用的所有资源写在里面,让heat engine帮我们把这些资源在openopenstack中创建,它还支持AWS的cloud formation格式
9.3.术语
a)Stack
Stack是指heat要用到的所有的设施和资源的集合
b)Heat template
Heat template是用.yaml结尾的文件,它严格定义了缩进,缩进只允许使用空格,不允许使用tab作为缩进,否则执行失败。
c)Template header
定义在每个Template最上部用来描述template创建日期和这个template的主要功能,它有heat_template_version和description
heat_template_version: 2017-08-22
description: >
this is my template
注意属性和值之间有一个空格,就在冒号后面,如果不在同一行中输入的话我们就要用>符号,注意>前面和冒号之间有个空格,换行以后要有两个空格的缩进,所有父子关系也是缩进两个空格,在yaml格式中都会遵循这样的规则,后面不再重复。
d)Parameter
在heat template中定义了输入参数,方便这个template能被反复利用,比如我们希望每次都使用外部输入的router,我们就做类似的定义:
parameters:
router_id:
type: string
description: input router id
e)Resource
在heat template中定义了资源使用,比如我们要用到nova的地方我们会如下定义:
resources:
my_server:
type: OS::Nova::Server
properties:
name: my instance
image: cirros
flavor: m1.small’
key_name: mykey
f)Output
Output定义了返回的参数,当我们创建一些资源后,我们希望得到一些返回值,比如floating ip等,我们需要用到outputs,我们会如下定义:
outputs:
login_URL:
description: web server url
value:
str_replace: http://host
params:
host: {get_attr: [my_server_floating_ip, floating_ip_address]}
注意str_replace是特殊的功能关键字,出现后面的字符中的一些字符将要被替换,在上面的例子中,我们替换了host并使用特殊的方法get_attr从resource中的my_server_floating_ip中获取floating_ip_address,如果你不指定获取的属性,将会返回resource相关的所有资源。
g)Constraints
一般在parameter当中一起出现,来约定这个参数的范围,比如约定一个可选范围:
parameters:
flavor:
type: string
label: Instance Type
description: Type of instance (flavor) to be used
constraints:
allowed_values: [m1.medium, m1.large, m1.xlarge]
description: Value must be one of m1.medum, m1.large or m1.xlarge
那么当你在创建这个openstack的时候,这个输入参数会从一个文本输入框变成一个单选框,当然constraints用途非常广泛,具体可查询官方文档。
9.4.服务
a)Heat-api
提供heat rest api服务,将接收到的api请求发送给heat engine去执行
b)Heat-api-cfn
提供Rest API支持aws的cloud formation格式的访问,并将请求转发给heat engine执行
c)Heat-engine
将api发送的请求在openopenstack中启动这些资源
d)Heat-api-cloudwatch
负责监控编排服务
e)Heat-cfntools、cloud-init
Heat-cfntools、cloud-init是预装在我们下载到的镜像中去的,我们称这些镜像为cloud image
9.5.动手实验(CLI工具)
a)实验目的
我们要为demo用户创建一个Word Press的应用,我们并不希望使用传统的方法手工去创建,那样没有重复利用,我们更希望能反复被利用的方法,所以我们需要使用模板以便大家反复使用。
b)获取模板
这里我们使用的basic.yaml:
heat_template_version: ‘2013-05-23’
description: simple template
parameters:
flavor:
description: flavor used by the web servers
type: string
default: m1.small
image:
description: Image used for servers
type: string
default: myCirros
network:
default: 8189e4c3-97db-4c73-a8c8-130feb8592a1
description: Network ID for the server
type: string
resources:
server:
type: OS::Nova::Server
properties:
flavor: {get_param: flavor}
image: {get_param: image}
networks:
- network: {get_param: network}
c)管理openstack
创建一个openstack
我们可以使用命令行的方式启动一个openstack
[root@controller01 ~(keystone_admin)]$ heat openstack-create -f basic.yaml -P image=myCirros -P flavor=m1.small myStack

会一直处于创建状态,我们可以反复查询
[root@controller01 ~(keystone_admin)]$ heat openstack-list
当创建完成后,可以查看它的状态
[root@controller01 ~(keystone_admin)]$ heat openstack-show myStack

9.6.动手实验(Dashboard)
a)实验场景
我们要使用Dashboard的方式来启动一个openstack
b)登陆dashboard
打开浏览器登陆Dashboard,这次我们用demo用户来登陆
c)启动一个openstack
点击左侧菜单中“项目”-“云编排”-“栈”进入openstack的管理界面:

点击右侧“启动栈”按钮来加载openstack模板:

在模板源中选择之前使用的basic.yaml,环境源可以空着,它的作用是把模板源中要用到的参数通过环境源文件输入,而不需要在页面上手动输入了,完成后点击下一步

在openstack模板中的变量输入相应的值,完成后点击“运行”按钮即可

10.排错和日志分析
a)集中分析日志
我们需要了解日志的存放位置 /var/log/project/,并了解每个服务所对应的日志文件名称和如何查找error。
在日志中查找error我们可以使用cat nova-api.log | grep -i error,也可以监控日志的状态通过 tail -f nova-api.log命令
b)备份nova数据库
实例的数据库记录着很重要的信息,所以对它的保护和备份时非常有必要的一个任务和工作,我们可以通过手动的方式来备份该数据库mysqldump -u root -p --opt nova > nova.sql
#!/bin/bash
backup_dir=”/var/lib/backups/mysql”
filename=”${backup_dir}/mysql-‘hostname’-‘eval date +%Y%m%d’.sql.gz”
#Dump the entire MySql database
/usr/bin/mysqldump -u root -p --opt --all-databases | gzip > $filename
#Delete backups older than 7 days
find $backup_dir -ctime +7 -type -f --delete
c)查看rabbitmq状态
openopenstack很多组件之间的通信都是通过rabbitmq来传递的,经常会出现rabbitmq无法支撑大量的消息队列而导致消息队列服务崩溃,所以我们需要对rabbitmq进行高可用的配置以外,还要学会如何查看它的状态,我们可以用sudo rabbitmqctl status来监控消息队列的状态,当然rabbitmqctl还有更多的作用需要大家去学习和了解。
d)监控网络节点的流量带宽
openopenstack的网络节点很容易受到DDOS攻击,监控网络节点的带宽也是非常重要的一个工作,我们可以使用很多工具来监控带宽的使用情况比如speedtest-cli、aria2等。

你可能感兴趣的:(云计算)