1. 程式人生 > >創建虛擬機中的nova-scheduler 調度配置

創建虛擬機中的nova-scheduler 調度配置

調度策略 images false nancy ada python2.7 package gre gpo

一個Openstack 系統中通常包括多個計算節點

root@controller:/etc/nova# nova hypervisor-list
+----+---------------------+
| ID | Hypervisor hostname |
+----+---------------------+
| 1  | compute             |
| 2  | network             |
| 3  | compute2            |
+----+---------------------+
這就產生了一個問題,當發出創建虛擬機請求時,應該把虛擬機創建到哪個計算節點上呢? nova-scheduler 服務即是實現這個調度工作的,調度算法通過filter 和weight 來實現。filter 用於選擇可用的計算節點。weight 用於在可用的計算節點中選擇一個最佳的節點。

filter

filter 在nova.conf 中配置,改動須要重新啟動nova-scheduler 服務

默認的filter 為(截取icehouse版)

scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter,ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter

以下列出各個filter 的功能

RetryFilter: 剔除上傳已經被嘗試調度過的計算節點

AvailabilityZoneFilter:剔除那些AvailabilityZone 不滿足要求的計算節點

ComputeFilter 剔除那些非活動的計算節點

ComputeCapabilitiesFilter 檢查計算節點的其它屬性

ImagePropertiesFilter 剔除那些硬件架構,Hypervisor,虛擬機模式等屬性不滿足磁盤鏡像要求的節點

filter 類存放在nova/scheduler/filter 文件夾下全部的

root@controller:/usr/lib/python2.7/dist-packages/nova/scheduler/filters# ll *.pyc
-rw-r--r-- 1 root root 7207 Jul 15 09:33 affinity_filter.pyc
-rw-r--r-- 1 root root 2400 Jul 15 09:33 aggregate_image_properties_isolation.pyc
-rw-r--r-- 1 root root 2399 Jul 15 09:33 aggregate_instance_extra_specs.pyc
-rw-r--r-- 1 root root 1896 Jul 15 09:33 aggregate_multitenancy_isolation.pyc
-rw-r--r-- 1 root root  807 Jul 15 09:33 all_hosts_filter.pyc
-rw-r--r-- 1 root root 1588 Jul 15 09:33 availability_zone_filter.pyc
-rw-r--r-- 1 root root 2514 Jul 15 09:33 compute_capabilities_filter.pyc
-rw-r--r-- 1 root root 1763 Jul 15 09:33 compute_filter.pyc
-rw-r--r-- 1 root root 3671 Jul 15 09:33 core_filter.pyc
-rw-r--r-- 1 root root 1900 Jul 15 09:33 disk_filter.pyc
-rw-r--r-- 1 root root 2107 Jul 15 09:33 extra_specs_ops.pyc
-rw-r--r-- 1 root root 4003 Jul 15 09:33 image_props_filter.pyc
-rw-r--r-- 1 root root 2007 Jul 15 09:33 __init__.pyc
-rw-r--r-- 1 root root 1641 Jul 15 09:33 io_ops_filter.pyc
-rw-r--r-- 1 root root 2300 Jul 15 09:33 isolated_hosts_filter.pyc
-rw-r--r-- 1 root root 5435 Jul 15 09:33 json_filter.pyc
-rw-r--r-- 1 root root 2021 Jul 15 09:33 metrics_filter.pyc
-rw-r--r-- 1 root root 1521 Jul 15 09:33 num_instances_filter.pyc
-rw-r--r-- 1 root root 1497 Jul 15 09:33 pci_passthrough_filter.pyc
-rw-r--r-- 1 root root 3824 Jul 15 09:33 ram_filter.pyc
-rw-r--r-- 1 root root 1448 Jul 15 09:33 retry_filter.pyc
-rw-r--r-- 1 root root 9769 Jul 15 09:33 trusted_filter.pyc
-rw-r--r-- 1 root root 2237 Jul 15 09:33 type_filter.pyc

affinity_filter.py
這裏文件中事實上有四個可用filter,都是關於親和性的調度策略。分別例如以下:
DifferentHostFilter
創建虛擬機的同一時候能夠指定一些虛擬機,要求新的虛擬機不能在這些虛擬機所在主機上創建。
說的簡單一點,在host1上執行著vm1,要創建vm2。創建時指定了scheduler_hints->different_host=[vm1]。那麽vm2就不會在host1上創建。


