当前位置: 首页 > news >正文

k8s调度场景

15个KUBERNETES调度情景实用指南

Kubernetes调度是确保集群中的Pod在适当节点上运行的关键组件。通过灵活配置调度策略,可以提高资源利用率、负载平衡和高可用性。

在本文中,我们将深入探讨一些实际的Kubernetes调度场景,并提供相应的配置示例和最佳实践。

1. 基本场景 – NodeSelector

场景描述:我们有一些标记有SSD硬盘的节点,并且希望将需要高性能存储的Pod调度到这些节点上。

Pod配置:

apiVersion: v1
kind: Pod
metadata:name: high-performance-pod
spec:containers:- name: my-containerimage: my-imagenodeSelector:disktype: ssd

2. 高级场景 – 节点亲和性

场景描述:我们希望将需要GPU的任务调度到带有GPU标签的节点上。

Pod配置:

apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:containers:- name: my-containerimage: my-imageaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: gpuoperator: Invalues:- "true"

3. 资源分配 – Pod优先级和预选调度

场景描述:为了确保关键任务具有更高的优先级,我们可以定义一个PriorityClass并将其应用到Pod上。

PriorityClass配置:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000
globalDefault: false
description: "High priority class"

Pod配置:

apiVersion: v1
kind: Pod
metadata:name: high-priority-pod
spec:containers:- name: my-containerimage: my-imagepriorityClassName: high-priority

4. 防止Pod在同一节点上运行 – Pod反亲和性

场景描述:通过Pod反亲和性,我们可以确保同一组中的Pod不会被调度到同一节点上以提高高可用性。

Pod配置:

apiVersion: v1
kind: Pod
metadata:name: anti-affinity-pod
spec:containers:- name: my-containerimage: my-imageaffinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- webtopologyKey: kubernetes.io/hostname

5. 多副本拓扑域分布 – Pod拓扑分布

场景描述:确保同一应用的多个Pod分布在不同的拓扑域以提高可用性。

部署配置:

apiVersion: apps/v1
kind: Deployment
metadata:name: web-deployment
spec:replicas: 3selector:matchLabels:app: webtemplate:metadata:labels:app: webspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- "web"topologyKey: "kubernetes.io/hostname"

6. 节点Taints和PodTolerations

场景描述:通过节点的Taints,我们可以标记节点,只有具有相应Tolerations的Pod才能被调度到这些节点上。

节点配置:

apiVersion: v1
kind: Node
metadata:name: node1
spec:taints:- key: specialvalue: uniqueeffect: NoSchedule

Pod配置:

apiVersion: v1
kind: Pod
metadata:name: toleration-pod
spec:containers:- name: my-containerimage: my-imagetolerations:- key: "special"operator: "Equal"value: "unique"effect: "NoSchedule"

7. 自定义调度器 – 自定义调度器

场景描述:定制调度器以满足特定的调度需求,例如基于业务规则或特殊硬件条件。

自定义调度器示例:

  1. 创建自定义调度器插件
// my_scheduler.go
package mainimport ("k8s.io/kubernetes/pkg/scheduler""k8s.io/kubernetes/pkg/scheduler/framework""k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder""k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpreemption""k8s.io/kubernetes/pkg/scheduler/framework/plugins/names"
)const (// YourSchedulerName is the name of your custom schedulerYourSchedulerName = "my-scheduler"
)// New initializes a new scheduler with your custom plugins
func New() *scheduler.Config {return &scheduler.Config{Client:              scheduler.NewHTTPClient(),SchedulerName:       YourSchedulerName,PercentageOfNodesToScore: 0.25,Profiles: []scheduler.Profile{{Name: YourSchedulerName,Plugins: []scheduler.Plugin{defaultpreemption.Name: defaultpreemption.New,defaultbinder.Name:     defaultbinder.New,names.NewNodeResourcesFit(),names.NewNodePorts(),names.NewNodeAffinity(YourSchedulerName),names.NewNodeAffinityPriority(YourSchedulerName),},},},}
}func main() {// Use the New() function to create a new scheduler with your custom pluginsconfig := New()command := app.NewSchedulerCommand(// Use the WithConfig function to set your custom scheduler configurationapp.WithConfig(config),)f := command.Flags()f.AddGoFlagSet(flag.CommandLine)if err := command.Execute(); err != nil {os.Exit(1)}
}
  1. 编译并运行自定义调度器
