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/*************

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

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

相关文章

Java实现优先级队列(堆)

前言 在学习完二叉树的相关知识后,我们对数据结构有了更多的认识,本文将介绍到优先级队列(堆) 1.优先级队列 1.1概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能…

leetcode做题记录 3011(计算二进制中一的个数)3012

3011. 判断一个数组是否可以变为有序 [题目的“有序”等价于“升序”] 思考 题目要求两个相邻元素在二进制下数位为1的数目相同才可以交换,那就要判断1相同的一块是否是按顺序排序的。从大到小和从小到大都测试一遍。找到一块中最大的和最小的,放在sta…

Android 车载应用开发概述

前言 介绍 Android 车载应用开发 文章目录 前言一、Android Automotive OS 概述二、Android Automotive OS 架构三、常见的车载应用1、系统应用1)SystemUI是什么开发工作 2)Launcher是什么开发工作 3)Settings是什么开发工作 4)多…

使用undetected-chromedriver遇到的问题及解决方法,以及它使用SOCKS代理的问题

环境:python3.8.10 uc的安装方法: pip38 install undetected-chromedriver 上测试代码: import undetected_chromedriver as uc driver uc.Chrome() driver.get(https://www.baidu.com) driver.save_screenshot(baidu.png)报错&#xff…

【结构型模式】组合模式

一、组合模式概述 组合模式的定义与意图:将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。(对象结构型) 组合模式分析: 1.当容器对象的某一个方法被调用时,将遍…

算法|基础算法|高精度算法

基础算法|位运算 1.高精度加法 2.高精度减法 3.高精度乘法 4.高精度除法 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 高精度加法 …

【C++学习】map和set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 四、set 4.1 set的介绍 4.2 set的使用 4.2.1 set的模板参数列表 4.2.2 set的构造 4.2.3 set的容量 4.2.4 set修改操作 4.2.5 set的使用举例 五、map 5.1 map的介绍 5.2 map的使用 5.2.1 map的模板参数说…

7.C++:多态

一、 virtual关键字 //1.可以修饰原函数,为了完成虚函数的重写,满足多态的条件之一; //2.可以在菱形继承中,完成虚继承,解决数据冗余和二义性; 两个地方使用同一关键字,但二者间没有一点关联 二…

淘宝扭蛋机小程序开发:开启购物娱乐新纪元

在数字时代浪潮的推动下,小程序作为新兴的交互平台,正在不断引领着购物方式的革新。淘宝扭蛋机小程序的开发,便是这一变革中的一颗璀璨明星,它将传统扭蛋机的趣味与电商购物的便捷完美融合,为用户带来了前所未有的购物…

Python+人工智能

Python人工智能 一、Python基础语法 涵盖Python基础知识,让大家掌握基础的编程能力 Python注释 单行注释:#注释内容多行注释:‘’‘注释内容’‘’ 变量和数据类型 变量 变量就是用来存储数据的。赋值变量时不需要指定数据类型,…

【R: mlr3:超参数调优】

本次分享官网教程地址 https://mlr3book.mlr-org.com/chapters/chapter4/hyperparameter_optimization.html 型调优 当你对你的模型表现不满意时,你可能希望调高你的模型表现,可通过超参数调整或者尝试一个更加适合你的模型,本篇将介绍这些操…

Weakly Supervised Audio-Visual Violence Detection 论文阅读

Weakly Supervised Audio-Visual Violence Detection 论文阅读 摘要III. METHODOLOGYA. Multimodal FusionB. Relation Modeling ModuleC. Training and Inference IV. EXPERIMENTSV. CONCLUSION阅读总结 文章信息: 发表于:IEEE TRANSACTIONS ON MULTIME…

【Redis 神秘大陆】006 灾备方案

六、Redis 灾备方案 6.1 存储方案 6.1.1 基础对比 RDB持久化AOF持久化原理周期性fork子进程生成持久化文件每次写入记录命令日志文件类型二进制dump快照文件文本appendonly日志文件触发条件默认超过300s间隔且有1s内超过1kb数据变更永久性每秒fsync一次文件位置配置文件中指…

政安晨:【深度学习神经网络基础】(十)—— 反向传播网络中计算输出节点增量与计算剩余节点增量

目录 简述 二次误差函数 交叉熵误差函数 计算剩余节点增量 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正&#xf…

刷穿力扣006-剑指offer一数组——02寻找目标值-二维数组

刷穿力扣006-剑指offer<一>数组——02寻找目标值-二维数组 基本面试题都是我带大家刷的力扣热题100和剑指offer的75道题&#xff0c;建议刷两遍&#xff01;&#xff08;ps:想找工作实习的同学&#xff0c;文末有面试八股和简历模板&#xff09; 题目&#xff1a; 语言…

计算机网络 TCP/IP体系 物理层

一. TCP/IP体系 物理层 1.1 物理层的基本概念 物理层作为TCP/IP网络模型的最低层&#xff0c;负责直接与传输介质交互&#xff0c;实现比特流的传输。 要完成物理层的主要任务&#xff0c;需要确定以下特性&#xff1a; 机械特性&#xff1a;物理层的机械特性主要涉及网络…

华为春招内幕:2024年最全Spring Dependency Injection面试题大全,深入掌握DI技术!99%的应聘者都推荐收藏!

在2024年&#xff0c;随着软件开发领域对高效和灵活的编程实践的需求日益增长&#xff0c;依赖注入&#xff08;DI&#xff09;作为一种关键的设计模式&#xff0c;在现代软件开发中扮演着至关重要的角色。华为&#xff0c;作为全球领先的技术创新公司&#xff0c;对其软件工程…

【Altium Designer 20 笔记】PCB层

Top Overlay & Bottom Overlay (顶部丝印层和底部丝印层)&#xff1a; 用于标记元件、连接和其他重要信息。丝印层是 PCB 表面的一层&#xff0c;上面印上文字、图标或标记。 Top Solder & Bottom Solder (顶部阻焊层和底部阻焊层)&#xff1a; 阻焊层、开窗层、绿油层…

Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. 起步依赖3. 自动配置3.1 JacksonPrope…

K8S认证工程师(CKA)考试速通经验分享(含答案)

昨天参加了Linux Foundation推出的Certified Kubernetes Administrator(CKA)考试&#xff0c;今天收到邮件通知通过啦&#xff5e;分数是93/100分 证书这个样子 ➡️随着应用现代化成为IT/互联网行业大趋势&#xff0c;企业的系统架构逐渐向微服务、容器化转型&#xff0c;好处…