k8s之Pod对象多种调度方式

news2024/12/27 1:31:52

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

k8s之Pod对象多种调度方式

1.Kubernetes控制器架构与事件通知机制

  • Kubernetes基于list-watch机制的控制器架构,实现组件间交 互的解耦。

  • 其他组件监控自己负责的资源,当这些资源发生变化时,kube-apiserver会通知这些组件,这个过程类似于发布与订阅

2.创建Pod的流程

  • 用户提交创建Pod的请求,可以通过API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml两种格式;

  • API Server 处理用户请求,存储Pod数据到Etcd;

  • Schedule通过和 API Server的watch机制,查看到新的pod,尝试为Pod绑定Node;

  • 过滤主机:调度器用一组规则过滤掉不符合要求的主机(比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机);

  • 主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略

    • 比如:把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等;

  • 选择主机:选择打分最高的主机,进行binding操作,结果存储到Etcd中;

  • kubelet根据调度结果执行Pod创建操作:

    • 绑定成功后,会启动container, docker run

    • scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。

    • 运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息

    • 一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。

3.影响Pod调度的主要属性

资源限制

Node Selectors & Node Affinity

nodeSelector 匹配节点标签

用于将Pod调度到匹配Label的Node上,如果没有匹配的标签会调度失败。

作用:

  • 约束Pod到特定的节点运行

  • 完全匹配节点标签

应用场景:

  • 专用节点:根据业务线将Node分组管理

  • 配备特殊硬件:部分Node配有SSD硬盘、GPU

第一步:给k8s-node1中打标签 disktype=ssd

[root@k8s-node2 ~]# kubectl label node k8s-node1 disktype=ssd       # 将k8s-node1打一个标签为ssdnode/k8s-node1 labeled[root@k8s-node2 ~]# kubectl get node --show-labels              # 可以查看到k8s-node1节点上就有了这个标签

第二步: 添加nodeSelector字段到Pod配置中

[root@k8s-master ~]# vim pod-nodeselector.yaml  apiVersion: v1kind: Podmetadata:  name: pod-nodeselectorspec:  nodeSelector:    disktype: "ssd"  containers:  - name: web    image: nginx

第三步:验证当前节点是否按照预期部署

[root@k8s-master ~]# kubectl apply -f pod-nodeselector.yaml [root@k8s-master ~]# kubectl get pods -o wideNAME            READY   STATUS  RESTARTS   AGE    IP        NODE    NOMINATED NODE   READINESS GATESpod-nodeselector    1/1   Running    0     117s   10.244.36.74  k8s-node1   <none>         <none>

4.nodeAffinitty 匹配节点亲和性

nodeAffinity:节点亲和性,与nodeSelector作用一样,但相比更灵活,

满足更多条件,诸如:

  • 匹配有更多的逻辑组合,不只是字符串的完全相等

  • 调度分为软策略和硬策略,而不是硬性要求

  • 硬(required):必须满足

  • 软(preferred):尝试满足,但不保证

  • 操作符:In、NotIn、Exists、DoesNotExist、Gt、

  • LtTaint(污点) & Tolerations(污点容忍)

Taints:避免Pod调度到特定Node上

Tolerations:允许Pod调度到持有Taints的Node上

5.应用场景:
  • 专用节点:根据业务线将Node分组管理,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配

  • 配备特殊硬件:部分Node配有SSD硬盘、GPU,希望在默认情况下不调度该节点,只有配置了污点容忍才允许分配

  • 基于Taint的驱逐

6.nodeName

nodeName:指定节点名称,用于将Pod调度到指定的Node上,不经过调度器

7.Pod Ant-Affinity(pod亲和性)

概念:   Pod Anti-Affinity是一种亲和性规则,用于避免Pod被调度到彼此太近的节点上。这有助于避免单点故障,提高应用的可用性。

配置:在Pod的spec中设置affinity.podAntiAffinity字段:

apiVersion: v1kind: Podmetadata:  name: with-anti-affinityspec:  affinity:    podAntiAffinity:      requiredDuringSchedulingIgnoredDuringExecution:      - labelSelector:          matchExpressions:          - key: app            operator: In            values:            - my-app        topologyKey: kubernetes.io/hostname  containers:  - name: my-container    image: my-image

