安装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
[[email protected] ~]# 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、安装数据包
[[email protected] ~]# yum install openstack-keystone httpd mod_wsgi -y
3、编辑配置文件/etc/keystone/keystone.conf
[[email protected] ~]#vim /etc/keystone/keystone.conf
在[database]中设置数据库的访问
connection = mysql+pymysql://keystone:[email protected]/keystone
在[token]设置
[token]
# ...
provider = fernet
4、生成认证服务的数据库,要以keystone用户身份来执行
[[email protected] ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
5、初始化fernet
[[email protected] ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone [[email protected] ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
6、引导身份验证服务
[[email protected] ~]# 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节点名称
[[email protected] ~]# vim /etc/httpd/conf/httpd.conf
修改:
ServerName controller
创建/usr/share/keystone/wsgi-keystone.conf的链接文件
[[email protected] ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
设置apache开机启动并立刻启动
[[email protected] ~]# systemctl enable httpd.service [[email protected] ~]# systemctl start httpd.servic
配置管理员账号的令牌文件:
[[email protected] ~]# 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
~
执行这个令牌文件:
[[email protected] ~]# 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环境变量
[[email protected] ~]# unset OS_AUTH_URL OS_PASSWORD
3、作为admin账号去请求一个认证令牌
[[email protected] ~]# 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进行测试:
[[email protected] ~]# source admin_keystone [[email protected] ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| d38382132c6942ec93213f9cd4e6fdf9 | admin |
+----------------------------------+-------+
[[email protected] ~]# openstack role list
+----------------------------------+----------+
| ID | Name |
+----------------------------------+----------+
| 50d1a98e17ff48879e7417a6c786bbbc | admin |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
+----------------------------------+----------+
[[email protected] ~]# openstack project list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 770b5c783a9641f6ab2b54176f318557 | admin |
+----------------------------------+-------+
[[email protected] ~]# 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 |
+-------------+----------------------------------+
[[email protected] ~]# 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 |
+---------------------+----------------------------------+
[[email protected] ~]# openstack role add --project lisi --user lisi _member_ [[email protected] ~]# unset OS_AUTH_URL OS_PASSWORD [[email protected] ~]# 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 image服务可用于发现、注册及检索虚拟机镜像(image),它提供了一个RESTful的API,能够让用户查询VM镜像的元数据及通过http请求获取映像。VM镜像文件可以存储在各种存储中,如普通的文件系统、对象存储系统(openstack object storage),S3存储等。
openstack镜像服务是IaaS架构的中心,它接受来自终端用户或OpenStack计算组件的磁盘或服务器映像的API请求和元数据定义。它还支持在各种存储库类型(包括OpenStack对象存储)中存储磁盘或服务器映像。
image service由以下几个组件构成:
glance-api:接受镜像查找、检索和存储的API调用
glance-registry:存储、处理及检索镜像文件的元数据,元数据包含大小及类型等;
database:存储镜像元数据,您可以根据您的喜好选择数据库。大多数部署使用MySQL、SQLite。
Storage repository for image files:image service支持多种类型的映像文件存储机制,包括使用普通的文件系统、对象存储、RADOS块设备、HTTP。注意,一些存储库只支持只读使用。
Metadata definition service:一种针对厂商、管理、服务和用户的通用API,以便让其可以定义自己的元数据。
在controller节点配置。
准备工作:
1、需要创建一个数据库,存储凭据和API endpoints
[[email protected] ~]# 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环境以便创建用户
[[email protected] ~]# source admin_keystone
3、创建服务凭证,完成以下步骤:
创建glance用户
[[email protected] ~]# 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 |
+---------------------+----------------------------------+
添加用户glance到admin角色和service项目
[[email protected] ~]# 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 |
+-------------+----------------------------------+
[[email protected] ~]# openstack role add --project service --user glance admin
该命令没有任何输出
创建glance服务项
[[email protected] ~]# openstack service create --name glance --description "OpenStack Image" image
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Image |
| enabled | True |
| id | 754badb2f70b4d88b8dce6f942532c26 |
| name | glance |
| type | image |
+-------------+----------------------------------+
4、创建镜像服务的API endpoints:
[[email protected] ~]# openstack endpoint create --region RegionOne image 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 | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
[[email protected] ~]# openstack endpoint create --region RegionOne image 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 | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
[[email protected] ~]# openstack endpoint create --region RegionOne image 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 | image |
| url | http://controller:9292 |
+--------------+----------------------------------+
安装并配置glance
1、安装包
[[email protected] ~]# yum install openstack-glance -y
2、编辑/etc/glance/glance-api.conf并完成以下配置
[[email protected] ~]# vim /etc/glance/glance-api.conf
在[database]部分配置数据库的访问
[database]
# ...
connection = mysql+pymysql://glance:[email protected]/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/images/
3、编辑/etc/glance/glance-registry.conf配置文件完成以下配置:
[[email protected] ~]# vim /etc/glance/glance-registry.conf
在[database]部分配置数据库的访问
[database]
# ...
connection = mysql+pymysql://glance:[email protected]/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服务数据库
[[email protected] ~]# su -s /bin/sh -c "glance-manage db_sync" glance
5、启动服务并设置开机启动
[[email protected] ~]# systemctl enable openstack-glance-api.service openstack-glance-registry.service [[email protected] ~]# systemctl start openstack-glance-api.service openstack-glance-registry.service
检查操作:
1、需要admin凭证在命令行下操作:
[[email protected] ~]# source admin_keystone
2、下载源镜像
[[email protected] ~]# wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
3、上传镜像到镜像服务
[[email protected] ~]#openstack image 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/images/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/image |
| size | 13267968 |
| status | active |
| tags | |
| updated_at | 2017-09-15T12:00:08Z |
| virtual_size | None |
| visibility | public |
+------------------+------------------------------------------------------+
4、确认镜像上传并验证属性
[[email protected] ~]# openstack image list
+--------------------------------------+--------+--------+
| ID | Name | Status |
+--------------------------------------+--------+--------+
| 0dbab038-9df1-4b57-9046-2da8a2e83b39 | cirros | active |
+--------------------------------------+--------+--------+
1.3.4.image的服务管理
glance image-create命令
glance image-create命令用于添加新的虚拟机镜像至glance中,glance image-update 命令用于修改已经完成更新的镜像的属性信息。
image-create命令至少要接收三个参数:--name 、--container_format、--disk_format。 其中--disk_format用于指明磁盘镜像文件的格式,包括raw,qcow2,vhd,vmdk,iso,vdi,aki,ari,ami等。--container_format用于表明镜像文件是否包含了虚拟机的元数据信息,然而,目前compute服务并未使用此信息,因此,在不确定的情况下可以将其指定为bare,而常用的格式主要有bare(没有container或元数据信息)、ovf、aki、ari或ami几种。
镜像元数据
glance image-create或glance image-update命令的--property key=value参数能够为镜像文件附加元数据信息,而常用的属性主要有:
architecture: hypervisor必须支持CPU架构,如x866_64、arm等
hypervisor_type: hypervisor类型,其能够使用的值包括xen、qemu、kvm、lxc、uml、vmware、hyper-v及powervm;
vm_mode:定义虚拟机模式,即应用于虚拟机的host/guest ABI;例如hvm,xen,uml,exe等
xenAPI还有其专用的两个属性可以定义:
autho_disk_config:布尔型属性值,true表示在虚拟机实例启动前磁盘的根分区将被自动调整;
os_type:image中安装的操作系统类型,如linux,windows等,xenAPI能够根据此属性值来执行不同的操作,如果为windows则创建fat32格式的交换分区、限制其主机名称少于16个字符等。
Vmware的API也有如下三个专用属性可以定义:
vmware_adaptertype:定义hypervisor使用的虚拟scsi或IDE接口类型,其有效值为lsiLogic,busLogic及ide;
vmware_ostype:Vmware GuestID,用于描述映像文件中的操作系统类型:vmware所支持的类型较多,可以参照thinkvirt.com获取详细信息,默认值为otherGuest;
vmware_image_version:目前未使用,默认值为1;
1.3.5.获取虚拟机镜像
CirrOS(test)镜像
由Scott Moser维护的一系列用于测试目的的微型虚拟机映像,登录名为cirros,下载地址为https://launchpad.net/cirros/+download。在qemu或kvm中测试时,官方建议使用qcow2格式的镜像文件。
Ubuntu镜像
Canonical官方提供了基于Ubuntu的系列镜像,登录名为ubuntu,下载地址为http://uec-images.ubuntu.com。 在QEMU或KVM中部署时,建议使用qcow2格式的镜像文件
Fedora镜像
Fedora官方提供了预制的Fedora JEOS映像,下载地址为http://berrange.fedorapeople.org/images,目前最新的是为x86_64平台提供的QCOW2格式的映像.
OpenSUSE和SLES11镜像
通过SUSE Studio(http://susestudio.com)可以很方便的为OpenSUSE和SLES11构建与Openstack兼容的虚拟应用,比如创建一个OpenSUSE12.1的JEOS镜像
Rackspace云生成器镜像
Rackspace云生成器(https://github.com/rackerjoe/oz-image-build)提供了多种发行版预制的预制镜像,如RedHat,Centos,Fedora,Ubuntu等
1.3.6.制作镜像的专用工具
Oz(KVM):Oz是能够为常见Linux发行版创建映像文件的命令行工具,Rackspace就是使用Oz创建的镜像文件。在Fedora Project的wiki中,提供了使用Oz创建镜像文件的案例,具体请参照:
https://fedoraproject.org/wiki/Getting_started_with_Openstack_Nova#Building_an_Image_with_Oz
VMBuilder(KVM,Xen):VMBuilder能够为不同的hypervisor创建虚拟机镜像文件,它是一个脚本,能够自动收集所需的资源为虚拟机创建镜像文件,Ubuntu为之提供了一个使用案例,具体请参照http://help.ubuntu.com/12.04/serverguide/jeos-and-vmbuilder.html
VeeWee(KVM):VeeWee通常用于创建Vagrant虚拟工作环境,一种基于Virtualbox,Vmware,AWS等虚拟化技术的虚拟化工具,VeeWee也可以用于创建KVM镜像
imagefactory:Aeolus项目的一款工具,用于自动化创建,转换及为不同的云服务商的镜像文件,支持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等)调整文件系统,使得其能够适应新的分区大小。