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

【Kubernetes实战】三、资源组件Namespace、Pod、Label、Deployment、Service概述。

目录

  • 1. Namespace
    • 1) namespace作用
    • 2) namespace资源的具体操作
  • 2. Pod
    • 1) Pod概述
    • 2) Pod资源的具体操作
  • 3. Label
    • 1) Label概述
    • 2) Label资源的具体操作
  • 4. Deployment
    • 1) Deployment概述
    • 2) Deployment控制器的具体操作
  • 5. Service
    • 1) Service概述
    • 2) Service资源的具体操作


1. Namespace

1) namespace作用

Namespace主要作用实现多套环境的资源隔离多租户的资源隔离

● 多套环境的资源隔离:默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
在这里插入图片描述

● 多租户的资源隔离:可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
在这里插入图片描述

Kubernetes在启动之后,会默认创建几个Namespace:
在这里插入图片描述
① default:所有未指定Namespace的对象都会被分配到default命名空间;
② kube-flannel:存放网络插件相关的pod;
③ kube-node-lease:集群节点之间的心跳维护(节点间通过心跳来确保对方处于运行状态),v1.13开始引入,少用;
④ kube-public:此命名空间下的所有资源可以被所有人访问,包括未认证的用户,比较不安全,少用;
⑤ kube-system:所有由Kubernetes系统创建的资源都位于此命名空间下。
在这里插入图片描述

2) namespace资源的具体操作

  1. 查看namespace
# 查看所有namespace
kubectl get ns
# 查看某个namespace
kubectl get ns ns_name
# 查看某个namespace详情
kubectl describe ns ns_name

在这里插入图片描述
在这里插入图片描述
资源限制结合第一部分提到的资源配额机制(CPU使用量、内存使用量等等),即在此处进行设置。

  1. 创建namespace
kubectl create ns ns_name
  1. 删除namespace
kubectl delete ns ns_name
  1. 使用yaml文件进行配置
# test-ns.yaml
apiVersion: v1
kind: Namespace
metadata:name: test-ns

再执行创建或删除命令

kubectl create -f test-ns.yaml # 也可以使用apply
kubectl delete -f test-ns.yaml

在这里插入图片描述
总之,Namespace实际上就是一种边界,用来实现资源的隔离。

2. Pod

1) Pod概述

首先清楚kubernetes的逻辑关系:kubernetes本身是集群 --> 集群通过运行程序对外提供服务 --> 程序必须运行在容器中 --> 容器必须存在于Pod中 --> Kubernetes集群通过管理pod控制其中的容器 --> 进而管理其中的程序。

Pod是kubernetes集群进行管理的最小单元。Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器
在这里插入图片描述
kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:

kubectl get pods -n kube-system

在这里插入图片描述

2) Pod资源的具体操作

  1. 创建并运行

kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的

命令格式

kubectl run pod控制器名称(自定义) [参数]

–image:指定pod镜像;
–pod:指定端口;
–namespace:指定命名空间,不指定的话默认是default命名空间。

kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace test-ns

在这里插入图片描述

  1. 查看pod信息
# 查看Pod基本信息
kubectl get pods -n ns_name
kubectl get pods -n ns_name -o wide
# 查看Pod详细信息
kubectl describe pod pod_name -n ns_name

在这里插入图片描述
在这里插入图片描述
events内容用来查错,其内容描述了pod内容器的操作。

  1. 访问pod
# 获取podIP
kubectl get pods -n test-ns -o wide
# 访问pod
curl pod_IP

在这里插入图片描述

  1. 删除指定pod
kubectl delete pod pod_name -n ns_name

在这里插入图片描述
发现删除之后又重新运行了一个新pod。这是pod控制器在发挥作用。查看Pod控制器:

kubectl get deployment -n test-ns

在这里插入图片描述
nginx就是在kubectl run时指定的pod控制器名称。要想彻底删除pod,要删除其pog控制器:

kubectl delete deployment nginx -n test-ns

在这里插入图片描述

  1. 通过yaml文件进行操作
# test-nginx-pod.aml
apiVersion: v1
kind: Pod
metadata:name: nginx # Pod名称而非Pod控制器名称namespace: test-ns
spec:containers:- image: nginx:1.17.1imagePullPolicy: IfNotPresentname: podports: - name: nginx-portcontainerPort: 80protocol: TCP

