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

[单master节点k8s部署]11.服务service

service

service是一个固定接入层,客户端 可以访问service的ip和端口,访问到service关联的后端pod,这个service工作依赖于dns服务(coredns)

每一个k8s节点上都有一个组件叫做kube-proxy,始终监视着apiserver上获取任何一个与service资源相关的变得信息,一旦service资源发生变动,kube-proxy都会利用规则来调度,保证service实现。

写一个service的yaml文件,用来管理之前deployment创建的pod

[root@master yam_files]# cat deploy-service.yaml 
apiVersion: v1
kind: Service
metadata: name: deploy-nginxnamespace: defaultspec:ports:- port: 80targetPort: 80selector:app: myapptype: NodePort
[root@master yam_files]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: my-deploymentlabels:app: my-deploymentspec:replicas: 2selector:matchLabels: app: myappversion: v1strategy:rollingUpdate:maxSurge: 1maxUnavailable: 1 template:metadata: name: testlabels:app: myappversion: v1spec:containers:- name: my-containerimage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80startupProbe:periodSeconds: 5initialDelaySeconds: 20timeoutSeconds: 10httpGet:scheme: HTTPport: 80path: /livenessProbe:periodSeconds: 5initialDelaySeconds: 20timeoutSeconds: 10httpGet:scheme: HTTPport: 80path: /readinessProbe:periodSeconds: 5initialDelaySeconds: 20timeoutSeconds: 10httpGet:scheme: HTTPport: 80path: /

查看svc的端口,发现由于这个服务是nodePort类型的,所以80端口映射到外部的30721端口 

kubectl get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
deploy-nginx      NodePort    10.111.154.75    <none>        80:30721/TCP                    59m

 发现这个service的endpoint对应着deployment创建的pod

[root@master yam_files]# kubectl describe svc deploy-nginx
Name:                     deploy-nginx
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 app=myapp
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.111.154.75
IPs:                      10.111.154.75
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30721/TCP
Endpoints:                10.244.104.32:80,10.244.166.175:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[root@master yam_files]# kubectl get svc -owide
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE     SELECTOR
deploy-nginx      NodePort    10.111.154.75    <none>        80:30721/TCP                    6h30m   app=myapp
kubernetes        ClusterIP   10.96.0.1        <none>        443/TCP                         10d     <none>
readiness         ClusterIP   10.107.242.111   <none>        80/TCP                          2d3h    app=my-pod
springboot-live   NodePort    10.98.119.36     <none>        8080:31180/TCP,8081:31181/TCP   29h     app=springboot
[root@master yam_files]# kubectl get pods -owide
NAME                            READY   STATUS    RESTARTS   AGE     IP               NODE    NOMINATED NODE   READINESS GATES
my-deployment-8cd4898cd-46g5n   1/1     Running   0          5h11m   10.244.166.175   node1   <none>           <none>
my-deployment-8cd4898cd-mhkbs   1/1     Running   0          5h11m   10.244.104.32    node2   <none>           <none>

查看防火墙ipvs规则,可以看到,172.17.0.1:30721对应的是上面my-deployment的两个pod的80端口,其中172.17.0.1是docker网桥地址,常用于节点内部的容器通信,而10开头的是k8s内部的网络地址,用于pod和服务之间通信

[root@master yam_files]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.17.0.1:30721 rr-> 10.244.104.32:80             Masq    1      0          0         -> 10.244.166.175:80            Masq    1      0          0         
TCP  172.17.0.1:31181 rr
TCP  192.168.122.1:30721 rr-> 10.244.104.32:80             Masq    1      0          0         -> 10.244.166.175:80            Masq    1      0          0         
ClusterIP 

建立一个clusterIP的service,用来管理两个pod

cat service_test.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-servicelabels:run: my-nginx
spec:type: ClusterIPselector: run: my-nginxports:- port: 80protocol: TCPtargetPort: 80[root@master service]# cat pod_test.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginxlabels:app: my-nginxspec:replicas: 2selector:matchLabels:run: my-nginxtemplate:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginximagePullPolicy: IfNotPresentports:  - containerPort: 80  

查看service和endpoint,发现nginx-service成功连接到两个pod的80端口 

