目录

  • 一、openstack云计算平台
  • 1.openstack简介
  • 2.openstack的架构
  • 3.openstack搭建
  • a.实验环境
  • b.控制节点配置
  • 二、组件1---认证服务
  • 1.创建数据库
  • 2.创建服务实体和API端点
  • 3.创建域、项目、用户和角色
  • 4.验证操作
  • 5.创建 OpenStack 客户端环境脚本
  • 三、组件2---镜像服务
  • 1.简介
  • 2.安装和配置
  • 3.验证操作


一、openstack云计算平台

1.openstack简介

  • OpenStack是一个云操作系统,它控制整个数据中心的计算、存储和网络资源的大型池,所有这些都通过具有通用身份验证机制的api进行管理和配置。还提供了一个仪表板,允许管理员控制,同时允许用户通过web界面提供资源。除了标准的基础设施即服务功能外,其他组件还提供编排、故障管理和服务管理等服务,以确保用户应用程序的高可用性。
  • OpenStack 架构由大量开源项目组成。其中包含 6 个稳定可靠的核心服务,用于处理计算、网络、存储、身份和镜像; 同时,还为用户提供了十多种开发成熟度各异的可选服务。OpenStack 的 6 个核心服务主要担纲系统的基础架构,其余项目则负责管理控制面板、编排、裸机部署、信息传递、容器及统筹管理等操作。
  • 整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。
    openstack重要集成组件:
    1、Nova - 计算服务,是一个完整的 OpenStack 计算资源管理和访问工具,负责处理规划、创建和删除操作。
    2、Neutron-网络服务,是一个完整的 OpenStack 计算资源管理和访问工具,负责处理规划、创建和删除操作。
    3、Swift - 对象存储服务, 是一种高度容错的对象存储服务,使用 RESTful API 来存储和检索非结构数据对象。
    4、Cinder-块存储服务,通过自助服务 API 访问持久块存储。
    5、Glance - 镜像服务,Glance 可存储和检索多个位置的虚拟机磁盘镜像。
    6、dashboard - web管理界面。
    7、Keystone - 认证服务,认证所有 OpenStack 服务并对其进行授权。同时,它也是所有服务的端点目录。
    8、Horizon - UI服务。
    9、Ceilometer-监控服务。
    10、Heat-集群服务,编排。

2.openstack的架构

  • 基本架构

    通过消息队列和数据库,各个组件可以相互调用,互相通信。每个项目都有各自的特性,大而全的架构并非适合每一个用户,如Glance在最早的A、B版本中并没有实际出现应用,Nova可以脱离镜像服务独立运行。当用户的云计算规模大到需要管理多种镜像时,才需要像Glance这样的组件。
  • 逻辑架构

3.openstack搭建

a.实验环境

单点部署 all-in-one模式

rhel7.6虚拟机,至少4G的内存;

双网卡 eth0: 172.25.36.5 访问Horizon使用,eth1:激活但不分配ip,neutron使用,云主机访问外网用;

禁用selinux和firewalld;

虚拟机的cpu需要支持kvm虚拟化,CPU 设为直通模式( host-passthrough 是为了虚拟机里支持 kvm 硬件虚拟化)

云计算openstack平台搭建 openstack云计算管理平台_swift


云计算openstack平台搭建 openstack云计算管理平台_swift_02


云计算openstack平台搭建 openstack云计算管理平台_swift_03


可以参考openstack 的官网来看其相关设置以及配置:点击 选择语言

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_04


选择版本

云计算openstack平台搭建 openstack云计算管理平台_云计算_05

b.控制节点配置

一块网卡eth0给了ip,另一块网卡eth1(用于云主机通信)可以不给ip,但需要激活

云计算openstack平台搭建 openstack云计算管理平台_数据库_06


网卡配置文件如下

云计算openstack平台搭建 openstack云计算管理平台_运维_07


云计算openstack平台搭建 openstack云计算管理平台_云计算_08


