一、概述
OpenStack Placement是OpenStack組件之一,位於Nova之外,主要用於優化雲資源分配。Placement通過集中化管理,搜集雲環境中所有計算資源的信息,使得資源分配更為智能化、靈活化。本文將從多個方面對OpenStack Placement進行詳細闡述。
二、構建OpenStack Placement
OpenStack Placement可以通過devstack、Docker等方式進行構建,下面以devstack為例:
# 下載devstack git clone https://github.com/openstack-dev/devstack.git # 進入devstack目錄 cd devstack # 編輯local.conf文件 touch local.conf echo "[[local|localrc]] # Password ADMIN_PASSWORD=123456 DATABASE_PASSWORD=123456 RABBIT_PASSWORD=123456 SERVICE_PASSWORD=123456 # Horizon enable_service horizon # Keystone enable_service keystone # Glance enable_service glance # Placement enable_service placement-api enable_service placement-client # Nova enable_service n-api enable_service n-sch enable_service placement-client disable_service n-net force=yes " > local.conf # 開始安裝 ./stack.sh
三、OpenStack Placement的運行機制
OpenStack啟動Placement服務後,API請求會通過placement-api服務轉發到placement服務,placement使用SQLAlchemy在nova_placement數據庫中存儲和管理資源信息。Placement服務數據庫中的每個表都反映了資源的某個方面,比如resource_providers表包含雲環境中的所有資源提供者的信息,inventory表包含資源提供者的可用資源。通過這些信息,nova-scheduler可以智能地選擇最佳的資源使用哪個主機,遺留問題(比如overcommit情況下)的解決。
四、使用OpenStack Placement管理資源
1. 創建資源提供者
資源提供者是指雲環境中的計算資源,可以是虛擬化主機、物理主機、容器、GPU等等。在創建虛擬機之前,需要先把相關的資源提供者添加進Placement中。
# 創建資源提供者 export OS_AUTH_TYPE=v3password export OS_AUTH_URL=http://controller:35357/v3 export OS_PROJECT_DOMAIN_ID=default export OS_USER_DOMAIN_ID=default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=123456 openstack resource provider create compute1
2. 給資源提供者添加設備
通過inventory表向資源提供者添加設備,這樣nova-scheduler就能根據QOS之類的策略選擇最佳的資源主機。
openstack resource provider inventory set \\ --resource-provider=compute1 \\ --resource-class=VCPU \\ --total=24 \\ --reserved=1 \\ --allocation-ratio=0.9 openstack resource provider inventory set \\ --resource-provider=compute1 \\ --resource-class=MEMORY_MB \\ --total=32768 \\ --reserved=2048 \\ --allocation-ratio=0.95
3. 創建虛擬機
通過nova-scheduler,創建配合需要的虛擬機。nova-scheduler會檢查雲環境中所有資源提供者的狀態,根據配合策略分配資源,最後為該VM分配對應的虛擬化計算資源。
openstack flavor create m1.small --id auto \\ --ram 1024 --disk 10 --vcpus 1 openstack server create --flavor m1.small --image cirros \\ --nic net-id=3791572d-ffa6-49ac-a170-7b4be7fe1f81 \\ --security-group default my_cirros_instance
4. 查看虛擬機資源分配情況
可以通過nova-show命令查看虛擬機分配情況,具體包括哪個資源提供者、CPU、Memory和DIsk等信息。
openstack server show my_cirros_instance
五、OpenStack Placement的優化策略
OpenStack Placement提供了很多靈活的配置方式,可以根據具體的需求進行優化,下面列舉幾個常用的策略。
1. 資源池預留
為了保證虛機啟動過程中所需的資源在任何情況下都不會被用盡,通常需要預留一部分資源。比如下面的設置意味着這個資源池中最多只能有總量的80%的VM,剩餘20%的資源預留給內部操作。
[[DEFAULT]] reserved_host_memory_mb=1024 cpu_allocation_ratio=16.0 ram_allocation_ratio=1.5 max_placement_results=25 aggregate_image_properties_isolation_namespace= aggregate_image_properties_isolation_separator= max_io_ops_per_host=8 max_io_ops_per_instance=5 max_instances_per_host=50 retry_backoff=1 retry_backoff_max=120 retry_interval=2 placement_client_retry_backoff=1 placement_client_retry_backoff_max=120 placement_client_socket_timeout=5 [[placement]] auth_type=v3password auth_url=http://controller:35357/v3 project_domain_id=default user_domain_id=default project_name=admin username=admin password=123456 filter_scheduler scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler scheduler_host_manager=nova.scheduler.host_manager.HostManager available_filters=nova.scheduler.filters.all_filters scheduler_use_baremetal_filters=False isolation_filtering=False isolated_hosts=[] scheduler_json_config_location=scheduler.json scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter scheduler_round_robin_strategy=constant scheduler_tracks_instance_changes=False scheduler_weight_classes=nova.scheduler.weights.all_weighers scheduler_client_timeout=60 scheduler_max_attempts=3 scheduler_driver_task_period=60 [filter_scheduler] host_subset_size=1 host_subset_type=one_of ram_weight_multiplier=1.0 cpu_weight_multiplier=1.0 request_spec_modifier=nova.scheduler.filters.RequestSpecModifier$filter_scheduler ram_allocation_ratio=1.5 filter_scheduler_use_baremetal_filters=False isolation_filtering=False scheduler_available_filters=nova.scheduler.filters.all_filters scheduler_cpu_allocation_ratio=16 scheduler_disk_allocation_ratio=1 scheduler_ram_allocation_ratio=1.5 scheduler_use_baremetal_filters=False
2. 資源共享
在多租戶場景下,通常需要對資源進行共享。這裡可以採用共享的方式,來有效利用資源,避免資源浪費。
openstack server create --flavor m1.medium --image cirros \\ --nic net-id=612cdad6-5fee-422c-bd23-e6a34149b740 --security-group \\ default --hint group=workload my_cirros_instance
3. Overcommit策略
在雲環境中,實際使用的資源可能比配置的資源要少很多。因此,通常會通過Overcommit的方式,優化資源利用率。下面是在Placement中通過Overcommit策略設置的例子。
# 設置核心數量的Overcommit openstack flavor set m1.small \ --property hw:cpu_policy=dedicated \ --property hw:cpu_thread_policy=isolate \ --property hw:cpu_sockets=1 # 以2倍的方式用更多的內存覆蓋實例 openstack flavor set m1.small \ --property hw:mem_page_size=large \ --property hw:mem_2048_mb_pages=2 # 確保該節點的空閑內存百分比大於15% openstack flavor set m1.small \ --property resources:CUSTOM_BAREMETAL=1 \ --property resources:MEMORY_MB=2048 \ --property resources:VCPU=1 \ --property resources:DISK_GB=20 \ --property capabilities:boot_option=local \ --property capabilities:boot_mode=bios \ --property capabilities:cpu_arch=x86_64 \ --property capabilities:hypervisor_version_matches_build=True \ --property capabilities:node_capacity=1 \ --property capabilities:node_disk_gb=20 \ --property capabilities:node_memory_mb=2048 \ --property capabilities:node_cpu_arch=x86_64 \ --property capabilities:node_cpu_total=2 \ --property capabilities:node_ram_total=2048 \ --property capabilities:node_ram_free_percentage=15
六、總結
OpenStack Placement作為OpenStack的重要組件之一,主要用於集中化管理和分配資源。本文從構建、運行機制、使用和優化等多個方面對OpenStack Placement進行了詳細的闡述。
原創文章,作者:QGJOH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372365.html