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

K8S 容器调度

在Kubernetes中,容器调度是一个自动化的过程,负责将容器(在Kubernetes中称为Pod)分配到集群中的合适节点上运行。这一过程由Kubernetes的调度器(kube-scheduler)控制,它通过一系列算法和策略来确保Pod被高效且合理地分配到节点上。以下是关于Kubernetes容器调度的详细解释:

一、调度器的作用

Kubernetes调度器是一个独立的控制平面组件,它负责监视新创建的Pod,这些Pod尚未被分配到节点上,或者Pod当前运行的节点不再满足其要求。调度器通过一系列算法和策略,为这些未调度的Pod找到一个最合适的节点来运行。

二、调度过程

Kubernetes的调度过程主要分为两个阶段:节点筛选(Predicates)和节点优先级选择(Priorities)。

  1. 节点筛选(Predicates)
  • 在此阶段,调度器会检查每个节点的资源是否满足Pod的需求,如CPU、内存、存储等。
  • 同时,还会考虑Pod的亲和性(affinity)、节点的污点(taints)设置等因素,从而过滤出符合Pod运行条件的节点候选集。
  1. 节点优先级选择(Priorities)
  • 在筛选出的节点候选集中,调度器会根据一系列优先级函数为每个节点打分。
  • 最终选择得分最高的节点来运行Pod。如果存在多个得分最高的节点,调度器会从中随机选取一个。

kube-scheduler工作流程

  1. 监听Pod创建事件:
  • kube-scheduler持续监听API服务器上的Pod创建事件。当有新Pod需要被调度时,kube-scheduler会介入处理。
  1. 预选阶段(Predicates):
  • kube-scheduler遍历集群中的所有节点,应用一系列的预选策略来过滤节点。
  • 预选策略包括但不限于:节点资源是否充足(如CPU、内存)、节点标签是否与Pod的NodeSelector匹配、节点上是否有与Pod请求的端口冲突等。
  • 只有通过所有预选策略的节点才会被保留作为候选节点。
  1. 优选阶段(Priorities):
  • 在预选阶段之后,kube-scheduler会对剩余的候选节点应用一系列优选函数进行打分。
  • 优选函数考虑的因素可能包括节点的资源空闲比例、负载均衡情况、节点的亲和性偏好等。
  • kube-scheduler根据优选函数的打分结果,选择分数最高的节点作为Pod的最终运行节点。
  1. 绑定Pod到节点:
  • kube-scheduler将Pod绑定到选定的节点上,并将这一信息更新到API服务器中。
  • 被绑定的节点上的kubelet组件会从API服务器获取Pod的详细信息,并启动容器。

三、调度策略

Kubernetes提供了多种调度策略,以满足不同的应用场景和需求,包括:

  • 优先级调度:通过配置不同的优先级规则,可以确保高优先级的Pod优先获得资源。
  • 亲和性调度:允许Pod指定偏好运行在某些具有特定标签的节点上,或者避免运行在具有特定标签的节点上。
  • 反亲和性调度:与亲和性调度相反,反亲和性调度用于确保Pod之间的分散性,避免它们运行在同一节点上。

策略:

  1. NodeSelector
    用户可以在Pod的定义中指定NodeSelector,要求Pod只能被调度到具有特定标签的节点上。
    这是一种简单且直接的调度方式,适用于基于节点标签进行调度的场景。
  2. NodeAffinity
    NodeAffinity提供了比NodeSelector更灵活的调度规则,包括硬亲和性和软亲和性。
    硬亲和性规则是强制性的,如果找不到满足条件的节点,Pod将保持未调度状态。
    软亲和性规则是优先级的,调度器会尽量满足这些规则,但如果找不到完全满足条件的节点,也会选择其他节点来运行Pod。
  3. PodAffinityPodAntiAffinity
    这些调度策略允许用户根据Pod的标签来选择或避免与特定Pod调度到同一个节点上。
    PodAffinity用于将具有相同或相似属性的Pod调度到同一个节点上,以优化缓存、数据局部性等。
    PodAntiAffinity则用于将具有不同属性的Pod分散到不同的节点上,以提高应用的可用性和容错性。
  4. 污点和容忍度(Taints and Tolerations)
    污点(Taints)允许节点拒绝某些Pod的调度,除非这些Pod声明了能够容忍节点的污点。
    容忍度(Tolerations)是Pod定义中的一个字段,用于指定Pod能够容忍哪些节点的污点。
    这种机制提供了一种灵活的方式来控制Pod的调度位置,特别是当某些节点具有特殊属性(如只能运行特定类型的Pod)时。

