一、概述
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进行了详细的阐述。