激活eth1网卡,除此之外,记得做所有节点的域名解析/etc/hosts

云计算openstack平台搭建 openstack云计算管理平台_数据库_09


openstack要求所有节点的时间必须同步,也就是说:所有节点的时间必须与控制节点的时间相同。真机使用Chrony简单配置服务器之间的时间同步

云计算openstack平台搭建 openstack云计算管理平台_云计算_10


保证宿主机与阿里云服务器时间同步

云计算openstack平台搭建 openstack云计算管理平台_云计算_11


允许以下网段的NTP客户端访问(也就是允许该网段的主机通过宿主机同步时间)

云计算openstack平台搭建 openstack云计算管理平台_数据库_12


真机可以上网

云计算openstack平台搭建 openstack云计算管理平台_swift_13


server5安装时间同步服务器

云计算openstack平台搭建 openstack云计算管理平台_swift_14


修改/etc/chrony.conf配置

云计算openstack平台搭建 openstack云计算管理平台_云计算_15


设定server5与宿主机同步时间

云计算openstack平台搭建 openstack云计算管理平台_swift_16


启动并自启chrony服务

云计算openstack平台搭建 openstack云计算管理平台_数据库_17


查看是否成功

云计算openstack平台搭建 openstack云计算管理平台_云计算_18


在真机的apache 发布目录中,将openstack软件包复制到该目录中

云计算openstack平台搭建 openstack云计算管理平台_数据库_19


server5配置仓库文件

云计算openstack平台搭建 openstack云计算管理平台_运维_20


在安装之前,先在server5上升级包

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_21


安装 OpenStack 客户端

云计算openstack平台搭建 openstack云计算管理平台_云计算_22


整个openstack 的数据都会持久化保存到 SQL 数据库中,此处使用mariadb 数据库;

安装软件包

云计算openstack平台搭建 openstack云计算管理平台_数据库_23


之后,创建并编辑 /etc/my.cnf.d/openstack.cnf,然后在 [mysqld] 部分,设置 bind-address值为控制节点的管理网络IP地址,以使得其它节点可以通过管理网络访问数据库;

设置如下键值来启用一起有用的选项和 UTF-8 字符集;

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

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_24


为了保证数据库服务的安全性,运行mysql_secure_installation脚本。需要为数据库的root用户设置一个适当的密码(全选yes)

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_25


成功登陆数据库

云计算openstack平台搭建 openstack云计算管理平台_swift_26


OpenStack 使用 message queue (消息队列)协调操作和各服务的状态信息。消息队列服务一般运行在控制节点上。OpenStack支持好几种消息队列服务包括 RabbitMQ, Qpid, 和 ZeroMQ。不过,大多数发行版本的OpenStack包支持特定的消息队列服务;

这里安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它。

云计算openstack平台搭建 openstack云计算管理平台_数据库_27


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

云计算openstack平台搭建 openstack云计算管理平台_数据库_28


添加 openstack 用户,密码也设为openstack(用户名和密码保持一致,便于记忆),前面是用户,后面为密码;

openstack用户配置写和读权限

云计算openstack平台搭建 openstack云计算管理平台_运维_29


查看rabbitmq的插件

云计算openstack平台搭建 openstack云计算管理平台_云计算_30


激活管理器插件

云计算openstack平台搭建 openstack云计算管理平台_数据库_31


查看端口,5672为主端口,15672为web端口

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_32


登陆页面,默认用户名和密码都是guest

云计算openstack平台搭建 openstack云计算管理平台_数据库_33


点击admin,可以看到如下三个星号,分别代表:配置、读、写权限(rabbitmq自带的后台图形化管理工具)

云计算openstack平台搭建 openstack云计算管理平台_运维_34


认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_35


启动Memcached服务,并且配置它随机启动,端口为11211(可以看到这个端口只监听本机,那么其他主机将无法连接它),因此需要变更一下

云计算openstack平台搭建 openstack云计算管理平台_数据库_36


编辑如下全局文件,禁用OPTIONS;