四、自定义调度策略

Kubernetes允许用户根据需要自定义调度策略,主要通过定义自定义的Predicates和Priorities来实现。此外,用户还可以通过设置节点亲和性和污点来进一步细化调度策略。

  • 如果内置的kube-scheduler无法满足用户的特殊需求,用户可以编写自定义调度器。
  • 自定义调度器需要监听API服务器上的Pod创建事件,并根据自己的调度算法来选择节点。
  • 用户可以通过Pod的spec.schedulerName字段来指定使用哪个调度器(内置或自定义)。

五、使用示例

要使用Kubernetes进行容器调度,首先需要创建一个资源清单文件(YAML文件),其中包含了容器的资源需求和约束信息。然后,使用kubectl命令行工具将资源清单文件应用到Kubernetes集群中。调度完成后,可以使用kubectl命令行工具查看Pod的运行状态和所在的节点。

1. NodeSelector

  • 节点标签:首先,用户需要为集群中的节点打上相应的标签。这些标签可以是任意的键值对,用于描述节点的特性,如硬件配置、地理位置、网络特性等。
  • Pod定义:在创建Pod时,用户可以在Pod的定义中指定NodeSelector。NodeSelector是一个字段,包含了一个或多个键值对,这些键值对需要与节点的标签相匹配。
  • 调度过程:当Pod被创建时,Kubernetes调度器会检查Pod的NodeSelector,并遍历集群中的所有节点,寻找具有匹配标签的节点。如果找到匹配的节点,调度器就会将Pod调度到该节点上;如果没有找到匹配的节点,Pod将保持未调度状态,直到有节点满足条件或NodeSelector被修改。
    使用场景
  • 资源隔离:将不同类型的应用程序或服务调度到专门标记的节点上,以便更好地隔离资源,避免资源争用和干扰。
  • 硬件约束:根据节点的硬件特性(如GPU、CPU架构等)将Pod调度到特定的节点上,以满足应用的硬件需求。
  • 地理位置:在多地域集群中,通过NodeSelector将Pod调度到特定地理位置的节点上,以降低网络延迟和提高用户体验。
  • 版本控制:将Pod调度到具有特定软件版本或配置的节点上,以便更好地控制应用程序的版本和兼容性。
    示例
apiVersion: v1  
kind: Pod  
metadata:  name: example-pod  
spec:  containers:  - name: example-container  image: nginx  nodeSelector:  disktype: ssd

2. NodeAffinity

NodeAffinity允许开发者通过定义Pod与节点之间的亲和性关系,来影响Pod的调度位置。它允许用户根据节点的标签(Label)和表达式(Expression)来指定Pod应该被调度到哪些节点上,或者应该避免被调度到哪些节点上。

  • 两种类型
    1. 硬亲和性:
    • 硬亲和性规则是强制性的。如果找不到满足条件的节点,Pod将保持未调度状态,直到有节点满足条件或NodeAffinity规则被修改。
    • 它确保了Pod只能被调度到符合特定条件的节点上,有助于满足应用的硬件、软件或地理位置等需求。
    1. 软亲和性:
    • 软亲和性规则是优先级的。调度器会尽量满足这些规则,但如果找不到完全满足条件的节点,也会选择其他节点来运行Pod。
    • 它提供了一种灵活的调度方式,允许在满足其他调度条件的前提下,优先将Pod调度到符合特定条件的节点上。
  • 使用场景
    1. 硬件约束:将需要特定硬件资源的Pod调度到具有相应硬件标签的节点上,如GPU、特定型号的CPU等。
    2. 数据本地性:将依赖特定数据存储的Pod调度到具有相同存储特性的节点上,以减少数据访问延迟和提高性能。
    3. 地理位置感知:将需要在同一地理位置运行的Pod调度到具有相同地理位置标签的节点上,以满足应用的地理位置要求。
    4. 负载均衡:通过软亲和性规则,将Pod优先调度到负载较低的节点上,以实现集群的负载均衡。
  • 示例
