在CSDN学Golang云原生(Kubernetes Pod调度)
一,NodeSelector定向调度
在 Kubernetes 中,可以使用 NodeSelector 字段来指定 Pod 调度到哪些节点上运行。NodeSelector 是一个键值对的 map,其中键是节点的标签名,值是标签值。具体步骤如下:
- 在节点上添加标签
 
首先需要在节点上添加相应的标签,例如:
kubectl label nodes node1 app=example-app 
- 编写 Pod 的 YAML 文件
 
在编写 Pod 的 YAML 文件时,需要添加 nodeSelector 字段来指定 Pod 要调度到哪些节点上运行。
apiVersion: v1
kind: Pod
metadata:name: example-pod
spec:containers:- name: example-containerimage: your_image_namenodeSelector:app: example-app # 指定要调度到带有 app=example-app 标签的节点上运行  
- 使用 kubectl apply 命令部署 Pod
 
kubectl apply -f your_pod_yaml_file.yaml 
- 查看 Pod 是否部署成功
 
kubectl get pods example-pod -o wide # -o wide 可以查看分配给该 pod 的节点名称和 IP 地址等信息。 
以上就是使用 golang NodeSelector 定向调度的步骤。
二,Node亲和性调度NodeAffinity
在 Kubernetes 中,可以使用 NodeAffinity 字段来指定 Pod 的亲和性调度规则,NodeAffinity 是一个结构体,其中包含两个属性:
- requiredDuringSchedulingIgnoredDuringExecution: 在调度阶段必须满足的亲和性规则。
 - preferredDuringSchedulingIgnoredDuringExecution: 优先级较低的亲和性规则。
 
