K8S集群调度

这篇具有很好参考价值的文章主要介绍了K8S集群调度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

scheduler:负责调度资源,把pod调度到指定的node节点

预算策略:

优选策略:

1、List-watch

K8S集群当中,通过list-watch的机制进行每个组件的协作,保持数据同步。每个组件之间的解耦。

kubectl:配置文件,向APIserver发送命令----apiserver把命令发送到各个组件

kubectl run nginx --image=nginx:1.22-----apiserver-----controller manager-----scheduler-----kubelet.

创建成功之后,kubectl get pod kubectl describe pod nginx-------->etcd的数据库当中。

list-watch---会在每一步把监听的消息(APIserver:6443)------controller manager ,scheduler .kubelet,etcd都会监听apiserver:6443端口

K8S集群调度,kubernetes,docker,容器

2、调度的过程和策略

scheduler是k8s集群的调取器,把pod分配到集群的节点

以下几个问题:

1、公平,每个节点都能够分配资源

2、资源高效利用:集群当中的资源可以被最大化使用

3、效率:调度的性能要搞好,能够尽快的完成大批量的pod的调度工作

4、灵活:允许用户根据自己的需求,控制和改变调度的逻辑。

scheduler是一个单独运行的程序,启动之后就会一直监听APIserver.获取报文中的字段:spec.nodeName

创建pod时,为每个Pod创建一个binding,表示该往哪个节点上部署。

创建pod到节点时,有两个策略,先执行预算策略,再执行优先策略 这两步的操作都必须成功,否则立刻返回报错。

也就是说,部署的node,必须满足这两个策略。

预算策略:

predicate自带一些算法来选择Node节点 (scheduler自带的算法策略,不需要人工干预)

1、podfitsresources:pod适应资源,检查节点上的剩余资源是否满足pod请求的资源。主要是cpu和内存

2、podfitshost:pod适应主机,如果pod指定了Node的name,nginx1pod--->node01,检测主机名是否存在,存在要和pod指定的名称匹配,才能调度过去

3、podeslectormatchers:pod选择器匹配,创建pod的时候可以根据node的标签来进行匹配。查找指定的node节点上标签是否存在,存在的标签是否匹配。

4、nodiskconflict:无磁盘冲突,确保已挂载的卷与pod的卷不发生冲突,除非目录是只读

如果预算策略都不满足,pod将始终处于pending状态,不断的重试调度,直到有节点满足条件为止

node1 node2 node3

经过预算策略,上述三个节点都满足,那该怎么办?---->优选

优先策略

leastrequestedpriority:最低请求优先级,通过算法计算节点上的cpu内存使用率,确定节点的权重

使用率越低的节点相应的权重越高。调度时会更倾向于使用率低的节点。实现资源合理的利用

balanceresourceallocation:平衡资源分配,cpu和内存的使用率,给节点赋予权重,权重算的是cpu和内存使用率接近。权重越高

和上面的leastrequestedpriority最低请求优先级一起使用

node1 cpu和内存使用率:20:60

node2 cpu和内存使用率:50:50

node2在被调度时会被优先选择。

imagelocalitypriority:节点上是否已经有了要部署的镜像。镜像的总数成正比,满足的镜像数越多,权重越好

nginx:1.22

node1 无

node2 有

以上这些策略scheduler自带的算法

通过预算选择出可以部署的节点,再通过优先选择出来最好的节点,以上都是自带的算法。k8s集群自己来选择

指定节点:

spec参数设置:

nodeName:node02

指定了节点,在参数中设置了nodeName,指定了节点的名称,会跳过scheduler的调度策略,这个规则是强制匹配

指定标签:

spec

nodeSelector:kubectl get nodes --show-labels 查看所有节点的标签

kubectl label nodes master01 test1=a kubectl label nodes node01 test2=b kubeclt label nodes node02 test3=c

以上三行,创建自定义标签的命令

kubectl get deployment.apps -o wide 可以看到已经部署的deployment的标签

nodeSelector:

指定节点标签部署pod,是要经过scheduler的算法,如果节点不满足条件,pod会进入pending状态,直到节点满足条件为止

亲和性:

节点亲和性和pod亲和性

软策略与硬策略

node节点的亲和性:

preferredDuringSchedulingIgnoredDuringExecution 软策略:

选择node节点时,我声明了我最好能部署在Node01,软策略会尽量满足这个条件。不一定会完全部署在node01节点上

requiredDuringSchedulinglgnoreFuringExecution 硬策略:

选择pod时,声明了node01,我是硬策略,必须满足硬策略的条件。必须部署在node01,强制性要求

pod的亲和性:

preferredDuringSchedulingIgnoredDuringExecution 软策略

要求调度器将pod调度到其他pod的亲和性匹配的节点上。可以是,也可以不是,尽量满足

pod nginx1 node01

