Kubernetes Scheduler 原理分析

简介: 【2月更文挑战第28天】

Kubernetes Scheduler在整个系统中起到“承上启下”的重要作用,“承上”是指它负责接收Controller Manager创建的新Pod,为其安 排一个落脚的“家”——目标Node;“启下”是指安置工作完成后,目标Node上的kubelet服务进程接管后继工作,负责Pod生命周期中的“下半生”。

1.Scheduler的作用

(1)监听API Server,获取还没有绑定(bind)到Node上的Pod。

(2)根据预选、优先、抢占策略,将Pod调度到合适的Node上。

(3)调用API Server,将调度信息写入到etcd。

2.Scheduler的原则

(1)公平。确保每个Pod都要被调度,即使因为资源不够而无法调用。

(2)资源合理分配。根据多种策略选择合适的Node,并且使资源利用率尽量高。

(3)可自定义。内部支持多种调度策略,用户可以选择亲和性、优先级、污点等控制调度结果,另外也支持自定义Scheduler的方式进行扩展。


Kubernetes Scheduler当前提供的默认调度流程分为以下两步。

(1)预选调度过程。即遍历所有目标Node,筛选出符合要求的候选节点。为此,Kubernetes内置了多种预选策略(xxx Predicates)供用户选择。

(2)确定最优节点。在第一步的基础上,采用优选策略(xxx Priority)计算出每个候选节点的积分,积分最高者胜出。

3.节点管理

在Kubernetes集群中,在每个Node上都会启动一个kubelet服务的进程。该进程用于处理Master下发到本节点的任务,管理Pod及Pod中的容器。每个kubelet进程都会在API Server上注册节点自身的信息,定期向Master汇报节点资源的使用情况,并通过cAdvisor监控容器和节点资源。

节点通过设置kubelet的启动参数“--register-node”,来决定是否向API Server注册自己。如果该参数的值为true,那么kubelet将尝试通过API Server注册自己。

4.Pod管理

kubelet通过以下几种方式获取自身Node上所要运行的Pod清单。


(1)文件。kubelet启动参数“--config”指定的配置文件目录下的文件(默认目录为“/etc/kubernetes/ manifests/”)。通过--file-check- frequency设置检查该文件目录的时间间隔,默认为20秒。

(2)HTTP端点(URL)。通过“--manifest-url”参数设置。通过--http-check-frequency设置检查该HTTP端点数据的时间间隔,默认为20秒。

(3)API Server。kubelet通过API Server监听etcd目录,同步Pod列表。


所有以非API Server方式创建的Pod都称为Static Pod。kubelet将Static Pod的状态汇报给API Server,API Server为该Static Pod创建一个Mirror Pod与其相匹配。Mirror Pod的状态将真实反映Static Pod的状态。当Static Pod被删除时,与之相对应的Mirror Pod也会被删除。

5.容器健康检查

Pod通过以下两类探针来检查容器的健康状态。

(1)一类是LivenessProbe探针。用于判断容器是否健康并反馈给kubelet。如果LivenessProbe探针探测到容器不健康,则kubelet将删除该容器,并根据容器的重启策略进行相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的值永远是Success。

(2)另一类是ReadinessProbe探针。用于判断容器是否启动完成,且准备接收请求。如果ReadinessProbe探针检测到容器启动失败,则Pod的状态将被修改,Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的IP地址的Endpoint条目。

6.Cadvisor资源监控

Cadvisor的特点如下。

(1)Cadvisor是一个开源的分析容器资源使用率和性能特性的代理工具,它是因容器而生的,因此自然支持Docker容器。

(2)在Kubernetes项目中,Cadvisor被集成到Kubernetes代码中,kubelet则通过Cadvisor获取其所在节点及容器的数据。

(3)Cadvisor自动查找所有在其所在Node上的容器,自动采集CPU、内存、文件系统和网络使用的统计信息。

