[单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 可以有不同的模式,如 iptables 和 ipvs。当使用 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 规则的方法。
常用调度算法
- rr (round-robin): 轮询,每个后端服务器轮流接收请求。
- lc (least-connection): 最少连接,具有最少活动连接的后端服务器优先接收请求。
- wlc (weighted least-connection): 加权最少连接,考虑权重的最少连接。
- lblc (locality-based least-connection): 基于局部性的最少连接。
- lblcr (locality-based least-connection with replication): 带复制的基于局部性的最少连接。
- dh (destination-hashing): 目标哈希,将请求根据目标 IP 进行哈希并分配到后端服务器。
- sh (source-hashing): 源哈希,将请求根据源 IP 进行哈希并分配到后端服务器。
相关文章:
[单master节点k8s部署]11.服务service
service service是一个固定接入层,客户端 可以访问service的ip和端口,访问到service关联的后端pod,这个service工作依赖于dns服务(coredns) 每一个k8s节点上都有一个组件叫做kube-proxy,始终监视着apiser…...
ES6面试题——箭头函数和普通函数有什么区别
1. this指向问题 <script> let obj {a: function () {console.log(this); // 打印出:{a: ƒ, b: ƒ}},b: () > {console.log(this); // 打印出Window {window: Window, self: Window,...}}, }; obj.a(); obj.b(); </script> 箭头函数中的this是在箭…...
WordPress中文网址导航栏主题风格模版HaoWa
模板介绍 WordPress响应式网站中文网址导航栏主题风格模版HaoWa1.3.1源码 HaoWA主题风格除行为主体导航栏目录外,对主题风格需要的小控制模块都开展了敞开式的HTML在线编辑器方式的作用配备,另外预埋出默认设置的编码构造,便捷大伙儿在目前…...
ThreadPoolExecutor基于ctl变量的声明周期管理
个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor?可以参考: 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值ÿ…...
运维锅总详解Prometheus
本文尝试从Prometheus简介、架构、各重要组件详解、relable_configs最佳实践、性能能优化及常见高可用解决方案等方面对Prometheus进行详细阐述。希望对您有所帮助! 一、Prometheus简介 Prometheus 是一个开源的系统监控和报警工具,最初由 SoundCloud …...
深入解析Tomcat:Java Web服务器(上)
深入解析Tomcat:Java Web服务器(上) Apache Tomcat是一个开源的Java Web服务器和Servlet容器,用于运行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 使用示…...
一文带你了解乐观锁和悲观锁的本质区别!
文章目录 悲观锁是什么?乐观锁是什么?如何实现乐观锁?什么是CAS应用局限性ABA问题是什么? 悲观锁是什么? 悲观锁它总是假设最坏的情况,它会认为共享资源在每次被访问的时候就会出现线程安全问题࿰…...
Android Studio环境搭建(4.03)和报错解决记录
1.本地SDK包导入 安装好IDE以及下好SDK包后,先不要管IDE的引导配置,直接新建一个新工程,进到开发界面。 SDK路径配置:File---->>Other Settings---->>Default Project Structure 拷贝你SDK解压的路径来这,…...
基于协同过滤的电影推荐与大数据分析的可视化系统
基于协同过滤的电影推荐与大数据分析的可视化系统 在大数据时代,数据分析和可视化是从大量数据中提取有价值信息的关键步骤。本文将介绍如何使用Python进行数据爬取,Hive进行数据分析,ECharts进行数据可视化,以及基于协同过滤算法…...
修复vcruntime140.dll方法分享
修复vcruntime140.dll方法分享 最近在破解typora的时候出现了缺失vcruntime140.dll文件的报错导致软件启动失败。所以找了一番资料发现都不是很方便的处理,甚至有的dll处理工具还需要花钱????,我本来就是为…...
PostgreSQL的系统视图pg_stat_wal_receiver
PostgreSQL的系统视图pg_stat_wal_receiver 在 PostgreSQL 中,pg_stat_wal_receiver 视图提供了关于 WAL(Write-Ahead Logging)接收进程的统计信息。WAL 接收器是 PostgreSQL 集群中流复制的一部分,它在从节点中工作,…...
Qt之Pdb生成及Dump崩溃文件生成与调试(含注释和源码)
文章目录 一、Pdb生成及Dump文件使用示例图1.Pdb文件生成2.Dump文件调试3.参数不全Pdb生成的Dump文件调试 二、个人理解1.生成Pdb文件的方式2.Dump文件不生产的情况 三、源码Pro文件mian.cppMainWindowUi文件 总结 一、Pdb生成及Dump文件使用示例图 1.Pdb文件生成 下图先通过…...
视频号视频怎么保存到手机,视频号视频怎么保存到手机相册里,苹果手机电脑都可以用
随着数字媒体的蓬勃发展,视频已成为我们日常生活中不可或缺的一部分。视频号作为众多视频分享平台中的一员,吸引了大量用户上传和分享各类精彩视频。然而,有时我们可能希望将视频号上的视频下载下来,以下将详细介绍如何将视频号的视频。 方法…...
Softmax函数的作用
Softmax 函数主要用于多类别分类问题,它将输入的数值转换为概率分布。 具体来说,对于给定的输入向量 x [x_1, x_2,..., x_n] ,Softmax 函数的输出为 y [y_1, y_2,..., y_n] ,其中: 这样,Softmax 函数的输…...
cesium 添加 Echarts 图层(空气质量点图)
cesium 添加 Echarts 图层(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <html lan…...
Python技术笔记汇总(含语法、工具库、数科、爬虫等)
对Python学习方法及入门、语法、数据处理、数据可视化、空间地理信息、爬虫、自动化办公和数据科学的相关内容可以归纳如下: 一、Python学习方法 分解自己的学习目标:可以将学习目标分基础知识,进阶知识,高级应用,实…...
Nacos-注册中心
一、注册中心的交互流程 注册中心通常有两个角色: 服务提供者(生产者):对外提供服务的微服务应用。它会把自身的服务地址注册到注册中心,以供消费者发现和调用。服务调用者(消费者):调用其他微服务的应用程序。它会向注册中心订阅自己需要的服…...
Unity制作一个简单抽卡系统(简单好抄)
业务流程:点击抽卡——>播放动画——>显示抽卡面板——>将随机结果添加到面板中——>关闭面板 1.准备素材并导入Unity中(包含2个抽卡动画,抽卡结果的图片,一个背景图片,一个你的展示图片) 2.给…...
简单多状态DP问题
这里写目录标题 什么是多状态DP解决多状态DP问题应该怎么做?关于多状态DP问题的几道题1.按摩师2.打家劫舍Ⅱ3.删除并获得点数4.粉刷房子5.买卖股票的最佳时期含手冷冻期 总结 什么是多状态DP 多状态动态规划(Multi-State Dynamic Programming, Multi-St…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