8.Pod Topology Spread Constraints(pod拓扑分布约束)

概念:Pod拓扑分布约束确保Pod在集群的不同区域中均匀分布,如不同的节点、机架、区域等。

配置:在Pod的spec中设置topologySpreadConstraints字段:

apiVersion: v1kind: Podmetadata:  name: my-podspec:  topologySpreadConstraints:  - maxSkew: 1    topologyKey: kubernetes.io/hostname    whenUnsatisfiable: DoNotSchedule    labelSelector:      matchLabels:        app: my-app  containers:  - name: my-container    image: my-image

在上述配置中:

  • maxSkew定义了Pod在不同拓扑域之间的最大偏差。

  • topologyKey指定了用于确定Pod分布的节点标签。

  • whenUnsatisfiable定义了如果分布约束无法满足时的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis数据库一文入门

Redis 是一个用于存储和管理数据的开源内存数据结构存储系统。它以其高性能和丰富的数据结构支持而闻名&#xff0c;是构建高效、可扩展应用程序的理想选择。本文将带你入门 Redis&#xff0c;并探讨其基本概念、安装步骤和一些常见的使用场景。 什么是 Redis&#xff1f; Re…

疯感工牌的风还是吹到了L4级无人驾驶

俗话说得好&#xff0c;打工人哪有不疯的&#xff1f; 最近你是不是也被“发疯工牌梗”刷屏了 一张张看似情绪稳定的工牌 以独特的方式展现了属于打工人自己的个性 这不&#xff0c;疯感工牌的风也吹到了无人驾驶 无人车也有了属于自己的时尚单品 看看它们都是如何介绍自己的&a…

Wot Design Uni:一个高颜值、轻量化的uni-app组件库,uni-app生态的新宠

一、介绍 wot-design-uni组件库基于vue3Typescript构建&#xff0c;参照wot design的设计规范进行开发&#xff0c;提供70高质量组件&#xff0c;支持暗黑模式、国际化和自定义主题&#xff0c;旨在给开发者提供统一的UI交互&#xff0c;同时提高研发的开发效率。 特性&#x…

新的网络钓鱼方法针对 Android 和 iPhone 用户

关注公众号网络研究观获取更多内容。 ESET 研究人员发现了一种针对 Android 和 iPhone 用户的不常见网络钓鱼活动。 他们分析了一起针对捷克某知名银行客户的网络钓鱼案例。 网络钓鱼流程 这种技术值得注意&#xff0c;因为它会从第三方网站安装钓鱼应用程序&#xff0c;而无…

数据可视化大屏模板-美化图表

Axure作为一款强大的原型设计软件&#xff0c;不仅擅长构建交互式界面&#xff0c;更在数据可视化方面展现出了非凡的创意与实用性。今天&#xff0c;就让我们一起探索Axure设计的几款精美数据可视化大屏模板&#xff0c;感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…

【大模型理论篇】基于3D可视化视角理解GPT

1. 背景介绍 先前我们通过多篇技术文章来分析大模型的原理&#xff0c;包括&#xff1a; 《Transformer原理及关键模块深入浅出》《GPT系列预训练模型原理讲解》、《大模型时代下Bert去哪啦》、《关于LLaMA 3.1 405B以及小模型的崛起》、《LLaMA3结构关键模块分析》、《强化学习…

JS基础进阶2-操作元素

目录 1.操作元素-修改DOM&#xff08;文档对象模型&#xff09;元素 1. 修改元素的文本内容 2. 修改元素的样式 3. 修改元素的属性 4. 修改元素的类名 5.修改body元素 2.修改自定义属性 2.1H5中设置自定义属性、 2.2使用JavaScript修改自定义属性 3.节点操作 3.1节点概…

不懂就问,换毛季猫咪疯狂掉毛怎么办?宠物浮毛该如何清理?

最近天气变热了&#xff0c;每天都30度以上&#xff0c;我家猫狂掉毛&#xff0c;床上、地板上堆积了不少。第一次养猫的我没见过这种阵仗&#xff0c;以为它生病了&#xff0c;连忙带它去看医生。医生告诉我&#xff0c;这是正常的猫咪换毛现象&#xff0c;我才放下心来。原来…

