前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【TKE】开启 CPU 静态管理策略

【TKE】开启 CPU 静态管理策略

原创
作者头像
Jokey
修改2022-11-01 19:19:43
2.1K0
修改2022-11-01 19:19:43
举报
文章被收录于专栏:云原生搬运工

背景

默认情况下,节点上的 Pod 默认共享节点 CPU 池中所有的 CPU核数, 当节点上运行了很多 CPU 密集的 Pod 时,工作负载可能会切换调度到不同的 CPU 核, 这样就导致有些工作负载的性能明显地受到 CPU 缓存亲和性以及调度延迟的影响。 对此,kubelet 提供了可选的 CPU 管理策略,可以实现某些关键 Pod 的静态绑核,避免 CPU 抢占和切换对业务带来的性能损耗。详情参考:控制节点上的 CPU 管理策略

TKE 如何开启配置

下面介绍在 TKE 中开启 CPU 静态管理策略的两种方式。

一、存量节点开启

1. 静态 CPU 策略配置

在 K8S 1.17 版本之前,可供 Pod 独占 CPU 资源数量等于节点的 CPU 总量减去通过--kube-reserved--system-reserved 参数保留的 CPU,从 1.17 版本开始,CPU保留列表可以通过 kublet 的 '--reserved-cpus' 参数显式地设置。由于 TKE 的 GA 版本 一般为偶数,所以:

  • 当 TKE 集群版本小于 1.18 时:

在节点 /etc/kubernetes/kubelet 文件中添加如下配置:

代码语言:txt
复制
...
CPU_MANAGER_POLICY="--cpu-manager-policy=static"
KUBE_RESERVED="--kube-reserved=cpu=xxx,memory=xxx"
SYSTEM_RESERVED="--system-reserved=cpu=xxx,memory=xxx"
...

其中, 给 Pods 独占 CPU 可用的资源数量等于节点的 CPU 总量减去通过 --kube-reserved--system-reserved 参数保留的 CPU,如果保留 CPU 数量设置非整数则向上取整,比如 250m,向上取整就是保留 1 核。

由于 TKE 的 systemd 启动参数环境变量是硬编码,所以这里需要再添加下 kubelet 的启动参数环境变量 CPU_MANAGER_POLICYSYSTEM_RESERVEDKUBE_RESERVED 变量默认已经存在了):

修改 kubelet 的 systemd 启动文件 /usr/lib/systemd/system/kubelet.service, 启动参数添加如下环境变量:

代码语言:txt
复制
...
ExecStart=/usr/bin/kubelet ... ${CPU_MANAGER_POLICY} ${KUBE_RESERVED} ${SYSTEM_RESERVED} ...
...
  • 当TKE 集群版本大于等于1.18 :

在节点 /etc/kubernetes/kubelet 文件中添加如下配置:

代码语言:txt
复制
...
CPU_MANAGER_POLICY="--cpu-manager-policy=static"
RESERVED_CPUS="--reserved-cpus=xxx"
...

--reserved-cpus 参数为操作系统守护程序和 Kubernetes 系统守护程序预留一组明确指定编号的 CPU

,如"--reserved-cpus=0,1,2,3",或 CPU 范围列表 "--reserved-cpus=0-3" 都是可以的。

同样修改 kubelet 的 systemd 启动文件 /usr/lib/systemd/system/kubelet.service, 启动参数添加如下环境变量:

代码语言:txt
复制
...
ExecStart=/usr/bin/kubelet ... ${CPU_MANAGER_POLICY} ${RESERVED_CPUS} ...
...

2. 策略配置生效

接下来驱逐节点上的 Pods,并通过删除 kubelet 根目录中的状态文件 cpu_manager_state 来手动重置 CPU 管理器:

  1. 在 TKE 控制台 【节点列表】-> 【更多】 点【驱逐】选项或手动执行驱逐命令。
  2. 在TKE 节点中执行删除 cpu_manager_state 文件并重启 kubelet 服务:
代码语言:txt
复制
rm /var/lib/kubelet/cpu_manager_state
systemctl  daemon-reload
systemctl  restart kubelet

二、新加节点开启(推荐)

直接通过自定义 kubelet 参数的方式完成上述的参数添加,策略配置逻辑和上述存量节点(第一步)描述一致,但目前自定义参数需要开白支持,可联系售后同学帮忙开启即可。

总结

上述内容仅描述了如何在 TKE 中开启静态CPU 管理策略, 关于工作负载的 CPU 静态绑核如何配置和注意事项,请参阅 static 策略

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • TKE 如何开启配置
  • 一、存量节点开启
    • 1. 静态 CPU 策略配置
      • 2. 策略配置生效
      • 二、新加节点开启(推荐)
      • 总结
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档