nova-compute 在計算節點上運行,負責管理節點上的 instance。 OpenStack 對 instance 的操做,最後都是交給 nova-compute 來完成的。 nova-compute 與 Hypervisor 一塊兒實現 OpenStack 對 instance 生命週期的管理。html
- 經過 Driver 架構支持多種 Hypervisor
- nova-compute 多種 Hypervisor 定義了統一的接口,Hypervisor 只須要實現這些接口,就能夠 Driver 的形式即插即用到 OpenStack 系統中。
![](http://static.javashuo.com/static/loading.gif)
- 能夠在 /opt/stack/nova/nova/virt/ 目錄下查看到 OpenStack 源代碼中已經自帶了上面這幾個 Hypervisor 的 Driver
|
root@controller:~# ll /opt/stack/nova/nova/virt/ |grep '^d'
drwxr-xr-x 10 stack stack 4096 Jun 8 00:51 ./
drwxr-xr-x 30 stack stack 4096 Jun 8 00:51 ../
drwxr-xr-x 4 stack stack 4096 Jun 8 00:51 disk/
drwxr-xr-x 2 stack stack 4096 Jun 7 23:36 hyperv/
drwxr-xr-x 2 stack stack 4096 Jun 8 00:51 image/
drwxr-xr-x 2 stack stack 4096 Jun 8 00:28 ironic/
drwxr-xr-x 4 stack stack 4096 Jun 8 00:51 libvirt/
drwxr-xr-x 4 stack stack 4096 Jun 7 23:36 powervm/
drwxr-xr-x 2 stack stack 4096 Jun 7 23:36 vmwareapi/
drwxr-xr-x 3 stack stack 4096 Jun 7 23:36 xenapi/
|
- 某個特定的計算節點上只會運行一種 Hypervisor,只需在該節點 nova-compute 的配置文件 /etc/nova/nova.conf 中配置所對應的 compute_driver 就能夠了。在咱們的環境中由於是 KVM,因此配置的是 Libvirt 的 driver。
|
[DEFAULT]
compute_driver = libvirt.LibvirtDriver
|
- 按期向 OpenStack 報告計算節點的狀態
- nova-scheduler 的不少 Filter 是根據算節點的資源使用狀況進行過濾的。好比 RamFilter 要檢查計算節點當前能夠的內存量;CoreFilter 檢查可用的 vCPU 數量;DiskFilter 則會檢查可用的磁盤空間。OpenStack 是如何得知每一個計算節點的這些信息呢?
- 查看nova-compute的日誌因爲我配的devstack在兩臺節點上都有nova-comute服務,所以兩臺節點都有本身的日誌:root@controller:~# journalctl -af --unit devstack@n-cpu.service
- Total usable vcpus: 1, total allocated vcpus: 0:報告當前計算節點資源使用狀況,vcpus爲1說明這個節點的cpu數量爲1,allocated vcpus表示給在這個節點建立的虛擬機分配的cpu數量
- Compute_service record updated for controller:controller:更新nova-compute服務狀態
- Running periodic task ComputeManager:運行週期性任務
- Didn't find any instances for network info cache update:由於此時尚未建虛擬機,因此出現這條日誌
- nova-compute 是如何得到當前計算節點的資源使用信息的:nova-compute 能夠經過 Hypervisor 的 driver 拿到這些信息,舉例來講,在咱們的實驗環境下 Hypervisor 是 KVM,用的 Driver 是 LibvirtDriver。 LibvirtDriver 能夠調用相關的 API 得到資源信息,這些 API 的做用至關於咱們在 CLI 裏執行 virsh nodeinfo、virsh dominfo 等命令。
- 實現 instance 生命週期的管理
- OpenStack 對 instance 最主要的操做都是經過 nova-compute 實現的,包括 instance 的 launch、shutdown、reboot、suspend、resume、terminate、resize、migration、snapshot 等。