重启服务,此时,11211可以监听本机所有接口

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_37


我们将server5主机名修改为controller,表示server5为控制节点

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_38


修改域名解析文件;

server5为控制节点,server6为计算节点,server7为块存储节点

云计算openstack平台搭建 openstack云计算管理平台_swift_39

二、组件1—认证服务

1.创建数据库

接下来在控制节点上安装和配置OpenStack身份认证服务,代码名称keystone。出于性能原因,这个配置部署Fernet令牌和Apache HTTP服务处理请求;
在配置 OpenStack 身份认证服务前,必须创建一个数据库和管理员令牌。

首先,用数据库连接客户端以 root 用户连接到数据库服务器;

创建 keystone 数据库

云计算openstack平台搭建 openstack云计算管理平台_数据库_40


keystone数据库授予恰当的权限,保证keystone用户可以从本地和远程登陆数据库(用户名和密码保持一致,便于记忆)

云计算openstack平台搭建 openstack云计算管理平台_swift_41


测试登陆

云计算openstack平台搭建 openstack云计算管理平台_云计算_42


运行以下命令来安装相应包

云计算openstack平台搭建 openstack云计算管理平台_数据库_43


生成一个随机值在初始的配置中作为管理员的令牌;

编辑文件 /etc/keystone/keystone.conf

云计算openstack平台搭建 openstack云计算管理平台_云计算_44


[DEFAULT]部分,定义初始管理令牌的值

云计算openstack平台搭建 openstack云计算管理平台_运维_45


[database]部分,配置数据库访问;

数据库驱动为mysql,使用pymysql(python开发的),使用keystone用户、keystone密码来连接controller节点,访问keystone数据库

云计算openstack平台搭建 openstack云计算管理平台_swift_46


[token]部分,配置Fernet UUID令牌的提供者

云计算openstack平台搭建 openstack云计算管理平台_云计算_47


初始化身份认证服务的数据库(以keystone用户身份来同步数据库)

云计算openstack平台搭建 openstack云计算管理平台_swift_48


登陆数据库,可以看到数据已经同步到了数据库中

云计算openstack平台搭建 openstack云计算管理平台_运维_49


云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_50


初始化Fernet keys

云计算openstack平台搭建 openstack云计算管理平台_swift_51


编辑Apache主配置文件/etc/httpd/conf/httpd.conf ,配置ServerName 选项为控制节点

云计算openstack平台搭建 openstack云计算管理平台_运维_52


用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_53


激活两个端口:5000(用于公共连接),35357(用于admin管理员连接)

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>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    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>
        Require all granted
    </Directory>
</VirtualHost>

云计算openstack平台搭建 openstack云计算管理平台_数据库_54


启动 Apache HTTP 服务并配置其随系统启动

云计算openstack平台搭建 openstack云计算管理平台_运维_55

2.创建服务实体和API端点

身份认证服务提供服务的目录和他们的位置。每个添加到OpenStack环境中的服务在目录中需要一个 service 实体和一些 API endpoints ;
默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。必须使用为身份认证服务创建的临时身份验证令牌,来初始化的服务实体和API端点。

配置认证令牌

云计算openstack平台搭建 openstack云计算管理平台_数据库_56


配置端点URL(v3版本);

配置认证 API 版本

云计算openstack平台搭建 openstack云计算管理平台_swift_57


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

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_58

OpenStack使用三个API端点变种代表每种服务:admin,internal和public;
默认情况下,管理API端点允许修改用户和租户而公共和内部APIs不允许这些操作。在生产环境中,处于安全原因,变种为了服务不同类型的用户可能驻留在单独的网络上。对实例而言,公共API网络为了让顾客管理他们自己的云在互联网上是可见的。管理API网络在管理云基础设施的组织中操作也是有所限制的。内部API网络可能会被限制在包含OpenStack服务的主机上。此外,OpenStack支持可伸缩性的多区域。

创建认证服务的 API 端点(外部连接)