pod nginx2 nginx2希望跟nginx1部署在一个节点上,尽量满足。

requiredDuringSchedulinglgnoreFuringExecution 硬策略

要求调度器将Pod调度到其他pod的亲和性匹配的节点上。必须是

pod nginx1 node01

pod nginx2 nginx2必须要和nginx的亲和性匹配,只能往node01

键值的运算关系:

标签,都是根据标签来选择亲和性

In:在

选择的标签值在node节点上存在

Notin:不在

选择label的值不在node节点上存在

Gt:大于,大于选择的标签值

Lt:小于,小于选择的标签值

Exists:存在,选择标签对象,值不考虑

DoesNotExist:不存在,选择不具有指定标签的对象。值不考虑。

软策略:

多个软策略看权重,权重高,执行指定的软策略

硬策略:

先满足硬策略,再考虑软策略文章来源地址https://www.toymoban.com/news/detail-819978.html

到了这里,关于K8S集群调度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S:K8S自动化运维容器化(Docker)集群程序

    目录 一、K8S概述 1、什么是K8S 2、为什么要用K8S 3、作用及功能 二、K8S的特性 1、弹性伸缩 2、自我修复 3、服务发现和复制均衡 5、自动发布和回滚 6、集中化配置管理和秘钥管理 7、存储编排 8、任务批量处理运行 三、K8S的集群架构 四、K8S的核心组件 1、Master组件 ①Kube-apis

    2024年02月12日
    浏览(64)
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习

    简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。 这种隔离是怎么做到的呢?它利用了内核提供的 namespace 和 cgroup 这 2 种技术。这些技术能力在 Linux 中已经存在了很长时间。而 Docker 或容器技术致力于将这些功能更易于使用和更

    2024年02月07日
    浏览(66)
  • K8S自动化运维容器化(Docker)集群程序

    1.什么是K8S K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container Schedul

    2024年02月10日
    浏览(64)
  • ​k8s 1.24 1.25 集群使用docker作为容器

    背景 在新版本Kubernetes环境(1.24以及以上版本)下官方不在支持docker作为容器运行时了,若要继续使用docker 需要对docker进行配置一番。需要安装cri-docker作为Kubernetes容器 查看当前容器运行时 安装docker 安装cri-docker 为kubelet配置容器运行时 关于 https://www.oiox.cn/ https://www.oiox.cn

    2024年02月12日
    浏览(67)
  • K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上)

    🔼上一集:win11+vmware17+centos7.9环境搭建 *️⃣主目录:温故知新专栏 🔽下一集:K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下) 之前部署过dolphinscheduler3.1.8,看页面增加了K8S模块,所以想着部署一下K8S,学习一下,而且海豚调度也提供了K8S部署方式,经过一番了解,发现

    2024年02月11日
    浏览(53)
  • K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下)

    🔼上一集:K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上) *️⃣主目录:温故知新专栏 🔽下一集:Kubernetes可视化管理工具Kuboard部署使用及k8s常用命令梳理记录 kubectl 是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。详见官网安装步骤 📕下载kube

    2024年02月09日
    浏览(51)
  • 在线搭建K8S,kubernetes集群v1.23.9,docker支持的最后一个版本

    执行后的结果如下: 到这里一个K8S集群就完整的部署好了,如果有其他的node节点操作方法是一样的,如果是高可用的,多个master可以给我留言,告诉你怎么操作。

    2024年02月14日
    浏览(42)
  • 安装 k8s集群的问题:默认容器运行时从 Docker 改为 Containerd

    💖The Begin💖点点关注,收藏不迷路💖 从 Kuberetes 1.20 版本开始,Kuberetes官方 已经将默认的容器运行时从Docker改为Containerd。 因此,从 Kubernetes 1.20 开始,Kuberetes官方将支持使用 Docker和Containerd 作为容器运时,也意味着Kubemetes从Docker的依赖中解耦了出来。 在 Kubernetes1.24 及之后

    2024年04月14日
    浏览(59)
  • K8S集群调度

    scheduler:负责调度资源,把pod调度到指定的node节点 预算策略: 优选策略: 1、List-watch K8S集群当中,通过list-watch的机制进行每个组件的协作,保持数据同步。每个组件之间的解耦。 kubectl:配置文件,向APIserver发送命令----apiserver把命令发送到各个组件 kubectl run nginx --image=ngi

    2024年01月24日
    浏览(29)
  • k8s-----集群调度

    目录 一:调度约束 二:Pod 启动创建过程 三:k8s调度过程 1、Predicate 有一系列的常见的算法 2、常见优先级选项 3、指定调度节点 (1)nodeName指定  (2)nodeSelector指定  四:亲和性  1、节点亲和性 2、Pod 亲和性 3、键值运算关系 4、事例 (1)节点亲和硬策略示例 (2)节点亲

    2024年02月13日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包