2-核心组件运行机制
2.核心组件运行机制
40、简述Kubernetes kubelet的作用
在Kubernetes集群中,在每个Node(又称Worker)上都会启动一个kubelet服务进程。该进程用于处理Master下发到本节点的任务,管理Pod及Pod中的容器。每个kubelet进程都会在API Server上注册节点自身的信息,定期向Master汇报节点资源的使用情况,并通过cAdvisor监控容器和节点资源。
41、简述Kubernetes kubelet监控Worker节点资源是使用什么组件来实现的
kubelet使用cAdvisor对worker节点资源进行监控。在Kubernetes系统中,cAdvisor已被默认集成到kubelet组件内,当kubelet服务启动时,它会自动启动cAdvisor服务,然后cAdvisor会实时采集所在节点的性能指标及在节点上运行的容器的性能指标。
Scheduler
工作原理与运行机制
Kubernetes Scheduler是负责Pod调度的重要功能模块,Kubernetes Scheduler在整个系统中承担了“承上启下”的重要功能,“承上”是指它负责接收Controller Manager创建的新Pod,为其调度至目标Node;“启下”是指调度完成后,目标Node上的kubelet服务进程接管后继工作,负责Pod接下来生命周期。
Kubernetes Scheduler的作用是将待调度的Pod(API新创建的Pod、Controller Manager为补足副本而创建的Pod等)按照特定的调度算法和调度策略绑定(Binding)到集群中某个合适的Node上,并将绑定信息写入etcd中。在整个调度过程中涉及三个对象,分别是待调度Pod列表、可用Node列表,以及调度算法和策略。简单地说,就是通过调度算法为待调度Pod列表中的每个Pod从Node列表中选择一个最适合的Node。
Kubernetes Scheduler通过调度算法调度为待调度Pod列表中的每个Pod,从Node列表中选择一个最适合的Node来实现Pod的调度。随后,目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件,然后获取对应的Pod清单,下载Image镜像并启动容器。
调度过程
* (1)预选调度过程,即遍历所有目标Node,筛选出符合要求的候选节点。为此,Kubernetes内置了多种预选策略(xxx Predicates)供用户选择。
* (2)确定最优节点,在第1步的基础上,采用优选策略(xxxPriority)计算出每个候选节点的积分,积分最高者胜出。
* Kubernetes Scheduler的调度流程是通过插件方式加载的“调度算法提供者”(AlgorithmProvider)具体实现的。一个AlgorithmProvider其实就是包括了一组预选策略与一组优先选择策略的结构体,注册AlgorithmProvider的函数如下:
func RegisterAlgorithmProvider(name string, predicateKeys, priorityKeys util.StringSet)
* 三个参数:name string为算法名;predicateKeys为算法用到的预选策略集合;priorityKeys为算法用到的优选策略集合
* Scheduler中可用的预选策略包含:NoDiskConflict、PodFitsResources、PodSelectorMatches、PodFitsHost、CheckNodeLabelPresence、CheckServiceAffinity和PodFitsPorts策略等。
* AlgorithmProvider默认加载的预选策略包括:PodFitsPorts(PodFitsPorts)、PodFitsResources(PodFitsResources)、NoDiskConflict(NoDiskConflict)、MatchNodeSelector(PodSelectorMatches)和HostName(PodFitsHost),即每个节点只有通过前面提及的5个默认预选策略后,才能初步被选中,进入下一个流程。
* Scheduler中的优选策略包含:LeastRequestedPriority、CalculateNodeLabelPriority和BalancedResourceAllocation等。每个节点通过优先选择策略时都会算出一个得分,计算各项得分,最终选出得分值最大的节点作为优选的结果(也是调度算法的结果)。
预选策略详解
1、NoDiskConflict
* 判断备选Pod的gcePersistentDisk或AWSElasticBlockStore和备选的节点中已存在的Pod是否存在冲突。检测过程如下。
* (1)首先,读取备选Pod的所有Volume的信息(即pod.Spec.Volumes),对每个Volume执行以下步骤进行冲突检测。
* (2)如果该Volume是gcePersistentDisk,则将Volume和备选节点上的所有Pod的每个Volume都进行比较,如果发现相同的gcePersistentDisk,则返回false,表明存在磁盘冲突,检查结束,反馈给调度器该备选节点不适合作为备选Pod;如果该Volume是AWSElasticBlockStore,则将Volume和备选节点上的所有Pod的每个Volume都进行比较,如果发现相同的AWSElasticBlockStore,则返回false,表明存在磁盘冲突,检查结束,反馈给调度器该备选节点不适合备选Pod。
* (3)如果检查完备选Pod的所有Volume均未发现冲突,则返回true,表明不存在磁盘冲突,反馈给调度器该备选节点适合备选Pod。
2、PodFitsResources
* 判断备选节点的资源是否满足备选Pod的需求,检测过程如下。
* (1)计算待调度Pod和节点中已存在Pod的所有容器的需求资源(内存和CPU)的总和。
* (2)获得备选节点的状态信息,其中包含节点的资源信息。
* (3)如果待调度Pod和节点中已存在Pod的所有容器的需求资源(内存和CPU)的总和,超出了备选节点拥有的资源,则返回false,表明备选节点不适合待调度Pod,否则返回true,表明备选节点适合待调度Pod。
3、PodSelectorMatches
* 判断备选节点是否包含待调度Pod的标签选择器指定的标签。
* (1)如果Pod没有指定spec.nodeSelector标签选择器,则返回true。
* (2)如果Pod指定了spec.nodeSelector标签选择器,则需要获得备选节点的标签信息,并判断备选节点是否包含待调度Pod的标签选择器(spec.nodeSelector)所指定的标签,如果包含,则返回true,否则返回false。
4、PodFitsHost
* 判断待调度Pod的spec.nodeName域所指定的节点名称和备选节点的名称是否一致,如果一致,则返回true,否则返回false。
5、CheckNodeLabelPresence
* 如果用户在配置文件中指定了该策略,则Scheduler会通过RegisterCustomFitPredicate方法注册该策略。
* 该策略用于判断策略列出的标签在备选节点中存在时,是否选择该备选节点。
* (1)读取备选节点的标签列表信息。
* (2)如果策略配置的presence值为false,且策略配置的标签列表存在于备选节点的标签列表中,则返回false,否则返回true;如果策略配置的presence值为true,且策略配置的标签列表不存在于备选节点的标签列表中,则返回false,否则返回true。
6、CheckServiceAffinity
* 如果用户在配置文件中指定了该策略,则Scheduler会通过RegisterCustomFitPredicate方法注册该策略。
* 该策略用于判断备选节点是否包含策略指定的标签,或包含和待调度Pod在相同Service和Namespace下的Pod所在节点的标签列表。如果存在,则返回true,否则返回false。
7、PodFitsPorts
* 判断待调度Pod所用的端口列表中的端口是否在备选节点中已被占用,如果被占用,则返回false,否则返回true。
优选策略详解
LeastRequestedPriority
* 该优选策略用于从备选节点列表中选出资源消耗最小的节点。
* (1)计算出所有备选节点上运行的Pod和待调度Pod的CPU占用量totalMilliCPU。
* (2)计算出所有备选节点上运行的Pod和待调度Pod的内存占用量totalMemory。
* (3)计算每个节点的得分,计算规则大致如下,其中,NodeCpuCapacity为节点CPU计算能力,NodeMemoryCapacity为节点内存大小:
2、CalculateNodeLabelPriority
* 如果用户在配置文件中指定了该策略,则scheduler会通过RegisterCustomPriorityFunction方法注册该策略。
* 该策略用于判断策略列出的标签在备选节点中存在时,是否选择该备选节点。
* 如果优选策略的presence值为true且备选节点的标签在优选策略的标签列表中,或者优选策略的presence值为false且备选节点的标签不在优选策略的标签列表中,则备选节点score=10,否则备选节点score=0。
3、BalancedResourceAllocation
* 该优选策略用于从备选节点列表中选出各项资源使用率最均衡的节点。
* (1)计算出所有备选节点上运行的Pod和待调度Pod的CPU占用量totalMilliCPU。
* (2)计算出所有备选节点上运行的Pod和待调度Pod的内存占用量totalMemory。
* (3)计算每个节点的得分,计算规则大致如下,其中,NodeCpuCapacity为节点的CPU计算能力,NodeMemoryCapacity为节点的内存大小:
score = int(10-math.Abs(totalMilliCPU/nodeCpuCapacity-totalMemory/nodeMemoryCapacity)*10)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律