云计算openstack平台搭建 openstack云计算管理平台_云计算_59


创建认证服务的 API 端点(内部连接)

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_60


创建认证服务的 API 端点(管理员连接的)

云计算openstack平台搭建 openstack云计算管理平台_运维_61


查看所创建的endpoint

云计算openstack平台搭建 openstack云计算管理平台_云计算_62

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

身份认证服务为每个OpenStack服务提供认证服务。认证服务使用 T domains, projects (tenants), :term:users<user>和 :term:roles<role>的组合。

创建域default

云计算openstack平台搭建 openstack云计算管理平台_运维_63


为进行管理操作,需要创建管理的项目、用户和角色;

创建 admin 项目:

云计算openstack平台搭建 openstack云计算管理平台_swift_64


创建 admin 用户,使用 --password 直接为admin用户设置密码(密码为admin,便于记忆)

云计算openstack平台搭建 openstack云计算管理平台_云计算_65


创建 admin 角色(基于RBAC角色的访问控制)

云计算openstack平台搭建 openstack云计算管理平台_云计算_66


添加admin 角色到 admin 项目和用户上,使得admin用户能够以admin管理员角色管理admin项目

云计算openstack平台搭建 openstack云计算管理平台_swift_67


每个服务包含独有用户的service 项目;

创建service项目:

云计算openstack平台搭建 openstack云计算管理平台_swift_68


创建demo 项目(非管理员的项目)

云计算openstack平台搭建 openstack云计算管理平台_云计算_69


创建demo 用户

云计算openstack平台搭建 openstack云计算管理平台_云计算_70


创建 user 角色

云计算openstack平台搭建 openstack云计算管理平台_运维_71


添加 user角色到demo 项目和用户(使得demo用户能够以demo角色管理demo项目)

云计算openstack平台搭建 openstack云计算管理平台_数据库_72

4.验证操作

因为安全性的原因,关闭临时认证令牌机制(此时已经有两个用户–admin和demo);

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

云计算openstack平台搭建 openstack云计算管理平台_云计算_73


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

云计算openstack平台搭建 openstack云计算管理平台_运维_74


此时无法直接看到user,必须加上连接的URL等等,进行身份认证

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_75

5.创建 OpenStack 客户端环境脚本

之前使用环境变量和命令选项的组合通过openstack客户端与身份认证服务交互。为了提升客户端操作的效率,OpenStack支持简单的客户端环境变量脚本即OpenRC 文件。这些脚本通常包含客户端所有常见的选项,当然也支持独特的选项。

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

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

云计算openstack平台搭建 openstack云计算管理平台_运维_76


编辑文件 demo-openrc 并添加如下内容

云计算openstack平台搭建 openstack云计算管理平台_云计算_77


加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书;

此时,可以列出相应信息(所有的用户、连接端点)

云计算openstack平台搭建 openstack云计算管理平台_swift_78


列出角色、项目、服务

云计算openstack平台搭建 openstack云计算管理平台_云计算_79


加载demo-openrc文件,普通用户没有操作权限,只有admin才能有相应的操作权限

云计算openstack平台搭建 openstack云计算管理平台_运维_80

三、组件2—镜像服务

1.简介

