本篇博文主要搭建OpenStack架构中的keystone组件,之后会依次带来OpenStack中的glance、nova、neutron、horizon、cinder和虚拟机的管理操作。在实验部署之前,先对OpenStack进行以下了解!

什么是OpenStack?

OpenStack既是一个社区,也是一个项目和一个开源软件,提供开放源码软件,建立公共和私有云,它提供了一个部署云的操作平台或工具集,其宗旨在于:帮助组织运行为虚拟计算或存储服务的云,为公有云、私有云,也为大云、小云提供可扩展的、灵活的云计算。 OpenStackd开源项目由社区维护,包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。 OpenStack提供了一个操作平台,或工具包,用于编排云。

OpenStack组件:

OpenStack当前主要有三个组件:计算,存储,镜像。

  • OpenStack计算是一个云控制器,用来启动一个用户或一个组的虚拟实例,它也用于配置每个实例或项目中包含多个实例为某个特定项目的联网。
  • OpenStack对象存储是一个在具有内置冗余和容错的大容量系统中存储对象的系统。对象存储有各种应用,如备份或存档数据,存储图形或视频,储存二级或三级静态数据,发展与数据存储集成新的应用程序。 
  • OpenStack镜像服务是一个查找和虚拟机图像检索系统。它可以配置三种方式:使用OpenStack对象存储来存储图像;使用亚马逊S3直接存储,或使用S3对象存储作为S3访问中间存储。

OpenStack构成

整个OpenStack是由控制节点,计算节点,网络节点,存储节点四大部分组成。 控制节点:负责对其余节点的控制,包含虚拟机建立,迁移,网络分配,存储分配等等 计算节点:负责虚拟机运行 网络节点:负责对外网络与内网络之间的通信 存储节点:负责对虚拟机的额外存储管理等等

控制节点架构

** 控制节点包括以下服务:**

  • 管理支持服务
  • 基础管理服务
  • 扩展管理服务 1)管理支持服务包含MySQL与Qpid两个服务 MySQL:数据库作为基础/扩展服务产生的数据存放的地方 Qpid:消息代理(也称消息中间件)为其他各种服务之间提供了统一的消息通信服务 2)基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务 Keystone:认证管理服务,提供了其余所有组件的认证信息/令牌的管理,创建,修改等等,使用MySQL作为统一的数据库 Glance:镜像管理服务,提供了对虚拟机部署的时候所能提供的镜像的管理,包含镜像的导入,格式,以及制作相应的模板 Nova:计算管理服务,提供了对计算节点的Nova的管理,使用Nova-API进行通信 Neutron:网络管理服务,提供了对网络节点的网络拓扑管理,同时提供Neutron在Horizon的管理面板 Horizon:控制台服务,提供了以Web的形式对所有节点的所有服务的管理,通常把该服务称为DashBoard 3)扩展管理服务包含Cinder,Swift,Trove,Heat,Centimeter五个服务 Cinder:提供管理存储节点的Cinder相关,同时提供Cinder在Horizon中的管理面板 Swift:提供管理存储节点的Swift相关,同时提供Swift在Horizon中的管理面板 Trove:提供管理数据库节点的Trove相关,同时提供Trove在Horizon中的管理面板 Heat:提供了基于模板来实现云环境中资源的初始化,依赖关系处理,部署等基本操作,也可以解决自动收缩,负载均衡等高级特性。 Centimeter:提供对物理资源以及虚拟资源的监控,并记录这些数据,对该数据进行分析,在一定条件下触发相应动作。

实验环境:

本实验需三台虚拟机,分别为控制节点(包含镜像服务)、计算节点、存储节点;建议三台虚拟机配置2个CPU,内存设置为4G。

| 主机 | 系统 | IP地址 |角色 | -------- | -------- | -------- | | controller | CentOS7 | 192.168.37.128 |keystone、ntp、mariadb、rabbitmq、memcached、etcd、apache | compute | CentOS7 | 192.168.37.130 |nova、ntp | cinder |CentOS7 |192.168.37.131 | cinder、ntp

实验过程:

一、环境准备(三台虚拟机)

1、关闭防火墙 关闭selinux

systemctl stop firewalld.service setenforce 0

2、分别修改主机名

hostnamectl set-hostname controller #控制节点 bash hostnamectl set-hostname compute #计算节点 bash hostnamectl set-hostname cinder ** #存储节点** bash

3、修改hosts文件

vim /etc/hosts 192.168.37.128 controller
192.168.37.130 compute 192.168.37.131 cinder

4、节点互通测试

ping -c 4 openstack.org #发送4个包测试官网联通 ping -c 4 compute ping -c 4 openstack.org ** #计算节点测试** ping -c 4 controller ping -c 4 openstack.org ** #存储节点测试** ping -c 4 controller

5、备份默认yum源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

6、下载最新yum源

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

7、安装所需openstack软件包

yum install centos-release-openstack-queens -y yum upgrade -y ** #更新软件仓库** yum install python-openstackclient -y yum install openstack-selinux -y

二、配置NTP时钟服务

##controller节点## 1、yum安装chrony软件包

yum install chrony -y

2、修改chrony配置文件

vim /etc/chrony.conf                 #文件开头插入
   server  controller  iburst          #自己为时间源点所有节点向controller节点同步时间
   allow 192.168.37.0/24         #设置时间同步网段

3、开启NTP服务

