Aug 152012
 

这是参考Redhat的Essex文档来写的,基本是参考原文epel的文档,为了方便会做一些调整。为了方便,我都是用root的身份执行下面的命令。

这次安装openstack没有成功,不过有点收获,至少keystone的全部内容都是手工输入,并不是想象中那么恐怖。下一个版本,应该可以用的上。

2012年8月16日:epel的源目前好像有bug,compute服务无法启动,报/var/log/nova/compute.log:2012-08-16 02:41:05 CRITICAL nova [-] internal error Cannot find suitable emulator for x86_64。还没找到解决的办法。

2012年8月24日:发现包的bug已经修复,nova log已经不会有错误。 经过反复验证,原来是我的源设置的问题导致。记住一定要加上 centos update 源,否则就会出现nova compute服务无法启动。已经验证了装完后,各种服务正常,vnc,网络。

 


一:介绍

 

硬件只要求机器支持VT,单块网卡就可以.

1:设置源

我们需要使用epel的源,同时还需要启用epel-test,很多更新目前还在test上。

2:开始

yum install openstack-utils dnsmasq-utils

dnsmasq-utils,是用来给虚拟机的dns和dhcp使用。

openstack-utils 这是redhat专门出的配置openstack的工具,包括

  1. openstack-config 用来配置各种配置文件,这是redhat专门针对openstack开发的工具。
  2. openstack-db 初始化数据库
  3. openstack-status 显示服务状态

二:Keystone

1:安装和初始化

安装keystone软件包

yum install openstack-keystone

初始化数据库,会提示安装mysql数据库并且设置root的密码

openstack-db --init --service keystone

设置环境变量

export SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0

创建token,token随机生成

export SERVICE_TOKEN=$(openssl rand -hex 10)
echo $SERVICE_TOKEN > /tmp/ks_admin_token

把token添加到配置文件里

openstack-config --set /etc/keystone/keystone.conf \
  DEFAULT admin_token $SERVICE_TOKEN

设置keystone服务

service openstack-keystone start
chkconfig openstack-keystone on

检查是否有错误信息

# ps -ef | grep -i keystone-all
keystone  5453     1  0 05:48 ?        00:00:00 /usr/bin/python /usr/bin/keystone-all 
--config-file /etc/keystone/keystone.conf
root      5462  5131  0 05:49 pts/0    00:00:00 grep -i keystone-all
# grep ERROR /var/log/keystone/keystone.log

原理图

keystone

 

2:创建管理员(admin)用户

用户(user) 密码 租户(tenant) 角色(roles)
admin secret admin admin

 

现在需要给用户(admin)加入到租户(admin),并且给这个用户(admin)授予管理员的角色(admin)

keystone user-create --name admin --pass secret
+----------+-----------------------------------+
| Property |              Value                |
+----------+-----------------------------------+
| email    | None                              |
| enabled  | True                              |
| id       | 94d659c3c9534095aba5f8475c87091a  |
| name     | admin                             |
| password | ...                               |
| tenantId | None                              |
+----------+-----------------------------------+
keystone role-create --name admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
| id       | 78035c5d3cd94e62812d6d37551ecd6a |
| name     | admin                            |
+----------+----------------------------------+
keystone tenant-create --name admin
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | None                             |
| enabled     | True                             |
| id          | 6f8e3e36c4194b86b9a9b55d4b722af3 |
| name        | admin                            |
+-------------+----------------------------------+

授权需要使用id来进行. 就是上面的3个id,user id, roles id, tenant id.

keystone user-role-add --user 94d659c3c9534095aba5f8475c87091a \
  --role 78035c5d3cd94e62812d6d37551ecd6a \
  --tenant_id 6f8e3e36c4194b86b9a9b55d4b722af3

 

设置环境变量

这是admin用户的环境变量,创建一个 keystonerc_admin 文件,直接运行下面命令就可以

cat >/root/keystonerc_admin <<EOF
export OS_USERNAME=admin
export OS_TENANT_NAME=admin
export OS_PASSWORD=secret
export OS_AUTH_URL=http://127.0.0.1:35357/v2.0/
EOF

运行

source keystonerc_admin
cat keystonerc_admin >> .bashrc

查看结果

keystone user-list
+----------------------------------+---------+-------+-------+
|                id                | enabled | email |  name |
+----------------------------------+---------+-------+-------+
| 42f2e4b76cb04742bba86302175caeb3 | True    | None  | admin |
+----------------------------------+---------+-------+-------+

 

设置endpoint

