安装openstack服务

所有openstack服务的安装指南链接:https://docs.openstack.org/pike/install/

最小化部署,需要按照下面指定的顺序安装以下服务:

 Identity service keystone installation for Pike

 Image service glance installation for Pike

 Compute service nova installation for Pike

 Networking service neutron installation for Pike

在安装了最小部署服务之后,我们建议安装以下组件:

 Dashboard horizon installation for Pike

 Block Storage service cinder installation for Pike

Keystone安装指南

  OpenStack认证管理服务提供一个单点集成身份验证、授权和服务目录服务。其他OpenStack服务使用认证服务作为一个通用统一的API。此外,服务提供用户的信息,但不包括在OpenStack(LDAP服务)可以集成到一个现有的基础设施。为了从认证服务中受益,其他OpenStack服务需要与身份认证服务协同工作。当一个OpenStack服务从用户那里接收一个请求,它检查与身份认证服务用户是否被授权请求。身份服务包含这些组件:

Server

      一个集中的服务器使用RESTful接口提供身份验证和授权服务。

Drivers

      驱动程序或服务后端集成到集中式服务器。他们是用于访问的身份信息存储库中的外部OpenStack,并且可能已经存在在OpenStack部署的基础设施(例如,SQL数据库或LDAP服务器)

Modules

      中间件模块运行在OpenStack组件的地址空间使用身份认证服务。这些模块拦截服务请求,提取用户凭证,并将它们发送到中央服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web Server Gateway Interface

1、安装前要先创建一个数据库keystone

[root@controller ~]# mysql -u  root -p123.com

创建数据库

MariaDB [(none)]> create database keystone;

Query OK, 1 row affected (0.00 sec)

 

keystone用户赋予ALL权限,对keystone数据库

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123.com';

Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by '123.com';

Query OK, 0 rows affected (0.00 sec)

2、安装数据包

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi -y

3、编辑配置文件/etc/keystone/keystone.conf

[root@controller ~]#vim /etc/keystone/keystone.conf

[database]中设置数据库的访问

connection = mysql+pymysql://keystone:123.com@controller/keystone

[token]设置

[token]

# ...

provider = fernet

4、生成认证服务的数据库,要以keystone用户身份来执行

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

5、初始化fernet

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

6、引导身份验证服务

[root@controller ~]# keystone-manage bootstrap --bootstrap-password 123.com \
>   --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

7、配置apache服务

 设置主配置文件/etc/httpd/conf/httpd.conf,将ServerName设定为controller节点名称

[root@controller ~]# vim  /etc/httpd/conf/httpd.conf

修改:

ServerName controller

创建/usr/share/keystone/wsgi-keystone.conf的链接文件

