本篇博文主要搭建 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
OpenStack 架构 ----keystone 组件(一)
来源: http://www.bubuko.com/infodetail-2832268.html