keystone service-create --name=keystone --type=identity \
--description="Keystone Identity Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | Keystone Identity Service        |
| id          | 0ed581adcd934b49bcb19c7afb068e25 |
| name        | keystone                         |
| type        | identity                         |
+-------------+----------------------------------+

使用上面的ID,创建endpoint

keystone endpoint-create --region RegionOne \
--service_id 0ed581adcd934b49bcb19c7afb068e25 \
--publicurl 'http://127.0.0.1:5000/v2.0' \
--adminurl 'http://127.0.0.1:35357/v2.0' \
--internalurl 'http://127.0.0.1:5000/v2.0'
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| adminurl    | http://127.0.0.1:35357/v2.0 |
| id          | adb412f89bcb4ab381b4e9ee50874605 |
| internalurl | http://127.0.0.1:5000/v2.0 |
| publicurl   | http://127.0.0.1:5000/v2.0 |
| region      | RegionOne                        |
| service_id  | 0ed581adcd934b49bcb19c7afb068e25 |
+-------------+----------------------------------+

创建一个普通用户

user 密码 角色 租户
chenshake secret user rhsummit
 keystone user-create --name chenshake --pass secret
+----------+-----------------------------------+
| Property |              Value                |
+----------+-----------------------------------+
| email    | None                              |
| enabled  | True                              |
| id       | 1d59c0bfef9b4ea9ab63e2a058e68ae0  |
| name     | chenshake                         |
| password | ...                               |
| tenantId | None                              |
+----------+-----------------------------------+
keystone role-create --name user
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
| id       | 8261ac4eabcc4da4b01610dbad6c038a |
| name     | user                             |
+----------+----------------------------------+
keystone tenant-create --name rhsummit
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | None                             |
| enabled     | True                             |
| id          | 05816b0106994f95a83b913d4ff995eb |
| name        | rhsummit                         |
+-------------+----------------------------------+

授权,这个和admin是一样的。

keystone user-role-add --user 1d59c0bfef9b4ea9ab63e2a058e68ae0 \
  --role 8261ac4eabcc4da4b01610dbad6c038a \
  --tenant_id 05816b0106994f95a83b913d4ff995eb

 

三:Glance

1:安装和初始化

安装glance

yum install openstack-glance

初始化数据库

openstack-db --init --service glance

配置

openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-api-paste.ini \
  filter:authtoken admin_token $(cat /tmp/ks_admin_token)
openstack-config --set /etc/glance/glance-registry.conf \
  paste_deploy flavor keystone
openstack-config --set /etc/glance/glance-registry-paste.ini \
  filter:authtoken admin_token $(cat /tmp/ks_admin_token)

服务

service openstack-glance-registry start
service openstack-glance-api start
chkconfig openstack-glance-registry on
chkconfig openstack-glance-api on

服务和endpoint

keystone service-create --name=glance --type=image --description="Glance Image Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | Glance Image Service             |
| id          | 1447f490e9784aa8890f9e39ddaa8d44 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+
keystone endpoint-create --service_id 1447f490e9784aa8890f9e39ddaa8d44 \
  --publicurl http://127.0.0.1:9292/v1 \
  --adminurl http://127.0.0.1:9292/v1 \
  --internalurl http://127.0.0.1:9292/v1
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| adminurl    | http://127.0.0.1:9292/v1 |
| id          | 9693e1af560843f68e9e91f2b3664a19 |
| internalurl | http://127.0.0.1:9292/v1 |
| publicurl   | http://127.0.0.1:9292/v1 |
| region      | regionOne                        |
| service_id  | 1447f490e9784aa8890f9e39ddaa8d44 |
+-------------+----------------------------------+

原理图

glance

2:上传image

glance add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=bare \
disk_format=qcow2 < /root/precise-server-cloudimg-amd64-disk1.img

可以通过glance index 查看镜像的id,可以查看镜像的详细信息。

# glance show 00ff17db-915d-4c6b-8fd6-149a43529aeb
URI: http://127.0.0.1:9292/v1/images/00ff17db-915d-4c6b-8fd6-149a43529aeb
Id: 00ff17db-915d-4c6b-8fd6-149a43529aeb
Public: Yes
Protected: No
Name: Ubuntu 12.04 cloudimg amd64
Status: active
Size: 231997440
Disk format: qcow2
Container format: bare
Minimum Ram Required (MB): 0
Minimum Disk Required (GB): 0
Owner: 96e7b9d4e7ee4285814a47c4b330c2f6

 

四:Nova

1:安装和初始化

安装

yum install openstack-nova

数据库

