kerbernets 中CPU 亲和性实现
来源:互联网 发布:网络上很红的长发男模 编辑:程序博客网 时间:2024/06/08 05:11
kerbernets 中CPU亲和性是1.8中的alpha 特性.这个特性主要功能是可以控制启动容器在cpu核数控制和具体运行在哪个核上。
这个特性主要修改的代码在pkg/kubelet/cm 中。
首先在cmd/kubelet/app/server.go中启动容器管理器ContainerManager。
kubeDeps.ContainerManager, err = cm.NewContainerManager(
而在启动容器管理器时候。初始CPU管理器cpumanager。
pkg/kubelet/cm/container_manager_linux.go:197:func NewContainerManager(mountUtil mount.Interface, cadvisorInter// Initialize CPU managerif utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) {cm.cpuManager, err = cpumanager.NewManager(nodeConfig.ExperimentalCPUManagerPolicy,nodeConfig.ExperimentalCPUManagerReconcilePeriod,machineInfo,cm.GetNodeAllocatableReservation(),nodeConfig.KubeletRootDir,)if err != nil {glog.Errorf("failed to initialize cpu manager: %v", err)return nil, err}}
当kubelet启动或者销毁容器前,容器生命周期实现都会调用CPU管理器来管理CPU相关特性。
pkg/kubelet/cm/internal_container_lifecycle.gofunc (i *internalContainerLifecycleImpl) PreStartContainer(pod *v1.Pod, container *v1.Container, containerID string) error {if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) {return i.cpuManager.AddContainer(pod, container, containerID)}return nil}func (i *internalContainerLifecycleImpl) PreStopContainer(containerID string) error {if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) {return i.cpuManager.RemoveContainer(containerID)}return nil}func (i *internalContainerLifecycleImpl) PostStopContainer(containerID string) error {if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) {return i.cpuManager.RemoveContainer(containerID)}return nil}
其中添加容器到CPU管理器
err = m.updateContainerCPUSet(containerID, cpus)m.containerRuntime.UpdateContainerResources(containerID,&runtimeapi.LinuxContainerResources{CpusetCpus: cpus.String(),})}
调用docker 客户端修改容器资源
pkg/kubelet/dockershim/docker_container.gofunc (ds *dockerService) UpdateContainerResources(containerID string, resources *runtimeapi.LinuxContainerResources) error {updateConfig := dockercontainer.UpdateConfig{Resources: dockercontainer.Resources{CPUPeriod: resources.CpuPeriod,CPUQuota: resources.CpuQuota,CPUShares: resources.CpuShares,Memory: resources.MemoryLimitInBytes,CpusetCpus: resources.CpusetCpus,CpusetMems: resources.CpusetMems,},}err := ds.client.UpdateContainerResources(containerID, updateConfig)//最终调用docker API post更新数据if err != nil {return fmt.Errorf("failed to update container %q: %v", containerID, err)}return nil}
阅读全文
0 0
- kerbernets 中CPU 亲和性实现
- Linux中CPU亲和性(affinity)
- CPU亲和性
- CPU亲和性
- CPU亲和性
- nginx中CPU亲和性源码解读
- nginx中CPU亲和性源码解读
- cpu亲和性(affinity)以及位数组内核的实现.
- Linux CPU 亲和性
- SylixOS设置CPU亲和性
- cpu独占和亲和性
- cpu绑定和cpu亲和性
- cpu绑定和cpu亲和性
- CPU绑定和CPU亲和性
- cpu绑定和cpu亲和性
- dpdk & cpu affinity(cpu亲和性)
- taskset设置进程CPU亲和性
- IRQ_BALANCE的CPU亲和性设置
- commons-lang常用API简介
- 剑指offer---二进制中1的个数(10)
- Spring整合单机版SolrJ
- MultipartFile简单Junit测试方法
- iptables的基本规则
- kerbernets 中CPU 亲和性实现
- QT中字符串的相关使用
- HttpClient4.1入门教程-利用官方例子讲解httpClient4.1的用法
- 类的成员初始化
- 新手村 Boss战-入门综合练习1 陶陶摘苹果(升级版)
- 数据结构实验之图论七:驴友计划(Floyd)
- 锁表定位和处理
- Android探索之旅(第二十六篇)给自己来个高逼格编程规范
- SVN不完全指南(介绍)