首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Kubernetes限制范围
Kubernetes资源配额
Kubernetes进程ID约束与预留
Kubernetes节点资源管理器
Kubernetes调度器
Kubernetes将Pod指派给节点
Kubernetes Pod开销
Kubernetes Pod拓扑分布约束
Kubernetes污点和容忍度
Kubernetes调度框架
Kubernetes调度器性能调优
Kubernetes扩展资源的资源装箱
Kubernetes Pod优先级和抢占
Kubernetes节点压力驱逐
Kubernetes API发起的驱逐
Kubernetes管理资源
Kubernetes集群网络系统
Kubernetes日志架构
Kubernetes系统组件指标
Kubernetes系统日志
Kubernetes系统组件追踪
Kubernetes中的代理
Kubernetes API优先级和公平性
Kubernetes安装扩展
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(四)
小册名称:Kubernetes中文教程(四)
在 kube-scheduler 的[调度插件] `NodeResourcesFit` 中存在两种支持资源装箱(bin packing)的策略:`MostAllocated` 和 `RequestedToCapacityRatio`。 ## 使用 MostAllocated 策略启用资源装箱 `MostAllocated` 策略基于资源的利用率来为节点计分,优选分配比率较高的节点。 针对每种资源类型,你可以设置一个权重值以改变其对节点得分的影响。 要为插件 `NodeResourcesFit` 设置 `MostAllocated` 策略, 可以使用一个类似于下面这样的[调度器配置]: ```yaml apiVersion: kubescheduler.config.k8s.io/v1beta3 kind: KubeSchedulerConfiguration profiles: - pluginConfig: - args: scoringStrategy: resources: - name: cpu weight: 1 - name: memory weight: 1 - name: intel.com/foo weight: 3 - name: intel.com/bar weight: 3 type: MostAllocated name: NodeResourcesFit ``` 要进一步了解其它参数及其默认配置,请参阅 [`NodeResourcesFitArgs`] 的 API 文档。 ## 使用 RequestedToCapacityRatio 策略来启用资源装箱 `RequestedToCapacityRatio` 策略允许用户基于请求值与容量的比率,针对参与节点计分的每类资源设置权重。 这一策略使得用户可以使用合适的参数来对扩展资源执行装箱操作,进而提升大规模集群中稀有资源的利用率。 此策略根据所分配资源的一个配置函数来评价节点。 `NodeResourcesFit` 计分函数中的 `RequestedToCapacityRatio` 可以通过字段 [scoringStrategy] 来控制。 在 `scoringStrategy` 字段中,你可以配置两个参数:`requestedToCapacityRatio` 和 `resources`。`requestedToCapacityRatio` 参数中的 `shape` 设置使得用户能够调整函数的算法,基于 `utilization` 和 `score` 值计算最少请求或最多请求。 `resources` 参数中包含计分过程中需要考虑的资源的 `name`,以及用来设置每种资源权重的 `weight`。 下面是一个配置示例,使用 `requestedToCapacityRatio` 字段为扩展资源 `intel.com/foo` 和 `intel.com/bar` 设置装箱行为: ```yaml apiVersion: kubescheduler.config.k8s.io/v1beta3 kind: KubeSchedulerConfiguration profiles: - pluginConfig: - args: scoringStrategy: resources: - name: intel.com/foo weight: 3 - name: intel.com/bar weight: 3 requestedToCapacityRatio: shape: - utilization: 0 score: 0 - utilization: 100 score: 10 type: RequestedToCapacityRatio name: NodeResourcesFit ``` 使用 kube-scheduler 标志 `--config=/path/to/config/file` 引用 `KubeSchedulerConfiguration` 文件,可以将配置传递给调度器。 要进一步了解其它参数及其默认配置,可以参阅 [`NodeResourcesFitArgs`] 的 API 文档。 ### 调整计分函数 `shape` 用于指定 `RequestedToCapacityRatio` 函数的行为。 ```yaml shape: - utilization: 0 score: 0 - utilization: 100 score: 10 ``` 上面的参数在 `utilization` 为 0% 时给节点评分为 0,在 `utilization` 为 100% 时给节点评分为 10,因此启用了装箱行为。 要启用最少请求(least requested)模式,必须按如下方式反转得分值。 ```yaml shape: - utilization: 0 score: 10 - utilization: 100 score: 0 ``` `resources` 是一个可选参数,默认值为: ```yaml resources: - name: cpu weight: 1 - name: memory weight: 1 ``` 它可以像下面这样用来添加扩展资源: ```yaml resources: - name: intel.com/foo weight: 5 - name: cpu weight: 3 - name: memory weight: 1 ``` `weight` 参数是可选的,如果未指定,则设置为 1。 同时,`weight` 不能设置为负值。 ### 节点容量分配的评分 本节适用于希望了解此功能的内部细节的人员。 以下是如何针对给定的一组值来计算节点得分的示例。 请求的资源: ``` intel.com/foo : 2 memory: 256MB cpu: 2 ``` 资源权重: ``` intel.com/foo : 5 memory: 1 cpu: 3 ``` ``` FunctionShapePoint ``` 节点 1 配置: ``` 可用: intel.com/foo: 4 memory: 1 GB cpu: 8 已用: intel.com/foo: 1 memory: 256MB cpu: 1 ``` 节点得分: ``` intel.com/foo = resourceScoringFunction,4) = *100/4) = = 75 # requested + used = 75% * available = rawScoringFunction = 7 # floor memory = resourceScoringFunction,1024) = *100/1024)) = 50 # requested + used = 50% * available = rawScoringFunction = 5 # floor cpu = resourceScoringFunction,8) = *100/8)) = 37.5 # requested + used = 37.5% * available = rawScoringFunction = 3 # floor NodeScore = + + / = 5 ``` 节点 2 配置: ``` 可用: intel.com/foo: 8 memory: 1GB cpu: 8 已用: intel.com/foo: 2 memory: 512MB cpu: 6 ``` 节点得分: ``` intel.com/foo = resourceScoringFunction,8) = *100/8) = = 50 = rawScoringFunction = 5 memory = resourceScoringFunction,1024) = *100/1024)) = 75 = rawScoringFunction = 7 cpu = resourceScoringFunction,8) = *100/8)) = 100 = rawScoringFunction = 10 NodeScore = + + / = 7 ``` ## - 继续阅读[调度器框架] - 继续阅读[调度器配置]
上一篇:
Kubernetes调度器性能调优
下一篇:
Kubernetes Pod优先级和抢占
该分类下的相关小册推荐:
Kubernets合辑2-部署Ingress
Kubernets合辑5-Pod控制器
Kubernetes中文教程(二)
Kubernets合辑8-权限控制
Kubernets合辑15-持续部署
Kubernets合辑12-配置中心
云原生-K8S入门实战
Kubernetes中文教程(一)
Kubernets合辑11-持续集成
Kubernets合辑9-资源约束
Kubernets合辑3-kubernetes介绍
Kubernets合辑10-网络