虽然有超售比例这个概念来提高资源的利用率,但庞大的用户群里以及对云主机的疯狂使用,使得创建云主机失败依旧是出现频率最高的问题,在此当中资源配额不足是主要原因,包括宿主机节点物理资源,网络资源等,而它们又分别包括了cpu,ram,ecu,port等,假如只知道状态为ERROR,然后一项一项去检查哪一项导致创建失败,显然影响使用者的效率,同时也增加了定位错误的成本,因此异常状态信息的显示优化是十分必要的
云主机这里对于错误信息都作了输出,接口十分简单,传入云主机UUID,显示该云主机信息即可
curl -s -X GET http://$host:8774/v2/$tenant/servers/$uuid -H "Accept: application/json" -H "X-Auth-Token: $token"
返回的JSON信息中,有用信息为下面一段
"fault": { "message": "Neutron error: Over quota on vnetwork public, az zw", "code": 500, "created": "2016-03-20T05:13:18Z" },
通常这里message就会指定详细的出错信息,这里由于我的外网配额已经不足了,却依旧带外网PORT来创建云主机,导致ERROR,因此这里的错误信息就提示,az为zw的public也就是外网配额已经不够,无法创建外网PORT了
所以云主机接口返回的信息,不管是没有物理资源,还是配额不足以及其他ERROR原因,都是经过优化展示的,在调用接口的时候,如果要打印日志信息,可以将返回的错误信息保留,而不是判断一个状态错误,立马打印一个“NVS接口调用失败”,这就比较笼统了,至于错误的信息太多,如何辨别,下面就列举一下常见的
1:最常见的,就是下面这玩意
{"message": "No valid host was found. ", "code": 500, "created": "2016-03-20T05:40:22Z"}
经常有某测试环境以及萧山X环境出现创建云主机失败就是这个错误,根据前面说的云主机的调度方式,看到这里No valid host,不用犹豫,99.99%是你挑选的az已经找不到有资源的节点来满足你创建该flavor的云主机,当然因素会很多,节点上vcpu,ram,ecu等等不足了
2:资源相关
这里的资源是指租户的某一项资源已经到了上限,但这里的上限不包括人为修改用户配额这种,也就是说是指达到了理论上的最大值,常见的有下面这些
(1)外网PORT,由于是所有用户公用,总数有上限,当所有外网port都被占用之后,还想抢一个过来创建云主机,就会有如下报错
{"message": "Neutron error: No more ip on vnetwork public, az zw", "code": 413, "created": "2016-03-20T05:43:14Z"}
同理,私有网掩码23,未扩容的话最多能创建512个port;私有云环境中还有机房网,数量更少,更容易出错,这些都是要注意的
(2)上面的错误信息可以看出是通过vnetwork创建的,假如报错信息是关于network id的,就得好好审查一下了,比如下面这个报错
{"message": "Neutron error: No more ip on network dae73933-9e60-4ad7-b48c-046aca96343f", "code": 413, "created": "2016-03-20T05:46:54Z"}
第一种场景,创建云主机报的错误,你也许会十分愤怒地冲过来说:我都可以创建port,但云主机却ERROR报这种错误……这时候需要确认一下调用接口,是否还是用的net-id而不是vnetwork,然后不管是前端还是接口,指定错误信息中的network id创建port,确认能否创建,很多时候习惯性地产品管理前端创建port,都没仔细看到底来自哪个network id,这里的原因一般来说就是其中一个network到达了上限无法继续创建,而代码里指定了这个network导致无法创建,改为vnetwork即可,当然假如直接通过这个network id真能创建port,欢迎骚扰
第二种场景,补充一下,不是创建云主机,是通过这个network创建port,报这个错误,但是可以查到目前用了512个,但是按照CIDR的掩码来看,应该能够创建1024个port,这个时候你可以尽情地去骚扰SA,让他们确认这两者的一致性,他们在更新subnet的时候,有权利限制start到end的数量
3:配额相关
配额问题比较简单也比较直接,一般直接看下资源一共多少,用了多少,立马就能得到答案
比如通过network-id创建,会提示你对应网络配额不足
{"message": "Neutron error: Over quota on network dae73933-9e60-4ad7-b48c-046aca96343f", "code": 500, "created": "2016-03-20T05:49:09Z"}
通过vnetwork创建,会提示对应az的某条vnetwork的所有network都配额不足了,俗一点就是这个az没法创建某种类型网络的port了
{"message": "Neutron error: Over quota on vnetwork public, az zw", "code": 500, "created": "2016-03-20T05:50:07Z"}
4:其它操作影响
像我们创建租户,初始化用户,仅仅是有了私有网,而机房网和外网都必须要绑AZ才能使用,就算创建了没绑还是没法用
{"message": "Neutron error: Novalid network on vnetwork idc, az yz", "code": 404, "created": "2016-03-20T05:52:25Z"}
最后还有一种报错打印了相关堆栈信息,每次的具体原因可能不同
{"message": "Exceeded maximum number of retries. %(reason)s ", "code": 500, "created": "2016-03-20T05:58:34Z"}