[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

  设置apache开机启动并立刻启动

[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.servic

  配置管理员账号的令牌文件:

[root@controller ~]# vim  admin_keystone

添加以下内容:

export OS_USERNAME=admin

export OS_PASSWORD=123.com

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

~                               

  执行这个令牌文件:

[root@controller ~]# source admin_keystone

检查操作:

   在安装其他服务之前验证身份服务的操作是否正确,在控制器节点上执行这些命令。

1、出于安全考虑,禁用临时身份验证令牌机制:

编辑/etc/keystone/keystone-paste.ini 配置文件,在[pipeline:public_api], [pipeline:admin_api], [pipeline:api_v3]中移除admin_token_auth

2、取消OS_AUTH_URL OS_PASSWORD环境变量

[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD

3、作为admin账号去请求一个认证令牌

[root@controller ~]# 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

Password: 123.com

+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Field      | Value                                                                                                                                                                                   |

+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| expires    | 2017-09-15T12:07:54+0000                                                                                                                                                                |

| id         | gAAAAABZu7SKipVxwWPkZkL1P39UMVFsamHra81rg195ZNs59lbnysC8uHYy14SfWDdWtjuXn3Kr7ieYvzqb9NIIow79QjvblivaxrO_F2p0ZitajHRnsxGt6Mu90wKeNmzNkWxeKf952VVT1MYieVNk4S0XvqbzVaZnUVKbFXT3iyPz4KzjSXA |

| project_id | 770b5c783a9641f6ab2b54176f318557                                                                                                                                                        |

| user_id    | d38382132c6942ec93213f9cd4e6fdf9                                                                                                                                                        |

+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

 

4、可以创建一个新账号lisi进行测试:

[root@controller ~]# source admin_keystone
[root@controller ~]# openstack user list


+----------------------------------+-------+

| ID                               | Name  |

+----------------------------------+-------+

| d38382132c6942ec93213f9cd4e6fdf9 | admin |

+----------------------------------+-------+

[root@controller ~]# openstack role list

+----------------------------------+----------+

| ID                               | Name     |

+----------------------------------+----------+

| 50d1a98e17ff48879e7417a6c786bbbc | admin    |

| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |

+----------------------------------+----------+

[root@controller ~]# openstack project list

+----------------------------------+-------+

| ID                               | Name  |

+----------------------------------+-------+

| 770b5c783a9641f6ab2b54176f318557 | admin |

+----------------------------------+-------+

 

[root@controller ~]# openstack project create --domain default --description "lisi Project" lisi


+-------------+----------------------------------+

| Field       | Value                            |

+-------------+----------------------------------+

| description | lisi Project                     |

| domain_id   | default                          |

| enabled     | True                             |

| id          | 40649535df0a4d9fb8b2f460031faaf6 |

| is_domain   | False                            |

| name        | lisi                             |

| parent_id   | default                          |

+-------------+----------------------------------+

 

[root@controller ~]# openstack user create --domain default lisi --password 123.com


+---------------------+----------------------------------+

| Field               | Value                            |

+---------------------+----------------------------------+

| domain_id           | default                          |

| enabled             | True                             |

| id                  | d2984c73bc6449a8bb2b35fe86df0e62 |

| name                | lisi                             |

| options             | {}                               |

| password_expires_at | None                             |

+---------------------+----------------------------------+

[root@controller ~]# openstack role add --project lisi --user lisi _member_
[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD
[root@controller ~]# openstack --os-auth-url http://controller:5000/v3   --os-project-domain-name Default --os-user-domain-name Default   --os-project-name lisi --os-username lisi token issue

Password:123.com

+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Field      | Value                                                                                                                                                                                   |

+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| expires    | 2017-09-15T12:12:33+0000                                                                                                                                                                |

| id         | gAAAAABZu7WhHSwiwqlV5L-s_TtMpmlkjVtL3n-E5D2BnKQ3lpfm_0DepAUck0zF3RRfToYo0LbZY4Ty1G1zgc8UIsz3rB0Fo4r-TfWCLAMFI0FEx4VSmZCg4noSwgP48T2k_vPAJD6bBV4S1voMN06KQFf2odmarkJ3dTgMF40pWWuPkQ_8ZtI |

| project_id | 40649535df0a4d9fb8b2f460031faaf6                                                                                                                                                        |

| user_id    | d2984c73bc6449a8bb2b35fe86df0e62                                                                                                                                                        |

+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

 

 

glance安装

openstack p_w_picpath服务可用于发现、注册及检索虚拟机镜像(p_w_picpath),它提供了一个RESTfulAPI,能够让用户查询VM镜像的元数据及通过http请求获取映像。VM镜像文件可以存储在各种存储中,如普通的文件系统、对象存储系统(openstack object storage),S3存储等。

openstack镜像服务是IaaS架构的中心,它接受来自终端用户或OpenStack计算组件的磁盘或服务器映像的API请求和元数据定义。它还支持在各种存储库类型(包括OpenStack对象存储)中存储磁盘或服务器映像。

p_w_picpath service由以下几个组件构成:

glance-api:接受镜像查找、检索和存储的API调用

glance-registry:存储、处理及检索镜像文件的元数据,元数据包含大小及类型等;

database:存储镜像元数据,您可以根据您的喜好选择数据库。大多数部署使用MySQLSQLite

Storage repository for p_w_picpath filesp_w_picpath service支持多种类型的映像文件存储机制,包括使用普通的文件系统、对象存储、RADOS块设备、HTTP。注意,一些存储库只支持只读使用。

Metadata definition service:一种针对厂商、管理、服务和用户的通用API,以便让其可以定义自己的元数据。

controller节点配置。

准备工作:

1、需要创建一个数据库,存储凭据和API endpoints

[root@controller ~]# mysql  -u  root -p123.com
MariaDB [(none)]> create database glance;

Query OK, 1 row affected (0.00 sec)

 

MariaDB [(none)]> grant all privileges on glance.* to 'glance'@'localhost' identified by '123.com';

Query OK, 0 rows affected (0.00 sec)

 

MariaDB [(none)]> grant all privileges on glance.* to 'glance'@'%' identified by '123.com';

Query OK, 0 rows affected (0.00 sec)

2、执行admin环境以便创建用户

[root@controller ~]# source  admin_keystone

3、创建服务凭证,完成以下步骤:

  创建glance用户

[root@controller ~]# openstack user create --domain default --password-prompt glance

User Password:123.com

Repeat User Password:123.com

+---------------------+----------------------------------+

| Field               | Value                            |

+---------------------+----------------------------------+

| domain_id           | default                          |

| enabled             | True                             |

| id                  | a074ca8bfb5c46339850c1b4854d97e6 |

| name                | glance                           |

| options             | {}                               |

| password_expires_at | None                             |

+---------------------+----------------------------------+

 添加用户glanceadmin角色和service项目

[root@controller ~]# openstack project create --domain default --description "Service Project" service


+-------------+----------------------------------+

| Field       | Value                            |

+-------------+----------------------------------+

| description | Service Project                  |

| domain_id   | default                          |

| enabled     | True                             |

| id          | 40b593bcff98420b9587e5e704d1caef |

| is_domain   | False                            |

| name        | service                          |

| parent_id   | default                          |

+-------------+----------------------------------+

[root@controller ~]# openstack role add --project service --user glance admin

该命令没有任何输出

   创建glance服务项

[root@controller ~]# openstack service create --name glance  --description "OpenStack Image" p_w_picpath

+-------------+----------------------------------+

| Field       | Value                            |

+-------------+----------------------------------+

| description | OpenStack Image                  |

| enabled     | True                             |

| id          | 754badb2f70b4d88b8dce6f942532c26 |

| name        | glance                           |

| type        | p_w_picpath                            |

+-------------+----------------------------------+

 

4、创建镜像服务的API endpoints:

[root@controller ~]# openstack endpoint create --region RegionOne p_w_picpath public http://controller:9292

+--------------+----------------------------------+

| Field        | Value                            |

+--------------+----------------------------------+

| enabled      | True                             |

| id           | ed74b59219314e99aa41e071b7e96f33 |

| interface    | public                           |

| region       | RegionOne                        |

| region_id    | RegionOne                        |

| service_id   | 754badb2f70b4d88b8dce6f942532c26 |

| service_name | glance                           |

| service_type | p_w_picpath                            |

| url          | http://controller:9292           |

+--------------+----------------------------------+

[root@controller ~]# openstack endpoint create --region RegionOne p_w_picpath internal http://controller:9292

+--------------+----------------------------------+

| Field        | Value                            |

+--------------+----------------------------------+

| enabled      | True                             |

| id           | b49d1b06cf2146c9b753bbc4cac8ccbe |

| interface    | internal                         |

| region       | RegionOne                        |

| region_id    | RegionOne                        |

| service_id   | 754badb2f70b4d88b8dce6f942532c26 |

| service_name | glance                           |

| service_type | p_w_picpath                            |

| url          | http://controller:9292           |

+--------------+----------------------------------+

[root@controller ~]# openstack endpoint create --region RegionOne p_w_picpath admin http://controller:9292

+--------------+----------------------------------+

| Field        | Value                            |

+--------------+----------------------------------+

| enabled      | True                             |

| id           | 5307dcf66d94429f8edfcc7965485f7a |

| interface    | admin                            |

| region       | RegionOne                        |

| region_id    | RegionOne                        |

| service_id   | 754badb2f70b4d88b8dce6f942532c26 |

| service_name | glance                           |

| ser vice_type | p_w_picpath                            |

| url          | http://controller:9292           |

+--------------+----------------------------------+

 

 

 安装并配置glance

1、安装包    

[root@controller ~]# yum install openstack-glance -y

2、编辑/etc/glance/glance-api.conf并完成以下配置

[root@controller ~]# vim /etc/glance/glance-api.conf

 [database]部分配置数据库的访问

    [database]

# ...

connection = mysql+pymysql://glance:123.com@controller/glance

 [keystone_authtoken][paste_deploy]部分配置如下,以便身份验证访问

[keystone_authtoken]

# ...

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = glance

password = 123.com

 

[paste_deploy]

# ...

flavor = keystone

   [glance_store]部分配置本地文件系统存储和位置

[glance_store]

# ...

stores = file,http

default_store = file

filesystem_store_datadir = /var/lib/glance/p_w_picpaths/

3、编辑/etc/glance/glance-registry.conf配置文件完成以下配置:

[root@controller ~]# vim /etc/glance/glance-registry.conf

      [database]部分配置数据库的访问

    [database]

# ...

connection = mysql+pymysql://glance:123.com@controller/glance

  [keystone_authtoken][paste_deploy]部分配置如下,以便身份验证访问

[keystone_authtoken]

# ...

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = glance

password = 123.com

 

[paste_deploy]

# ...

flavor = keystone

4、产生glance服务数据库  

[root@controller ~]# su -s /bin/sh -c "glance-manage db_sync" glance

5、启动服务并设置开机启动

[root@controller ~]# systemctl enable openstack-glance-api.service \
  openstack-glance-registry.service
[root@controller ~]# systemctl start openstack-glance-api.service \
  openstack-glance-registry.service

检查操作:

1、需要admin凭证在命令行下操作:

[root@controller ~]# source admin_keystone

2、下载源镜像

 [root@controller ~]# wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img

  3、上传镜像到镜像服务

 [root@controller ~]#openstack p_w_picpath create "cirros" \
  --file cirros-0.3.5-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public

+------------------+------------------------------------------------------+

| Field            | Value                                                |

+------------------+------------------------------------------------------+

| checksum         | f8ab98ff5e73ebab884d80c9dc9c7290                     |

| container_format | bare                                                 |

| created_at       | 2017-09-15T12:00:08Z                                 |

| disk_format      | qcow2                                                |

| file             | /v2/p_w_picpaths/0dbab038-9df1-4b57-9046-2da8a2e83b39/file |

| id               | 0dbab038-9df1-4b57-9046-2da8a2e83b39                 |

| min_disk         | 0                                                    |

| min_ram          | 0                                                    |

| name             | cirros                                               |

| owner            | 770b5c783a9641f6ab2b54176f318557                     |

| protected        | False                                                |

| schema           | /v2/schemas/p_w_picpath                                    |

| size             | 13267968                                             |

| status           | active                                               |

| tags             |                                                      |

| updated_at       | 2017-09-15T12:00:08Z                                 |

| virtual_size     | None                                                 |

| visibility       | public                                               |

+------------------+------------------------------------------------------+

 

 

4、确认镜像上传并验证属性

[root@controller ~]# openstack p_w_picpath list

+--------------------------------------+--------+--------+

| ID                                   | Name   | Status |

+--------------------------------------+--------+--------+

| 0dbab038-9df1-4b57-9046-2da8a2e83b39 | cirros | active |

+--------------------------------------+--------+--------+

 

 

1.3.4.p_w_picpath的服务管理

glance p_w_picpath-create命令

glance p_w_picpath-create命令用于添加新的虚拟机镜像至glance中,glance p_w_picpath-update 命令用于修改已经完成更新的镜像的属性信息。

p_w_picpath-create命令至少要接收三个参数:--name --container_format--disk_format。 其中--disk_format用于指明磁盘镜像文件的格式,包括rawqcow2vhdvmdkisovdiakiariami等。--container_format用于表明镜像文件是否包含了虚拟机的元数据信息,然而,目前compute服务并未使用此信息,因此,在不确定的情况下可以将其指定为bare,而常用的格式主要有bare(没有container或元数据信息)、ovfakiariami几种。

 

镜像元数据

glance p_w_picpath-createglance p_w_picpath-update命令的--property key=value参数能够为镜像文件附加元数据信息,而常用的属性主要有:

architecture: hypervisor必须支持CPU架构,如x866_64arm

hypervisor_type: hypervisor类型,其能够使用的值包括xenqemukvmlxcumlvmwarehyper-vpowervm;

vm_mode:定义虚拟机模式,即应用于虚拟机的host/guest ABI;例如hvmxenumlexe

xenAPI还有其专用的两个属性可以定义:

autho_disk_config:布尔型属性值,true表示在虚拟机实例启动前磁盘的根分区将被自动调整;

os_type:p_w_picpath中安装的操作系统类型,如linux,windows等,xenAPI能够根据此属性值来执行不同的操作,如果为windows则创建fat32格式的交换分区、限制其主机名称少于16个字符等。

VmwareAPI也有如下三个专用属性可以定义:

vmware_adaptertype:定义hypervisor使用的虚拟scsiIDE接口类型,其有效值为lsiLogicbusLogicide;

vmware_ostype:Vmware GuestID,用于描述映像文件中的操作系统类型:vmware所支持的类型较多,可以参照thinkvirt.com获取详细信息,默认值为otherGuest

vmware_p_w_picpath_version:目前未使用,默认值为1

1.3.5.获取虚拟机镜像

CirrOS(test)镜像

Scott Moser维护的一系列用于测试目的的微型虚拟机映像,登录名为cirros,下载地址为https://launchpad.net/cirros/+download。在qemukvm中测试时,官方建议使用qcow2格式的镜像文件。

Ubuntu镜像

Canonical官方提供了基于Ubuntu的系列镜像,登录名为ubuntu,下载地址为http://uec-p_w_picpaths.ubuntu.com。 在QEMUKVM中部署时,建议使用qcow2格式的镜像文件

Fedora镜像

Fedora官方提供了预制的Fedora JEOS映像,下载地址为http://berrange.fedorapeople.org/p_w_picpaths,目前最新的是为x86_64平台提供的QCOW2格式的映像.

OpenSUSESLES11镜像

通过SUSE Studiohttp://susestudio.com)可以很方便的为OpenSUSESLES11构建与Openstack兼容的虚拟应用,比如创建一个OpenSUSE12.1JEOS镜像

Rackspace云生成器镜像

Rackspace云生成器(https://github.com/rackerjoe/oz-p_w_picpath-build)提供了多种发行版预制的预制镜像,如RedHatCentosFedoraUbuntu

1.3.6.制作镜像的专用工具

OzKVM:Oz是能够为常见Linux发行版创建映像文件的命令行工具,Rackspace就是使用Oz创建的镜像文件。在Fedora Projectwiki中,提供了使用Oz创建镜像文件的案例,具体请参照:

https://fedoraproject.org/wiki/Getting_started_with_Openstack_Nova#Building_an_Image_with_Oz

VMBuilderKVM,Xen:VMBuilder能够为不同的hypervisor创建虚拟机镜像文件,它是一个脚本,能够自动收集所需的资源为虚拟机创建镜像文件,Ubuntu为之提供了一个使用案例,具体请参照http://help.ubuntu.com/12.04/serverguide/jeos-and-vmbuilder.html

VeeWeeKVM:VeeWee通常用于创建Vagrant虚拟工作环境,一种基于VirtualboxVmwareAWS等虚拟化技术的虚拟化工具,VeeWee也可以用于创建KVM镜像

p_w_picpathfactoryAeolus项目的一款工具,用于自动化创建,转换及为不同的云服务商的镜像文件,支持openstack

 

若要为openstack定制镜像,镜像文件要与Openstack兼容,需要顾及很多方面的因素。

1.3.7.支持元数据服务或配置驱动(config drive

openstack支持的映像文件必须能够由openstack获取到其元数据信息,如ssh公钥以及用户在请求镜像文件时提交的用户数据等。这些元数据信息可以通过元数据服务或配置驱动获取,最简单的方式莫过于在映像文件中安装cloud-init程序。cloud-init用于为云实例提供配置及定制功能,项目地址为:http://launchpad.net/cloud-init

1.3.8.支持对磁盘镜像大小进行调整

虚拟机镜像文件的磁盘大小有创建镜像时的初始大小决定,然而openstack需要在启动实例时通过指定不同的flavor来使用不同大小的磁盘空间。例如,有着磁盘初始大小为5G的镜像文件,在用于创建实例时使用了m1.small这个flavor,虚拟机实例将需要一个大小为10G磁盘,调整实例的磁盘大小是,通过在其尾部填0来完成。

镜像文件的分区大小也需要能够根据用户的需要在实例启动时进行调整,否则,在实例启动后,为了能够访问有flavor的配置指定的超出磁盘原始大小的其他空间就不得不手动去调整分区大小,因此在实例启动时,映像文件需要运行一个脚本以修改分区表,并运行相应的程序(如resize2fs等)调整文件系统,使得其能够适应新的分区大小。