28
OpenStack云端的资源调度 刘光亚 [email protected] Sina Weibo: @platformer

OpenStack Resource Scheduling

Embed Size (px)

Citation preview

Page 1: OpenStack Resource Scheduling

OpenStack云端的资源调度

刘光亚

[email protected]

Sina Weibo: @platformer

Page 2: OpenStack Resource Scheduling

OpenStack ATC

• 刘光亚 • IBM西安云计算开发部架构师

– 分布式计算 – 资源管理 – 容器技术 – 系统集成

• OpenStack ATC – Magnum (OpenStack Docker Container Service) Core Reviewer – Nova – HEAT – Neutron – Tetris

Page 3: OpenStack Resource Scheduling

提纲

• OpenStack中的资源调度

• OpenStack资源调度的缺陷

• OpenStack资源调度如何改进

• OpenStack资源调度的发展方向及其影响

Page 4: OpenStack Resource Scheduling

云计算技术发展趋势

• 云平台是新一代的IT资源供给的技术 – 云平台建设阶段 – 计算/网络/存储虚拟化技术 – OpenStack/CloudStack – 自服务-运营平台(云BOSS)

• 业务扩展及支撑阶段 – 混合云及容器技术 – 应用云化支撑平台(PaaS、DevOps) – 大数据与云平台融合

• 云平台运维服务阶段 – SDX – 智能化/自动化大规模分布式系统运维技术

• 资源优化、精细化管理阶段 – 融合---软硬件、计算/存储/网络 – 动态资源调度、统一资源管理DCOS

Page 5: OpenStack Resource Scheduling

分布式的资源管理

• 资源管理

–资源搜集

–资源描述

–资源规划

–资源调度

Page 6: OpenStack Resource Scheduling

分布式的资源管理

• 资源管理

–资源搜集

–资源描述

–资源规划

–资源调度

Page 7: OpenStack Resource Scheduling

OpenStack中的资源规划

• 租户 – 针对租户设置资源配额

• quota_instances

• quota_cores

• quota_ram

• quota_floating_ips

• quota_fixed_ips

• ....

– 扁平的多租户结构

– 租户之间可以资源隔离

– 租户配额的资源不能共享

租户1 租户2 租户3

• quota_instances 10 10 10

• quota_cores 10 20 30

• quota_ram 10G 20G 30G

• quota_floating_ips 10 10 10

• quota_fixed_ips 20 20 20

Page 8: OpenStack Resource Scheduling

OpenStack中的资源调度

• 虚拟机调度 – Nova调度器 – 帮助虚拟机在OpenStack集群中的挑选最优的主机来部署

• 存储卷的调度 – Cinder调度器 – 帮助存储卷在OpenStack集群中的挑选最优的主机来部署 – 类似Nova调度器,因为Cinder是从Nova剥离出来的。

• 网络的调度 – Neutron调度器

• dhcp agent scheduler • L3 agent scheduler

Page 9: OpenStack Resource Scheduling

Nova默认调度器工作流

• 搜集资源 – 从Nova数据库取得所有可调度节点的信息

• 过滤资源 – 对所有调度节点按照用户的约束条件和过滤器配置进行过滤,过滤完后就是符合用户请求的所有节点集合。

• 排序资源 – 对所有符合请求的通过过滤的节点按照用户设定的权值配置按照优先级进行排序

Page 10: OpenStack Resource Scheduling

OpenStack调度器的缺点

• 只提供最基本的初始化调度策略 – 当用户在最开始在创建虚拟机或者

存储卷的时候,可以帮助按照资源请求挑选最优的节点来部署

– 一旦部署完成后,调度器就失去了作用

– 缺乏类似于VMWare DRS的运行时调度策略

• 缺乏资源请求约束条件生命周期的管理 – 初始化约束条件执行完成后,用户

最开始的约束条件会丢失 – Scheduler hints没有保存

• 亲和/反亲和的局限性 – 只是主机级别的

• 缺乏统一的资源调度 – 所有的调度模块都是独立的,只负

责某模块具体的资源调度 • Nova调度器负责虚拟机 • Cinder调度器存储卷 • Neutron调度器负责网络

• 缺乏基于租户的灵活的资源规划 – 扁平结构的租户 – 为每个租户设定资源配额

Page 11: OpenStack Resource Scheduling

OpenStack运行时资源调度(DRS)

• OpenStack DRS – 期望OpenStack能提供类似于VMWare DRS的运行时