apiVersion: apps/v1  
kind: Deployment  
metadata:  name: example-deployment  
spec:  replicas: 3  selector:  matchLabels:  app: example-app  template:  metadata:  labels:  app: example-app  spec:  containers:  - name: example-container  image: nginx  affinity:  nodeAffinity:  requiredDuringSchedulingIgnoredDuringExecution:  nodeSelectorTerms:  - matchExpressions:  - key: disktype  operator: In  values:  - ssd  preferredDuringSchedulingIgnoredDuringExecution:  - weight: 10  preference:  matchExpressions:  - key: zone  operator: In  values:  - us-west-1

注意事项

  • 在使用NodeAffinity时,需要确保集群中有足够数量的节点具有匹配的标签,否则Pod可能会无法被调度。
  • NodeAffinity的表达式和操作符需要正确配置,以确保调度规则能够按预期工作。
  • 硬亲和性规则是强制性的,如果配置不当可能会导致Pod无法被调度。因此,在配置硬亲和性规则时需要谨慎考虑。

3. PodAffinity(Pod亲和性)

定义:
PodAffinity使得一个Pod倾向于与其具有相同标签选择器的其他Pod安排在同一节点(或同一拓扑域),或者与具有特定标签的已运行Pod靠近。这有助于保持相关工作负载的紧密耦合,比如将微服务的多个组件部署在一起以减少网络延迟。
使用场景:

  • 故障区域感知:将同一应用程序的Pod调度到不同的故障区域,提高应用程序的高可用性。
  • 数据本地性:将需要紧密协同工作的Pod调度到同一节点,减少网络延迟,提高性能。
  • 硬件依赖性:将依赖相同硬件资源的Pod调度到同一节点,避免硬件争用。
    示例:
apiVersion: v1  
kind: Pod  
metadata:  name: my-pod  
spec:  affinity:  podAffinity:  requiredDuringSchedulingIgnoredDuringExecution:  - labelSelector:  matchExpressions:  - key: app  operator: In  values:  - my-app  topologyKey: kubernetes.io/hostname

在这个示例中,requiredDuringSchedulingIgnoredDuringExecution规则表示,Pod在调度时必须被安排到与具有app=my-app标签的Pod相同的节点上(由topologyKey: kubernetes.io/hostname指定)。

4. PodAntiAffinity(Pod反亲和性)

定义:
PodAntiAffinity则确保一个Pod不与具有特定标签的已运行Pod安排在同一节点(或同一拓扑域),从而实现故障隔离或资源分散。例如,避免在同一节点上部署两个消耗大量内存的应用实例。
使用场景:

  1. 故障隔离:避免将所有副本或相关服务的实例部署在同一节点或同一可用区,以降低单点故障的风险。
  2. 资源隔离或竞争:防止资源消耗相似的Pod集中在一个节点上,导致资源争抢或过度使用。
    示例:
apiVersion: v1  
kind: Pod  
metadata:  name: my-pod  
spec:  affinity:  podAntiAffinity:  requiredDuringSchedulingIgnoredDuringExecution:  - labelSelector:  matchExpressions:  - key: app  operator: In  values:  - my-other-app  topologyKey: kubernetes.io/hostname

在这个示例中,requiredDuringSchedulingIgnoredDuringExecution规则表示,Pod在调度时必须被安排到与不具有app=my-other-app标签的Pod相同的节点上(由topologyKey: kubernetes.io/hostname指定),从而实现反亲和性。

5. Taints(污点)

