(一)
OpenStack
简要介绍
前言: Python 语言研发
什么云
1:
IAAS: Infrastructure-
as-a-Service(基础设施即服务,代表作:ECS云主机,OpenStack技术)
类似你买的一个ECS主机,只提供系统、网络、存储、虚拟化功能,如何服务你都需要自己配置安装
2:
PaaS: Platform-
as-a-Service(平台即服务,代表作:Docker技术)
类似你买的一个ECS主机,已经部署好了PHP环境,也就是准备好了PHP代码的运行环境
3:
SaaS: Software-
as-a-Service(软件即服务)
类似你买了一个接口,可以直接在浏览器上操纵远程主机,直接上传代码,配置服务,例如:云盘
云的分类
1:
Private Cloud:私有云
公司内部搭建
2:
Public Cloud:公有云
阿里云ECS、亚马逊AWS等
3:Hybrid Cloud:混合云
Private +
Public = Hybrid
(其实APP开发的发展也分为这三类:NativeApp、WebApp、HybridApp)
OpenStack 架构分析
(底下所有的都是OpenStack 生态圈的各个组件,是不是感觉天又黑暗了,这里说明了各个组件是干什么的:https://docs.openstack.org/pike/admin/)- 什么是OpenStack
- 概念架构图
- 逻辑架构图
主要组件介绍
(括号里面的是项目名称)
1 Identify(Keystone)
为OpenStack其它几个模块提供认证服务,整个keystone其实就是在数据库中建立用户(user)、角色(role)、Tenant、服务(service)、endpoint以及其相互对应关系。Tenant在之前的版本中叫做Project,Tenant是一个独立的资源容器。每个Tenant都可以定义独立的VLAN, volumes, instances, images, keys, users等。服务指的是OpenStack所提供的那几种服务(network, volume, image, identify, compute, swift)。endpoint是指各服务的内部、外部及管理接口址(REST API)。这个模块可以看做是云系统车间的安全部门。
2 Compute(Nova)
这个模块很重要,可以说是 OpenStack 的核心模块之一,以至于在 OpenStack 的初期版本里大部分的云系统管理功能都是由该模块负责管理的,只不过后来为了减轻该“车间主任”的压力,也便于功能分配管理,才把虚拟存储、网络等部分分离出来,而使该模块主要负责云虚拟机实例(Compute 或 Instance) 的生成、监测、终止等管理功能。
它由nova-compute模块通过libvirt、XenAPI等管理hypervisor,从而管理虚机,此外它还通过nova-api服务向外提供如EC2兼容、管控功能等的接口,通过nova-scheduler模块提供虚机调研逻辑等;这些模块间的通信全部通过消息队列完成。
3 Image(Glance)
提供云虚拟机上的服务镜像(Image)功能,该模块可看成车间里的模具生产部门,该模具最基本的使用方式就是在为云虚拟机实例提供安装操作系统的模式,比如 RedHat Linux、Ubuntu、Windows 等。同时云服务使用者也可以在已经生成和个性化安装后的云虚拟机实例来生成自定义的镜像。这样以后就可以根据该自定义镜像直接生成所需的虚拟机实例。
4 Network(Neutron)
提供 OpenStack 虚拟网络服务,也是 OpenStack 重要的核心模块之一,该模块最开始是 Nova 的一部分,叫 nova-network,后来从 Nova 中分离出来,开始名字为 Quantum,后来由于商业名权的原因改为了 Neutron。该模块之所以重要是因为如果没有虚拟网络服务,OpenStack 就变为单纯提供虚拟机实例和虚拟存储服务的平台,这就违背了提供分布式虚拟服务的云计算核心价值。该模块不仅提供基本的创建子网、路由和为虚拟机实例分配 IP 地址功能,还提供了 a. 同时支持多种物理网络类型,支持 Linux Bridge、Hyper-V 和 OVS bridge 计算节点共存;b. 支持防火墙服务;c. 支持虚拟网络中节点间 VPN 服务;d. SDN 实现完善和提高。
在OpenStack的网络管理流程中,通常需要经过以下几个步骤:
1.创建一个网络;
2.创建一个子网;
3.启动一个虚机,将一块网卡对接到指定的网络上;
4.删除虚机;
5.删除网络端口;
6.删除网络;
5 Block Storage(Cinder)
提供 OpenStack 存储块(Volume)服务,该管理模块原来也为 Nova 的一部分,即 Nova-volume,后来从 Folsom 版本开始使用 Cinder 来分离出块存储服务。具体地说 Cinder 是云存储服务的调度监控模块,它需要与如 NFS、Ceph 等网络文件系统配合使用。
6 Dashboard(Horizon)
为 OpenStack 提供交互式界面的 UI 组件。
7 Object Storage(Swift)
对象存储,存储的是一些资源文件,如图片、代码等文件。对象存储服务是OpenStack最早期的两个服务之一(另一个是计算服务),在OpenStack平台中,任何的数据都是一个对象。
以上是 OpenStack 的基本组件,通过这些组件就可以搭建一套基本的云计算服务平台,如果再加入用于 OpenStack 系统资源监控的 Ceilometer、云系统部署用的 Heat、以及大数据部署的Sahara,该云计算平台则会更加完善。
(二)
OpenStack
安装、配置 controller节点
前言: 安装第一个service :Keystone
- 安装OpenStack
- 引导手册:https://docs.openstack.org/liberty/zh_CN/install-guide-rdo/overview.html#example-architecture
①安装、配置NTP服务
1:首先准备两台主机,一个是controller节点(外网:
192.168
.191
.10,内网:
10.0
.0
.10)、一个是compute节点(外网:
192.168
.191
.11,内网:
10.0
.0
.11),内网地址用于主机间通信,因此配置/etc/hosts文件,两个节点一样配置
10.0
.0
.10 controller
10.0
.0
.11 compute
2:按照文档先配置controller节点的时间同步服务器,同步外网的主机,内网的主机在controller节点同步时间
yum install -y chrony
3:编辑配置文件/etc/chrony.conf,添加
server s1a.time.edu.cn iburst (国内NTP时间同步服务器)
allow
10.0
.0
.0/
24
4:启动ntp服务
systemctl enable chronyd.service
systemctl start chronyd.service
5:配置compute节点,安装chrony服务,同步controller节点的时间
yum install -y chrony
编辑配置文件/etc/chrony.conf,添加
server controller iburst
systemctl enable chronyd.service
systemctl start chronyd.service
6:验证时间同步
chronyc sources
②配置OpenStack源
1:配置OpenStack的安装源(现在最新的版本是pike,这里给大家讲解的是mitaka), 编辑/etc/yum.repos.d/OpenStack.repo,添加[Openstack]name=openstackbaseurl=http://mirrors.aliyun.com/centos/7.3.1611/cloud/x86_64/openstack-mitaka/enabled=1gpgcheck=02: controller和compute两个节点都需要配置OpenStack源
0:编辑/etc/my.cnf,添加
innodb_file_per_table=
on
skip_name_resolve=
on
1:创建keystone数据库
systemctl start mariadb
mysql
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> grant all
on keystone.* to keystone@'localhost' identified
by '123456';
MariaDB [(none)]> grant all
on keystone.* to keystone@'%' identified
by '123456';
2:安装openstack-keystone
yum install -y openstack-keystone httpd mod_wsgi python-openstackclient(这个包提供openstack命令,因此需要安装上)
3:编辑配置文件/etc/keystone/keystone.
conf
# 给一个
token值,使用openssl rand -hex 10 > yhy.
token, 最好是保存至一个文件中,
admin_token = 5b23086349d4bc82cffe
# 操作keystone的API,使用pymysql连接
connection = mysql+pymysql:
//keystone:123456@controller/keystone
#
token的提供者
provider = fernet
4:初始化身份认证服务的数据库,切换为keystone用户,运行
"keystone-manage db_sync"命令
su -s /bin/
sh -c
"keystone-manage db_sync" keystone
5:初始化Fernet keys
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
6:配置Apache服务, 编辑/etc/httpd/
conf/httpd.
conf配置文件
ServerName controller
7: 编辑/etc/httpd/
conf.
d/wsgi-keystone.
conf配置文件,添加
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone
display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{
GLOBAL}
WSGIPassAuthorization
On
ErrorLogFormat
"%{cu}t %M"
ErrorLog /
var/
log/httpd/keystone-
error.
log
CustomLog /
var/
log/httpd/keystone-access.
log combined
<Directory /usr/bin>