Ironic和magnum中遇到的错误

涉及到的component有nova, ironic, glance, neutron, magnum, swift
基本错误都是在创建虚拟机的过程中发生的

很多openstack的应用场景都是企业内网,一般会有代理服务器和外部网络隔离


用nova boot在bare metal上部署

这里和创建虚拟机类似,在nova里都归属为了hypervisor,ironic-conductor会一直和bare metal交互。
交互分为两步:先把deploy image安装到机器上,然后用deploy image的操作系统把user image写入到机器的硬盘内。
在deploy image启动过程中会出现许多问题。

ironic在mitaka版本以前都只支持flat网络模式,如果创建一个新的节点,会在flat网络中添加一个port。
就如neutron port-list中,多出来一个port,而这个port对应于bare metal的四个网口中的一个。

baremetal的inspection操作之后,会自动创建多个port,服务器一般都有四个网口,那么就创建四个port。
当nova boot时,会随机选中一个port的mac地址和neutron的网络关联起来,所以就有了ironic node和neutron port的一一对应。
但是,实验时有时为了方便,四个网口只插了一跟网线,这在启动过程中就会出问题。

deploy image的挂载没问题,启动过程也不影响,当启动完成后,当bare metal希望和ironic-conductor交互时,网络就连不通了。
为何连不通,因为neutron注册的是某个port,只能和这个port交互,但是bare metal这个port没有插网线,数据出不来,然后就悲剧了。

ironic自动创建的port有四个

1
2
3
4
5
6
7
8
9
stack@Magnum:~/devstack$ ironic port-list
+--------------------------------------+-------------------+
| UUID | Address |
+--------------------------------------+-------------------+
| bc05cbb9-b6fd-4ebc-b860-81f0033c8828 | ec:b1:d7:83:74:43 |
| 34a4e46c-ff1f-4a24-b351-6a9bb1a5f21b | ec:b1:d7:83:74:42 |
| 3e40c8d2-4f7b-430d-85e3-a884ca48acd0 | ec:b1:d7:83:74:41 |
| 0035a7c8-534c-4d41-a8e0-c0271384408c | ec:b1:d7:83:74:40 |
+--------------------------------------+-------------------+

而在ironic conductor服务这边,通过br-ex一直ping不通nova boot的instance分配的ip

1
2
3
stack@Magnum:~/devstack$ ping -I br-ex 172.30.100.104
PING 172.30.100.104 (172.30.100.104) from 172.30.100.10 br-ex: 56(84) bytes of data.
From 172.30.100.10 icmp_seq=1 Destination Host Unreachable

查看neutron的port信息

1
2
3
4
5
6
7
8
9
10
11
stack@Magnum:~/devstack$ neutron port-list
+--------------------------------------+------+-------------------+----------------------------------------------------+
| id | name | mac_address | fixed_ips |
+--------------------------------------+------+-------------------+----------------------------------------------------+
| 3eebcadf-3b22-4208-8960-fed19b2d124b | | ec:b1:d7:83:74:41 | {"subnet_id": |
| | | | "59b992ff-1567-4132-a777-70545c075035", |
| | | | "ip_address": "172.30.100.104"} |
| a0e1fc5f-15bb-4840-98fb-0577422a62f6 | | fa:16:3e:0f:14:91 | {"subnet_id": |
| | | | "59b992ff-1567-4132-a777-70545c075035", |
| | | | "ip_address": "172.30.100.100"} |
+--------------------------------------+------+-------------------+----------------------------------------------------+

可以看到,neutron port-list中新创建的这个port的mac address和ironic port-list中的某个port对应

neutron网络创建port时,是根据ironic node已有的port进行随机创建的,所以删掉没插网线的port,或者把四个网口全插上网线,这个问题就解决了。


ironic node inspection时 clean node failed

在inspection时会自动执行clean node,但是会clean失败(为何失败?)
先避开这个功能,在/etc/ironic/ironic.conf中设置

1
autoclean=False


ironic在deoloy过程中,因为某些原因导致deploy失败,会产生脏数据,ironic node已经绑定instance uuid,但是instance已经被删除

1
Error contacting Ironic server: Node b362d8ce-1fd3-4cff-afac-c12f01fc02d9 is associated with instance 0d1c7ced-3137-46ce-a3ba-beb7b0c490e1. (HTTP 409). Attempt 2 of 2

这个错误有可能是个隐藏BUG,在ironic的deploy image启动完成后,网络不通连接不上ironic conductor的话,timeout之后,instance就失败被删除????,然后就留下来脏数据。
一般通过两种方式清理掉:

正规的就是ironic node-set-maintance true,然后ironic node-delete
另一种不推荐,就是直接进入数据库改数据,把instance uuid置为NULL


magnum bay-create时会出现请求不到外网的错误

magnum本身是和容器结合的模块,在创建时时会有一个请求discovery url的过程,是外网地址,企业内网中要死不死的没有设置代理的话,就会出错。
magnum的github上有说可以在命令行指定代理参数,但是估计是比较新的版本上有的,我在公司机器上试会找不到这个参数。
Openstack官方文档:http://docs.openstack.org/developer/magnum/troubleshooting-guide.html#etcd-service
这个对外网的请求是和etcd service有关,etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现,灵感来源于zookeeper.
在集群中,用于同步同类节点之间的状态,replication等等的功能都得依靠这个。