最近自己裝了下Openstack,零基礎安裝,參照了網上不少教程。
吃了百家飯的后果,就是出現了一堆不明問題...openstack安裝比較復雜,很多配置文件,一個地方配置不正確,可能會導致后面的功能不可用。
僅以此文記錄安裝結束后,啟動實例時候遇到的一系列錯誤及排查過程。
BUG 1: No valid host
報錯
No valid host was found. There are not enough hosts available.
解決方法
網絡節點執行
[root@openstack-controller-dev ~]# vim /etc/sysctl.conf
增加下面內容:
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
驗證是否生效
[root@openstack-controller-dev ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
BUG 2: Unable to convert image to raw
報錯
69ad3af8-3253-4a35-a6f1-ee5bcd1e37f2 aborted: Image 8f9cf451-764e-4219-ba0b-2edb93a9e63e is unacceptable: Unable to convert image to raw: Image /var/lib/nova/instances/_base/9b2bd71aef84e92d7147d0eb3697710afd403a4a.part is unacceptable: Unable to convert image to raw: Unexpected error while running command.
2019-11-15 01:12:18.776 162849 ERROR nova.compute.manager [instance: 69ad3af8-3253-4a35-a6f1-ee5bcd1e37f2] Command: qemu-img convert -O raw -f qcow2 /var/lib/nova/instances/_base/9b2bd71aef84e92d7147d0eb3697710afd403a4a.part /var/lib/nova/instances/_base/9b2bd71aef84e92d7147d0eb3697710afd403a4a.converted
2019-11-15 01:12:18.776 162849 ERROR nova.compute.manager [instance: 69ad3af8-3253-4a35-a6f1-ee5bcd1e37f2] Exit code: 1
2019-11-15 01:12:18.776 162849 ERROR nova.compute.manager [instance: 69ad3af8-3253-4a35-a6f1-ee5bcd1e37f2] Stdout: u''
2019-11-15 01:12:18.776 162849 ERROR nova.compute.manager [instance: 69ad3af8-3253-4a35-a6f1-ee5bcd1e37f2] Stderr: u'qemu-img: error while reading sector 17280: Input/output error\n'
排查過程
面向百度進行開發后,在openstack的官網QA上找到了答案:鏡像上傳不完整.
參考鏈接: Image is unacceptable: Unable to convert image to raw.
於是重新上傳,上傳后發現新的問題...
BUG 3: CPU feature spec-ctrl not found
報錯
internal error: process exited while connecting to monitor: 2019-11-15T09:42:49.789389Z qemu-kvm: CPU feature spec-ctrl not found
分析及排查
經過百度查看多篇文章后,發現下面這篇說的很在理。
排查相應計算節點的nova-compute日志時發現,日志中有錯誤信息
qemu-kvm: CPU feature spec-ctrl not found
該日志傳達了幾點信息:
- Libvirt的獲取宿主機的CPU指令集列表中包含該特性
- qemu-kvm不支持CPU特性spec-ctrl
解決方案
- 升級libvirt和qemu來適配新款CPU
- 修改計算節點libvirt獲取到的指令集列表cpu_map.xml,屏蔽虛擬化組件不支持的CPU特性。備份cpu_map.xml文件,然后修改/usr/share/libvirt/cpu_map.xml,將和spec-ctrl相關的特性刪除
最后把libvirt服務重啟生效。
因考慮到升級libvirt和qemu影響較大,升級過后可能會影響部分邏輯和功能,故推薦第二種解決方法。
像這樣的配置
<model name='Haswell-noTSX-IBRS'>
<model name='Haswell-noTSX'/>
<feature name='spec-ctrl'/>
</model>
改為
<model name='Haswell-noTSX-IBRS'>
<model name='Haswell-noTSX'/>
</model>
這樣的直接刪掉
<feature name='spec-ctrl'>
<cpuid eax_in='0x07' ecx_in='0x00' edx='0x04000000'/>
</feature>
重啟libvirt
[root@openstack-compute-dev ~]# systemctl restart libvirtd.service
上面的操作執行完后,再次新建實例,有可能還會報下面的錯誤:
internal error: process exited while connecting to monitor: 2019-11-15T11:02:14.259953Z qemu-kvm: CPU feature stibp not found
執行和上面針對spec-ctrl
一樣的操作就可以了。