openstack的部署与运维
来公司几个月了,除了搭建了kvm虚拟机,使用3台虚拟机组合成一个openstack的网络环境。还没有正式将openstack搭建起来过。时间都在开发web程序。不过openstack也是要学习的。只能利用有限的时间去学习,我现在就可以预见到我的学习曲线将会十分漫长。在这个漫长学习过程中,为了在后面不忘记前面的,还是将一些要点记录下来。
错误记录:
1.同步keystone数据库出错:/bin/sh -c "keystone-manage db_sync" keystone
虽然keystone用户设置访问客户端是localhost以及%,但是不知道为什么同步数据库的时候出现keystone@controller 没有权限 (controller为keystone所在机器的名字)
$vi /etc/hosts
在127.0.0.1 后面添加 controller,然后执行,就可以同步了。
具体原因不清楚,猜测,运行同步操作,必须使用localhost。(修改了上面之后,ping controller ,会显示ping 127.0.0.1)
然后需要重新启动一下apache服务器,如果你使用apache的话:
$systemctl restart httpd.service
安装日记:
环境 学习机器ubuntu 14.04 desktop(16G内存),虚拟机环境 ubuntu14.04 server
一.kvm:
在本机上安装 kvm,(bios中开启了虚拟化)
qemu-kvm 虚拟机
libvirt-bin 虚拟化库 virt-manager 图形控制台(不用使用kvm的命令行了,方便)
bridge-utils 桥接
$ apt-get install qemu-kvm libvirt-bin virt-manager bridge-utils
virt-manager为图形面板,如下(如果不安装,就使用命令行)
二.本地创建网桥:
3台虚拟机必须具备以下特性:
1.每台虚拟机必须能够上网:
2.3台机器组成一个虚拟子网:意味着至少有两个网络,一个是外网兼控制网,,一个是隧道内网
因此,虚拟机是采取桥接方式:
方法是
a .首先在本机上新建一个桥接的虚拟网卡。
b. 然后在建立虚拟机的时候添加硬件,将该虚拟桥接卡添加进来。这样虚拟机可以有一个桥接的网(连接到本机局域网当中),一个内部子网(用于openstack内部控制)
备注:虚拟机与本机的通讯方式可以选择默认NAT模式,或者网桥模式。采取网桥模式,也意味着3台虚拟机是本机所在的这个局域网中的一员,和本机是对等的邻居关系。而采用NAT模式,意味着虚拟机对外的通讯都是使用本机作为代理。由于需要两个网络,需要添加硬件设备(网桥或者网卡)。采取桥接的虚拟网卡。
三.虚拟机安装ubuntu14.04server:
我是建立虚拟机的时候使用cdrom安装的。只需要安装一台,其他的复制就好。复制好后可以改机器名字。
四.配置每台虚拟机的网络:
1.按照安装说明配置机器 :(openstack网站上有ubuntu上安装openstack的书)
a.修改 /etc/hostname文件:
三台机器的名字分别修改为:controller(控制节点),network(网络节点),computer1(计算节点)
b.修改 /etc/hosts:
在其中添加: (这个192.168.100 是控制子网,即外网,本地局域网)
#controller
192.168.100.151 controller #network
192.168.100.150 network #compute1
192.168.100.152 compute1
c.修改 /etc/network/interfaces
这里面配置隧道网络 192.168.50,以及外部和控制网络 192.168.100
auto lo
iface lo inet loopback # interface tunnel net
auto eth0
iface eth0 inet static
address 192.168.50.2
#gateway 192.168.50.1
netmask 255.255.255.0
#dns-nameservers 192.168.50.1 # interface outside,control net
auto eth1
#iface eth1 inet dhcp
iface eth1 inet static
address 192.168.100.151
gateway 192.168.100.1
netmask 255.255.255.0
dns-nameservers 114.114.114.114 up route add -net 192.168.50.0 netmask 255.255.255.0 gw 192.168.50.1 dev eth0
d.三台虚拟机可以访问外网,互ping可通网络就搭建好了。
e.为三台机器安装NTP:时间同步软件,由于测试,也没有必要设置,都跟远程机器时间同步好了。
五.controller安装keystone:
(源:http://www.aboutyun.com/thread-14604-1-1.html)
提示:使用本地的ssh连接虚拟机,不要使用virt那个启动界面,那个复制粘帖不好弄。使用ufw开启端口
1.安装:添加源并更新
$apt-get install ubuntu-cloud-keyring
$echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" "trusty-updates/kilo main" > /etc/apt/sources.list.d/cloudarchive-kilo.list
$apt-get update && apt-get dist-upgrade
由于这个源是国外的,请在/etc/apt/sources.list 文件中填入以下源
#sohu
deb http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ trusty-backports main restricted universe multiverse
#aliyun
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
#openstack kilo
deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/kilo main
2.安装mariadb服务器
$apt-get install mariadb-server python-mysqldb
配置 /etc/mysql/conf.d/mysqld_openstack.cnf
[mysqld]
bind-address = 192.168.100.151 #controller的ip地址
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
重新启动数据库
$service mysql restart
执行数据库安全设置:按照提示一步步的设置,除掉匿名用户,除掉root的远程登录权限等等。
$mysql_secure_installation
3.安装消息队列rabbitmq
$apt-get install rabbitmq-server
添加消息队列用户:openstack以及密码
$rabbitmqctl add_user openstack XXXXX
设置消息队列openstack用户的权限
$rabbitmqctl set_permissions openstack ".*" ".*" ".*"
4.安装keystone
创建keystone数据库,并将该数据库的完全权限赋予给keystone;可以远程登录,xxxx是密码
$ mysql -u root -p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'xxxx';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'xxxx';
使用apache运转keystone
首先禁止keystone原生启动
$echo "manual" > /etc/init/keystone.override
安装keystone,等等包
$apt-get install keystone python-openstackclient apache2 libapache2-mod-wsgi memcached python-memcache
修改 /etc/keystone/keystone.conf,注意admin_token里面设置的字符串可以自己随便填写,但是为了能够在controller中访问keystone,必须设置环境变量OS_TOKEN=xxx
[DEFAULT]
admin_token = xxxx [database]
connection = mysql://keystone:passxxx@controller/keystone [memcache]
servers = localhost: [token]
provider = keystone.token.providers.uuid.Provider
driver = keystone.token.persistence.backends.memcache.Token [revoke]
driver = keystone.contrib.revoke.backends.sql.Revoke [DEFAULT]
verbose = True
同步keystone数据库
$su -s /bin/sh -c "keystone-manage db_sync" keystone
修改apache2
a./etc/apache2/apache2.conf ,添加 ServerName controller
b.创建配置 /etc/apache2/sites-available/wsgi-keystone.conf
Listen
Listen
<VirtualHost *:>
WSGIDaemonProcess keystone-public processes= threads= user=keystone
display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
LogLevel info
ErrorLog /var/log/apache2/keystone-error.log
CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>
<VirtualHost *:>
WSGIDaemonProcess keystone-admin processes= threads= user=keystone
display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
LogLevel info
ErrorLog /var/log/apache2/keystone-error.log
CustomLog /var/log/apache2/keystone-access.log combined
</VirtualHost>
c.enable 配置
$ln -s /etc/apache2/sites-available/wsgi-keystone.conf /etc/apache2/sites-enabled
d.创建服务的wsgi应用
$mkdir -p /var/www/cgi-bin/keystone
$curl http://git.openstack.org/cgit/openstack/keystone/plain/httpd/keystone.py?h=stable/kilo | tee /var/www/cgi-bin/keystone/main /var/www/cgi-bin/keystone/admin
$ chown -R keystone:keystone /var/www/cgi-bin/keystone
$ chmod 755 /var/www/cgi-bin/keystone/*
e.重新apache2
$service apache2 restart
5.基本完成,后面就是创建service(服务实例),endpoint(url访问点),project (项目-资源集合),user(用户),domain(客户) role(角色) group(组)了。按照书本上写的一步步来,就可以了。
1.创建service,endpoint
首先必须设置环境变量,还记得我们在配置keystone配置文件里面设置的admin_token吗,下面的xxxx即为你设置的admin_token
$export OS_TOKEN=xxxx
$export OS_URL=http://controller:35357/v2.0
创建keystone服务
$openstack service create --name keystone --description "OpenStack Identity" identity
创建访问点endpoint
$openstack endpoint create --publicurl http://controller:5000/v2.0 --internalurl http://controller:5000/v2.0 --adminurl http://controller:35357/v2.0 --region RegionOne identity
2.创建项目,用户,角色,v3支持domain,group;为了后面的方便,最好按照教程将所有创建动作完成。
$ openstack project create --description "Admin Project" admin
$ openstack user create --password-prompt admin
$ openstack role create admin
$ openstack role add --project admin --user admin admin
用户请求服务过程
当我们使用dashborad时我们知道登陆的时候提供了用户名密码, 后面的处理流程如下
第一步:用这个用户名密码获取临时Token和用户基本信息
第二步:用这个token去查询这个用户的项目信息,(v3之前叫做tenant租户,后面叫做project)
第三步:选择一个项目, 这时重新向keystone请求token和服务endpoint列表
第四步:这时开始利用新的token,
选择向相应服务的endpoint发出请求, 这是service会检查token
第五步:检查是不是有权限, 这就是role policy发挥作用的地方了
第六步:检查通过后, 开始执行请求
第七步:返回结果
project<n---1>domain : project为一个资源集,domain对应一个客户,一个客户可能拥有多个项目,因此就有domain存在必要。
user<n---n>project: user是使用用户名密码登录的用户。他可以参与多个project,一个project也可以拥有多个user。
group<n---n>user : group是管理user的,v3版本使用group与role结合管理用户权限。更加方便,即所有加入该组的用户都有权限。
role 角色,不同的服务对角色有不同的解释规则。(project,user , role) 决定了用户请求某个资源的时候扮演什么角色,而角色的控制权限如何解释在服务中有详细定义。如果user跟project无关,当然不能请求project相应资源,即使有关,具体操作也要看角色。
六.controller安装glance:
最新文章
- Html5下拉控件同时支持文本输入和下拉代码
- 小谈MVC 模式
- SQLServer2008设置 开启远程连接
- js设计模式总结-策略模式
- ecshop怎么添加配送方式
- FreeMarker 一二事 - 静态模板结合spring展示
- ASCII码表 char(9),char(10),char(13)等
- gcc 的编译过程
- npm 常用命令详解
- 初学node.js有感三
- 虹软2.0 离线人脸识别 Android 开发 Demo
- 18个Python高效编程技巧,Mark!
- PTA天梯地图
- hdu 1728 迷宫 给定最大转弯次数 (BFS)
- Maven install报MojoExecutionException
- Scala进阶之路-为什么要学习Scala以及开发环境搭建
- django后台导入excel文件
- 祝福csdn回望2014,展望2015 大致可以这样总结和展望
- 【BZOJ 4455】 4455: [Zjoi2016]小星星 (容斥原理+树形DP)
- 003杰信-在jsp页面输入数据,然后在oracle数据库中插入factory数据,当字段允许为空时要特殊处理