openstack-db --init --service nova

配置

openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone
openstack-config --set /etc/nova/api-paste.ini \
  filter:authtoken admin_token $(cat /tmp/ks_admin_token)

设置网络

openstack-config --set /etc/nova/nova.conf DEFAULT flat_interface eth0
openstack-config --set /etc/nova/nova.conf DEFAULT public_interface eth0

2:qpid

yum install qpid-cpp-server
sed -i -e 's/auth=.*/auth=no/g' /etc/qpidd.conf
service qpidd start
chkconfig qpidd on

3:启动服务

service libvirtd start
chkconfig libvirtd on

 

4:Nova volume

启动iscsi服务

service tgtd start
chkconfig tgtd on

 

 

umount /dev/sda7
pvcreate /dev/sda7
  Physical volume "/dev/sda7" successfully created
vgcreate nova-volumes /dev/sda7
  Volume group "nova-volumes" successfully created

编辑 /etc/fstab , 注释掉nova-volumes开机加载,否则会导致你开机无法启动。我是安装过程,直接创建了一个nova-volume的分区

sed -i '/nova-volume/s/^/#/' /etc/fstab

5:重启相关服务

for srv in api cert network objectstore scheduler volume compute ; do \
   sudo service openstack-nova-$srv start ; \
  done
for srv in api cert network objectstore scheduler volume compute ; do \
   sudo chkconfig openstack-nova-$srv on ; \
  done

6:排错

检查是否有错误