SameHostFilter
與上面的filter功能相反,假設創建時指定了scheduler_hints-> same_host=[vm1],那麽vm2就能夠創建在host1上。


SimpleCIDRAffinityFilter
假設指定了scheduler_hints-> build_near_host_ip,那麽僅僅能在host1的管理IP網段內選擇主機。


GroupAntiAffinityFilter
功能:指定scheduler_hints-> group_hosts=[host1, host2],那麽虛擬機不能創建在這些host上。

core_filter.py
CoreFilter
功能:看host上的vcpu個數是否能滿足創建虛擬機的instance_type中的vcpu個數。
依據CONF.cpu_allocation_ratio(默認是16)確定host上當前的vcpus_total。


disk_filter.py
DiskFilter
功能:看host上的disk大小是否能滿足創建虛擬機的instance_type中的(root_gb + ephemeral_gb)。
計算disk總量時,會依據CONF.disk_allocation_ratio計算


ram_filter.py
RamFilter
AggregateRamFilter
同CoreFilter同樣。

CONF.ram_allocation_ratio=1.5


image_props_filter.py
ImagePropertiesFilter
功能:看虛擬機image->properties中某些屬性是否在host的capabilities->supported_instances內。


屬性包含:architecture、hypervisor_type、vm_mode。假設image->properties中沒有這些屬性,則通過過濾;假設有這些屬性,而host->capabilities->supported_instances沒有,返回False。

io_ops_filter.py
IoOpsFilter
功能:依據主機的IO負載過濾。


IO負載由host->num_io_ops表示,與CONF.max_io_ops_per_host(默認是8)比較。



isolated_hosts_filter.py
IsolatedHostsFilter
功能:假設沒有配置CONF.isolated_images,當前host不在CONF.isolated_hosts中,返回True。假設虛擬機image_ref在CONF.isolated_images中,且host在CONF.isolated_hosts中,返回True。其它情況返回False。

測試filter

我的環境眼下啟動兩個計算節點,horizon中的虛擬機管理器能夠看到,compue 上可用資源最多。理論應該創建到compue 上

技術分享圖片

虛擬機在同樣計算節點

改動scheduler_default_filters=SameHostFilter

root@controller:/etc/nova# cat nova.conf 
[DEFAULT]
scheduler_default_filters=SameHostFilter


或者在原有filter 前面加入 (規則從前到後優先)

scheduler_default_filters = SameHostFilter,RetryFilter, AvailabilityZoneFilter, RamFilter,ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter

運行創建虛擬機,加入參數same_host=想要指定的虛擬機,6c16999c-e94a-4947-8489-1333d28862f8 為

在network 節點。

root@controller:/etc/nova# nova show 6c16999c-e94a-4947-8489-1333d28862f8
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | network                                                    |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | network                                                    |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000135                                          |
| OS-EXT-STS:power_state               | 1                                                          |
| OS-EXT-STS:task_state                | -                                                          |
| OS-EXT-STS:vm_state                  | active                                                     |
| OS-SRV-USG:launched_at               | 2015-12-25T03:30:35.000000                                 |
| OS-SRV-USG:terminated_at             | -                                                          |
| accessIPv4                           |                                                            |
| accessIPv6                           |                                                            |
| config_drive                         |                                                            |
| created                              | 2015-12-25T03:30:29Z                                       |
| flavor                               | m1 (bbf0b691-2f6a-4781-885c-26511f3f9318)                  |
| hostId                               | 98b5cba71c2e72f61d0acb210bf7cc01a6ed8a3facabd5b6f4560f2a   |
| id                                   | 6c16999c-e94a-4947-8489-1333d28862f8                       |
| image                                | cirros-0.3.2-x86_64 (d5aab3ac-74b5-4d53-91ee-92a22b48bb61) |
| key_name                             | admin-key                                                  |
| metadata                             | {}                                                         |
| name                                 | vm2                                                        |
| os-extended-volumes:volumes_attached | []                                                         |
| progress                             | 0                                                          |
| security_groups                      | default                                                    |
| sharednet1 network                   | 192.168.12.116                                             |
| status                               | ACTIVE                                                     |
| tenant_id                            | 2996e46c2519415d8de2b141d6c607ba                           |
| updated                              | 2015-12-25T03:30:35Z                                       |
| user_id                              | 84ad09b97a7f41d08afdf20afee08daf                           |
+--------------------------------------+------------------------------------------------------------+

