openstack(queens)多節點手動安裝(六):虛擬機的創建和不同計算節點之間虛擬機的冷遷移和熱遷移

虛擬機的創建

虛擬機創建流程

對於nova來說,它最主要的功能就是維護虛擬機的生命週期。以虛擬機創建爲例。在創建虛擬機時,它會與其他組件配合,共同完成虛擬機的創建工作。如創建虛擬機所需要的鏡像文件,Nova需要通過HTTP方式向glanceclient發送請求,從而獲取虛擬機的鏡像文件;創建虛擬機網絡時,Nova需要通過HTTP方式向neutronclient,從而創建並綁定虛擬機所需要的網絡資源;如果需要創建存儲磁盤,Nova需要通過Http方式向cinderclient發送請求,創建虛擬機所需要的磁盤。
以上是Nova與其他組件的交互,從以上分析可以看出,Nova與其他組件的交互主要是使用HTTP的方式,在虛擬機的創建時,Nova內部服務之間的流程可以歸納爲如下幾點:
1.nova-api:主要接受外部(CLI/dashboard)發送來的HTTP請求,進行一系列認證後,再將其轉換成內部請求,並通過oslo_message與nova-conductor/nova-compute交互;
2.nova-conductor:主要作爲一個數據庫代理存在,是nova-compute讀寫數據庫的橋樑,這樣做的主要目的是避免nova-compute直接操作數據庫而引發安全性問題
3.nova-compute:主要藉助計算節點上的Hypervisor對虛擬機進行創建,刪除和掛起等操作
4.nova-scheduler:用來篩選計算節點,然後篩選出的計算節點告訴nova-compute,nova-compute就會在這個計算節點上生成libvirt.xml,交由相應的Hypervisor(比如kvm)來創建虛擬機

虛擬機創建的命令行操作

啓動一個虛擬機必要的資源是鏡像(image),規格(flavor),網絡(network)。我們需要首先創建這三種資源

上傳鏡像

本教程創建虛擬機所使用的鏡像爲cirros鏡像,該鏡像所對應的操作系統爲一個專門適用於雲中搭建虛擬機的微型操作系統,其下載地址爲http://download.cirros-cloud.net/,下載鏡像之後,在命令行中使用如下命令上傳鏡像

openstack image create "cirros"   --file cirros-0.3.5-x86_64-disk.img  --disk-format qcow2 --container-format bare  --public

其中 “cirros”爲鏡像創建後在openstack中的鏡像名稱,–file後面爲鏡像文件的地址和鏡像文件的名稱(若鏡像文件在命令行當前目錄下,則只需要輸入鏡像文件名稱),–disk-format後面爲鏡像格式,–container-format後面爲圖片的容器格式bare,–public表示共享此鏡像使所有用戶可見
操作完成之後,通過openstack image list命令可以查看到剛纔上傳的鏡像

創建虛擬機flavor(規格)

創建flavor的命令行命令如下所示:

openstack flavor create myflavor --ram 512 --disk 5 --vcpu 1 --public

其中myflavor爲flavor名稱,–ram後面爲虛擬機內存大小(單位MB),–disk後面爲硬盤容量(單位GB),–vcpu爲vcpu的數量,–public表示共享該規格爲所有用戶可見

創建網絡

openstack中網絡的創建分爲兩個部分。首先創建一個網絡,外部網絡(external)或者是私網(internal);然後創建子網,虛擬機所能夠使用的網絡必須有一個或多個子網。爲了簡單起見,我們創建一個外部網絡(external),其命令行命令如下:

openstack network create mynetwork --external

然後在mynetwork種創建子網

openstack subnet create mynetwork_subnet --allocation-pool start=192.168.1.100,end=192.168.1.110 --subnet-range 192.168.1.0/24 --gateway 192.168.1.1 --network mynetwork

各參數的意義如下:
1.–allocation-pool start=X.X.X.X,end=X.X.X.X。分配的運營商地址範圍。該範圍中的ip都能上網。
2.–subnet-range 子網的範圍。
3.–gateway 網關地址。
4.–network 指定子網附屬的網絡。
創建網絡成功之後,通過openstack network list 可以看到mynetwork及其附屬子網mynetwork_subnet均已創建成功

創建虛擬機

成功創建完鏡像cirros,flavor規格myflavor以及網絡mynetwork之後,便可以進行虛擬機的創建工作,由於nova-compute部署於兩個計算節點,所以在對應的計算節點創建虛擬機之前,需要打開該節點所在的物理主機host,在控制節點使用openstack compute service list命令確認該host上的計算服務已經開啓,之後便可以使用如下命令創建虛擬機,參數分別爲鏡像 --image、規格 --flavor、網絡 --nic net-id,虛擬機名稱爲myinstance:

openstack server create myinstance --image cirros --flavor myflavor --nic net-id=mynetwork