go build my_scheduler.go
./my_scheduler

8. Pod 优先级和抢占 – Pod 优先级和抢占

场景描述:通过设置 Pod 的优先级和抢占策略,确保关键任务被优先处理。

Pod 配置:

apiVersion: v1
kind: Pod
metadata:name: priority-pod
spec:containers:- name: my-containerimage: my-imagepriorityClassName: high-priority

9. 资源限制和请求 – 资源限制和请求

场景描述:通过为 Pod 设置资源限制和请求,调度器可以更好地优化资源利用。

Pod 配置:

apiVersion: v1
kind: Pod
metadata:name: resource-pod
spec:containers:- name: my-containerimage: my-imageresources:limits:cpu: "2"memory: "1Gi"requests:cpu: "1"memory: "500Mi"

10. 亲和性和反亲和性规则 – 亲和性和反亲和性规则

场景描述:使用亲和性和反亲和性规则确保 Pod 在特定节点上,或避免与其他 Pod 被调度到同一节点。

Pod 配置:

apiVersion: v1
kind: Pod
metadata:name: affinity-pod
spec:containers:- name: my-containerimage: my-imageaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: securityoperator: Invalues:- "high"topologyKey: kubernetes.io/hostname

11. Pod 中断预算 – Pod 中断预算

场景描述:使用 Pod 中断预算限制允许在维护期间中断的 Pod 数量,以确保系统稳定性。

PodDisruptionBudget 配置:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:name: web-pdb
spec:maxUnavailable: 1selector:matchLabels:app: web

12. 水平 Pod 自动缩放器 – 水平扩展器

场景描述:使用水平扩展器根据 CPU 使用率或其他指标自动调整 Pod 数量,以满足应用需求。

HorizontalPodAutoscaler 配置:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:name: web-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: web-deploymentminReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70

13. Pod 开销 – Pod 开销

场景描述:通过设置 Pod 开销,告知调度器考虑 Pod 需要的额外资源,以避免在节点上调度过多的 Pod。

Pod 配置:

apiVersion: v1
kind: Pod
metadata:name: overhead-pod
spec:containers:- name: my-containerimage: my-imageresources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"overhead:podFixed: 100Miephemeral-storage: 1Gi

14. 节点本地 DNS 缓存 – 节点本地 DNS 缓存

场景描述:在节点上启用本地 DNS 缓存以提高 DNS 查询性能。

kubelet 配置:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
clusterDomain: cluster.local
featureGates:CoreDNSLocalCache: true

15. Pod 优先级类别 – Pod 优先级类别

场景描述:使用 Pod 优先级类别将 Pod 划分为不同的优先级,以确保关键任务被优先调度。

PriorityClass 配置:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000
globalDefault: false
description: "High priority class"
preemptionPolicy: PreemptLowerPriority

结论

这些场景涵盖了从基础到高级的 Kubernetes 调度实际案例。根据您的需求,您可以选择适当的场景进行配置,以优化集群的资源利用率和性能。

在实际应用中,根据具体需求调整配置,确保调度器的策略符合业务和性能要求。

***********链接:https://yylives.cc/2024/02/29/kubernetes-scheduling-scenario-practical-guide/*************

相关文章:

k8s调度场景

15个KUBERNETES调度情景实用指南 Kubernetes调度是确保集群中的Pod在适当节点上运行的关键组件。通过灵活配置调度策略,可以提高资源利用率、负载平衡和高可用性。 在本文中,我们将深入探讨一些实际的Kubernetes调度场景,并提供相应的配置示…...

基于小程序实现的餐饮外卖系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…...

家居网购项目(手写分页)

文章目录 1.后台管理—分页显示1.程序框架图2.编写数据模型Page.java 3.编写dao层1.修改FurnDao增加方法 2.修改FurnDaoImpl增加方法 3.单元测试FurnDaoTest 4.编写service层1.修改FurnService增加方法 2.修改FurnServiceImpl增加方法3.单元测试FurnServiceTest 5.编写DataUtil…...

goland2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Goland 是一款由 JetBrains 公司开发的集成开发环境(IDE),专门用于 Go 语言的开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和管理 Go 语言项目。 功能特点&#x…...

35、链表-LRU缓存

