searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

从Topology Manager到拓扑感知调度

2023-07-24 03:02:55
62
0
 

1. 从Topology Manager说起

 

1.1 Topology Manager简介及原理

Topology Manager是kubelet的特性,Kubernetes 1.18版本已经默认开启,解决了NUMA架构CPU对齐的问题。

该特性通过TopologyHint(拓扑提示)这个核心结构体,告诉kubelet该节点是否是优先考虑的,如果不是,则拒绝这个Pod,Pod状态更新为Terminated。拓扑提示的结构体如下

type TopologyHint struct {
    NUMANodeAffinity bitmask.BitMask
    Preferred bool
}
 

NUMANodeAffinity是基于bitmask表示的numa节点组合,如果node节点有两个numa节点,则有3种组合情况,用bitmask表示为[01],[10],[11],分别代表numa node1、numa node2、numa node1+node2。

Preferred 则表示该组合是否推荐给该Pod。

比如节点有两个numa node,每个node上2个cpu,pod请求2个cpu,则以上3个组合分别对应如下:

1)

TopologyHint.NUMANodeAffinity = [01]

TopologyHint.Preferred = true

表示从numa 0分配2个cpu给Pod,具有最少numa node,因此推荐;

2)

TopologyHint.NUMANodeAffinity = [10]

TopologyHint.Preferred = true

表示从numa 1分配2个cpu给Pod,具有最少numa node,因此推荐;

3)

TopologyHint.NUMANodeAffinity = [11]

TopologyHint.Preferred = false

表示从numa 0、1各分配1个cpu给Pod, 需要两个numa node,因此不推荐;

如果numa node1 和 node1各只剩下一个cpu,那么要满足该Pod的cpu数量请求,不得不占有两个numa node,此时,会根据kubelet配置到启动参数来决定是否推荐

 --topology-manager-policy string   
[Valid values: single-numa-node, best-effort, restricted] (default "restricted")

 

如上参数,如果配置的value为single-numa-node,则会拒绝该Pod。各个策略的含义如下

其中最后一个要求严格的numa对齐,也就是必须保证所有cpu都分配在同一个numa node

● none:不开启Topology Manager

● best-effort: 尽可能的根据TopologyHint找到合适的组合,没找到也可以。

● restricted:根据TopologyHint找到合适的组合,没找到则拒绝Pod。

● single-numa-node:根据TopologyHint找到合适的组合,并且必须只占用一个numa node,没找到则拒绝Pod。

 

1.2. Topology Manager的局限性

Topology Manager的实现,最大的弊端是调度器并不能感知到节点的numa拓扑信息,调度器任务节点资源比如cpu数量符合Pod的要求,但是kubelet根据Topology Manager判断不符合topology策略,会拒绝该Pod,导致Pod无法精准被调度到合适的Node节点。

社区曾经引入NodeResourceTopology CRD API (已经合入staging),让内置的kube-scheduler感知节点资源拓扑信息,但是后来考虑到该解决方案需要将CRD API 转换为build-in API,在实现机制上会有问题,所以NodeResourceTopology CRD API又从staging去掉了。

 

2. 基于调度的NUMA拓扑感知

2.1 原理简介

当前,解决Topology Manager弊端的方式,是通过out-of-tree的scheduler(基于scheduler framework)和Node feature Discovery。

其实现机制为,Node Feature Discovery采集节点上的拓扑信息,并更新到CRD NodeResourceTopology,拓扑感知调度器读取CRD NodeResourceTopology,达到精准筛选节点的目的。

2.2 服务部署及使用

1)Node Feature Discovery(NFD)

export NFD_NS=node-feature-discovery
helm repo add nfd https://kubernetes-sigs.github.io/node-feature-discovery/charts
helm repo update
helm install nfd/node-feature-discovery --namespace $NFD_NS --create-namespace --generate-name

 

2)Topology Aware Scheduling

$ git clone git@github.com:kubernetes-sigs/scheduler-plugins.git
$ cd scheduler-plugins/manifests/install/charts
$ helm install scheduler-plugins as-a-second-scheduler/ --create-namespace --namespace scheduler-plugins

 

3)使用方式

在创建workload的时候,调度器名称选择上述调度器,即可自动实现基于调度器的numa拓扑感知能力。

0条评论
0 / 1000
kinderyj
19文章数
0粉丝数
kinderyj
19 文章 | 0 粉丝
原创