創建成功之後便可通過openstack server show myinstance 查看虛擬機狀態,當status爲active時表示虛擬機創建成功並啓動,通過如下命令,便可獲得可以登陸虛擬機控制檯的url,複製url到瀏覽器中即可控制虛擬機

openstack console url show myinstance

虛擬機在不同計算節點之間的冷遷移和熱遷移

在openstack中,遷移主要分爲2種方式:冷遷移和熱遷移。冷遷移(cold migration),也叫靜態遷移。關閉電源的虛擬機進行遷移。通過冷遷移,可以選擇將關聯的磁盤從一個數據存儲移動到另一個數據存儲。熱遷移(Live Migration),又叫動態遷移、實時遷移,即虛擬機保存/恢復,通常是將整個虛擬機的運行狀態完整保存下來,同時可以快速的恢復到原有硬件平臺甚至是不同硬件平臺上。恢復以後,虛擬機仍舊平滑運行,用戶不會察覺到任何差異。在遷移之前,需要在控制節點和計算節點進行一些配置準備工作。

控制節點調度服務配置

爲了能夠實現虛擬機在不同計算節點之間的遷移,需要在控制節點進行調度服務相關的配置,修改控制節點的配置文件/etc/nova/nova.conf如下:

scheduler_default_filters=AggregateInstanceExtraSpecsFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter

重啓控制節點上的計算服務

systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service

配置兩個計算節點之間互信(能通過ssh免密碼互相登陸)

計算節點1,2設置nova用戶可以登陸

usermod -s /bin/bash nova //更改nova用戶的shell
passwd nova //設置nova的密碼

計算節點1生成密鑰對

su - nova //切換到nova
ssh-keygen //生成密鑰對,之後一路默認回車
ssh-copy-id -i /var/lib/nova/.ssh/id_rsa.pub compute2 //把公鑰寫入到目標計算節點的/var/lib/nova/.ssh/authorized_keys

設置計算節點2部分文件的權限(注意只能是這個權限,過多或過少的權限都會導致互信失敗)

chmod 700 -R .ssh
chmod 600 .ssh/authorized_keys

計算節點1添加私鑰

su - nova
ssh-agent bash
ssh-add /var/lib/nova/.ssh/id_rsa
ssh 計算節點2主機名

此時便可無密碼登陸計算節點2控制檯,節點2免密登陸節點1則再執行步驟2之後的內容
完成上述配置之後便可進行計算節點之間虛擬機冷遷移操作

虛擬機冷遷移操作

假設想要將計算節點1上運行的instance1遷移到計算節點2上,操作的大致流程如下所示:
計算節點1的實例關機——>將/var/lib/nova/instances/下對應的實例使用scp命令配合 -r 參數傳輸到計算節點2的/var/lib/nova/instances/——>使用chown命令修改文件所有者——>手動修改nova數據的的instances表的host與node字段——>將虛擬機開機——>冷遷移完成
利用openstack server list 獲取instance1對應的ID(假設爲02e0808d-dae1-42e9-ae91-0e0a00f0f555),然後將該實例通過scp命令傳輸到目的主機

scp -r  /var/lib/nova/instances/02e0808d-dae1-42e9-ae91-0e0a00f0f555/ 計算節點2主機名:/var/lib/nova/instances/

在計算節點2修改實例文件夾的權限所有者

chown nova:nova /var/lib/nova/instances/02e0808d-dae1-42e9-ae91-0e0a00f0f555/
chmod +777 -R /var/lib/nova/instances/02e0808d-dae1-42e9-ae91-0e0a00f0f555/

在控制節點數據庫中修改instances表的host與node字段

update nova.instances set host='計算節點2主機名',node='計算節點2主機名' where uuid='02e0808d-dae1-42e9-ae91-0e0a00f0f555';

在計算節點2重啓計算服務並開啓虛擬機

systemctl restart openstack-nova-compute
openstack server start 02e0808d-dae1-42e9-ae91-0e0a00f0f555

虛擬機熱遷移設置

要想能夠在兩個計算節點之間進行虛擬機熱遷移操作,除了上述配置之外,還需要在兩個計算節點進行如下配置
計算節點更新組件

yum install libvirt qemu-* -y

修改/etc/sysconfig/libvirtd 文件

LIBVIRTD_ARGS="--listen"

在/etc/libvirt/libvirtd.conf 文件中做如下配置

listen_tls=0
listen_tcp=1
auth_tcp="none"

修改/etc/ssh/sshd_config文件

PubkeyAuthentication yes

修改/etc/nova/nova.conf文件

[libvirt]
virt_type = qemu

重啓計算節點主機

reboot

設置setenforce爲0

setenforce 0

虛擬機熱遷移操作

操作之前,首先測試兩臺計算節點之間是否可以進行virsh通信

virsh -c qemu://另一個計算節點主機名/system

使用如下命令便可以進行虛擬機熱遷移

openstack server migrate --live 計算節點2 instance1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章