然后执行其创建和删除命令:

kubectl create -f test-nginx-pod.yaml
kubectl delete -f test-nginx-pod.yaml

在这里插入图片描述
在这里插入图片描述

3. Label

1) Label概述

Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
在这里插入图片描述
【例如】现在有两组一堆pod,像将它们分为两组,一组负责前端,一组负责后端,对着两组进行分别的管理,比如前端的这一组同时创建或同时删除,后端同理。
提到分组可能会想到Namespace,为这两组pod设置不同的Namespace。但是不同Namespace下的pod无法进行通信,但理论上一个网站的前后端应该能正常通信,因此无法使用Namespace。
因此可以使用Label(标签),为pod打上标签。再通过标签选择器进行选择,带有tier:front标签的pod是前端的pod,带有tier:back标签的pod是后端的pod。
在这里插入图片描述
因此,所谓的标签,就是一种标识选择机制。为pod添加标识,通过标识对pod进行选择和区分。

  • Label的特点:
    • 一个Label会以key/value键值对的形式附加到各种资源对象(如Node、Pod、Service等等)上;
    • 一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去;
    • Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除。

可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。

一些常用的Label 示例如下:

  • 版本标签:“version”:“release”, “version”:“stable”…
  • 环境标签:“environment”:“dev”,“environment”:“test”,“environment”:“pro”
  • 架构标签:“tier”:“frontend”,“tier”:“backend”

标签定义完毕之后,还要考虑到标签的选择,这就要使用到Label Selector,即:Label用于给某个资源对象定义标识;Label Selector用于查询和筛选拥有某些标签的资源对象。当前有两种Label Selector:

  1. 基于等式的Label Selector

name = slave: 选择所有包含Label中key="name"且value=“slave"的对象。例如标签选择器:version = release,就是选择所有标签为"version”:"release"的pod;
env != production: 选择所有包括Label中的key=“env"且value不等于"production"的对象。例如标签选择器:environment != dev,就是选择所有标签为"environment”:“xxx”,此时的xxx可以是任意值但不能是不能为dev,且键必须为environment。

  1. 基于集合的Label Selector

name in (master, slave): 选择所有包含Label中的key="name"且value="master""slave"的对象;
name not in (frontend): 选择所有包含Label中的key="name"且value不等于"frontend"的对象。

标签的选择条件可以使用多个,此时将多个Label Selector进行组合,使用逗号","进行分隔即可。例如:
name=slave,env!=production
name not in (frontend),env!=production

2) Label资源的具体操作

  1. 为pod打标签
kubectl label pod nginx version=v1.0 -n test-ns

在这里插入图片描述
也可以给他打多个标签,接着上步执行:

kubectl label pod nginx tier=back -n test-ns

在这里插入图片描述

  1. 更新Pod标签

现在想把版本号从1.0更新到2.0,如果直接做如下的修改,结果是什么?

kubectl label pod nginx version=v2.0 -n test-ns

在这里插入图片描述
显示version这个键已经有一个值v1.0了,提示我们要加上–overwrite(覆盖)。加上–overwrite参数试一下:

kubectl label pod nginx version=v2.0 -n test-ns --overwrite

在这里插入图片描述

  1. 查看pod标签
kubectl get pods -n test-ns --show-labels

在这里插入图片描述

  1. 筛选标签
kubectl get pods -n test-ns -l version=v2.0 --show-labels
kubectl get pods -n test-ns -l version!=v2.0 --show-labels

在这里插入图片描述

  1. 删除标签
kubectl label pod nginx version- -n test-ns

在这里插入图片描述

  1. 通过配置文件对pod进行标签操作
# test-pod-label.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx-labelnamespace: test-nslabels:version: "3.0"env: "test"
spec:containers:- image: nginx:1.17.1name: nginx-podports: - name: nginx-portcontainerPort: 80protocol: TCP

然后执行命令:

kubectl apply -f test-pod-label.yaml

在这里插入图片描述

4. Deployment

1) Deployment概述

在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。在kubernetes中Pod控制器的种类有很多,每个控制器对应一种应用场景,此处只介绍一种:Deployment。

Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。

