首页 > 系统相关 >k8s节点升级cpu与内存后,静态pod无法启动-cpuManagerPolicy

k8s节点升级cpu与内存后,静态pod无法启动-cpuManagerPolicy

时间:2022-11-03 09:11:06浏览次数:64  
标签:管理器 cpuManagerPolicy CPU kubelet manager Pod pod cpu

简述: 最近k8s master内存压力比较大, pod数量越来越多, 打算对cpu 内存进行扩容

扩容有 cpu 4C/8G, 变更成8C/16G, 通过升级后,发现apiserver 静态pod无法启动,

在kubelet 配置文件中发现 --cpu-manager-policy=static配置, 删除后,重启kubelet出现

could not restore state from checkpoint: configured policy "static" differs from state
checkpoint policy "none", please drain this node and delete the CPU manager
checkpoint file "/var/lib/kubelet/cpu_manager_state"
before restarting Kubelet

 

发现 /var/lib/kubelet/cpu_manager_state 中指定cpu核数[0-3]. 通过官网查询具体详情

https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/cpu-management-policies/

控制节点上的 CPU 管理策略

按照设计,Kubernetes 对 Pod 执行相关的很多方面进行了抽象,使得用户不必关心。 然而,为了正常运行,有些工作负载要求在延迟和/或性能方面有更强的保证。 为此,kubelet 提供方法来实现更复杂的负载放置策略,同时保持抽象,避免显式的放置指令。

 

CPU 管理策略

默认情况下,kubelet 使用 CFS 配额 来执行 Pod 的 CPU 约束。 当节点上运行了很多 CPU 密集的 Pod 时,工作负载可能会迁移到不同的 CPU 核, 这取决于调度时 Pod 是否被扼制,以及哪些 CPU 核是可用的。 许多工作负载对这种迁移不敏感,因此无需任何干预即可正常工作。

然而,有些工作负载的性能明显地受到 CPU 缓存亲和性以及调度延迟的影响。 对此,kubelet 提供了可选的 CPU 管理策略,来确定节点上的一些分配偏好。

 

配置

CPU 管理策略通过 kubelet 参数 --cpu-manager-policy 或 KubeletConfiguration 中的 cpuManagerPolicy 字段来指定。 支持两种策略:

  • none: 默认策略,表示现有的调度行为。
  • static: 允许为节点上具有某些资源特征的 Pod 赋予增强的 CPU 亲和性和独占性。

CPU 管理器定期通过 CRI 写入资源更新,以保证内存中 CPU 分配与 cgroupfs 一致。 同步频率通过新增的 Kubelet 配置参数 --cpu-manager-reconcile-period 来设置。 如果不指定,默认与 --node-status-update-frequency 的周期相同。

Static 策略的行为可以使用 --cpu-manager-policy-options 参数来微调。 该参数采用一个逗号分隔的 key=value 策略选项列表。 此特性可以通过 CPUManagerPolicyOptions 特性门控来完全禁用。

策略选项分为两组:alpha 质量(默认隐藏)和 beta 质量(默认可见)。 这些组分别由 CPUManagerPolicyAlphaOptions 和 CPUManagerPolicyBetaOptions 特性门控来管控。 不同于 Kubernetes 标准,这里是由这些特性门控来管控选项组,因为为每个单独选项都添加一个特性门控过于繁琐。

更改 CPU 管理器策略

由于 CPU 管理器策略只能在 kubelet 生成新 Pod 时应用,所以简单地从 "none" 更改为 "static" 将不会对现有的 Pod 起作用。 因此,为了正确更改节点上的 CPU 管理器策略,请执行以下步骤:

驱逐节点。
停止 kubelet。
删除旧的 CPU 管理器状态文件。该文件的路径默认为 /var/lib/kubelet/cpu_manager_state。 这将清除 CPUManager 维护的状态,以便新策略设置的 cpu-sets 不会与之冲突。
编辑 kubelet 配置以将 CPU 管理器策略更改为所需的值。
启动 kubelet。

 

标签:管理器,cpuManagerPolicy,CPU,kubelet,manager,Pod,pod,cpu
From: https://www.cnblogs.com/fengjian2016/p/16853273.html

相关文章

  • Pod 终止流程
    Pod终止流程我们先了解下容器在Kubernetes环境中的终止流程:Pod被删除,状态变为 Terminating。从API层面看就是Podmetadata中的deletionTimestamp字段会被......
  • 既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字?
    缓存一致性协议是保证“硬件CPU的cache”和“硬件内存”之间数据的一致性,更详细说也就是缓存一致性协议是保证“物理计算机中的硬件CPUcache”和“物理计算机中的......
  • kubectl get pod -w
    -w,--watch=false:Afterlisting/gettingtherequestedobject,watchforchanges.Uninitializedobjectsareexcludedifnoobjectnameisprovided.--w......
  • pod容忍(toleration)
    污点就是拒绝,容忍就是忽略,Node通过污点拒绝pod调度上去,Pod通过容忍忽略拒绝apiVersion:apps/v1kind:Deploymentmetadata:name:my-deploymentnamespace:test......
  • 静态POD
    前言:虽然学习了一段时间的k8s的各种资源,但是静态POD一直停留在概念层面,不知道它有什么用。静态POD下面是摘录自《kubernetes权威指南》上关于静态POD的描述信息。定义:静......
  • pod(七):静态pod
    目录一.系统环境二.前言三.静态pod3.1何为静态pod3.2创建静态pod3.2.1使用--pod-manifest-path指定静态pod目录3.2.2静态pod默认目录/etc/kubernetes/manifests一.系......
  • pod亲和性(Affinity)清单
    apiVersion:apps/v1kind:Deploymentmetadata:name:my-deploymentnamespace:testspec:replicas:1selector:matchLabels:environment:stg......
  • 资源清单-pod进阶
    资源清单-pod进阶资源清单有5个顶级的字段组成:apiVersion、kind、metadata、spec、status。apiVersion:group/apiversion#如果没有给定group名称,那么默认为core,可......
  • pod(六):初始化容器Init Containers
    目录一.系统环境二.前言三.初始化容器InitContainers3.1何为初始化容器InitContainers3.2InitContainers与普通容器的不同之处3.3Init容器优点3.4创建初始化容器In......
  • Centos下查看cpu核数
    1.概念物理CPU:实际Server中插槽上的CPU个数。物理cpu数量:可以数不重复的physicalid有几个。2.逻辑CPULinux用户对/proc/cpuinfo这个文件肯定不陌生.它是用来存......