八、KVM

這一步,像virsh start命令一樣,將虛擬機啟動起來了。虛擬機啟動之后,還有很多的步驟需要完成。
步驟38:從DHCP Server獲取IP
有時候往往數據庫里面,VM已經有了IP,很多人就認為虛擬機就得到了IP,可是總是連不進去,不知從何入手,其實界面上能看到VM的IP和VM真正從DHCP獲得IP是兩回事情。
步驟39:cloud-init連接Metadata Server,並注入Key
Metadata Server有很復雜的架構,cloud-init連接Metadata Server,很容易就會不成功,如果不成功,Key無法注入,所有常出現IP能夠ping通,但是就是ssh不上去的情況。

http://niusmallnan.github.io/_build/html/_templates/openstack/metadata_server.html
另外推薦孔令賢的blog
【OpenStack】metadata在OpenStack中的使用(一)
【OpenStack】metadata在OpenStack中的使用(二)
步驟40:通過VNC可以看到啟動過程
VNC是一個很好的東西,尤其是在VM沒有得到IP的時候,你可以通過VNC連進去,用用戶名密碼登陸,然后調試為什么DHCP失敗。
VNC也是比較復雜的東西,推薦文章

步驟41:添加一個FLoating IP,可以通過Floating IP SSH進去。
要想Floating IP成功,除了IPTables NAT要正確,br-ex也需要正確配置。

步驟42:在VM里面可以訪問外網
要做到這一點,除了gateway要配置正確,dns server也需要正確配置。
如果虛擬機網絡有問題,那是很頭疼的時候,建議通過下面的流程進行調試:
- Security Group全部打開,這是最基本的,但是很多人容易忘記,結果tcpdump了半天,發現security group沒打開,真的很冤
- 通過界面查看虛擬機的log,也可以在compute節點上查看console.log文件,看看里面是否有DHCP獲取IP成功的日志,如果有,還不錯,如果沒有就慘了
- 如果虛擬機連不上DHCP Server,則需要准備一個不使用metadata server,而是用用戶名密碼可以登錄的image,通過VNC登錄進去,如果VNC也不通,就需要先調試VNC,這是訪問虛擬機最后的方法了。
- 通過VNC登錄進去后,就可以通過命令行運行dhclient,來重啟連接DHCP Server
- 在運行dhclient之前,需要通過ovs-vsctl show和brctl來查看,各個網卡和bridge之間關系是否正確,tunnel之間是否能夠通,網卡是否都處於up的狀態
- 如果從虛擬機的虛擬網卡到DHCP Server的網卡一路都是正確的,則需要查看br-tun上ovs-ofctl dumpflows查看flows規則,是否對包的改寫正確,是否有正確的規則
- 可以再dhclient運行的時候,從compute節點上的網卡和bridge,一個個進行tcpdump,看到底哪個網卡或者bridge沒有收到包,收到的包里面的VLAN ID等是否正確,問題往往就是這里
- 如果VM能從DHCP Server獲得IP,則好事成了一半,接下來換一個有cloud-init的image,看metadata server能夠連接成功,能夠注入key,也是通過console.log來看
- 如果metadata server不能連接成功,就需要順着metadata server的整個流程,一個一個模塊看,看每個模塊的log,端口是否正確,是否收到請求,也可以在VM里面用curl來模擬metadata server的請求
- 如果metadata server能夠連接成功,key成功注入,下一步需要從namespace里面看是否能夠ping通,能夠ssh
- 如果namespace里面能夠成功,則在network節點上,ping floating ip和ssh,是否能夠成功,如果不成功,看br-ex的網卡是否添加正確,是否配置了ip,路由表是否正確,namespace里面floating ip的iptables規則是否添加正確
- 在network節點上能夠ssh到floating ip,則需要從其他節點上ssh,如果不成功,可能br-ex的網址配置有問題,很可能是br-ex添加的物理網卡不是混合狀態,也可能是路由配置有問題,對於floating ip所在的網段,不指向network節點
- 如果floating ip能夠成功,則需要進去VM里面運行apt-get update,如果不可以,看能否ping通openstack里面的gateway,然后看能否ping通物理網絡環境的gateway
- 最后要看DNS Server是否配置正確,是否能夠ping通,如果能,apt-get update運行成功,則虛擬機才叫基本可用。
所謂基本可用,就是能運行簡單的命令沒有問題,但是,如果想里面運行程序,則需要保證kvm的性能
推薦文章http://www-01.ibm.com/support/knowledgecenter/linuxonibm/liaat/liaatkvm.htm
而且虛擬機之間是共享物理機的資源的,我們必須對虛擬機的QoS進行控制,可用通過cgroup來進行控制
推薦文章
[轉] Quality Of Service In OpenStack
虛擬機在一個物理機上運行,當資源緊張的時候,可能需要live migration到另外的機器上
QEMU KVM Libvirt(12): Live Migration
九、Cinder

虛擬機創建完畢,我們常會attach一個volume,當然也可以boot from volume,這樣volume里面的數據不會隨着VM的消失而消失。
步驟44:Cinder API請求創建一個Volume
步驟45: Cinder Scheduler在多個Cinder Volume里面選擇一個,也是先Filter再weighting的過程,可以根據總空間的大小,也可以根據分配的情況
步驟46:Cinder Volume創建一個iscsi target
步驟47:Cinder Volume創建一個LVM volume,加入iscsi target
步驟48:compute節點連接iscsi target,從而volume出現在compute節點上
步驟49:將compute節點上的volume attach到虛擬機上
對於Cinder
Cinder架構

對於LVM,推薦文章
[轉] Linux 內核中的 Device Mapper 機制
http://www.ibm.com/developerworks/cn/linux/l-devmapper/


對於ISCSI
推薦
Using iSCSI On Ubuntu 10.04 (Initiator And Target)
Linux tgtadm: Setup iSCSI Target ( SAN )


Cinder跟其他的存儲