调度策略 • CPU/Memory负载均衡 • 节能策略 • 高可用策略 • 机器维护策略 • 其它

– 社区讨论 • 社区不同意在Nova加入这些功能 • Nova的API已经很丰富,用户可以借助第三方的监控工具

来实现这些功能 – Nagios监控,根据监控结果调用Nova API来实现运行时策略

– 新项目 • Congress (https://github.com/stackforge/congress) • Tetris (https://docs.google.com/document/d/1DMsnGxQ3P-

OwZCF3uxaUeEFaKX8LqUqmmgQ_7EVK7Y8/edit)

Page 12: OpenStack Resource Scheduling

Conditions VM_FAIL NODE_COMPROMISED NODE_UTIL_THRESHOLD : :

Actions VM_MIGRATE NODE_SHUTDOWN NODE_REBOOT : :

Energy Policy if NODE_ENERGY_CONSUMPTION _THRESHOLD_REACHED (node1.xxx.yy.com) then NODE_STOP_DEPLOY(node1.xxx.yy.com)

Availability Policy if VM_FAIL(vm1) then VM_RESTART(vm1) end

Security Policy if NODE_COMPROMISE(node2.xx.yy.com) then NODE_STOP_DEPLOY(node2.xx.yy.com) VM_MIGRATE(ALL, node2.xx.yy.com)

Optimization Policy

<Written as Python Code>

Custom Policies

POLICIES

vm_fail.py

node_ compro

mised.py

node_ util_thre shold.py

vm_migrate.py

node_ shutdown.py

node_ reboot.py

Policy Automation Engine

Enforce Policies: •Check for Conditions •Execute Actions

Input Policies

Check for Conditions

Execute Actions

nova cinder neutron

HEAT Policy

Automation Engine

ceilometer

API

nova, cinder, neutron, ceilometer

API

nova, cinder, neutron, ceilometer

API

运行时策略引擎 架构图

运行时策略引擎在 OpenStack中的位置

1

2

Gantt

https://docs.google.com/document/d/1DMsnGxQ3P-OwZCF3uxaUeEFaKX8LqUqmmgQ_7EVK7Y8/edit

Page 13: OpenStack Resource Scheduling

资源请求约束条件生命周期的管理

• 资源请求约束条件生命周期的管理 – 资源请求主要包含提交虚拟机请求时的

约束条件以及各种初始调度策略。约束条件指得是当虚拟机进行调度时,用户的一些特殊的条件,例如CPU,内存大小等等;初始调度策略主要是指创建虚拟机时的资源调度策略,例如Affinity、Anti-Affinity、Stripping、Packing等等。

– OpenStack现在不能存储资源请求的约束条件,约束条件在创建完虚拟机后就丢失了,这样会导致虚拟机在迁移的时候,可能会违反最开始的资源请求策略。

– 当用户创建完虚拟机后,将用户特定的约束条件存储下来,这样可以保证虚拟机在做迁移,resize的时候,还能遵循最开始的资源约束条件。

– https://review.openstack.org/#/c/88983/

约束条件

约束条件

数据库

Page 14: OpenStack Resource Scheduling

基于拓扑结构的调度

• 基于拓扑结构的调度策略

–主机级别的反亲和不能保证高可用性

host1 host2 host3 host4 host5 host6

rack1 rack2 rack3

Availability

VM1 VM2

Page 15: OpenStack Resource Scheduling

基于拓扑结构的调度

• 基于拓扑结构的调度策略

–主机级别的反亲和不能保证高可用性

host1 host2 host3 host4 host5 host6

rack1 rack2 rack3

Availability

VM1 VM2

Page 16: OpenStack Resource Scheduling

基于拓扑结构的调度

• 基于拓扑结构的调度策略

–主机级别的反亲和不能保证高可用性

host1 host2 host3 host4 host5 host6

rack1 rack2 rack3

Availability

VM1 VM2

Page 17: OpenStack Resource Scheduling

定制调度模块

• OpenStack调度器定制 – 很方便的和第三方的资源调度模块集成,如Mesos,Yarn

• 定制化约束条件 – OpenStack支持搜集定制化的资源

• Network bandwidth • Disk I/O

– OpenStack支持JsonFilter • ['>=', '$bandwidth', 10M/s] • ['>=', '$diskread', 30M/s]

• 定制化资源过滤器 – OpenStack支持添加新的filter

Page 18: OpenStack Resource Scheduling

