1. openstack介绍
OpenStack 是一系列开源工具(或开源项目)的组合,主要使用池化虚拟资源来构建和管理私有云及公共云。其中的六个项目主要负责处理核心云计算服务,包括计算、网络、存储、身份和镜像服务。还有另外十多个可选项目,用户可把它们捆绑打包,用来创建独特、可部署的云架构。
1.1. 云计算模式
一、IaaS:基础设施即服务(个人比较习惯的):用户通过网络获取虚机、存储、网络,然后用户根据自己的需求操作获取的资源
二、PaaS:平台即服务:将软件研发平台作为一种服务, 如Eclipse/Java编程平台,服务商提供编程接口/运行平台等
三、SaaS:软件即服务 :将软件作为一种服务通过网络提供给用户,如web的电子邮件、HR系统、订单管理系统、客户关系系统等。用户无需购买软件,而是向提供商租用基于web的软件,来管理企业经营活动
2. OpenStack 中有哪些项目?
OpenStack 架构由大量开源项目组成。其中包含 6 个稳定可靠的核心服务,用于处理计算、网络、存储、身份和镜像; 同时,还为用户提供了十多种开发成熟度各异的可选服务。OpenStack 的 6 个核心服务主要担纲系统的基础架构,其余项目则负责管理控制面板、编排、裸机部署、信息传递、容器及统筹管理等操作。
1. keystone:Keystone 认证所有 OpenStack 服务并对其进行授权。同时,它也是所有服务的端点目录。
2. glance:Glance 可存储和检索多个位置的虚拟机磁盘镜像。
3. nova:是一个完整的OpenStack 计算资源管理和访问工具,负责处理规划、创建和删除操作。
4. neutron:Neutron 能够连接其他 OpenStack 服务并连接网络。
5. dashboard:web管理界面
6. Swift: 是一种高度容错的对象存储服务,使用 RESTful API 来存储和检索非结构数据对象。
7. Cinder 通过自助服务 API 访问持久块存储。
8. Ceilometer:计费
9. Heat:编排
openstack基本架构
通过消息队列和数据库,各个组件可以相互调用,互相通信。每个项目都有各自的特性,大而全的架构并非适合每一个用户,如Glance在最早的A、B版本中并没有实际出现应用,Nova可以脱离镜像服务独立运行。当用户的云计算规模大到需要管理多种镜像时,才需要像Glance这样的组件。
OpenStack的逻辑架构
2.1. Openstack创建实例的流程
- 通过登录界面dashboard或命令行CLI通过
RESTful API
向keystone
获取认证信息。 keystone
通过用户请求认证信息,并生成auth-token
返回给对应的认证请求。
- 然后携带
auth-token
通过RESTful API
向nova-api
发送一个boot instance
的请求。
nova-api
接受请求后向keystone
发送认证请求,查看token是否为有效用户和token。- keystone验证token是否有效,将结果返回给
nova-api
。
- 通过认证后nova-api和数据库通讯,初始化新建虚拟机的数据库记录。
nova-api
调用rabbitmq
,向nova-scheduler
请求是否有创建虚拟机的资源(node主机)。nova-scheduler
进程侦听消息队列,获取nova-api的请求。
nova-scheduler
通过查询nova数据库中计算资源的情况,并通过调度算法计算符合虚拟机创建需要的主机。- 对于有符合虚拟机创建的主机,
nova-scheduler
更新数据库中虚拟机对应的物理主机信息。
nova-scheduler
通过rpc调用向nova-compute
发送对应的创建虚拟机请求的消息。
nova-compute
会从对应的消息队列中获取创建虚拟机请求的消息。
nova-compute
通过rpc调用向nova-conductor
请求获取虚拟机消息。(Flavor)
nova-conductor
从消息队队列中拿到nova-compute
请求消息。
nova-conductor
根据消息查询虚拟机对应的信息。
nova-conductor
从数据库中获得虚拟机对应信息。
nova-conductor
把虚拟机信息通过消息的方式发送到消息队列中。
nova-compute
从对应的消息队列中获取虚拟机信息消息。
nova-compute
请求glance-api
获取创建虚拟机所需要镜像。
glance-api
向keystone
认证token是否有效,并返回验证结果。
- token验证通过,
nova-compute
获得虚拟机镜像信息(URL)。
nova-compute
请求neutron-server
获取创建虚拟机所需要的网络信息。neutron-server
向keystone认证token是否有效,并返回验证结果。- token验证通过,
nova-compute
获得虚拟机网络信息。
nova-compute
请求cinder-api
获取创建虚拟机所需要的持久化存储信息。cinder-api
向keystone认证token是否有效,并返回验证结果。- token验证通过,
nova-compute
获得虚拟机持久化存储信息。
nova-compute
根据instance的信息调用配置的虚拟化驱动来创建虚拟机。
2.2. 总图
3. openstack项目搭建
1、环境布署
2、配置keystone服务
3、配置glance服务
4、配置placement服务
5、配置nova服务控制节点
6、配置nova服务计算节点
7、配置neutron服务控制节点
8、配置neutron服务计算节点
9、创建实例
10、配置dashboard服务
图中数字,如10,表示ip:192.168.99.10
4. 环境配置
- 系统:
计算节点:centos 7.2.1511
其它:centos 7.6.1810 - 准备yum源:
/etc/yum.repos.d/openstack.repo
- 安装openstack客户端、openstack SELinux管理包(控制端与计算节点安装,其它不需要)
- 更改主机名
- 时间同步
- 配置hosts
这里设置你的vip和你的域名
- 如果你做bond,就做这步,否则就跳过。
bond配置
eth0配置:
eth1配置:
4.1. 配置SQL数据库
- 在数据库节点上配置
- 安装组件
- 配置my.cnf
- 启动数据库和设置开机启动
- 通过运行脚本来保护数据库服务
4.2. 配置Memcached
- 在数据库节点上配置
- 安装包:
- 编辑配置文件
配置服务以使用控制器节点的管理IP地址。这是为了通过网络访问其他节点:
替换下面这句
- 启动Memcached服务并将其配置为在系统引导时启动:
4.3. 安装rabbit-MQ
- 在数据库节点上配置
- 安装
- 启动(端口15672)
- 添加用户和密码
授权
- 打开web插件
- 查看插件
- web访问端口15672,用户密码都是guest
5. 配置haproxy+keepalived
- 在haproxy节点上配置
- 安装keepalived和haproxy
- 配置master_keepalived
- 启动
- haproxy配置
- 启动
查检下端口
- 配置内核参数
启动haproxy的时候,允许忽视VIP的存在
允许ip转发
使之生效
6. 配置keystone认证服务
6.1. 数据库:106
keystone数据库配置
6.2. 控制端: 101
- 安装插件
控制端上测试
在控制端添加host文件:/etc/hosts
配置keystone
1. 安装
- 生成临时token
输出,记住ta,有用
- 配置
/etc/keystone/keystone.conf
- 填充Identity服务数据库
- 初始化Fernet密钥存储库
验证:
- 配置apache配置文件
/etc/httpd/conf/httpd.conf
加配置Servername controller:80
- 软链接配置文件
- 启动Apache HTTP服务
- 配置管理帐户
验证下:
这里出错了,检查下你的token,OS_TOKEN设置变量的时候是不是没有跟你在/etc/keystone/keystone.conf
配置文件中设置的TOKEN的一样,改成一样的就可以了。
输出是空的就对了,因为我们还没有添加
- 创建新域的正式方法
11. 创建项目admin
- 创建admin,密码设置123
- 创建角色
- 给admin用户授权
- 创建demo项目
- 给demo创建用户
- 创建user角色(现在就有user和admin)
- 给demo用户授权user
- 创建service项目
- 创建用户glance
- 给service添加glance用户并授权admin角色
- 创建nova、neutron用户并授权
- 创建keystone的认证服务
- 查看服务列表
- 创建endpoint,地址写vip
公共端点
私有端点
管理端点
- 测试keystone能否验证
- 使用脚本配置环境变量
admin用户脚本keystone_admin.sh
demo用户脚本keystone_demo.sh
7. 配置glance服务
Glance是Openstack镜像服务组件,监听在9292端口,接收REST API请求,通过其它模块来完成镜像的获取,上传,删除等。
在创建虚拟机的时候,先把镜像上传到glace,
glance-api接收镜像的删除、上传和读取;
glance-registry(port:9191)与mysql交互,存储获取镜像的元数据。
glance数据库有两张表,一张image表,一张image property表:保存了镜像格式、大小等信息
image store是一个存储的接口层,通过这个接口glance可以获取镜像
- 控制端安装glance
- 在数据库数据库与用户
验证glance用户连接
- 编辑配置文件
/etc/glance/glance-api.conf
最终如下
- 编辑配置文件
/etc/glance/glance-registry.conf
最终如下
- 初始化glance数据库
验证数据库
- 启动glance并设置为开机启动
验证glance端口(30022,9191,9292)
- glance服务注册(设置环境变量)
- 创建glance服务
- 创建公有endpoint
- 创建私有endpoint
- 创建管理endpoint
- 验证以上步骤
- 验证glance服务
- 测试glance上传镜像
- 创建
验证glance镜像
- 查看指定镜像信息
8. 配置placement服务
8.1. 数据库
8.2. 控制端
- 使用您选择的创建Placement服务用户PLACEMENT_PASS
- 使用admin角色将Placement用户添加到服务项目
- 在服务目录中创建Placement API条目
- 创建Placement API服务端点
- 安装openstack-placement-api
- 编辑
/etc/placement/placement.conf
- 填充placement数据库
- 重启httpd服务
- 验证
9. 配置nova
9.1. 配置nova控制节点
nova分为控制节点和计算节点,计算节点通过nova computer进行虚拟机创建,通过libvirt调用kvm创建虚拟机,nova之间通信通过rabbitMQ队列进行通信
其组件和功能如下:
API:负责接收和响应外部请求。
Scheduler:负责调度虚拟机所在的物理机。
Conductor:计算节点访问数据库的中间件。
Consoleauth:用于控制台的授权认证。
Novncproxy:VNC 代理,用于显示虚拟机操作终端。
Nova-API的功能:
Nova-api组件实现了restful API的功能,接收和响应来自最终用户的计算API请求,接收外部的请求并通过message queue将请求发动给其他服务组件,同时也兼容EC2 API,所以也可以使用EC2的管理工具对nova进行日常管理。
nova scheduler:
nova scheduler模块在openstack中的作用是决策虚拟机创建在哪个主机(计算节点)上。决策一个虚拟机应该调度到某物理节点,需要分为两个步骤:
过滤(filter):过滤出可以创建虚拟机的主机
计算权值(weight):根据权重大进行分配,默认根据资源可用空间进行权重排序
9.1.1. 安装并配置nova控制节点
在数据库服务器操作
1. 准备数据库
9.1.2. 在控制端
- 安装
- 创建nova服务(类型compute)
- 创建公共端点
- 创建私有端点
- 创建管理端点
- 编辑
/etc/nova/nova.conf
详细配置:
- 配置apache允许访问placement API
最下方添加以下配置:
- 重启http
- 初始化数据库
- 验证nova cell0和nova cell1是否正常注册
- 启动并将nova服务设置为开机启动
- 重启nova控制端脚本(nova-restart.sh)
- 查看rabbitMQ连接
- 验证nova控制端
9.2. 配置nova计算节点
我的计算节点ip:192.168.99.10
注意:这个不是控制端,这是计算节点
- centos版本centos 7.2.1511
并开启虚拟化:
- 安装环境,在最前面
- 安装nova-compute包
- 配置nova
- 确认计算节点是否支持硬件加速
如果此命令返回值zero,则您的计算节点不支持硬件加速,您必须配置libvirt为使用QEMU而不是KVM。
编辑文件中的[libvirt]部分,/etc/nova/nova.conf
如下所示:
- 启动nova 计算服务并设置为开机启动
9.2.1. 控制端
- 添加计算节点到cell 数据库
- 主动发现计算节点
使用命令发现
定期主动发现
加上这条
- 重启nova服务
下面是验证:
- 验证1:列出服务组件以验证每个进程的成功启动和注册
- 验证2:列出Identity服务中的API端点以验证与Identity服务的连接
- 验证3:列出Image服务中的图像以验证与Image服务的连接
- 验证4:检查单元格和放置API是否正常运行以及其他必要的先决条件是否到位
10. 配置neutron服务
10.1. 配置neutron控制节点
10.1.1. 在数据库服务器上创建
要创建数据库,请完成以下步骤
10.1.2. 在控制端上
- 创建neutron用户
- 将admin角色添加到neutron用户
- 创建neutron服务实体
- 创建网络服务API端点
配置网络选项
5. 安装组件
配置服务器组件
6. 编辑neutron
[nova]
这个选项没有,要手动加,在结尾加
配置模块化第2层(ML2)插件
7. 编辑ml2_conf.ini文件
配置Linux桥代理
8. 编辑linuxbridge_agent.ini文件
- 设置
/etc/sysctl.conf
文件
生效
这里会报错,不管
配置DHCP代理
10. 编辑dhcp_agent.ini文件
配置元数据代理
11. 编辑metadata_agent.ini文件
nova_metadata_host写控制端ip,这里我们写vip,再由ha反向代理回来
metadata_proxy_shared_secret为元数据代理的密码
配置Compute服务以使用Networking服务
12. 编辑/etc/nova/nova.conf
文件
在最后加上
metadata_proxy_shared_secret 这是我们第11条里配置的密码
- 网络服务初始化脚本需要一个
/etc/neutron/plugin.ini
指向ML2插件配置文件的符号链接/etc/neutron/plugins/ml2/ml2_conf.ini
。
- 填充数据库:
- 重新启动Compute API服务:
- 启动网络服务并将其配置为在系统引导时启动
注:如果选择了Self-service networks
,就需要启动第3层服务,我们选择的是Provider networks
所以不需要
10.2. 配置neutron计算节点
10.2.1. 计算节点上
- 安装组件
配置公共组件
2. 编辑neutron.conf文件
配置Linux桥代理
3. 编辑linuxbridge_agent.ini文件
确保您的Linux操作系统内核支持网桥过滤器
4. 配置/etc/sysctl.conf
文件
生效
配置Compute服务以使用Networking服务
5. 编辑nova.conf文件
- 重新启动Compute服务:
- 启动Linux网桥代理并将其配置为在系统引导时启动:
10.2.2. 控制节点
- 验证
11. 创建实例
11.1. 控制端
创建网络
1. 创建提供者网络(最后的provider是网络名)
验证:
- 在网络上创建子网
--network需要写你上面创建的网络名
provider-sub是子网名
验证:
11.2. 创建实例类型
--vcpus :几个核的cpu
--ram :内存(单位M)
--disk :储存(单位G)
最后为类型名;
查看类型列表
生成密钥对
1. 生成密钥对并添加公钥
验证密钥对的添加
添加安全组规则
2. 允许ICMP(ping)
- 允许安全shell(SSH)访问:
- 验证
查看类型
查看镜像
列出可用网络
列出可用的安全组:
- 启动实例
--flavor: 类型名称
--image: 镜像名称
--security-group:安全组名
PROVIDER_NET_ID替换网络ID
最后provider-instance是实例名
- 查看实例状态
- 使用虚拟控制台访问实例
provider-instance是你的实例名称
在浏览器使用url来连接实例
12. 配置Dashboard服务
horizon是openstack的管理其他组件的图形显示和操作界面,通过API和其他服务进行通讯,如镜像服务、计算服务和网络服务等结合使用,horizon基于python django开发,通过Apache的wsgi模块进行web访问通信,Horizon只需要更改配置文件连接到keyston即可
12.1. 控制端
- 安装和配置组件
- 编辑
/etc/openstack-dashboard/local_settings
文件
打开配置文件,搜索下面这些键,替换他们(下面提供sed命令)
controller节点
OPENSTACK_HOST写控制端本机的IP
启用Identity API版本3
配置user为通过仪表板创建的用户的默认角色:
接受所有主机
配置memcached会话存储服务
启用对域的支持:
配置API版本:
配置Default为通过仪表板创建的用户的默认域:
如果选择网络选项1,请禁用对第3层网络服务的支持:
(可选)配置时区:
sed一键配置
继续配置下面的
- 添加下行到配置文件
/etc/httpd/conf.d/openstack-dashboard.conf
- 重新启动Web服务器和会话存储服务()
memcached我安装在其它机器上
- 浏览器http://controller_IP/dashboard
controller写你控制端的ip
13. 配置cinder(块存储服务)
监听端口:8776
配置cinder控制器节点
- 数据库端
- 控制端
- 创建cinder用户:
- 将admin角色添加到cinder用户:
- 创建cinderv2和cinderv3服务实体
- 创建Block Storage服务API端点
- 安装和配置组件
- 编辑/etc/cinder/cinder.conf文件并完成以下操作
- 填充块存储数据库
- 配置计算以使用块存储
编辑/etc/nova/nova.conf文件
加上这个配置
- 重新启动Compute API服务
- 启动Block Storage服务并将其配置为在系统引导时启动
存储服务器
准备一台存储服务器,称之为“块存储”节点
- "块存储"节点
- 安装LVM包:
yum install lvm2 device-mapper-persistent-data - 启动LVM元数据服务
systemctl enable lvm2-lvmetad.service
systemctl start lvm2-lvmetad.service - 创建LVM物理卷/dev/sdb
pvcreate /dev/sdb - 创建LVM卷组cinder-volumes
vgcreate cinder-volumes /dev/sdb - 编辑lvm配置文件
找个下面这个字段修改
a是access,r是reject,只授受sdb磁盘
- 安装包:
- 编辑cinder.conf文件
my_ip写你的本机的IP
- 启动Block Storage卷服务
(可选)配置备份服务
- "块存储"节点
- 安装包:
- 编辑cinder.conf文件
- 启动Block Storage备份服务
14. openstack高可用配置
14.1. NFS
IP:192.168.99.105
1. 安装nfs
- 添加用户
- 修改配置文件
- 创建文件
- 启动服务
- 验证下
- 给权限
14.2. 控制端挂载NFS
在挂载之前先保存下镜像
挂载
再把镜像移回来
14.3. haproxy高可用
需要的包haproxy + keepalived
在前面已经做了一台haproxy+keepalived,所以我们需要再加一台物理机,做backup。
IP: 192.168.99.104
开始配置
1. 安装
- 配置keepalived:
- 启动
- 配置haproxy:
在配置之前要看下需要做反向代理的端口
PORT | 服务 |
---|---|
5000 | keystone |
9292 | glance |
8778 | placement |
8774 | nova |
9696 | neutron |
6080 | VNC |
3306 | MySQL |
5672 | rabbitMQ |
15672 | rabbitMQ_WEB |
11211 | memcached |
这个配置在ha_1上也要加上
14.4. 控制端的高可用
要实现高可以用,要再准备一台物理机,设置主机名为controller2,
IP:192.168.99.113
从controller1准备这些文件
最终如图,yum源是centos安装时自带,如果你删除了也要从其它主机拷贝过来
准备的过程(在原有的controller上)
admin.keystone
demo.keystone
脚本内容,要先设置好主机名,主机名不能包含_
下划线
把之前所有的/etc/hosts改成
14.5. 快速添加node节点
新的物理机,安装好centos7.2,配置好IP地址与主机名。
准备这些包
准备
文件limits.conf
文件profile
文件sysctl.conf
脚本openstack_node_script.sh