Taints(污点)是一种节点属性,用于确保Pod不会被调度到不希望的节点上。污点可以被添加到节点上,以表示该节点具有某些不希望的特性或问题,比如节点正在维护中、节点具有特定的硬件或软件限制等。然后,只有那些能够容忍(Tolerate)这些污点的Pod才会被调度到这些节点上。

  • 组成
    三个部分组成:
    1. key:污点的键,用于唯一标识污点。
    2. value:污点的值,与键一起形成污点的唯一标识。这个值可以是空字符串,但在某些情况下,它可能包含有关污点性质的额外信息。
    3. effect:污点的作用效果,它决定了Pod与污点节点的交互方式。Kubernetes定义了三种effect:
      • NoSchedule:如果节点上存在至少一个未被Pod容忍的污点,则Kubernetes不会将新的Pod调度到该节点上。但是,已经在该节点上运行的Pod不会被驱逐。
      • PreferNoSchedule:这是一个软性约束,Kubernetes会尽量避免将Pod调度到具有该污点的节点上,但如果没有其他更合适的节点,Pod仍然可能被调度到该节点上。
      • NoExecute(仅当节点出现问题时):一旦节点上添加了具有NoExecute effect的污点,并且Pod不能容忍该污点,则Pod将被立即驱逐出节点。这通常用于节点维护或节点出现故障时。
  • 设置和移除污点
    可以使用kubectl taint命令来设置或移除节点的污点。
    • 设置污点:
kubectl taint nodes <node-name> key=value:effect

例如,要给名为node1的节点添加一个key=specialUser、value=user1、effect=NoSchedule的污点,你可以运行:

kubectl taint nodes node1 specialUser=user1:NoSchedule
- 移除污点:
kubectl taint nodes <node-name> key:effect-

注意,在移除污点时,不需要指定value(如果value不是空字符串的话)。例如,要移除上面添加的污点,你可以运行:

kubectl taint nodes node1 specialUser:NoSchedule-
  • 应用场景
    污点和容忍度机制在Kubernetes中非常有用,可以用于多种场景,如:
  • 节点维护:在节点进行维护之前,给节点添加污点,防止新的Pod被调度到该节点上。
  • 资源隔离:将具有特殊资源需求的Pod调度到具有相应资源的节点上,通过给这些节点添加污点,并只给需要这些资源的Pod设置容忍度,实现资源隔离。
  • 故障隔离:在节点出现故障时,给节点添加具有NoExecute effect的污点,将已经在该节点上运行的Pod驱逐出去,防止故障扩散。

6. Tolerations(容忍度)

Tolerations(容忍度)是Pod规格(spec)中的一部分,用于定义Pod能够容忍的节点上的Taints(污点)。当节点被标记了污点时,只有那些具有相应容忍度的Pod才能被调度到该节点上。这提供了一种机制,允许Pod根据节点的特定属性或条件进行调度。

  • 组成
    每个Toleration都由以下部分组成:
    • key:可选。如果指定,则必须与节点上Taint的key相匹配。如果未指定,则Toleration将容忍所有具有相应effect的Taints,而不考虑它们的key和value。
    • operator:可选。用于定义key与value的匹配方式。默认值为Equal,表示key和value都必须匹配。另一个可能的值是Exists,表示只需检查key是否存在,而不需要匹配value。
    • value:可选。与key一起使用,表示要匹配的Taint的值。如果operator是Exists,则不需要指定value。
    • effect:可选。表示Toleration可以容忍的Taint的effect。如果未指定,则Toleration将容忍所有具有相应key和value(如果指定了)的Taints,而不考虑它们的effect。但是,通常建议明确指定effect,以确保Pod只容忍期望的Taints。
    • tolerationSeconds:可选。仅当effect为NoExecute时有效。表示Pod在节点上停留的最长时间(以秒为单位),在超过这个时间后,如果Pod仍然不能容忍节点的Taints,则Pod将被驱逐。
  • 示例
    以下是一个Pod的YAML定义示例,其中包含了对特定Taints的容忍度:
apiVersion: v1  
kind: Pod  
metadata:  name: my-pod  
spec:  containers:  - name: my-container  image: my-image  tolerations:  - key: "key1"  operator: "Equal"  value: "value1"  effect: "NoSchedule"  - key: "key2"  operator: "Exists"  effect: "NoExecute"  tolerationSeconds: 300

