Openstack是目前比较流行的一个实现云计算平台的项目,本文通过云计算概述、Openstack简介、Openstack核心模块、Openstack实战部署这几个方面来介绍Openstack。
一、云计算概述
1.1、 云计算是一个资源池,它为我们提供了诸如水、电、煤气一样的基础服务。
1.2 、云计算是一种按使用量付费的模式,这种模式可以快速、高效地提供网络,服务器,存储,应用软件,服务等,我们不必关心如何实现,所以只需投入很少的管理工作,只需和服务供应商进行很少的交互。
1.3、云计算从广义上可以分为如下几种模式:IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)
1)IaaS:Amazon、阿里云、腾讯云提供的云主机即IaaS,我们拿到的是一台机器,可以自定义操作系统。
2)PaaS:面向开发者,直接给用户提供一个平台来运行用户的程序,早期的idc服务商卖的主机、新浪的sae、阿里云的云数据库等。
3)SaaS:卖的是服务,比如腾讯企业邮箱、印象笔记等
二、Openstack简介
2.1、官网: www.openstack.org
2.2、由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目,用python语言开发,可以实现私有云或者公有云。
2.3、主要有三个最基础组件:计算服务、网络服务、存储服务。
2.4、发布版本 http://releases.openstack.org,目前稳定版本为:Mitaka
三、Openstack核心模块
3.1、6个核心服务
1)nova:计算中心,对比阿里云的ESC,支持kvm,xen等虚拟化技术
2)keystone:认证中心
3)neutron:网络服务中心
4)swift:对象存储服务,存储图片,附件等文件,对比腾讯云的COS
5)cinder:块存储服务,对比云盘
6)glance:镜像管理中心
3.2、其他可选组件
1)HORIZON:控制面板
2)CEILOMETER:提供监控和数据采集
3)HEAT:自动化部署
4)TROVE:数据库应用服务
5)SAHARA:大数据处理
6)IRONIC:物理机管理服务
7)ZAQAR:消息服务
8)MANILA:文件共享服务
9)DESIGNATE:DNS服务
10)BARBICAN:key管理中心
11)MAGNUM:容器
12)MURANO:应用目录
13)CONGRESS:策略即服务
四、Openstack实战部署
4.1、前期准备
1)实验环境:至少两台机器
官方文档: http://docs.openstack.org/liberty/install-guide-rdo
3)两台虚拟机,安装centos7系统(准备两个网卡,一个NAT,另一个仅主机)
4)nat网卡设置ip,可以联网,仅主机的网卡只要我们windows可以通就行,主要是用于xshell远程连接
5)关闭selinuxl、关闭iptables
systemctl stop firewalld
systemctl disable firewalld
6)关闭NetworkManager
systemctl stop NetworkManager
systemctl disable NetworkManager
7)CentOS 7配置iptables
8)定义密码,在部署openstack过程中会在多个地方使用到密码,为了方便管理和安全设置,我们需要提前先定义好密码,使用命令mkpasswd -s 0 生成随机字符串
账号 | 描述 | 密码 |
Database password | Root password for the database | tn1Pi6Ytm |
ADMIN_PASS | Password of user admin | 3qiVpzU2x |
CEILOMETER_DBPASS | Database password for the Telemetry service | Czn3bF1hm |
CEILOMETER_PASS | Password of Telemetry service userceilometer | abquh12GU |
CINDER_DBPASS | Database password for the Block Storageservice | O3bwbpoZ3 |
CINDER_PASS | Password of Block Storage service usercinder | hf8LX9bow |
DASH_DBPASS | Database password for the dashboard | 5qBZxnn1g |
DEMO_PASS | Password of user demo | 9TtbgaA1q |
GLANCE_DBPASS | Database password for Image service | Zznky4tP0 |
GLANCE_PASS | Password of Image service user glance | Wuyaf4cV6 |
HEAT_DBPASS | Database password for the Orchestrationservice | b7Fk5wjLg |
HEAT_DOMAIN_PASS | Password of Orchestration domain | 7Gotb3eoH |
HEAT_PASS | Password of Orchestration service userheat | eqQ2jLgz0 |
KEYSTONE_DBPASS | Database password of Identity service | f6zx0gURv |
NEUTRON_DBPASS | Database password for the Networking service | quidyOC50 |
NEUTRON_PASS | Password of Networking service userneutron | mdcGVl29i |
NOVA_DBPASS | Database password for Compute service | RYgv0rg7p |
NOVA_PASS | Password of Compute service user nova | hsSNsqc43 |
RABBIT_PASS | Password of user guest of RabbitMQ | o3NXovnz5 |
SWIFT_PASS | Password of Object Storage service userswift | 6ci5xWOdk |
METADATA_SECRET | m8uhmQTu2 |
9)设置主机名
两台机器都设置hostname
hostnamectl set-hostname controller
hostnamectl set-hostname compute
编辑/etc/hosts:
192.168.16.111 controller
192.168.16.112 compute
10)同步时间
controller上:
yum install -y chrony
vim /etc/chrony.conf //增加或更改
allow 192.168.16.0/24
保存后,执行
systemctl enable chronyd.service
systemctl start chronyd.service
compute上:
yum install -y chrony
vim /etc/chrony.conf //增加或更改
server controller iburst
保存后,执行
systemctl enable chronyd.service
systemctl start chronyd.service
4.2、安装openstack
1)安装openstack的yum源(两个机器上都操作)
yum install -y centos-release-openstack-liberty
2)升级所有的包(两个机器上都操作)
yum upgrade //结束后重启系统
3)安装openstack 客户端和openstack-selinux
yum install -y python-openstackclient openstack-selinux
以下 4.3-4.12 步骤若无特殊说明则默认表示在 controller 机器上执行操作
4.3、安装sql服务
1)安装
yum install -y mariadb mariadb-server MySQL-python
2)编辑配置文件
vim /etc/my.cnf.d/mariadb_openstack.cnf //加入下面内容
[mysqld]
bind-address= 192.168.16.111
default-storage-engine= innodb
innodb_file_per_table
collation-server= utf8_general_ci
init-connect= 'SET NAMES utf8'
character-set-server= utf8
3)启动mariadb:
systemctl enable mariadb.service
systemctl start mariadb.service
4)安全配置,设置root密码
mysql_secure_installation
设置root密码为:tn1Pi6Ytm
4.4、安装nosql
1)nosql数据库被Telemetry service用到,在这里我们安装的是mongodb
yum install -y mongodb-server mongodb
2)编辑配置文件
vim /etc/mongod.conf //更改如下配置
bind_ip= 192.168.16.111
smallfiles= true
3)启动服务
systemctl enable mongod.service
systemctl start mongod.service
4.5、安装消息队列
1)rabbitmq消息队列服务在openstack中起到非常关键的作用,它好比是一个交通枢纽,各个组件之间的通信由它来完成。
yum install -y rabbitmq-server
2)启动rabbitmq-server服务
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
3)添加openstack用户
rabbitmqctl add_user openstack o3NXovnz5 //用户名为openstack,密码为o3NXovnz5
4)为openstack用户授权
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
允许openstack用户可以配置,可以写,可以读
4.6、增加identity
1、keystone介绍
1)identity即keystone,它是openstack的验证中心,所有的服务都由它来认证。
2)在keyston中有以下角色:tenants(租户或项目)、用户、角色、服务目录和端点
3)如果把宾馆比作为Tenant,住宿的人就是User,宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务(Service),具体来说,住宿是一种具体的服务(Endpoint)。就住宿而言,有普通间和总统套房,如果你的VIP等级(Role)高,你可以享受到豪华的总统套房。入住前,我们需要拿身份证开房(Credential),认证身份证不是冒牌货后(Authenticaiton),会给你一个房卡(Token),然后你拿着房卡,就可以进入房间和享受各种服务。
4)以创建一个虚拟机(server)为例,keystone在openstack的访问流程大致如下:
a、用户Alice通过自己的户名和密码向keystone申请token,keystone认证用户名和密码后,返回token1
b、Alice通过token1发送keystone查询他所拥有的租户,keystone验证token1成功后,返回Alice的所有Tenant
c、Alice选择一个租户,通过用户名和密码申请token,keystone认证用户名、密码、tenant后,返回token2。(其实1、2步仅仅是为了查询tenant,如果已经知道tenant,可以忽略1、2步)
d、Alice通过token2发送创建server的请求,keystone验证token2(包括该token是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到nova,最终创建虚拟机
2、前期准备
1)登陆mysql,创建数据库
mysql -uroot -ptn1Pi6Ytm
>createdatabase keystone;
>GRANTALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'f6zx0gURv';
>GRANTALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'f6zx0gURv';
说明:创建一个keystone库,并且授权给keystone用户所有权限,密码为f6zx0gURv
2)安装相关的包
yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached
3)启动memcached服务
systemctl enable memcached.service
systemctl start memcached.service
3、编辑配置文件
编辑keystone配置文件
vim /etc/keystone/keystone.conf //修改或增加配置如下
[DEFAULT]
admin_token= 3qiVpzU2x
verbose= true
[database]
connection= mysql://keystone:f6zx0gURv@controller/keystone
[memcache]
servers= localhost:11211
[token]
provider= uuid
driver= memcache
[revoke]
driver= sql
4、导入数据
1)导入keystone相关的数据
su -s /bin/sh -c "keystone-manage db_sync" keystone
注意:这里会有个提示 Nohandlers could be found for logger "oslo_config.cfg" 忽略它,不影响
2)检查有没有正常导入数据:
mysql -ukeystone -pf6zx0gURv -hcontroller -t keystone -e "show tables"
看是否有列出表来,如果是空,说明没有成功导入数据
5、配置httpd
1)先编辑apache配置文件
vim /etc/httpd/conf/httpd.conf //增加或更改
ServerName controller
2)编辑配置文件
vim /etc/httpd/conf.d/wsgi-keystone.conf //内容如下
Listen5000
Listen35357
<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
<IfVersion>= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
<IfVersion>= 2.4>
Require all granted
</IfVersion>
<IfVersion< 2.4>
Order allow,deny
Allow from all
</IfVersion>
</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
<IfVersion>= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
<IfVersion>= 2.4>
Require all granted
</IfVersion>
<IfVersion< 2.4>
Order allow,deny
Allowf rom all
</IfVersion>
</Directory>
</VirtualHost>
3)启动apache
systemctl enable httpd.service
systemctl start httpd.service
6、创建服务实例
1)设置环境变量:
export OS_TOKEN=3qiVpzU2x
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
2)创建服务实例
openstack service create --name keystone--description "OpenStack Identity" identity
3)创建端点
openstack endpoint create --region RegionOne identity public http://controller:5000/v2.0
openstack endpoint create --region RegionOne identity internal http://controller:5000/v2.0
openstack endpoint create --region RegionOne identity admin http://controller:35357/v2.0
4)创建admin 租户
openstack project create --domain default --description "Admin Project" admin
5)创建admin用户 (密码为3qiVpzU2x)
openstack user create --domain default --password-prompt admin
6)创建admin角色
openstack role create admin
7)添加admin角色到admin租户和用户
openstack role add --project admin --user admin admin
8)创建service 租户
openstack project create --domain default --description "Service Project" service
9)创建demo租户
openstack project create --domain default --description "Demo Project" demo
10)创建demo用户 (密码9TtbgaA1q)
openstack user create --domain default --password-prompt demo
11)创建角色user
openstack role create user
12)添加user角色到demo租户和demo用户
openstack role add --project demo --user demo user
7、验证操作
验证admin用户和demo用户是否能正常登陆
1)首先做一个安全设置:
vim /usr/share/keystone/keystone-dist-paste.ini
搜索admin_token_auth,从[pipeline:public_api],[pipeline:admin_api]和[pipeline:api_v3]中,把admin_token_auth去掉
例如:
pipeline= sizelimit url_normalize request_id build_auth_context token_auth admin_token_auth json_body ec2_extension user_crud_extension public_service
改为:
pipeline= sizelimit url_normalize request_id build_auth_context token_auth json_body ec2_extension user_crud_extension public_service
2)取消环境变量OS_TOKEN和OS_URL
unset OS_TOKEN OS_URL
3)然后再登陆admin和demo用户
openstack --os-auth-url http://controller:35357/v3 --os-project-domain-id default --os-user-domain-id default --os-project-name admin --os-username admin --os-auth-type password token issue
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-id default --os-user-domain-id default --os-project-name demo --os-username demo --os-auth-type password token issue
4)创建两个openstack客户端脚本
vim admin-openrc.sh //内容
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=3qiVpzU2x
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
执行脚本
source admin-openrc.sh
申请认证令牌
openstack token issue
vim demo-openrc.sh //内容
export OS_PROJECT_DOMAIN_ID=default
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_NAME=demo
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=9TtbgaA1q
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
执行脚本
source demo-openrc.sh
申请认证令牌
openstack token issue
4.7、增加image
1、前期准备
image又叫做glance,是用来管理镜像的一个组件,我们用镜像来安装操作系统。glance支持让用户自己管理自定义镜像。
1)创建glance库和用户
mysql -uroot -ptn1Pi6Ytm
>CREATE database glance;
>GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'Zznky4tP0';
>GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'Zznky4tP0';
2)执行 admin-openrc.sh 脚本
source admin-openrc.sh
3)创建glance用户(密码为hf8LX9bow)
openstack user create --domain default --password-prompt glance
4)把admin角色添加到glance用户和service租户
openstack role add --project service --user glance admin
5)创建glance服务实体
openstack service create --name glance --description "OpenStack Image service" image
6)创建image服务api 端点
openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292
2、安装和配置
1)安装包
yum install -y openstack-glance python-glance python-glanceclient
2)编辑配置文件
vim /etc/glance/glance-api.conf //更改或增加
[database]
connection= mysql://glance:Zznky4tP0@controller/glance
[keystone_authtoken]
auth_uri= http://controller:5000
auth_url= http://controller:35357
auth_plugin= password
project_domain_id= default
user_domain_id= default
project_name= service
username= glance
password= hf8LX9bow
[paste_deploy]
flavor= keystone
[glance_store]
default_store= file
filesystem_store_datadir= /var/lib/glance/images/
[DEFAULT]
notificaction_driver= noop
verbose=True
vim /etc/glance/glance-registry.conf //更改或增加
[DEFAULT]
notificaction_driver= noop
verbose=True
[database]
connection= mysql://glance:Zznky4tP0@controller/glance
[keystone_authtoken]
auth_uri= http://controller:5000
auth_url= http://controller:35357
auth_plugin= password
project_domain_id= default
user_domain_id= default
project_name= service
username= glance
password= hf8LX9bow
[paste_deploy]
flavor= keystone
3)同步glance数据库数据
su -s /bin/sh -c "glance-manage db_sync" glance
4)启动服务
systemctl enable openstack-glance-api.service openstack-glance-registry.service
systemctl start openstack-glance-api.service openstack-glance-registry.service
3、验证操作
1)添加环境变量
echo"export OS_IMAGE_API_VERSION=2" | tee -a admin-openrc.sh demo-openrc.sh
2)执行admin-openrc.sh
source admin-openrc.sh
3)下载镜像
wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
4)把刚刚下载的镜像上传到镜像服务中心
glance image-create --name "cirros" \
--file cirros-0.3.4-x86_64-disk.img \
--disk-format qcow2 --container-format bare \
--visibility public --progress
然后我们可以在 /var/lib/glance/images/目录下看到一个文件,这个就是刚刚上传的镜像,你会发现这个文件的名字和id是一致的。使用命令:
glance image-list //可以查看镜像列表