Python代码加密打包发布

本博客主要介绍&#xff1a; 1. 将python代码编译为so&#xff08;win环境是pyd&#xff09; 2.打包生成wheel文件&#xff0c;可以使用pip 进行安装 1. 项目结构 注意&#xff0c;__init__.py文件是必须的&#xff0c;内容可为空 2. example.py 里面是自己写的一些方法&am…

【hot100篇-python刷题记录】【滑动窗口最大值】

R6-子串篇 目录 Max Sort 单调队列法&#xff1a; Max 完了&#xff0c;我好像想到python的max class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:ret[]left,right0,kwhile right<len(nums):ret.append(max(nums[left:right]))ri…

聊聊 PHP 多进程模式下的孤儿进程和僵尸进程

在 PHP 的编程实践中多进程通常都是在 cli 脚本的模式下使用&#xff0c;我依稀还记得在多年以前为了实现从数据库导出千万级别的数据&#xff0c;第一次在 PHP 脚本中采用了多进程编程。在此之前我从未接触过多进程&#xff0c;只知道 PHP-FPM 进程管理器是多进程模型&#xf…

【技术方案】智慧城市大数据平台技术方案(Doc原件)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障体系 4.1 政策…

获发明专利加持,隆道加速推进企业级AI应用落地

近期&#xff0c;北京隆道网络科技有限公司研发的“基于供应链管理的AI采购业务分析装置及方法”获得国家发明专利授权。该项新专利的取得&#xff0c;证明了隆道在AI产业化应用中的技术前瞻性和创新性&#xff0c;也为隆道加速企业级AI应用落地提供了知识产权保障。 根据IBM发…

HTML+CSS+JavaScript制作动态七夕表白网页(含音乐+自定义文字)

源码介绍 一年一度的520情人节/七夕情人节/女朋友生日/程序员表白,是不是要给女朋友或者正在追求的妹子一点小惊喜呢&#xff0c;今天这篇博客就分享下前端代码如何实现HTMLCSSJavaScript制作七夕表白网页(含音乐自定义文字)。赶紧学会了&#xff0c;来制作属于我们程序员的浪…

【OpenCV】基础知识

目录 0 前言1 什么是OpenCV&#xff1f;1.1 OpenCV1.2 OpenCV-Python 2 在线英文文档3 新建项目4 图像读取4.1 读入图像4.2 显示图像4.3 保存图像4.4 Demo4.4.1 Demo14.4.2 Demo24.4.3 Demo3 5 ROI区域 0 前言 使用软件&#xff1a;Anaconda Pycharm VScode OpenCV环境&#…

vulmap No module named ‘thirdparty.urllib3.packages.six.moves‘

问题 今天安装vulmap是发现无论如何安装不了&#xff0c;pip那边明明已经安装好了 后来发现vulmap脚本也有这个东西&#xff0c;后面想了下 最后分析却发现不是pip那边&#xff0c;是vulmap的脚本的’thirdparty.urllib3.packages.six.moves’模块与我这边的pip有些模块冲突了…

“MongoDB AI应用计划 (MAAP)”正式全面推出

助企业弥合AI应用缺口&#xff0c;抢占创新发展制高点 在MongoDB&#xff0c;无论应用场景如何&#xff0c;出发点都是帮助客户解决应用和数据的问题。基于客户沟通与反馈&#xff0c;大多数企业和机构对生成式AI很感兴趣&#xff0c;但不确定如何将概念转化为生产力&#xff…

VSCode的markdown设置目录toc无法显示

如图我设置了目录的语法&#xff0c;但是显示出来并不是我想要的目录格式 想要显示目录&#xff0c;首先需要下载Markdown All in One插件 然后CtrlShiftV&#xff0c;就可以看到目录了

【C++题解】1053 - 求100+97+……+4+1的值。

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1053 - 求10097……41的值。 类型&#xff1a;简单循环 题目描述&#xff1a; 求 10097⋯41 的值。 输入&#xff1a; 无。 输出&#xff1a; 输出一行&#xff0c;即求到的和…

EmguCV学习笔记 C# 6.3 轮廓外接多边形

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…