在这个示例中,Pod my-pod 定义了两个容忍度:
1. 第一个容忍度容忍了具有key1=value1和effect=NoSchedule的Taints。这意味着,即使节点上有这样的Taints,Pod仍然可以被调度到该节点上。
2. 第二个容忍度容忍了具有key2(不关心value)和effect=NoExecute的Taints,并且设置了tolerationSeconds为300秒。这意味着,如果节点上出现了这样的Taints,并且Pod已经在该节点上运行,Pod将在接下来的300秒内继续在该节点上运行。但是,如果300秒后Pod仍然不能容忍这些Taints(例如,如果Taints没有被移除或Pod没有更新其容忍度),则Pod将被驱逐出节点。

  • 应用场景
    Tolerations在Kubernetes中非常有用,特别是在以下场景中:
  • 节点维护:在节点进行维护之前,给节点添加Taints,并通过在Pod上设置相应的Tolerations来允许特定的维护Pod被调度到这些节点上。
  • 资源隔离:通过给具有特定资源的节点添加Taints,并只给需要这些资源的Pod设置Tolerations,可以实现资源隔离。
  • 故障隔离:在节点出现故障时,给节点添加具有NoExecute effect的Taints,并设置tolerationSeconds,以便在一段时间内允许已经在该节点上运行的Pod完成其任务,然后再被驱逐出节点。

六、注意事项

  • 确保集群中的节点满足容器的资源需求和约束。
  • 如果需要对多个Pod进行统一的调度策略设置,可以考虑使用Deployment或StatefulSet等控制器对象。
  • 在生产环境中,建议使用持久化存储来存储应用程序的数据,并根据实际需求选择合适的存储类型。
  • 为了提高集群的可用性和容错能力,建议部署多个副本的Pod,并根据负载情况自动调整副本数量。

综上所述,Kubernetes的容器调度是一个复杂但高效的过程,它通过智能的调度策略和算法确保了Pod能够被合理地分配到集群中的节点上运行。

相关文章:

K8S 容器调度

在Kubernetes中&#xff0c;容器调度是一个自动化的过程&#xff0c;负责将容器&#xff08;在Kubernetes中称为Pod&#xff09;分配到集群中的合适节点上运行。这一过程由Kubernetes的调度器&#xff08;kube-scheduler&#xff09;控制&#xff0c;它通过一系列算法和策略来确…...

C++ //练习 17.2 定义一个tuple,保存一个string、一个vector<string>和一个pair<string, int>。

C Primer&#xff08;第5版&#xff09; 练习 17.2 练习 17.2 定义一个tuple&#xff0c;保存一个string、一个vector和一个pair<string, int>。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /**********************…...

外观检测设备真的能提高生产效率吗?

零部件外观检测设备是一种专业的设备&#xff0c;用于对各类零部件的外观进行检测和评估。现代制造业中扮演着重要的角色&#xff0c;能够有效提升产品质量&#xff0c;确保产品符合国家标准和客户需求。 首先&#xff0c;零部件外观检测设备具备高精度和高效率的特点。通过采用…...

ant design pro 中用户的表单如何控制多个角色

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时&#xff0c;…...

Prometheus监控系统

目录 1.Prometheus概述 1.1 TSDB时序数据库 1.2 Prometheus 的特点 1.3 Prometheus 的生态组件 1.4 Prometheus 的工作模式&#xff1a; 1.5 Prometheus 的工作流程 1.6 Prometheus 的局限性 2.部署Prometheus 2.1 Prometheust Server 端安装和相关配置 2.2 部署 Expo…...

mq-fanout交换机

交换机 交换机是什么?步骤 交换机本身具备路由功能 消息先发到交换机,交换机在路由到队列,消费者监听队列拿到消息 广播模式是什么 是什么 例如:每个微服务创建队列,订单服务只启动1台,1个消费者,订单 怎么创建 创建一个队列 -交换机里type-选择模式(广播模式) 在交换…...

