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:11211

[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 5000
Listen 35357
<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 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 *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 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:      

 

posted @ 2015-12-08 16:43  雅思敏  阅读(2123)  评论(0)    收藏  举报