云服务器内容精选

  • 使用场景 默认情况下,kubelet使用 CFS 配额 来执行Pod的CPU约束。 当节点上运行了很多CPU密集的Pod时,工作负载可能会迁移到不同的CPU核, 这取决于调度时Pod是否被扼制,以及哪些CPU核是可用的。许多应用对这种迁移不敏感,因此无需任何干预即可正常工作。有些应用对CPU敏感,CPU敏感型应用有如下特点。 对CPU throttling 敏感 对上下文切换敏感 对处理器缓存未命中敏感 对跨Socket内存访问敏感 期望运行在同一物理CPU的超线程 如果您的应用有以上其中一个特点,可以利用Kubernetes中提供的CPU管理策略为应用分配独占的CPU核(即CPU绑核),提升应用性能,减少应用的调度延迟。CPU manager会优先在一个Socket上分配资源,也会优先分配完整的物理核,避免一些干扰。
  • 为Pod设置独占CPU Pod设置独占CPU(即CPU绑核)有如下几点要求: 节点上开启静态(static)CPU管理策略,具体方法请参见开启CPU管理策略。 Pod的定义里都要设置requests和limits参数,requests和limits必须为整数,且数值一致。 如果有init container需要设置独占CPU,init container的requests参数建议与业务容器设置的requests参数一致(避免业务容器未继承init container的CPU分配结果,导致CPU manager多预留一部分CPU)。更多信息请参见App Containers can't inherit Init Containers CPUs - CPU Manager Static Policy。 在使用时您可以利用调度策略(亲和与反亲和)将如上配置的Pod调度到开启静态(static)CPU管理策略的节点上,这样就能够达到独占CPU的效果。 设置独占CPU的YAML示例如下: kind: Deployment apiVersion: apps/v1 metadata: name: test spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: containers: - name: container-1 image: nginx:alpine resources: requests: cpu: 2 # 必须为整数,且需要与limits中一致 memory: 2048Mi limits: cpu: 2 # 必须为整数,且需要与requests中一致 memory: 2048Mi imagePullSecrets: - name: default-secret