kubectl get svc
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
nginx-service     ClusterIP   10.98.178.209    <none>        80/TCP                          70s
[root@master service]# kubectl get pods -owide
NAME                        READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
my-nginx-5684588fff-8djq6   1/1     Running   0          53m   10.244.104.33    node2   <none>           <none>
my-nginx-5684588fff-k5dp6   1/1     Running   0          53m   10.244.166.176   node1   <none>           <none>
[root@master service]# kubectl get ep
NAME              ENDPOINTS                            AGE
nginx-service     10.244.104.33:80,10.244.166.176:80   40m

验证是否可以进行DNS解析: Kubernetes 使用特定的 DNS 命名约定来访问服务,这是为了确保服务发现的统一和规范化。具体格式为 service-name.namespace.svc.cluster.local,可以看到解析出了这个svc的地址:10.98.178.209

kubectl exec -it my-nginx-5684588fff-8djq6 -- /bin/bash
root@my-nginx-5684588fff-8djq6:/# curl nginx-service.default.svc.cluster.local
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@my-nginx-5684588fff-8djq6:/# nslookup nginx-service.default.svc.cluster.local
Server:		10.96.0.10
Address:	10.96.0.10#53Name:	nginx-service.default.svc.cluster.local
Address: 10.98.178.209
四层负载均衡

 OSI模型为七层,物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,其中svc工作在OSI模型的第四层,传输层,基于ip和端口来转发和负载均衡。而七层负载均衡器工作在应用层,根据 HTTP/HTTPS 请求的内容(如 URL、头信息、Cookie 等)来进行流量分配。Kubernetes 中的 Ingress 控制器(如 Nginx Ingress Controller、Traefik 等)就属于七层负载均衡器,它们可以基于 HTTP 请求的路径、主机头等信息进行更细粒度的流量管理。

NodePort 

写一个nodePort的service

[root@master service]# ss -antulp | grep :30080
[root@master service]# cat nodeport_service.yaml 
apiVersion: v1
kind: Service
metadata:name: my-nginx-nodeportlabels:run: my-nginx-nodeportspec:selector:run: my-nginx-nodeporttype: NodePortports:- nodePort: 30380targetPort: 80protocol: TCPport: 80

写一个deployment

[root@master service]# cat nodeport_test.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx-nodeportspec:replicas: 2selector:matchLabels:run: my-nginx-nodeporttemplate:metadata:name:labels:run: my-nginx-nodeportspec:containers:- name: my-nginx-nodeport-coontainerimage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80

 查看发现,端口已经开始监听,防火墙规则已经设置

[root@master service]# kubectl get svc
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
deploy-nginx        NodePort    10.111.154.75    <none>        80:30721/TCP                    9h
kubernetes          ClusterIP   10.96.0.1        <none>        443/TCP                         11d
my-nginx-nodeport   NodePort    10.99.238.240    <none>        80:30380/TCP                    16m
[root@master service]# ss -antulp | grep :30380
tcp    LISTEN     0      128       *:30380                 *:*                   users:(("kube-proxy",pid=31181,fd=17))
[root@master service]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.99.238.240:80 rr-> 10.244.104.34:80             Masq    1      0          0         -> 10.244.166.177:80            Masq    1      0          0         

service endpoint已经和正在运行的pod关联上

[root@master service]# kubectl get ep
NAME                ENDPOINTS                            AGE
deploy-nginx        <none>                               9h
kubernetes          100.64.252.90:6443                   11d
my-nginx-nodeport   10.244.104.34:80,10.244.166.177:80   9m31s
nginx-service       <none>                               87m
readiness           <none>                               2d6h
springboot-live     <none>                               32h
[root@master service]# kubectl get pods -owide
NAME                                 READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
my-nginx-nodeport-5c8769d7f8-b7jzk   1/1     Running   0          18m   10.244.104.34    node2   <none>           <none>
my-nginx-nodeport-5c8769d7f8-qkzpb   1/1     Running   0          18m   10.244.166.177   node1   <none>           <none>

 此时在外部请求物理节点ip加上端口,就可以访问service了,同时进入一个pod,可以验证dns解析,解析出来的service ip是10.99.238.340

[root@master service]# curl 100.64.252.90:30380
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>root@master service]# kubectl exec -it my-nginx-nodeport-5c8769d7f8-b7jzk -- /bin/bash
root@my-nginx-nodeport-5c8769d7f8-b7jzk:/# nslookup my-nginx-nodeport.default.svc.cluster.local
Server:		10.96.0.10
Address:	10.96.0.10#53Name:	my-nginx-nodeport.default.svc.cluster.local
Address: 10.99.238.240

 在 Kubernetes 中,DNS 解析的工作机制是通过集群内部的 CoreDNS 或 kube-dns 服务来完成的。这些服务运行在 Kubernetes 集群内,并且默认只对集群内部的 Pod 提供 DNS 解析服务。这是为什么在 Kubernetes 的 master 节点(或者任何集群外部的机器)上直接运行 nslookup 命令会失败,而在 Pod 内运行则成功的原因。

