来公司几个月了,除了搭建了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:      

openstack的部署与运维的更多相关文章

  1. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  2. CentOS 7.5 部署蓝鲸运维平台

    环境准备 官方建议 准备至少3台 CentOS 7 以上操作系统的机器 最低配置:2核4G 建议配置: 4核12G 以上 部署前关闭待安装主机之间防火墙,保证蓝鲸主机之间通信无碍 部署前关闭SELin ...

  3. Docker环境下的前后端分离项目部署与运维(十二)使用Portainer管理Docker

    安装 docker hub地址:https://hub.docker.com/r/portainer/portainer/ # 每台服务器都要安装 docker pull portainer/port ...

  4. Docker环境下的前后端分离项目部署与运维(九)后端项目部署与负载均衡

    数据库准备 建立数据库 renren_fast ,然后运行renrenfast项目中的db文件夹内的脚本 -- 菜单 CREATE TABLE `sys_menu` ( `menu_id` bigin ...

  5. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...

  6. Docker环境下的前后端分离项目部署与运维

    本教程将从零开始部署一个前后端分离的开源项目,利用docker虚拟机的容器技术,采用分布式集群部署,将项目转换成为高性能.高负载.高可用的部署方案.包括了MySQL集群.Redis集群.负载均衡.双机 ...

  7. ElasticSearch 集群的规划部署与运维

    公号:码农充电站pro 主页:https://codeshellme.github.io 1,常见的集群部署方式 ES 有以下不同类型的节点: Master(eligible)节点:只有 Master ...

  8. docker之swarm容器部署及运维

    1.概念 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Docker API,所有 ...

  9. 干货分享:IBM StorwizeV7000部署与运维

    http://storage.it168.com/a2014/1211/1689/000001689526_3.shtml

随机推荐

  1. c语言条件编译#ifdef与#if defined

    c语言条件编译#ifdef与#if defined   c语言条件编译#ifdef与#if defined 摘自:https://www.cnblogs.com/zhangshenghui/p/566 ...

  2. 关于HBase的memstoreFlushSize。

    memstoreFlushSize是什么呢? memstoreFlushSize为HRegion上设定的一个阈值,当MemStore的大小超过这个阈值时,将会发起flush请求. 它的计算首先是由Ta ...

  3. YII2 全局设定 默认参数

    $gridviewSettings = [ 'export' => false, 'responsive' => true, 'floatHeader' => true, 'floa ...

  4. review一个javascript功能函数

    近半年来一直觉得自己在技术上好像左右挣扎,技术没啥提升,看书看不进,自学还挺慢.写出来的东西,自己都觉得不满意.让自己也用庸人自扰的感觉. 最近,在工作中,有一个小小的功能需要实现,这个功能非常简单, ...

  5. AC620教程 第十五节 8位7段数码管驱动设计与验证

    本章导读 电子系统中常用的显示设备有数码管.LCD液晶以及VGA显示器等.其中数码管又可分为段式显示(7段.米字型等)以及点阵显示(8*8.16*16等),LCD液晶的应用可以分为字符式液晶(1602 ...

  6. uva639 回溯!

    #include<iostream> using namespace std; int n,Max,C[4][4]; char board[5][5]; bool vis[16]; boo ...

  7. Delphi Excel操作,写了个ADODataSet转Excel的函数作为后期学习的例子

    使用该函数需要先Use Excel2010 //DataSet导出Excel2010格式//FileName=待导出的Excel的文件名,不带路径以及后缀:TitleLine1=导出后Excel第一表 ...

  8. MySQL数据库(三)

    1. 创建表 create table student( id int unsigned not null auto_increment primary key, name varchar(8) no ...

  9. C#中的线程

    1.线程Thread 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行:对于比较耗时的操作(例如io,数据库操作),或者等待响应(如WCF通信)的操作,可以单独开启后台线程来执行,这样主线程 ...

  10. vector妙用轻松水过平衡树???

    极短代码预警 今天听身边的神仙说,可以用vector来写平衡树,代码极短. 然后去网上搜了一下,看到了attack dalao的这篇文章. 蒟蒻表示ssfd 赶紧膜拜了一波,并发表了一篇博客表示纪念. ...