确保pod资源符合预期的状态:比如现在需要三个pod来运行nginx程序,则告诉Deployment,Deployment会创建出三个pod来运行nginx程序。若其中一个pod运行过程中出现故障宕机了,此时只剩下两个pod在运行,这并不符合我们预期的状态(3个)。则此时Deployment会迅速对宕机的pod进行重启,若重启失败则会删除这个pod,重新创建一个新pod来运行nginx程序,确保pod资源符合预期的状态。
这也是为什么之前直接删pod删不干净,因为不符合预期状态了,则Pod控制器会创建一个新的pod来代替我们删除的那个pod。
在这里插入图片描述

2) Deployment控制器的具体操作

为了防止之前创建的资源干扰视线,在操作Deployment前删除test-ns命名空间下的所有资源:

# 删除命名空间
kubectl delete ns test-ns
# 创建命名空间
kubectl create ns test-ns

在这里插入图片描述

  1. 创建pod
# kubectl run deployment_name [参数]
kubectl run nginx-deployment --image=nginx:1.17.1 --port=80 --replicas=3 -n test-ns

–image:指定pod内容器要运行的镜像;
–port:指定要暴漏的端口号;
–replicas:指定要创建的pod的数量(预期状态),默认为1;
–namespace:指定pod运行的命名空间。
在这里插入图片描述
UP-TO-DATE:成功升级的副本数量
AVAILABLE:可用副本的数量

  1. 查看Deployment信息
# 查看Deployment信息
kubectl get deploy -n test-ns
kubectl get deploy -n test-ns -o wide
# 查看某个Deployment详细信息
kubectl describe deployment nginx-deployment -n test-ns

在这里插入图片描述
查看一下标签为:run=nginx-deployment的pod:

kubectl get pods -n test-ns -l run=nginx-deployment --show-labels

在这里插入图片描述
Deployment与Pod建立联系是通过标签Label,Deployment本身包含标签选择器,进而得知自己要管理哪些pod。

  1. 删除Deployment
kubectl delete deployment nginx-deployment -n test-ns

注意:删除pod控制器,其下的所有pod也会被删除。
在这里插入图片描述

  1. 通过配置文件操作Deployment
# test-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata: name: nginx-deploynamespace: test-ns
spec:# pod副本数replicas: 3# Label选择器,关联Deployment与podsselector:matchLabels:run: nginx-deploy# Pod模板:Deployment所创建的pod的模板template:metadata:labels:run: nginx-deployspec:containers:- image: nginx:1.17.1name: nginxports:- containerPort: 80protocol: TCP

然后执行命令:

kubectl apply -f test-deployment.yaml

在这里插入图片描述

5. Service

1) Service概述

上一部分创建了一个副本量为3的pod组,如想访问其中一个pod,需要知道它的ip+端口:

kubectl get pods -n test-ns -o wide
curl IP+端口

在这里插入图片描述
现在删除这个pod:发现Pod控制器有创建了一个新的pod,并且它的IP地址也发生了变化。
在这里插入图片描述
但我的程序若想对外提供服务,需要提供我的IP地址。假如在运行过程中pod宕机了,重建之后所对应的IP地址会发生改变,然而这对外部是不透明的,因此服务会失效。因此虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
① Pod IP 会随着Pod的重建产生变化;
② Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问。
这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。

Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。

在这里插入图片描述

2) Service资源的具体操作

  1. 创建集群内部可访问的Service
# 1. 暴露Service
kubectl expose deploy deployment_name --name=service_name --type=service_type --port=80 --target-port=80 -n namespace_name
  • expose:暴露操作;
  • deploy deployment_name:通过Deployment控制器来寻找pod。这是因为pod组随时可能发生变化,而这些变化都是通过Deployment控制器管理的,如果Service直接寻找pod会存在问题,因此实际上是Service指定要暴露Deployment控制器管理中的哪个Pod;
  • –name=service_name:指定Service名称;
  • –type=service_type:指定Service类型,默认是ClusterIP;
  • –port=80:指定端口号(service暴露的端口);
  • –target-port=80:指定目标端口号(对应pod的端口);
  • -n namespace_name:指定操作的命名空间。
kubectl expose deploy nginx-deploy --name=nginx-svc1 --type=ClusterIP --port=80 --target-port=80 -n test-ns