思路: 首先要了解LRU缓存的原理,首先定下容量,每次get请求和put请求都会把当前元素放最前/后面,如果超过容量那么头部/尾部元素就被移除,所以最近最少使用的元素会被优先移除,保证热点数据持续存在。 不管放…...

数据结构速成--栈

由于是速成专题,因此内容不会十分全面,只会涵盖考试重点,各学校课程要求不同 ,大家可以按照考纲复习,不全面的内容,可以看一下小编主页数据结构初阶的内容,找到对应专题详细学习一下。 目录 一…...

算法练习第15天|226.翻转二叉树

226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输入:root [4,2,7,1,3,6,9] 输出&am…...

C#面向对象——封装、封装案例示例

C#面向对象——封装 什么是封装? (1)封装是将数据和操作数据的方法(行为)封装在一起。 (2)程序中封装的体现:属性,方法,类,接口,命名空间&#…...

【InternLM 实战营第二期-笔记3】茴香豆:搭建你的 RAG 智能助理

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营,我也将会通过笔记博客的方式记录学习的过程与遇到的问题,并为代码添加注释,希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) 茴香豆:搭建…...

Advanced RAG 03:运用 RAGAs 与 LlamaIndex 评估 RAG 应用

编者按:目前,检索增强生成(Retrieval Augmented Generation,RAG)技术已经广泛使用于各种大模型应用场景。然而,如何准确评估 RAG 系统的性能和效果,一直是业界和学界共同关注的重点问题。若无法…...

leetcode

找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串) 示例 1: 输入: s "…...

Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏,实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的ba…...

react异步组件如何定义使用 标准使用方法

目录 默认导出和命名导出的格式 默认导出的组件 使用方式 命名导出的组件 使用方式 默认导出和命名导出的格式 默认导出: // person.js const person {name: Alice,age: 30 };export default person;命名导出: // math.js export const add (a, b) > a b; exp…...

React + Ts + Vite + Antd 项目搭建

1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式,因为不能自动检测副作用,有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…...

js爬虫puppeteer库 解决网页动态渲染无法爬取

我们爬取这个网址上面的股票实时部分宇通客车(600066)_股票价格_行情_走势图—东方财富网 我们用正常的方法爬取会发现爬取不下来,是因为这个网页这里是实时渲染的,我们直接通过网址接口访问这里还没有渲染出来 于是我们可以通过下面的代码来进行爬取: …...

代码随想录:二叉树5

目录 102.二叉树的层序遍历 题目 代码(队列实现) 107.二叉树的层序遍历II 题目 代码 199.二叉树的右视图 题目 代码 637.二叉树的层平均值 题目 代码 102.二叉树的层序遍历 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍…...

Tomcat 获取客户端真实IP X-Forwarded-For

Tomcat 获取客户端真实IP X-Forwarded-For 代码实现&#xff1a; 在Host标签下面添加代码&#xff1a; <Valve className"org.apache.catalina.valves.RemoteIpValve" remoteIpHeader"x-forwarded-for" remoteIpProxiesHeader"x-forwarded-by&q…...

记录PS学习查漏补缺

PS学习 PS学习理论快捷键抠图PS专属多软件通用快捷键 PS学习 理论 JPEG &#xff08;不带透明通道&#xff09; PNG (带透明通道) 快捷键 抠图 抠图方式 魔棒工具 反选选中区域 CtrlShiftI&#xff08;反选&#xff09; 钢笔抠图注意事项 按着Ctrl单击节点 会出现当前节…...

Kafka 架构深入探索

目录 一、Kafka 工作流程及文件存储机制 二、数据可靠性保证 三 、数据一致性问题 3.1follower 故障 3.2leader 故障 四、ack 应答机制 五、部署FilebeatKafkaELK 5.1环境准备 5.2部署ELK 5.2.1部署 Elasticsearch 软件 5.2.1.1修改elasticsearch主配置文件 5.2…...

k-means聚类算法的MATLAB实现及可视化

K-means算法是一种无监督学习算法&#xff0c;主要用于数据聚类。其工作原理基于迭代优化&#xff0c;将数据点划分为K个集群&#xff0c;使得每个数据点都属于最近的集群&#xff0c;并且每个集群的中心&#xff08;质心&#xff09;是所有属于该集群的数据点的平均值。以下是…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...