从Topology Manager到拓扑感知调度

2023-07-24 03:02:55
62
0
 

1. 从Topology Manager说起

 

1.1 Topology Manager简介及原理

Topology Manager是kubelet的特性,Kubernetes 1.18版本已经默认开启,解决了NUMA架构CPU对齐的问题。

该特性通过TopologyHint(拓扑提示)这个核心结构体,告诉kubelet该节点是否是优先考虑的,如果不是,则拒绝这个Pod,Pod状态更新为Terminated。拓扑提示的结构体如下

type TopologyHint struct {
    NUMANodeAffinity bitmask.BitMask
    Preferred bool
}
 

NUMANodeAffinity是基于bitmask表示的numa节点组合,如果node节点有两个numa节点,则有3种组合情况,用bitmask表示为[01],[10],[11],分别代表numa node1、numa node2、numa node1+node2。

Preferred 则表示该组合是否推荐给该Pod。

比如节点有两个numa node,每个node上2个cpu,pod请求2个cpu,则以上3个组合分别对应如下:

1)

TopologyHint.NUMANodeAffinity = [01]

TopologyHint.Preferred = true

表示从numa 0分配2个cpu给Pod,具有最少numa node,因此推荐;

2)

TopologyHint.NUMANodeAffinity = [10]

TopologyHint.Preferred = true

表示从numa 1分配2个cpu给Pod,具有最少numa node,因此推荐;

3)

TopologyHint.NUMANodeAffinity = [11]

TopologyHint.Preferred = false

表示从numa 0、1各分配1个cpu给Pod, 需要两个numa node,因此不推荐;

如果numa node1 和 node1各只剩下一个cpu,那么要满足该Pod的cpu数量请求,不得不占有两个numa node,此时,会根据kubelet配置到启动参数来决定是否推荐

 --topology-manager-policy string   
[Valid values: single-numa-node, best-effort, restricted] (default "restricted")

 

如上参数,如果配置的value为single-numa-node,则会拒绝该Pod。各个策略的含义如下

其中最后一个要求严格的numa对齐,也就是必须保证所有cpu都分配在同一个numa node

● none:不开启Topology Manager

● best-effort: 尽可能的根据TopologyHint找到合适的组合,没找到也可以。

● restricted:根据TopologyHint找到合适的组合,没找到则拒绝Pod。

● single-numa-node:根据TopologyHint找到合适的组合,并且必须只占用一个numa node,没找到则拒绝Pod。

 

1.2. Topology Manager的局限性

Topology Manager的实现,最大的弊端是调度器并不能感知到节点的numa拓扑信息,调度器任务节点资源比如cpu数量符合Pod的要求,但是kubelet根据Topology Manager判断不符合topology策略,会拒绝该Pod,导致Pod无法精准被调度到合适的Node节点。

社区曾经引入NodeResourceTopology CRD API (已经合入staging),让内置的kube-scheduler感知节点资源拓扑信息,但是后来考虑到该解决方案需要将CRD API 转换为build-in API,在实现机制上会有问题,所以NodeResourceTopology CRD API又从staging去掉了。

 

2. 基于调度的NUMA拓扑感知

2.1 原理简介

当前,解决Topology Manager弊端的方式,是通过out-of-tree的scheduler(基于scheduler framework)和Node feature Discovery。

其实现机制为,Node Feature Discovery采集节点上的拓扑信息,并更新到CRD NodeResourceTopology,拓扑感知调度器读取CRD NodeResourceTopology,达到精准筛选节点的目的。

2.2 服务部署及使用

1)Node Feature Discovery(NFD)

export NFD_NS=node-feature-discovery
helm repo add nfd https://kubernetes-sigs.github.io/node-feature-discovery/charts
helm repo update
helm install nfd/node-feature-discovery --namespace $NFD_NS --create-namespace --generate-name

 

2)Topology Aware Scheduling

$ git clone git@github.com:kubernetes-sigs/scheduler-plugins.git
$ cd scheduler-plugins/manifests/install/charts
$ helm install scheduler-plugins as-a-second-scheduler/ --create-namespace --namespace scheduler-plugins

 

3)使用方式

在创建workload的时候,调度器名称选择上述调度器,即可自动实现基于调度器的numa拓扑感知能力。

文章来自个人专栏
云原生Kubernetes
19 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1