在这里插入图片描述

# 查看Service
kubectl get service -n test-ns

在这里插入图片描述
这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的。可以通过这个IP访问当前service对应的pod:

curl 10.101.27.64:80

在这里插入图片描述

  1. 创建集群外部也可访问的Service

上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问;如果需要创建外部也可以访问的Service,需要修改type为NodePort。

kubectl expose deploy nginx-deploy --name=nginx-svc2 --type=NodePort --port=80 --target-port=80 -n test-ns

在这里插入图片描述
发现此时出现了一对port。其中80端口是暴露给内部的,而31115端口是Node节点暴露给集群外部的端口号,此时便可通过mater节点IP:31115在外部访问到集群服务。例如在的电脑主机上通过浏览器访问下面的地址:http://192.168.12.100:31115/
在这里插入图片描述

  1. 删除service
kubectl delete svc nginx-svc1 -n test-ns
kubectl delete svc nginx-svc2 -n test-ns

在这里插入图片描述

  1. 通过配置文件设置service
# test-service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-svcnamespace: test-ns
spec:# 当type为clusterIP时,此下的clusterIP可写可不写。写了就是指定的,不写就随机分配clusterIP: 10.101.27.64ports:- port: 80protocol: TCPtargetPort: 80selector:run: nginxtype: ClusterIP

然后执行命令:

kubectl apply -f test-service.yaml

在这里插入图片描述
删除service:

kubectl delete -f test-service.yaml

在这里插入图片描述
参考:B站大学

相关文章:

【Kubernetes实战】三、资源组件Namespace、Pod、Label、Deployment、Service概述。

目录 1. Namespace1) namespace作用2) namespace资源的具体操作 2. Pod1) Pod概述2) Pod资源的具体操作 3. Label1) Label概述2) Label资源的具体操作 4. Deployment1) Deployment概述2) Deployment控制器的具体操作 5. Service1) Service概述2) Service资源的具体操作 1. Name…...

去中心化的模型训练

去中心化的模型训练(Decentralized Model Training)是一种不依赖单一中心服务器或数据存储中心,而是在多个节点(如设备或数据拥有者)上进行联合训练的方法。这种训练模式可以更好地保护数据隐私、降低数据传输成本&…...

Arthas调试线上代码技巧

1、Arthas概述 官网地址:https://arthas.aliyun.com/ 下载地址:https://arthas.aliyun.com/arthas-boot.jar 使用教程:https://arthas.aliyun.com/doc/quick-start.html Arthas(阿尔萨斯)是 Alibaba 开源的一款Java诊断…...

QT访问数据库:应用提示Driver not loaded

在QT中运行完全正确错误截图 解决办法1 我用的是MySQL。我把libmysql.dll复制到应用程序的目录下&#xff0c;即可正常访问数据库。 解决办法2 bool open_work_db() {QString info "support drivers:";for (int i0; i<QSqlDatabase::drivers().size(); i){inf…...

支持ANC的头戴式蓝牙耳机,更有小金标认证,QCY H3 Pro体验

平时听音乐、看视频&#xff0c;大家都想获得更悦耳的音质体验&#xff0c;这时候蓝牙耳机就是性价比更高的一种方案&#xff0c;同时因其无线束缚、便携性高的特点&#xff0c;随时拿出来就能用。更不用说如今国产品牌的蓝牙耳机升级迭代速度非常快&#xff0c;百元的价位就可…...

net framework 3.5组件更新失败错误代码0x80072f8f怎样解决

浏览器地址栏输入www.dnz9.com远程解决netframework问题 当遇到.NET Framework 3.5 组件更新失败&#xff0c;错误代码为 0x80072f8f 时&#xff0c;可以尝试以下几种解决方法&#xff1a; 一、检查网络连接和时间设置 网络连接 错误代码 0x80072f8f 通常与网络相关问题有关。首…...

C语言初阶:十一.代码调试技巧

❤欢迎各位大佬访问&#xff1a;折枝寄北-CSDN博客折枝寄北擅长C语言初阶,等方面的知识,折枝寄北关注python,c,java,qt,c语言领域.https://blog.csdn.net/2303_80170533?typeblog❤文章所属专栏https://blog.csdn.net/2303_80170533/category_12794764.html?spm1001.2014.300…...