层级多租户管理

• 层级的多租户管理

–层级的多租户能够更好的和企业的组织结构映射

–租户和子账户能更好的协同合作

Dept-1

ORG

Dept-2

Dept-n

Team-11

Team-12

Team-21

Team-22

Tenant-1

Tenant

Tenant-2

Tenant-n

SubTenant-11

SubTenant-12

SubTenant-21

SubTenant-22

Page 19: OpenStack Resource Scheduling

层级多租户管理

• 层级的多租户管理(kilo)

– Nova在Kilo版会加入最基本的层级多租户的支持

–只有资源独占(最简单的资源规划)

–不同租户之间不能共享资源

Dept-1:hard_limit=300,used=25,reserved=15,allocated=250

ORG:hard_limit=1000,used=100,reserved=100,allocated=700

Dept-2: hard_limit=400,used=25,reserved=25,allocated=300

Team-11:hard_limit=100,used=50,reserved=50,allocated=0

Team-12:hard_limit=150,used=25,reserved=25,allocated=0

Team-21: hard_limit=100,used=25,reserved=25,allocated=0

Team-22:hard_limit=200,used=50,reserved=50,allocated=0

Page 20: OpenStack Resource Scheduling

Kilo的多租户模式

• 租户T1和T2各独占8个资源

R

t1 t2

Total = 16

T2

T1

alloc 4

alloc 12

Futurne OpenStack

T1 owns 8

T2 owns 8

8 8

free 4

T1 gets 4

return 4

ownership policy

T2 owns 8 T2 gets 8

return 8

ownership policy

Resource Plan

Page 21: OpenStack Resource Scheduling

层级多租户管理

• 层级的多租户管理未来

–不同租户之间的资源可以借入/借出

–不同租户之间的资源可以共享

–不同时间段设置不同的资源规划

Page 22: OpenStack Resource Scheduling

多租户借入/借出模式

• 租户T1和T2各独占8 个资源

• 租户T2可以从租户T1借入4个资源

R

T1 T2

Total = 16

T2

T1

alloc 4

alloc 12 8

T1 owns 8

T2 owns 8

8 4

free 4

T1 gets 4

return 4

ownership policy

T2 owns 8 T2 gets 8

return 8

ownership policy

return 4

lent 4 to T2 borrow/lend policy

Resource Plan

Future OpenStack

Page 23: OpenStack Resource Scheduling

多租户共享模式

R

T1 T2

Total = 16

T2

T1

alloc 4

alloc 12

1:1

T1 deserves 8

T2 deserves 8

T1 uses 4

return 4

sharing policy - 1

free 4

T2 deserves T2 uses 8

return 8

sharing policy - 1

T2 uses 4

return 4

sharing policy - 2

Resource Plan

• 租户T1和T2不独占任何资

• T1和T2共享所

有资源,并且有相同的共享比例。

Future OpenStack

Page 24: OpenStack Resource Scheduling

时间窗口模式

08:00-18:00 18:00-08:00

Page 25: OpenStack Resource Scheduling

统一的资源调度

Nova Cinder •••

HEAT(Orchestration Manager)

Resource Selection

Engine(Gantt)

Capability Cache

HOT

Policy Extension

Policy Plug-in Extension

Topology Manager

Policy Automation Engine

Page 26: OpenStack Resource Scheduling

统一资源调度

tier1_policy_group:

type: IBM::Policy::Group

properties:

policies:

- type: Anti-Affinity

mode: hard

topology:

name: Availability

level: rack

tier2_policy_group:

type: IBM::Policy::Group

properties:

policies:

- type: Anti-Affinity

mode: hard

topology:

name: Availability

level: rack

relationships:

- peer: tier1_policy_group

policy:

type: Affinity

mode: hard

topology:

name: Availability

level: host …

一个应用有两个自动扩展组,两个自动扩展组之间是亲和关系;两个自动扩展组内部是反亲和关系。

Scheduler

decision

Page 27: OpenStack Resource Scheduling

OpenStack资源调度的发展方向

• Scheduler As A Service

– Gantt,可能会在M版孵化成功

– 提供一个公共的调度模块

– 为计算,存储,网络等调度资源

– 应用领域:大数据,云计算,HPC

• Policy As A Service

– Congress

– Tetris

Big Data and Analytics =

Hadoop

PaaS = Cloud

Foundry

IaaS = OpenStack

Gantt

Page 28: OpenStack Resource Scheduling

Thank You