systemctl enable chronyd systemctl stop chronyd
systemctl start chronyd #因chrony服务本身开机自启动,所以需要关闭后重新开启

**##其他节点配置## ** 1、yum安装chrony软件包

yum install chrony -y

2、修改chrony配置文件

vim /etc/chrony.conf
   server  controller  iburst                #同步controller

3、开启服务

systemctl stop chronyd systemctl start chronyd

4、controller上验证时钟同步服务

chronyc sources

三、数据库部署(controller节点)

1、yum安装mariadb

yum install mariadb mariadb-server python2-PyMySQL -y

2、修改mariadb配置文件

vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid 
#以下是新增内容
bind-address = 192.168.37.128            #绑定地址controller
default-storage-engine = innodb            #默认存储引擎
innodb_file_per_table = on                     #独立表空间
max_connections = 4096                       #最大连接
collation-server = utf8_general_ci         #字符集设定
character-set-server = utf8

3、开启mariadb服务,设置开启自启动

systemctl enable mariadb.service systemctl start mariadb.service

4、数据库基本设置

mysql_secure_installation
#基本设置,除设置密码为abc123外全部回车

四、rabbitmq服务部署(controller节点)

1、yum安装rabbitmq-server包

yum install rabbitmq-server -y

2、开启rabbitmq服务,设置开启自启动

systemctl enable rabbitmq-server.service systemctl start rabbitmq-server.service

3、重启服务后添加用户及权限

rabbitmqctl add_user openstack 123456 #添加用户 rabbitmqctl set_permissions openstack "." "." ".*"

五、memcached服务部署(controller节点)

1、yum安装memcached包

yum install memcached python-memcached -y

2、修改memcached配置文件

vim /etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 192.168.37.128,::1"        #修改监听IP地址

3、开启memcached服务,设置开启自启动

systemctl enable memcached.service systemctl start memcached.service

六、ETCD服务发现机制部署(controller节点)

  • etcd是一个高可用的分布式键值(key-value)数据库
  • 用于服务发现,服务发现(ServiceDiscovery)要解决的是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务如何才能找到对方并建立连接

1、yum安装etcd包

yum install etcd -y

2、修改etcd配置文件,结果如下:

ETCD_INITIAL_CLUSTER          #开启群集功能:匹配群集中所有url地址(public、admin、internal)
ETCD_INITIAL_ADVERTISE_PEER_URLS
ETCD_ADVERTISE_CLIENT_URLS
ETCD_LISTEN_CLIENT_URLS
[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"               #文件存放位置
ETCD_LISTEN_PEER_URLS="http://192.168.37.128:2380"      #监听群集服务端地址
ETCD_LISTEN_CLIENT_URLS="http://192.168.37.128:2379"    #宣告客户端地址
ETCD_NAME="controller"
[Clustering]                                     #匹配群集地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.37.128:2380"   #控制端地址
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.37.128:2379"               #客户端地址
ETCD_INITIAL_CLUSTER="controller=http://192.168.37.128:2380"              #群集名称设定
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"                                     #令牌设定
ETCD_INITIAL_CLUSTER_STATE="new"

3、开启etcd服务,设置开机自启动

systemctl enable etcd.service systemctl start etcd.service

七、keystone认证(controller节点)

1、单独创建数据库keystone,声明用户并授权

mysql -uroot -p #密码abc123 create database keystone; grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456'; #本地用户授权 grant all privileges on keystone.* to 'keystone'@'%' identified by '123456'; flush privileges; #其他用户授权

2、yum安装软件包

yum install openstack-keystone httpd mod_wsgi -y

3、编辑keystone配置文件

vim /etc/keystone/keystone.conf
[database]
#737行
connection = mysql+pymysql://keystone:123456@controller/keystone

[token]
#2922行
provider = fernet                                 #安全消息传递算法

4、同步数据库

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

5、初始化数据库

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

6、给管理员设置密码,注册三种访问方式

keystone-manage bootstrap --bootstrap-password 123456 \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/
--bootstrap-public-url http://controller:5000/v3/
--bootstrap-region-id RegionOne

八、Apache服务部署

1、编辑httpd配置文件

vim /etc/httpd/conf/httpd.conf

ServerName controller

2、建立软连接,使apache识别keystone

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

3、开启Apache服务,设置开机自启动

systemctl enable httpd.service systemctl start httpd.service

4、声明环境变量

export OS_USERNAME=admin export OS_PASSWORD=123456 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3

九、创建demo平台管理

1、创建域Domain

openstack domain create --description "Domain" example

2、创建项目Service Project

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

3、创建平台demo项目

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

4、创建demo用户

openstack user create --domain default --password-prompt demo #输入密码:123456

5、创建用户角色

openstack role create user

6、添加用户角色到demo项目和用户

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

十、验证keystone的操作

1、取消环境变量

unset OS_AUTH_URL OS_PASSWORD

2、admin用户返回的认证token

openstack --os-auth-url http://controller:35357/v3
--os-project-domain-name Default --os-user-domain-name Default
--os-project-name admin --os-username admin token issue #密码:123456

3、demo用户返回的认证token

openstack --os-auth-url http://controller:5000/v3
--os-project-domain-name Default --os-user-domain-name Default
--os-project-name demo --os-username demo token issue #密码:123456

4、创建admin-openrc脚本

vim admin-openrc

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

5、创建demo-openrc脚本

vim demo-openrc

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

6、使用脚本,返回认证token

source ~/admin-openrc openstack token issue