(4)在大部分Kubernetes集群中,Cadvisor通过它所在Node的4194端口暴露一个简单的UI。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
资源调度 Kubernetes 应用服务中间件
Kubernetes Scheduler Framework 扩展: 2. Binpack
# 前言 ## 为什么需要Binpack功能? Kubernetes默认开启的资源调度策略是`LeastRequestedPriority`,消耗的资源最少的节点得分最高,优先被调度。这样的资源选择情况有可能导致较多的资源碎片,如下图所示,两个节点各剩余1GPU的资源,导致申请2GPU的作业无法调度,导致整体资源使用率下降。 如果使用的资源调度策略是Binpack,优先将节点
1776 0
|
运维 资源调度 Kubernetes
Kubernetes Scheduler Framework 扩展: 1. Coscheduling
# 前言 ## 为什么Kubernetes需要Coscheduling功能? Kubernetes目前已经广泛的应用于在线服务编排,为了提升集群的的利用率和运行效率,我们希望将Kubernetes作为一个统一的管理平台来管理在线服务和离线作业。但是默认的调度器是以Pod为调度单元进行依次调度,不会考虑Pod之间的相互关系。但是很多数据计算类的作业具有All-or-Nothing特点,要求所有的
2927 0
|
12月前
|
Kubernetes 算法 API
【kubernetes】Scheduler 的调度流程
【kubernetes】Scheduler 的调度流程
123 0
|
存储 Kubernetes 调度
|
存储 算法 调度
资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解
说明:该文转载自腾讯云技术社区腾云阁,已征求作者本人同意。 源码为 k8s v1.6.1 版本,github 上对应的 commit id 为 b0b7a323cc5a4a2019b2e9520c21c7830b7f708e 本文将对 Scheduler 的调度算法原理和执行过程进行分析,重点介绍 Scheduler 算法中预选和优选的相关内容。
1127 0
|
监控 Docker 容器
“Hack”阿里云Kubernetes的Scheduler的日志级别
### 问题 阿里云的Kubernetes容器服务,默认已经根据生产的要求创建好了3个master的高可用集群。每个master节点都部署了对应的apiserver, controller, scheduler。对于一些高级用户,特别是在开发测试阶段,或许需要调整这些组件的日志级别来dubug其运行的行为,则需要手工做一下日志级别的调整。那么我们需要了解阿里云的kubernetes是如何配置
4052 0
|
缓存 Kubernetes 调度
Kubernetes Scheduler是如何工作的
本文讲的是Kubernetes Scheduler是如何工作的【编者的话】本文描述了Kubernetes scheduler的工作流程以及出现失败如何实现重新调度的机制,文章的最后,作者对于Kubernetes的学习提出一些很有参考价值的建议。
1961 0
|
4天前
|
运维 Kubernetes 监控
Kubernetes 集群的持续性能优化实践
【4月更文挑战第26天】 在动态且不断增长的云计算环境中,维护高性能的 Kubernetes 集群是一个挑战。本文将探讨一系列实用的策略和工具,旨在帮助运维专家监控、分析和优化 Kubernetes 集群的性能。我们将讨论资源分配的最佳实践,包括 CPU 和内存管理,以及集群规模调整的策略。此外,文中还将介绍延迟和吞吐量的重要性,并提供日志和监控工具的使用技巧,以实现持续改进的目标。
|
7天前
|
存储 运维 Kubernetes
Kubernetes 集群的监控与维护策略
【4月更文挑战第23天】 在微服务架构日益盛行的当下,容器编排工具如 Kubernetes 成为了运维工作的重要环节。然而,随着集群规模的增长和复杂性的提升,如何确保 Kubernetes 集群的高效稳定运行成为了一大挑战。本文将深入探讨 Kubernetes 集群的监控要点、常见问题及解决方案,并提出一系列切实可行的维护策略,旨在帮助运维人员有效管理和维护 Kubernetes 环境,保障服务的持续可用性和性能优化。
|
8天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。