下面是一个使用 golang NodeAffinity 进行亲和性调度的例子:
import ("k8s.io/api/core/v1"
)// 创建 PodSpec 对象
podSpec := &v1.PodSpec{...Affinity: &v1.Affinity{NodeAffinity: &v1.NodeAffinity{RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{ // 必须满足以下标签要求NodeSelectorTerms: []v1.NodeSelectorTerm{{MatchExpressions: []v1.NodeSelectorRequirement{{Key:      "zone",Operator: v1.NodeSelectorOpIn,Values:   []string{"cn-east-01", "cn-east-02"},},},},},},PreferredDuringSchedulingIgnoredDuringExecution: nil, // 暂不需要优先级较低的亲和性规则},},
}// 创建 Pod 对象
pod := &v1.Pod{...Spec: *podSpec,
} 
在上述代码中,我们通过定义 RequiredDuringSchedulingIgnoredDuringExecution 属性,并设置 NodeSelectorTerms 和 MatchExpressions 来指定 Pod 调度到哪些节点上运行。这里我们要求节点的 zone 标签的值必须是 cn-east-01 或者 cn-east-02。
需要注意的是,如果指定了多个亲和性规则,则每个规则都必须满足才能将 Pod 调度到对应的节点上。
除了使用 golang 代码进行调度之外,也可以在 Pod 的 YAML 文件中添加相应的 NodeAffinity 字段来指定 Pod 的亲和性调度规则。
三,Pod亲和度与互斥调度PodAffinity
在 Kubernetes 中,Pod 的亲和度与互斥调度可以通过 PodAffinity 和 PodAntiAffinity 字段进行设置。其中,PodAffinity 用于指定必须共存的 Pod,而 PodAntiAffinity 用于指定不得共存的 Pod。
这两个字段都包含了一个 requiredDuringSchedulingIgnoredDuringExecution 属性和一个 preferredDuringSchedulingIgnoredDuringExecution 属性:
- requiredDuringSchedulingIgnoredDuringExecution: 在调度阶段必须满足的规则。
 - preferredDuringSchedulingIgnoredDuringExecution: 优先级较低的规则。
 
下面是一个使用 golang 进行 Pod 亲和度与互斥调度的例子:
import ("k8s.io/api/core/v1"
)// 创建 PodSpec 对象
podSpec := &v1.PodSpec{...Affinity: &v1.Affinity{PodAffinity: &v1.PodAffinity{ // 设置必须共存规则RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{{LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"app": "nginx"},},Namespaces: []string{"default"},TopologyKey: "kubernetes.io/hostname",},},PreferredDuringSchedulingIgnoredDuringExecution: nil, // 暂不需要优先级较低的规则},PodAntiAffinity: &v1.PodAntiAffinity{ // 设置不得共存规则RequiredDuringSchedulingIgnoredDuringExecution: []v1.PodAffinityTerm{{LabelSelector: &metav1.LabelSelector{MatchLabels: map[string]string{"app": "nginx"},},Namespaces: []string{"default"},TopologyKey: "kubernetes.io/hostname",},},PreferredDuringSchedulingIgnoredDuringExecution: nil, // 暂不需要优先级较低的规则},},
}// 创建 Pod 对象
pod := &v1.Pod{...Spec: *podSpec,
} 
在上述代码中,我们通过定义 PodAffinity 和 PodAntiAffinity 属性,并设置 requiredDuringSchedulingIgnoredDuringExecution 字段和相应的规则,来指定 Pod 的亲和度与互斥调度。这里我们要求必须共存的 Pod 必须是标签为 app=nginx 的 Pod,而不得共存的 Pod 也必须是标签为 app=nginx 的 Pod。
需要注意的是,在设置亲和度与互斥调度时,可以通过多种方式指定匹配规则,如使用 label selector、namespace 等。在实际使用中,请根据实际情况进行选择。
四,pod Taints 和Tolerations
在Kubernetes集群中,Taints和Tolerations是用于控制Pod是否可以被调度到某个Node上的机制。
- Taints:Taints是标记Node的一种方式,通过将一个或多个Taints添加到Node上,可以限制哪些Pod能够调度到该节点。例如,如果您希望禁止在生产环境中运行的应用程序部署到具有特定硬件或软件配置的节点上,则可以使用Taint来实现这一点。
 - Tolerations:Tolerations是告诉Kubernetes哪些Pod可以调度到具有特定Taints的Node上的一种方法。如果您想要将特定应用程序部署到具有某些硬件或软件配置的节点上,则必须使用Tolerations来实现这一点。
 
例如,假设我们有三个节点:node1、node2和node3。我们希望防止任何Pod被调度到node1上,并且只允许具有“gpu=true”标签的Pod在node2和node3上进行调度。我们可以执行以下操作:
- 在 node1 上添加 taint
 
kubectl taint nodes node1 key=value:NoSchedule 
- 在具有 toleration 的 Pod 上声明 toleration
 
apiVersion: v1
kind: Pod
metadata:name: gpu-pod
spec:containers:- name: gpu-containerimage: gpu-image:v1.0tolerations:- key: "gpu"operator: "Equal"value: "true"effect: "NoSchedule" 
这样,只有具有“gpu=true”标签的Pod才能被调度到node2和node3上。而在node1上添加了taint,因此不会有任何Pod被调度到该节点上。
五,pod Priority 优先级调度
在 Kubernetes 集群中,Pod 被分配给 Node 运行。而 Pod 之间的优先级是由 Kubernetes 的调度器(Scheduler)来控制的。Pod 的优先级越高,则它被分配到节点上的机会就越大。
为了设置 Pod 的优先级,可以使用 PriorityClass 对象。PriorityClass 是一个资源对象,用于定义 Pod 的优先级和访问策略。
下面是一个示例 PriorityClass:
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for important pods only." 
在这个示例中,我们创建了一个名为 high-priority 的 PriorityClass,并将其值设置为 1000000。这意味着当一个 Pod 使用此 PriorityClass 来定义它的优先级时,它将比其他具有较低值的 PriorityClass 更容易被分配到节点上运行。
要使用这个 PriorityClass,请在 Pod 定义文件中添加如下字段:
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:priorityClassName: high-prioritycontainers:- name: my-containerimage: nginx 
注意,在设置完 priorityClassName 字段后,请确保所有相关的 Node 上都安装了 kube-scheduler 组件,并且该组件已经启动。这样才能使调度器根据定义的优先级来调度 Pod 的运行。
相关文章:
在CSDN学Golang云原生(Kubernetes Pod调度)
一,NodeSelector定向调度 在 Kubernetes 中,可以使用 NodeSelector 字段来指定 Pod 调度到哪些节点上运行。NodeSelector 是一个键值对的 map,其中键是节点的标签名,值是标签值。具体步骤如下: 在节点上添加标签 首…...
Rust vs Go:常用语法对比(七)
题图来自 Go vs Rust: Which will be the top pick in programming?[1] 121. UDP listen and read Listen UDP traffic on port p and read 1024 bytes into buffer b. 听端口p上的UDP流量,并将1024字节读入缓冲区b。 import ( "fmt" "net&qu…...
【HarmonyOS】API6使用storage实现轻量级数据存储
写在前面 本篇内容基于API6 JS语言进行开发,通过结合轻量级数据存储开发指导的文档,帮助大家完成一个实际的代码案例,通过这个小案例,可以实现简单数据的存储。 参考文档:文档中心 1、页面布局 首先我们编写一个简单…...
Python Flask构建微信小程序订餐系统 (十二)
🔥 创建切换商品分类状态的JS文件 🔥 ; var food_act_ops={init:function(){this.eventBind();},eventBind:function(){//表示作用域var that = this;$(".wrap_search select[name=status]").change(function(){$(".wrap_search").submit();});$(&qu…...
C++——模板的作用2:特例化
目录 模板的形式: 一.模板的多参数应用: 例: 错误使用1:使用不标准的模板形参表 编辑 错误使用2:使用变量作为实参传递给函数模板 二.模板的特例化: 类模板: 针对模板的特化步骤&am…...
Python Web开发技巧VII
目录 装饰器inject_serializer 装饰器atomic rebase git 清理add的数据 查看git的当前工作目录 makemigrations文件名称 action(detailTrue, methods["GET"]) 如何只取序列化器的一个字段进行返回 Response和JsonResponse有什么区别 序列化器填表和单字段如…...
LaTex4【下载模板、引入文献】
下载latex模板:(模板官网一般都有,去找) 我这随便找了一个: 下载得到一个压缩包,然后用overleaf打开👇: (然后改里面的内容就好啦) 另外,有很多在线的数学公式编辑器&am…...
【VSCode部署模型】导出TensorFlow2.X训练好的模型信息
参考tensorflow2.0 C加载python训练保存的pb模型 经过模型训练及保存,我们得到“OptimalModelDataSet2”文件夹,模型的保存方法(.h5或.pb文件),参考【Visual Studio Code】c/c部署tensorflow训练的模型 其中“OptimalModelDataSet2”文件夹保…...
windows环境下,安装elasticsearch
目录 前言准备安装 jdk 安装nodejsElasticSearch下载ElasticSearch-head 下载 安装ElasticSearch安装ElasticSearch-head插件设置用户名密码访问ElasticSearch 默认用户名和密码参考 前言 win10elasticsearch 8.9.0 准备 安装 jdk ElasticSearch 是基于lucence开发的&#…...
Elasticsearch入门笔记(一)
环境搭建 Elasticsearch是搜索引擎,是常见的搜索工具之一。 Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析…...
记一次安装nvm切换node.js版本实例详解
最后效果如下: 背景:由于我以前安装过node.js,后续想安装nvm将node.js管理起来。 问题:nvm-use命令行运行成功,但是nvm-list显示并没有成功。 原因:因为安装过node.js,所以原先的node.js不收n…...
生态共建丨YashanDB与构力科技完成兼容互认证
近日,深圳计算科学研究院崖山数据库系统YashanDB V22.2与北京构力科技有限公司BIMBase云平台完成兼容性互认证。经严格测试,双方产品完全兼容、运行稳定。 崖山数据库系统YashanDB是深算院自主研发设计的新型数据库系统,融入原创理论…...
React从入门到实战-react脚手架,消息订阅与发布
创建项目并启动 全局安装 npm install -g create-react-app切换到想创建项目的目录,使用命令:create-react-app 项目名称  [外链图片转存失败,源站可能有防盗链机制,建议将图片保存中…(iQ6hEUgAABpQAAAD1CAYAAABeIRZoAAAAAXNSR0IArs4c6QAAIABJREFUe…...
从零构建深度学习推理框架-1 简介和Tensor
源代码作者:https://github.com/zjhellofss 本文仅作为个人学习心得领悟 ,将原作品提炼,更加适合新手 什么是推理框架? 深度学习推理框架用于对已训练完成的神经网络进行预测,也就是说,能够将深度训练框…...
使用WGCLOUD监测安卓(Android)设备的运行状态
WGCLOUD是一款开源运维监控软件,除了能监控各种服务器、主机、进程应用、端口、接口、docker容器、日志、数据等资源 WGCLOUD还可以监测安卓设备,比如安卓手机、安卓设备等 我们只要下载对应的安卓客户端,部署运行即可,如下是下…...
C++笔记之迭代器失效问题处理
C笔记之迭代器失效问题处理 code review! 参考博文:CSTL迭代器失效的几种情况总结 文章目录 C笔记之迭代器失效问题处理一.使用返回新迭代器的插入和删除操作二.对std::vector 来说,擦除(erase)元素会导致迭代器失效 一.使用返回…...
Tomcat的startup.bat文件出现闪退问题
对于双击Tomcat的startup.bat文件出现闪退问题,您提供的分析是正确的。主要原因是Tomcat需要Java Development Kit (JDK)的支持,而如果没有正确配置JAVA_HOME环境变量,Tomcat将无法找到JDK并启动,从而导致闪退。 以下是解决该问题…...
JAVA8-lambda表达式8:在设计模式-模板方法中的应用
传送门 JAVA8-lambda表达式1:什么是lambda表达式 JAVA8-lambda表达式2:常用的集合类api JAVA8-lambda表达式3:并行流,提升效率的利器? JAVA8-lambda表达式4:Optional用法 java8-lambda表达式5…...
React之组件间通信
React之组件间通信 组件通信: 简单讲就是组件之间的传值,包括state、函数等 1、父子组件通信 父组件给子组件传值 核心:1、自定义属性;2、props 父组件中: 自定义属性传值 import Header from /components/Headerconst Home ()…...
【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比
【MATLAB第58期】基于MATLAB的PCA-Kmeans、PCA-LVQ与BP神经网络分类预测模型对比 一、数据介绍 基于UCI葡萄酒数据集进行葡萄酒分类及产地预测 共包含178组样本数据,来源于三个葡萄酒产地,每组数据包含产地标签及13种化学元素含量,即已知类…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