每个 Pod 都配置了 DNS 解析配置,通常在 /etc/resolv.conf 文件中指定了集群的 DNS 服务器地址(如 10.96.0.10)。在 Kubernetes 的 master 节点或其他集群外部节点上直接运行 nslookup 命令,会请求系统默认的 DNS 服务器,而不是 Kubernetes 集群内部的 DNS 服务器。这些 DNS 服务器不知道 Kubernetes 集群内部的服务 DNS 名称(如 my-nginx-nodeport.default.svc.cluster.local),因此无法解析这些名称。

ExternalName

ExternalName 服务是一种特殊类型的服务,它将集群内部的服务名称解析为外部 DNS 名称。这种服务类型允许你将 Kubernetes 服务映射到外部(集群外部)的服务,而无需进行任何实际的流量转发。ExternalName 服务只是一个 DNS 别名。通过externalName,可以轻松的从集群的内部访问外部数据库、API或其他服务,无需在kubernetes中配置ingress或loadBalancer,只需配置一个DNS别名。

创建一个client.yaml和一个externalName的service

apiVersion: apps/v1
kind: Deployment
metadata:name: clientspec:replicas: 1selector:matchLabels:app: busyboxtemplate:metadata:labels:app: busyboxspec:containers:- name: busyboximage: busyboximagePullPolicy: IfNotPresentcommand: ["/bin/sh","-c","sleep 36000"]

 [root@master service]# cat client_svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: client-svc
spec:
  type: ExternalName
  externalName: nginx-svc.nginx-ns.svc.cluster.local
  ports:
  - name: http
    port: 80
    targetPort: 80

正常的DNS解析的地址是: <service-name>.<namespace-name>.svc.cluster.local

如果要访问另一个命名空间下的服务,如nginx-ns命名空间中的nginx-svc服务,则可能需要配置一些复杂的流量转发规则,通过以上的ExternalName,就可以不进行集群内流量转发,直接DNS解析。可以看到client-svc并没有endpoint,但是有一个externalname的字段

[root@master service]# kubectl get ep
NAME                ENDPOINTS                            AGE
deploy-nginx        <none>                               24h
kubernetes          100.64.252.90:6443                   11d
my-nginx-nodeport   10.244.104.34:80,10.244.166.177:80   14h
nginx-service       <none>                               16h
readiness           <none>                               2d21h
springboot-live     <none>                               47h
[root@master service]# kubectl describe svc client-svc
Name:              client-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          <none>
Type:              ExternalName
IP Families:       <none>
IP:                
IPs:               <none>
External Name:     nginx-svc.nginx-ns.svc.cluster.local
Port:              http  80/TCP
TargetPort:        80/TCP
Endpoints:         <none>
Session Affinity:  None
Events:            <none>

 在nginx-ns命名空间下建立pods和service,发现他们正常运行

[root@master service]# cat nginx_svc.yaml 
apiVersion: v1 
kind: Service 
metadata: name: nginx-svc namespace: nginx-ns 
spec: selector: app: nginx ports: - name: http protocol: TCP port: 80 targetPort: 80
[root@master service]# cat server_nginx.yaml 
apiVersion: apps/v1 
kind: Deployment 
metadata: name: nginx namespace: nginx-ns 
spec: replicas: 1 selector: matchLabels: app: nginxtemplate: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent
[root@master service]# kubectl get pods -n nginx-ns -owide
NAME                     READY   STATUS    RESTARTS   AGE   IP               NODE    NOMINATED NODE   READINESS GATES
nginx-787f54657b-r5hqz   1/1     Running   0          10m   10.244.166.180   node1   <none>           <none>
[root@master service]# kubectl get svc -n nginx-ns
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
nginx-svc   ClusterIP   10.106.161.203   <none>        80/TCP    58s
[root@master service]# kubectl get ep -n nginx-ns
NAME        ENDPOINTS           AGE
nginx-svc   10.244.166.180:80   7m9s

