八、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跟其他的存儲