nova boot --flavor m1 --image cirros-0.3.2-x86_64 --nic net-id=d691ca44-6ec4-4118-b8dd-76f363a2b53f --security-group default --key-name admin-key vm5 --hint same_host=6c16999c-e94a-4947-8489-1333d28862f8

root@controller:~# source admin-openrc.sh 
root@controller:~# nova boot --flavor m1 --image cirros-0.3.2-x86_64  --nic net-id=d691ca44-6ec4-4118-b8dd-76f363a2b53f   --security-group default --key-name admin-key vm5 --hint same_host=6c16999c-e94a-4947-8489-1333d28862f8
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | -                                                          |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                                          |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000013c                                          |
| OS-EXT-STS:power_state               | 0                                                          |
| OS-EXT-STS:task_state                | scheduling                                                 |
| OS-EXT-STS:vm_state                  | building                                                   |
| OS-SRV-USG:launched_at               | -                                                          |
| OS-SRV-USG:terminated_at             | -                                                          |
| accessIPv4                           |                                                            |
| accessIPv6                           |                                                            |
| adminPass                            | LHdQ245ZKktd                                               |
| config_drive                         |                                                            |
| created                              | 2015-12-25T07:27:38Z                                       |
| flavor                               | m1 (bbf0b691-2f6a-4781-885c-26511f3f9318)                  |
| hostId                               |                                                            |
| id                                   | e9863fe9-effc-475a-b1c1-5925080c8399                       |
| image                                | cirros-0.3.2-x86_64 (d5aab3ac-74b5-4d53-91ee-92a22b48bb61) |
| key_name                             | admin-key                                                  |
| metadata                             | {}                                                         |
| name                                 | vm5                                                        |
| os-extended-volumes:volumes_attached | []                                                         |
| progress                             | 0                                                          |
| security_groups                      | default                                                    |
| status                               | BUILD                                                      |
| tenant_id                            | 2996e46c2519415d8de2b141d6c607ba                           |
| updated                              | 2015-12-25T07:27:39Z                                       |
| user_id                              | 84ad09b97a7f41d08afdf20afee08daf                           |
+--------------------------------------+------------------------------------------------------------+
root@controller:~# nova show e9863fe9-effc-475a-b1c1-5925080c8399
+--------------------------------------+------------------------------------------------------------+
| Property                             | Value                                                      |
+--------------------------------------+------------------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                                     |
| OS-EXT-AZ:availability_zone          | nova                                                       |
| OS-EXT-SRV-ATTR:host                 | network                                                    |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | network                                                    |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000013c                                          |
| OS-EXT-STS:power_state               | 1                                                          |
| OS-EXT-STS:task_state                | -                                                          |
| OS-EXT-STS:vm_state                  | active                                                     |
| OS-SRV-USG:launched_at               | 2015-12-25T07:27:46.000000                                 |
| OS-SRV-USG:terminated_at             | -                                                          |
| accessIPv4                           |                                                            |
| accessIPv6                           |                                                            |
| config_drive                         |                                                            |
| created                              | 2015-12-25T07:27:38Z                                       |
| flavor                               | m1 (bbf0b691-2f6a-4781-885c-26511f3f9318)                  |
| hostId                               | 98b5cba71c2e72f61d0acb210bf7cc01a6ed8a3facabd5b6f4560f2a   |
| id                                   | e9863fe9-effc-475a-b1c1-5925080c8399                       |
| image                                | cirros-0.3.2-x86_64 (d5aab3ac-74b5-4d53-91ee-92a22b48bb61) |
| key_name                             | admin-key                                                  |
| metadata                             | {}                                                         |
| name                                 | vm5                                                        |
| os-extended-volumes:volumes_attached | []                                                         |
| progress                             | 0                                                          |
| security_groups                      | default                                                    |
| sharednet1 network                   | 192.168.12.122                                             |
| status                               | ACTIVE                                                     |
| tenant_id                            | 2996e46c2519415d8de2b141d6c607ba                           |
| updated                              | 2015-12-25T07:27:46Z                                       |
| user_id                              | 84ad09b97a7f41d08afdf20afee08daf                           |
+--------------------------------------+------------------------------------------------------------+
root@controller:~#

查看,新虛擬機又創建到了network 上面

技術分享圖片



創建虛擬機中的nova-scheduler 調度配置