镜像服务 (glance) 允许用户发现、注册和获取虚拟机镜像。它提供了一个 REST API,允许您查询虚拟机镜像的 metadata 并获取一个现存的镜像。您可以将虚拟机镜像存储到各种位置,从简单的文件系统到对象存储系统—-例如 OpenStack 对象存储, 并通过镜像服务使用。

  • OpenStack镜像服务是IaaS的核心服务,它接受磁盘镜像或服务器镜像API请求,和来自终端用户或OpenStack计算组件的元数据定义。它也支持包括OpenStack对象存储在内的多种类型仓库上的磁盘镜像或服务器镜像存储。
  • 大量周期性进程运行于OpenStack镜像服务上以支持缓存。同步复制(Replication)服务保证集群中的一致性和可用性。其它周期性进程包括auditors, updaters, 和 reapers。
  • OpenStack镜像服务包括以下组件:
    1、glance-api:接收镜像API的调用,诸如镜像发现、恢复、存储。
    2、glance-registry:存储、处理和恢复镜像的元数据,元数据包括项诸如大小和类型。注意:glance-registry是私有内部服务,用于服务OpenStack Image服务。不要向用户暴露该服务。
    3、数据库:存放镜像元数据,用户是可以依据个人喜好选择数据库的,多数的部署使用MySQL或SQLite。
    4、镜像文件的存储仓库:支持多种类型的仓库,它们有普通文件系统、对象存储、RADOS块设备、HTTP、以及亚马逊S3。记住,其中一些仓库仅支持只读方式使用。
    5、元数据定义服务:通用的API,是用于为厂商,管理员,服务,以及用户自定义元数据。这种元数据可用于不同的资源,例如镜像,工件,卷,配额以及集合。一个定义包括了新属性的键,描述,约束以及可以与之关联的资源的类型。

2.安装和配置

接下来我们在控制节点上安装和配置镜像服务,即 glance。这个配置将镜像保存在本地文件系统中。安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。

用数据库连接客户端以 root 用户连接到数据库服务器;

创建 glance 数据库;

glance数据库授予恰当的权限(使得glance用户可以通过本地和远端登陆数据库)。

云计算openstack平台搭建 openstack云计算管理平台_运维_81


创建 glance 用户(用于keystone认证)

云计算openstack平台搭建 openstack云计算管理平台_数据库_82


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

创建glance服务实体

云计算openstack平台搭建 openstack云计算管理平台_swift_83


创建镜像服务的 API 端点(public),这个组件的端口是9292

云计算openstack平台搭建 openstack云计算管理平台_数据库_84


创建镜像服务的 API 端点(内部)

云计算openstack平台搭建 openstack云计算管理平台_云计算_85


创建镜像服务的 API 端点(admin)

云计算openstack平台搭建 openstack云计算管理平台_运维_86


安装软件包

云计算openstack平台搭建 openstack云计算管理平台_云计算_87


编辑文件 /etc/glance/glance-api.conf

云计算openstack平台搭建 openstack云计算管理平台_swift_88


搜索database

云计算openstack平台搭建 openstack云计算管理平台_云计算_89


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

云计算openstack平台搭建 openstack云计算管理平台_swift_90


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

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_91


启用keystone认证

云计算openstack平台搭建 openstack云计算管理平台_运维_92


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

云计算openstack平台搭建 openstack云计算管理平台_运维_93


编辑文件 /etc/glance/glance-registry.conf

云计算openstack平台搭建 openstack云计算管理平台_运维_94


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

云计算openstack平台搭建 openstack云计算管理平台_云计算openstack平台搭建_95


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

云计算openstack平台搭建 openstack云计算管理平台_运维_96


云计算openstack平台搭建 openstack云计算管理平台_数据库_97


写入镜像服务数据库(同步数据库);

可以忽略输出中任何不推荐使用的信息

云计算openstack平台搭建 openstack云计算管理平台_云计算_98


进入数据库查看

云计算openstack平台搭建 openstack云计算管理平台_swift_99


启动镜像服务、配置他们随机启动

云计算openstack平台搭建 openstack云计算管理平台_运维_100

3.验证操作

使用 CirrOS 对镜像服务进行验证,CirrOS是一个小型的Linux镜像可以用来帮助我们进行 OpenStack部署测试;

将宿主机提前下载的镜像传给server5

云计算openstack平台搭建 openstack云计算管理平台_swift_101


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

云计算openstack平台搭建 openstack云计算管理平台_运维_102


可以看到镜像存储如下;

确认镜像的上传并验证属性(可以看到,ID和镜像名是相同的)

云计算openstack平台搭建 openstack云计算管理平台_数据库_103


云计算openstack平台搭建 openstack云计算管理平台_云计算_104