grep -i ERROR /var/log/nova/*

看log

tail -f /var/log/nova/*.log

7:endpoint

compute服务的endpoint

keystone service-create --name=nova --type=compute --description="Nova Compute Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | Nova Compute Service             |
| id          | 9f004f52a97e469b9983d5adefe9f6d0 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+
keystone endpoint-create --service_id 9f004f52a97e469b9983d5adefe9f6d0 \
  --publicurl "http://127.0.0.1:8774/v1.1/\$(tenant_id)s" \
  --adminurl "http://127.0.0.1:8774/v1.1/\$(tenant_id)s" \
  --internalurl "http://127.0.0.1:8774/v1.1/\$(tenant_id)s"
+-------------+------------------------------------------+
|   Property  |                  Value                   |
+-------------+------------------------------------------+
| adminurl    | http://127.0.0.1:8774/v1.1/$(tenant_id)s |
| id          | 247a56ec4fa94afca231aa0c304c7049         |
| internalurl | http://127.0.0.1:8774/v1.1/$(tenant_id)s |
| publicurl   | http://127.0.0.1:8774/v1.1/$(tenant_id)s |
| region      | regionOne                                |
| service_id  | 9f004f52a97e469b9983d5adefe9f6d0         |
+-------------+------------------------------------------+

nova volume 的endpoint

keystone service-create --name=volume --type=volume --description="Nova Volume Service"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description | Nova Volume Service              |
| id          | 9347a8dc271c44da9f9991b5c70a6361 |
| name        | volume                           |
| type        | volume                           |
+-------------+----------------------------------+
 keystone endpoint-create --service_id 9347a8dc271c44da9f9991b5c70a6361 \
  --publicurl 'http://127.0.0.1:8776/v1/%(tenant_id)s' \
  --internalurl 'http://127.0.0.1:8776/v1/%(tenant_id)s' \
  --adminurl 'http://127.0.0.1:8776/v1/%(tenant_id)s'
+-------------+----------------------------------------+
|   Property  |                 Value                  |
+-------------+----------------------------------------+
| adminurl    | http://127.0.0.1:8776/v1/%(tenant_id)s |
| id          | b2a128758a274b09bb09337b99faa42a       |
| internalurl | http://127.0.0.1:8776/v1/%(tenant_id)s |
| publicurl   | http://127.0.0.1:8776/v1/%(tenant_id)s |
| region      | regionOne                              |
| service_id  | 9347a8dc271c44da9f9991b5c70a6361       |
+-------------+----------------------------------------+

创建网络

nova-manage network create demonet 10.0.0.0/24 1 256 --bridge=demonetbr0

创建网络,会报一堆东西,不过不影响使用

密钥

nova keypair-add oskey > oskey.priv
 chmod 600 oskey.priv

 

设置安全组

nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
nova secgroup-list
nova secgroup-list-rules default

 

创建floating IP 网络

nova-manage floating create 10.1.199.224/28

 

五:Horizon (Dashboard)

yum install openstack-dashboard
service httpd start
chkconfig httpd on

 

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/init.d/iptables save

设置vnc

安装vnc相关的包

yum install openstack-nova-novncproxy

 

在 /etc/nova/nova.conf 文件里添加

novncproxy_host = 0.0.0.0
novncproxy_port = 6080
novncproxy_base_url=http://10.1.199.6:6080/vnc_auto.html
vnc_enabled=true
vncserver_listen=127.0.0.1
vncserver_proxyclient_address=127.0.0.1

 

 

打开防火墙6080端口

iptables -I INPUT -p tcp --dport 6080 -j ACCEPT
/etc/init.d/iptables save

重启相关服务

service openstack-nova-novncproxy start
service openstack-nova-consoleauth start
chkconfig openstack-nova-novncproxy on
chkconfig openstack-nova-consoleauth on
service openstack-nova-compute restart

 

这个时候,你可以登陆dashbard,创建虚拟机,应该是一切正常。需要注意的是vnc,需要火狐下才能正常使用。

你就可以通过

  19 Responses to “CentOS6.3 OpenStack Essex (单节点)”

  1. 我在增加计算节点时碰到了这个错:CRITICAL nova [-] internal error Cannot find suitable emulator for x86_64 ,nova-compute怎么也起不来,源的配置和控制节点是完全一样的。

    问题最终解决,需要加一个软链:
    ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-system-x86_64

  2. 您好,我安装您的步骤做完后,在登陆web的时候,提示验证失败,但是我查看数据库中,用户名是存在的,密码加过密,我多次尝试新建用户后,依然无法登陆,请问应该如何排查错误?
    非常感谢!

  3. 您好,我在一台Dell Poweredge 1950服务器上安装了openstack的keystone/glance/dashboard,然后想在另一台机器上访问。
    但是登陆界面始终显示:Error: An error occurred authenticating. Please try again later.
    不知是不是dashboard访问不到keystone的缘故,但感觉配置都没问题。同样的配置在我的笔记本上能成功登陆。

    • 这个应该还是你配置的原因吧。自己检查一下。对着最新的文档操作一下。用命令去修改配置文件,这样可以避免错误。

  4. 沙克,你好!
    我按照你的这篇博文进行操作,前面进行的似乎都很正常,但 http://10.1.199.6/dashboard 无法访问。请问还需要注意哪些地方吗?

    vmware workstation 9.0, redhat 6.3 x86_64。网络连接用的是NAT,IP是 10.1.199.128。iptables已关闭,httpd已正常启动。重启虚拟机无效

    • 我改天好好测试一下centos6.3的openstack,有一段时间没搞了。文档也难免有错误的地方。

  5. 陈老师,我按照Fedora的Getting_started_with_OpenStack_EPEL方法,在RHEL先装了单节点,一切正常,但是在添加了一个计算节点后,启动实例状态一直是BUILD,task_state一直是scheduling。

    去到那台计算节点,查看了/var/log/nova/compute.log,有warning记录报的是:
    Found 9 in the database and 0 on the hypervisor.

    然后就是像这样依次9个实例分别有一条信息
    WARNING nova.compute.manager [-] [instance: bc21f703-48a8-402a-98f1-9c826464fd07] Instance found in database but not known by hypervisor. Setting power state to NOSTATE,

    然后其他日志包括控制节点的compute.log, scheduler.log, api.log 都看不出有什么异常,我有几个思路:qpid的问题,nova-scheuler的问题,计算节点与控制节点上的kvm交互的问题。

    我想请问下陈老师,我的这几个思路大概正确么?或者您认为应该是哪里有问题呢?
    另外还想请教,计算节点上只需要安装nova-compute等,而不需要安装kvm么?如果不需要,那么存在在计算节点上的实例时运行在控制节点的kvm上?

    • 应该是你创建了9个示例,但是进行到使用hypervisor管理创建虚拟机时失败,此时数据库中已经记录创建。这样就导致了数据不一致的情况。

  6. 没这方面的经验,你大概可以看看:nova api,nova-network服务是否正常。你看看 nova-manage service list,看看各个服务是否正常。

  7. 您好!
    安装您的步骤做下来,我启动的实例始终不能上网,也ping不通和实体机在同一个网段的IP,但分配floating_ip,后,外面的是可以ping通实例,外面的IP能远程连接和putty上实例,我想问下,陈老师,有没有遇到这个问题?

  8. 陈老师,我的openstack-nova已经安装了,安装时没有centos源,出现这样错误internal error Cannot find suitable emulator for x86_64,现在我将centos源添上,需要卸载openstack-nova然后重装一遍吗

 Leave a Reply

(required)

(required)