android13禁用打开wifi ap 热点

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 这个文章介绍的是如何禁止用户打开wifi热点,禁止用户安装app后,打开wifi热点。 2.情况分析 android13 应用层打开wifi AP public void setWifiApEnabled(boolean isEn…...

前端宝典之六:React源码解析之lane模型

本文主要内容&#xff1a; 介绍lane模型 一、 lane模型 lane模型就是react优先级的机制&#xff0c;可以用来 可以表示优先级的不同可能同时存在几个同优先级的更新&#xff0c;所以还得能表示批的概念方便进行优先级相关计算 1、表示优先级不同 lane模型使用31位的二进制…...

邦德咖啡线下门店盛大开业,引领国产健康咖啡新风尚

近日&#xff0c;国内咖啡市场迎来了一股清新的绿色风潮&#xff0c;邦德咖啡线下门店正式拉开帷幕&#xff0c;以其独特的健康理念和创新的产品&#xff0c;誓要成为国产咖啡界的一股强劲力量。 邦德咖啡线下门店以阿卡迪亚绿色为品牌主色调&#xff0c;立志打造国产健康咖啡…...

Elasticsearch + Search UI 构建一个文件搜索引擎

目录 Elasticsearch使用优势App Search Search UI配置engine集中管理配置和提供实用工具函数配置和初始化一个基于Elasticsearch的搜索界面应用程序Search UI 基础用法 好书推荐 Elasticsearch 使用优势 使用ElasticSearch的主要好处在于其强大的全文搜索和实时分析能力。Elas…...

机械学习—零基础学习日志(如何理解概率论2)

全概率公式与贝叶斯公式 上面所提到的公式&#xff0c;可以使用上一篇文章的基本公式推导。 使用到了概率的基本运算公式。 完整的公式展示&#xff1a; 习题练习&#xff1a; 剩余的练习&#xff1a; 第二题解析&#xff1a; 第三题&#xff1a; 第四题&#xff1a; 注意&…...

鸿蒙关于手机全局本地文件读取,写入

一.背景 需求是需要操作用户手机中的文件&#xff0c;不是应用沙箱 二.解决方案 这里要注意的一点拿到fsOpen.path的路径再去进行open文件&#xff0c;因为这里还不知道本地文件路径在哪里&#xff0c;需要选择一下路径再拿到路径去请求 1.这里就是进行两个fs.open&#xf…...

嵌入式企业面试真题

1.C语言中指针数组和数组指针的区别是什么? 答:指针数组是指数组的元素都是指针类型的数组。数组指针是指一个指向数组的指针。指向的是数组第一个元素的地址,每次偏移一个数组的大小。 2.讲一下什么是结构体字节对齐? 答:结构体字节对齐是指当结构体中元素的物理内存大…...

开源一款H5自适应留言表白墙php源码下载

开源一款H5自适应留言表白墙php源码下载&#xff0c;优点就是安装简单&#xff0c;功能实用[滑稽][滑稽] 缺点就是UI简陋&#xff0c;功能稀少 第一张是首页&#xff0c;第二张是查看留言 第三张是留言列表(10秒自动刷新)&#xff0c;第四张是表白墙界面...

jmeter引入jar包的三种方式

示例 实现对登录密码进行MD5加密 pom文件依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.12&l…...

零基础学习Redis(5) -- redis单线程模型介绍

前面我们提到过&#xff0c;redis是单线程的&#xff0c;这期我们详细介绍一下redis的单线程模型 1. redis单线程模型 redis只使用一个线程处理所有的请求&#xff0c;并不是redis服务器进程内部只有一个线程&#xff0c;其实也存在多个线程&#xff0c;只不过多个线程是在处…...

Android Audio

audio概述&#xff1a; Android Audio知识梳理 看完这一篇就够了&#xff01;-CSDN博客 Android audio篇章&#xff08;1&#xff09;------Audio架构_android audio(1)-CSDN博客 android audio google&#xff1a; 音频 | Android Open Source Project (google.cn) 音频…...

远程MySQL数据库:定义、优势及cPanel的数据库工具

在现代网站和应用程序开发中&#xff0c;数据库是必不可少的核心部分。通常情况下&#xff0c;数据库与网站托管在同一台服务器上&#xff0c;但为了提升性能和安全性&#xff0c;越来越多的用户选择使用远程MySQL数据库。那么&#xff0c;什么是远程MySQL数据库呢&#xff1f;…...

【docker】Dockerfile

Dockerfile是用于构建Docker镜像的文本文件&#xff0c;其中包含一组用于定义镜像构建过程的指令。下面是常见的Dockerfile指令及其解释&#xff1a; FROM&#xff1a;指定基础镜像&#xff0c;用于构建新镜像。COPY&#xff1a;将文件或目录从构建上下文复制到镜像中。ADD&am…...

Redis 的 List 结构非常适合用于实现消息队列php

1. Redis List 结构消息队列简介 Redis 的 List 结构非常适合用于实现消息队列。你可以通过 LPUSH 或 RPUSH 命令将消息推入队列&#xff0c;通过 BLPOP 或 BRPOP 命令从队列中弹出消息。BLPOP 和 BRPOP 命令支持阻塞操作&#xff0c;适合在消费者端等待消息的到来。 2. 实现…...

极速闪存启动:SD与SPI模式的智能初始化指南

最近很多客户朋友在询问我们 CS 创世 SD NAND 能不能使用 SPI 接口&#xff0c;两者使用起来有何区别&#xff0c;下面为大家详细解答。 SD MODE: CS 创世 SD NAND 支持 SD 模式和 SPI 模式&#xff0c;SD NAND 默认为 SD 模式&#xff0c;上电后&#xff0c;其初始化过程如下…...

利用多Lora节省大模型部署成本|得物技术

一、背景 近期&#xff0c;我们在大模型集群的部署过程中遇到了一些挑战。公司有多个业务场景&#xff0c;每个场景都基于自身的数据进行微调&#xff0c;训练出相应的大模型并上线。然而&#xff0c;这些场景的调用量并不高&#xff0c;同时大模型的部署成本较为昂贵&#xf…...

使用SSMS连接和查询 SQL Server 实例

简介 SQL Server Management Studio 是用于管理SQL Server基础架构的集成环境。Management Studio提供用于配置、监视和管理SQL Server实例的工具。 此外&#xff0c;它还提供了用于部署、监视和升级数据层组件(如应用程序使用的数据库和数据仓库)的工具以生成查询和脚本。 官方…...

HarmonyOS Next原生应用开发-从TS到ArkTS的适配规则(十五)

一、不支持for … in 规则&#xff1a;arkts-no-for-in 级别&#xff1a;错误 由于在ArkTS中&#xff0c;对象布局在编译时是确定的、并且不能在运行时被改变&#xff0c;所以不支持使用for … in迭代一个对象的属性。对于数组来说&#xff0c;可以使用常规的for循环。TypeScri…...

两个系统之间跳转免密登录

1、 两个系统之间跳转免密登录_从一个系统跳转到另一个系统,不用再重新登录-CSDN博客 2、 页面跳转统一登录实现_前端从一个系统跳转到其他系统-CSDN博客...

SQL基础——MySQL的触发器、存储引擎、事务

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、MySQL的触发器 1.概述 介绍 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是触发器无需调用&…...

目标检测算法:对比YOLOv3、YOLOv5、YOLOv8

目标检测 YOLOv3 数据处理 可输入任意大小的图片&#xff08;特征图大小最好是32倍数&#xff09;Anchor&#xff1a;K-Means聚类IOUNMS 模型结构 Backbone Darknet53 无最大池化&#xff0c;步长2卷积层进行下采样每个Conv后 BN LeakyReLU引入残差结构中间层和某一层上…...

C# 属性(Property)

C# 属性&#xff08;Property&#xff09; C# 中的属性&#xff08;Property&#xff09;是一种用于访问和设置类或结构体成员的值的特殊成员。属性提供了一种封装字段的方式&#xff0c;使得字段的访问更加安全和灵活。本文将详细介绍 C# 属性的概念、用途、语法以及如何使用…...

3. 数据结构——栈的操作实现

1. 顺序栈 主要操作&#xff1a;初始化、栈判空、入栈、出栈、去栈顶元素 1.1 直接数组存储栈 //顺序栈的实现 #include<stdio.h> #define MaxSize 50 typedef int ElemType; typedef struct{ElemType data[MaxSize];int top; //指向栈顶指针&#xff0c;最开始-1 …...

EmguCV学习笔记 VB.Net 4.5 像素距离和连通区域

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…...