Jenkins Pipeline 部署总结

Jenkins Pipeline 部署总结 前言 Jenkins Pipeline 是 Jenkins 提供的一套强大的工作流框架&#xff0c;它允许开发者以代码的形式定义整个软件交付过程&#xff0c;从而实现持续集成和持续部署&#xff08;CI/CD&#xff09;。通过 Pipeline&#xff0c;原本独立运行于单个或…...

HTTP的初步了解

目录 前言 一、HTTP协议的基本概念 1.1、请求格式 1.2、响应格式 二、HTTP链接问题 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; HTTP协议是超文本传输协议 HTTP的短连接&#xff1a;建立连接——数据传输——关闭连接 HTTP的长连接&#xff1a;…...

SM单元 硬件

在硬件上&#xff0c;SM&#xff08;Streaming Multiprocessor&#xff09;指的是流式多处理器单元&#xff0c;它是GPU架构中非常重要的组成部分。SM可以看作是GPU的心脏&#xff0c;类似于CPU核心&#xff0c;负责执行并行计算任务。每个SM包含多个流处理器&#xff08;cores…...

如何从CSV、JSON等格式创建DataFrame

在Spark中&#xff0c;你可以使用 SparkSession 从CSV和JSON等格式创建 DataFrame。以下是如何从这两种格式创建 DataFrame 的示例。 1. 从CSV文件创建DataFrame scala// 创建SparkSessionval spark SparkSession.builder().appName("CSV to DataFrame").getOrCrea…...

Java避坑案例 - 线程池错误的混用引发的性能故障分析

文章目录 问题现象问题分析问题修复线程池的混用策略任务类型与线程池配置最佳实践 问题现象 代码使用了线程池异步处理一些内存中的数据&#xff0c;但通过监控发现处理得非常慢&#xff0c;整个处理过程都是内存中的计算不涉及 IO 操作&#xff0c;也需要数秒的处理时间&…...

七种方法助你找到实用且免费的API服务

随着现代互联网的迅猛发展&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为推动技术创新的核心工具。API使得开发者能够快速实现复杂的功能&#xff0c;如数据分析、自然语言处理、图像识别等&#xff0c;而无需从头编写大量的代码。在这个开放的生态中&#xf…...

leetcode-74-搜索二维矩阵

题解&#xff1a; 遍历二维数组matrix中的每个list&#xff0c;如果target在list中则返回True&#xff08;退出循环&#xff09;&#xff1b;如果全部遍历完还没有出现target则返回False。 核心就是在list中查找target&#xff01; 代码实现&#xff1a;...

122.WEB渗透测试-信息收集-ARL(13)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;121.WEB渗透测试-信息收集-ARL&#xff08;12&#xff09; 输入命令&#xff1a; docker…...

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到…...

【Linux网络】TCP_Socket

目录 TCP协议&#xff08;传输控制协议&#xff09; listen状态 accept和connect TCP_echo_server (1)创建套接字 &#xff08;2&#xff09;绑定 &#xff08;3&#xff09;设置listen状态 &#xff08;4&#xff09;loop &#xff08;5&#xff09;客户端 多线程远程…...

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上

在当今智能化、数字化的时代&#xff0c;视频监控已经成为各行各业不可或缺的一部分&#xff0c;无论是公共安全、交通管理、企业监控还是智慧城市建设&#xff0c;都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中&#xff0c;将监控视频实时投放到大屏幕电视墙上…...

Springboot集成阿里云通义千问(灵积模型)

我这里集成后&#xff0c;做成了一个工具jar包&#xff0c;如果有不同方式的&#xff0c;欢迎大家讨论&#xff0c;共同进步。 集成限制&#xff1a; 1、灵积模型有QPM(QPS)限制&#xff0c;每个模型不一样&#xff0c;需要根据每个模型适配 集成开发思路&#xff1a; 因有…...

微信公众号(或微信浏览器)获取openId(网页授权)

下单支付需要openId 首先授权去拿到code --然后调用后太换取openId 1.去拿取code 下图中执行到window.location.href &#xff08; redirect_uri 传入当前路径-&#xff09;–执行后重新跳转到当前页面–但是路径上会带上code参数 //然后调用后台方法–将code传给后台得到 o…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...