另一个namespace下面的服务启动以后,从default的命名空间的pod进入,看能不能请求到另一个命名空间下的pod

 

 

 docker网桥

为什么第一个yaml也是定义了nodePort服务,但是防火墙规则里面写的是docker网桥的地址呢?

172.17.0.1是docker默认网桥的网关ip地址,通常用于节点内部的容器通信,Kubernetes 使用 Docker 作为容器运行时(在使用 Docker 的情况下),因此,节点上的所有容器(包括 Kubernetes Pod)都通过这个网桥地址进行通信。

Kubernetes 使用 kube-proxy 来管理服务的流量。kube-proxy 可以有不同的模式,如 iptablesipvs。当使用 ipvs 模式时,kube-proxy 设置 IPVS 规则来处理服务的流量转发。这些规则会在节点内部通过 Docker 网桥地址进行配置,以确保流量能够正确转发到相应的 Pod。

当一个外部请求通过NodePort端口进入节点的时候,这个请求会被路由到docker网桥地址,ipvs捕获了到达172.17.0.1:30721的流量,然后通过轮询”rr“的方式转发给两个pod。

而正常的请求,无论是发送到哪一个物理节点上,都会由kube-proxy处理,在 IPVS 模式下,kube-proxy 使用 IPVS 规则来管理服务的负载均衡和流量转发。

[root@master yam_files]# curl http://100.64.252.90:30721
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@master yam_files]# curl http://100.64.212.7:30721
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@master yam_files]# curl http://100.64.147.209:30721
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
ipvs规则

在 Kubernetes 集群中使用 IPVS 进行负载均衡时,可以配置不同的调度算法。IPVS 支持多种调度算法,如轮询 (round-robin, rr)、最少连接 (least-connection, lc) 等。下面是一些常用的调度算法和如何配置 IPVS 规则的方法。

常用调度算法

  1. rr (round-robin): 轮询,每个后端服务器轮流接收请求。
  2. lc (least-connection): 最少连接,具有最少活动连接的后端服务器优先接收请求。
  3. wlc (weighted least-connection): 加权最少连接,考虑权重的最少连接。
  4. lblc (locality-based least-connection): 基于局部性的最少连接。
  5. lblcr (locality-based least-connection with replication): 带复制的基于局部性的最少连接。
  6. dh (destination-hashing): 目标哈希,将请求根据目标 IP 进行哈希并分配到后端服务器。
  7. sh (source-hashing): 源哈希,将请求根据源 IP 进行哈希并分配到后端服务器。

相关文章:

[单master节点k8s部署]11.服务service

service service是一个固定接入层&#xff0c;客户端 可以访问service的ip和端口&#xff0c;访问到service关联的后端pod&#xff0c;这个service工作依赖于dns服务&#xff08;coredns&#xff09; 每一个k8s节点上都有一个组件叫做kube-proxy&#xff0c;始终监视着apiser…...

ES6面试题——箭头函数和普通函数有什么区别

