OpenStack实例创建失败

问题一:Block Device Mappingis Invalid

使用DashBoard创建实例时,卷是创建成功了,但是实例却处于ERROR状态
OpenStack实例创建失败

解决方案

查看日志/opt/stack/logs/c-vol.log
ProcessExecutionError: Unexpected error while running command.
Command: tgtadm –lld iscsi –op show –mode target
Stderr: u’tgtadm: failed to send request hdr to tgt daemon, Transport endpoint is not connected\n

日志中说明了发送hdr请求到tgt失败 ,所以是tgtd服务【tgtd iSCSI target daemon】出现问题,tgtd iSCSI target daemon意思是tgtd是iSCSI target的后台服务,即守护程序。执行命令systemctl status tgtd发现该服务处于disabled状态,所以启动该服务systemctl start tgtd即可解决问题。

还有遇到一种情况,日志中报错
Image 8af5bba5-0e95-492e-9347-44e9198f1244 is unacceptable: Image virtual size is 10GB and
doesn’t fit in a volume of size 2GB

这是因为在创建实例(虚机)时,存储卷设置太小(2G),而虚拟镜像需要10GB的存储空间。
OpenStack实例创建失败

问题二:Failed to allocate the network(s) with error

OpenStack实例创建失败

解决方案

分析报错信息,分配网络是出错,因为没有固定的IP地址可用。在网络那一块的IP地址池中,设置的IP段是:172.24.2.252,172.24.2.254 即只有三个IP地址,而之前已经创建了三个虚机,所以没有IP地址可以用,所以把IP地址池设置的宽一点即可。
设置IP地址池的时候要注意:如果想多添加一个ip,比如172.24.2.251,先ping一下这个IP看是否可以ping通,如果能ping通,说明当前网络中该IP已经被使用了,不可以重复使用,如果ping不同,说明未被使用,这里可以添加

问题三:No valid host was found, There are not enough hosts available

OpenStack实例创建失败

解决方案

这个错误的原因有很多,大多都是因为资源不足所致,具体可以查看日志nova-conpute.log、nova-conductor.log.
本地存储不足就会导致这样的问题
OpenStack实例创建失败

还有就是虚拟化的原因,在部署OpenStack时,有一步是配置虚拟化

mkdir -p /etc/kolla/config/nova
cat << EOF > /etc/kolla/config/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=none
EOF

其中virt_type的值,是根据egrep -c ‘(vmx|svm)’ /proc/cpuinfo的结果来设置的。
如果egrep -c ‘(vmx|svm)’ /proc/cpuinfo结果非0,说明cpu支持硬件加速,virt_type=kvm
如果egrep -c ‘(vmx|svm)’ /proc/cpuinfo结果为0,说明cpu不支持硬件加速,virt_type=qemu
关于kvm和qemu的区别,大家可以到网上查阅。

我的主机是在某云平台上申请的一个虚拟机,CPU是不支持硬件加速的,然而我设置virt_type=kvm,所以在无法成功创建实例。日志/var/lib/docker/volumes/kolla_logs/_data/nova-conpute.log中报错invalid argument: could not find capabilities for domaintype=kvm
意思是无法找到域类型为kvm的特性,也就是未开启或者不支持kvm。有些CPU的kvm是被禁用的,可在BIOS中开启。而我当时使用的是虚拟机,并非物理机,并且不支持硬件加速。
最后我设置virt_type=qemu,执行kolla-ansible reconfiguration ,重新配置后,即可成功创建出实例。