1. this指向问题 <script> let obj {a: function () {console.log(this); // 打印出&#xff1a;{a: ƒ, b: ƒ}},b: () > {console.log(this); // 打印出Window {window: Window, self: Window,...}}, }; obj.a(); obj.b(); </script> 箭头函数中的this是在箭…...

WordPress中文网址导航栏主题风格模版HaoWa

模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外&#xff0c;对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备&#xff0c;另外预埋出默认设置的编码构造&#xff0c;便捷大伙儿在目前…...

ThreadPoolExecutor基于ctl变量的声明周期管理

个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor&#xff1f;可以参考&#xff1a; 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值&#xff…...

运维锅总详解Prometheus

本文尝试从Prometheus简介、架构、各重要组件详解、relable_configs最佳实践、性能能优化及常见高可用解决方案等方面对Prometheus进行详细阐述。希望对您有所帮助&#xff01; 一、Prometheus简介 Prometheus 是一个开源的系统监控和报警工具&#xff0c;最初由 SoundCloud …...

深入解析Tomcat:Java Web服务器(上)

深入解析Tomcat&#xff1a;Java Web服务器&#xff08;上&#xff09; Apache Tomcat是一个开源的Java Web服务器和Servlet容器&#xff0c;用于运行Java Servlets和JavaServer Pages (JSP)。Tomcat在Java Web应用开发中扮演着重要角色。本文将详细介绍Tomcat的基本概念、安装…...

【第9章】MyBatis-Plus持久层接口之SimpleQuery

文章目录 前言一、使用步骤1.引入 SimpleQuery 工具类2.使用 SimpleQuery 进行查询 二、使用提示三、功能详解1. keyMap1.1 方法签名1.2 参数说明1.3 使用示例1.4 使用提示 2. map2.1 方法签名2.2 参数说明2.3 使用示例2.4 使用提示 3. group3.1 方法签名3.2 参数说明3.3 使用示…...

一文带你了解乐观锁和悲观锁的本质区别!

文章目录 悲观锁是什么&#xff1f;乐观锁是什么&#xff1f;如何实现乐观锁&#xff1f;什么是CAS应用局限性ABA问题是什么&#xff1f; 悲观锁是什么&#xff1f; 悲观锁它总是假设最坏的情况&#xff0c;它会认为共享资源在每次被访问的时候就会出现线程安全问题&#xff0…...

Android Studio环境搭建(4.03)和报错解决记录

1.本地SDK包导入 安装好IDE以及下好SDK包后&#xff0c;先不要管IDE的引导配置&#xff0c;直接新建一个新工程&#xff0c;进到开发界面。 SDK路径配置&#xff1a;File---->>Other Settings---->>Default Project Structure 拷贝你SDK解压的路径来这&#xff0c;…...

基于协同过滤的电影推荐与大数据分析的可视化系统

基于协同过滤的电影推荐与大数据分析的可视化系统 在大数据时代&#xff0c;数据分析和可视化是从大量数据中提取有价值信息的关键步骤。本文将介绍如何使用Python进行数据爬取&#xff0c;Hive进行数据分析&#xff0c;ECharts进行数据可视化&#xff0c;以及基于协同过滤算法…...

修复vcruntime140.dll方法分享

修复vcruntime140.dll方法分享 最近在破解typora的时候出现了缺失vcruntime140.dll文件的报错导致软件启动失败。所以找了一番资料发现都不是很方便的处理&#xff0c;甚至有的dll处理工具还需要花钱&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff0c;我本来就是为…...

PostgreSQL的系统视图pg_stat_wal_receiver

PostgreSQL的系统视图pg_stat_wal_receiver 在 PostgreSQL 中&#xff0c;pg_stat_wal_receiver 视图提供了关于 WAL&#xff08;Write-Ahead Logging&#xff09;接收进程的统计信息。WAL 接收器是 PostgreSQL 集群中流复制的一部分&#xff0c;它在从节点中工作&#xff0c;…...

Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)

文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…...

视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用

随着数字媒体的蓬勃发展&#xff0c;视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员&#xff0c;吸引了大量用户上传和分享各类精彩视频。然而&#xff0c;有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…...

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…...

cesium 添加 Echarts 图层(空气质量点图)

cesium 添加 Echarts 图层(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <html lan…...

Python技术笔记汇总(含语法、工具库、数科、爬虫等)

对Python学习方法及入门、语法、数据处理、数据可视化、空间地理信息、爬虫、自动化办公和数据科学的相关内容可以归纳如下&#xff1a; 一、Python学习方法 分解自己的学习目标&#xff1a;可以将学习目标分基础知识&#xff0c;进阶知识&#xff0c;高级应用&#xff0c;实…...

Nacos-注册中心

一、注册中心的交互流程 注册中心通常有两个角色: 服务提供者(生产者)&#xff1a;对外提供服务的微服务应用。它会把自身的服务地址注册到注册中心&#xff0c;以供消费者发现和调用。服务调用者(消费者)&#xff1a;调用其他微服务的应用程序。它会向注册中心订阅自己需要的服…...

Unity制作一个简单抽卡系统(简单好抄)

业务流程&#xff1a;点击抽卡——>播放动画——>显示抽卡面板——>将随机结果添加到面板中——>关闭面板 1.准备素材并导入Unity中&#xff08;包含2个抽卡动画&#xff0c;抽卡结果的图片&#xff0c;一个背景图片&#xff0c;一个你的展示图片&#xff09; 2.给…...

简单多状态DP问题

这里写目录标题 什么是多状态DP解决多状态DP问题应该怎么做&#xff1f;关于多状态DP问题的几道题1.按摩师2.打家劫舍Ⅱ3.删除并获得点数4.粉刷房子5.买卖股票的最佳时期含手冷冻期 总结 什么是多状态DP 多状态动态规划&#xff08;Multi-State Dynamic Programming, Multi-St…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...