飞天使-k8s基础组件分析-服务与ingress

文章目录

      • 服务的介绍
        • 服务代理
        • 服务发现
        • 连接集群外服务
        • 服务发布
        • 无头服务
      • 服务,pod和dns的关系
      • 端口转发
      • 通过expose 暴露应用
      • 服务案例
      • INGRESS
      • MetalLB使用
      • 参考文档

服务的介绍

服务的作用是啥? 
提供外部调用,保证podip的真实性看看服务解决了什么问题? 
[root@k8s-01 chapter05]# cat web-rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:name: web
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx[root@k8s-01 chapter05]# kubectl get pod -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx-97499b967-jzxwg   1/1     Running   0          35h   10.244.1.2    k8s-02   <none>           <none>
web-dgn64               1/1     Running   0          76s   10.244.1.54   k8s-02   <none>           <none>
web-x4kkz               1/1     Running   0          76s   10.244.1.52   k8s-02   <none>           <none>
web-xx2md               1/1     Running   0          76s   10.244.1.53   k8s-02   <none>           <none>rs控制数量为3,如果这3个换了呢,这些ip地址如何让客户端知道呢? pod 和服务之间的关系,依旧是标签来控制[root@k8s-01 chapter05]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:ports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml 
service/my-service created
[root@k8s-01 chapter05]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        35h
my-service   ClusterIP   10.107.106.26    <none>        80/TCP         5s
nginx        NodePort    10.104.210.165   <none>        80:30001/TCP   35h上面是创建了服务,服务创建之后,有一个ip
查看集群分配给服务的Ip
# kubectl get svc#访问刚才创建的服务三种方式
创建一个Pod,访问服务的Ip
在k8s的任何一个节点访问
使用任何一个现有服务所属任何pod访问
下面图片有它的处理过程查看服务和后面pod的ip地址信息
[root@k8s-01 chapter05]# kubectl describe svc my-service
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  app=nginx
Type:              ClusterIP
IP:                10.107.106.26
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...
Session Affinity:  None
Events:            <none>#此处如果删除一个pod,查看service中的podip 也会随着变化实验一: 配置 sessionAffinity: ClientIP
[root@k8s-01 chapter05]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:sessionAffinity: ClientIPports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# kubectl delete svc/my-service
service "my-service" deleted
[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml 
service/my-service created
[root@k8s-01 chapter05]# kubectl describe svc my-service
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  app=nginx
Type:              ClusterIP
IP:                10.104.130.27
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...
Session Affinity:  ClientIP
Events:            <none>实验二:设置自定义的服务ip
[root@k8s-01 chapter05]# vim web-svc.yaml 
[root@k8s-01 chapter05]# kubectl apply -f web-svc.yaml 
service/my-service created
[root@k8s-01 chapter05]# kubectl describe svc web-service
Error from server (NotFound): services "web-service" not found
[root@k8s-01 chapter05]# cat web-svc.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:clusterIP: 10.104.130.24sessionAffinity: ClientIPports:- port: 80targetPort: 80selector:app: nginx
[root@k8s-01 chapter05]# kubectl get pod
NAME                    READY   STATUS    RESTARTS   AGE
nginx-97499b967-jzxwg   1/1     Running   0          35h
web-tsxck               1/1     Running   0          34m
web-x4kkz               1/1     Running   0          50m
web-xx2md               1/1     Running   0          50m
[root@k8s-01 chapter05]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        36h
my-service   ClusterIP   10.104.130.24    <none>        80/TCP         33s
nginx        NodePort    10.104.210.165   <none>        80:30001/TCP   35h实验三: 创建没有选择器的服务
服务通常抽象访问Kubernetes pods,但是它也可以抽象访问其它类型的后端,比如:
比如使用外部的数据库集群
指向服务到不同的命名空间或其它kubernetes集群的服务在上面任何一种情况下,都可以定义一个没有Pod选择器的服务,比如:
由于上面定义的服务没有选择器,对应的Endpoint对象也不会自动创建,因此需要手工的创建Endpoint.kind: Endpoints

在这里插入图片描述

服务代理

Userspace
Iptables
Ipvs
以上三种模式,ipvs用的多

在这里插入图片描述

服务发现

查看某个pod的 环境变量
kubectl exec web-tsxck env生产环境中要先创建服务在创建pod,否则pod里面的环境变量没有服务的变量服务发现通过两种方式,1.环境变量 2. DNSDNS的服务方式
一个完整的FQDN如下所示:
Backend-database.default.svc.cluster.local进入到容器里面, 
kubectl exec -it web-sfe1d -- bash
curl http://my-service
curl http://my-service.default.svc.cluster.local
cat /etc/resolv.conf

连接集群外服务

一般是数据库,云数据库信息查看服务的endpoints[root@k8s-01 chapter05]# kubectl get endpoints
NAME         ENDPOINTS                                                 AGE
kubernetes   192.168.100.30:6443                                       37h
my-service   10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...   80m
nginx        10.244.1.2:80,10.244.1.52:80,10.244.1.53:80 + 1 more...   37h查看apiversion版本[root@k8s-01 chapter05]# kubectl explain endpoints.apiVersion
KIND:     Endpoints
VERSION:  v1FIELD:    apiVersion <string>DESCRIPTION:APIVersion defines the versioned schema of this representation of anobject. Servers should convert recognized schemas to the latest internalvalue, and may reject unrecognized values. More info:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources[root@k8s-01 chapter05]# cat external-service.yaml 
apiVersion: v1
kind: Service
metadata:name: external-service
spec:ports:- port: 80[root@k8s-01 chapter05]# cat external-endpoints.yaml 
apiVersion: v1
kind: Endpoints
metadata:name: external-service
subsets:- addresses:- ip: 192.168.100.31ports:- port: 30001
[root@k8s-01 chapter05]# cat external-endpoints-alias.yaml 
apiVersion: v1
kind: Service
metadata:name: external-service
spec:type: ExternalNameexternalName: feitianshi.cc.ccports:- port: 30001注意:此部分实验未成功,各位可以自己参考配置文件[root@k8s-01 chapter05]# kubectl describe svc external-service
Name:              external-service
Namespace:         default
Labels:            <none>
Annotations:       Selector:  <none>
Type:              ClusterIP
IP:                10.105.6.128
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         192.168.100.31:30001
Session Affinity:  None
Events:            <none>

服务发布

发布服务的类型如下
ClusterIP 内部访问
NodePort 外部访问
LoadBalancer 外部访问
ExternalName 内部访问案例
NodePort:
创建服务
kubectl create –f web-svc-nodeport.yaml检查NodePort服务
kubectl get svc web-nodeport[root@k8s-01 chapter05]# cat web-svc-nodeport.yaml 
apiVersion: v1
kind: Service
metadata:name: web-nodeport
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30123selector:app: nginx[root@k8s-01 chapter05]# kubectl create -f web-svc-nodeport.yaml 
service/web-nodeport created
[root@k8s-01 chapter05]# kubectl get svc web-nodeport
NAME           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
web-nodeport   NodePort   10.105.18.188   <none>        80:30123/TCP   8s
[root@k8s-01 chapter05]# curl 10.105.18.188
<!DOCTYPE html>[root@k8s-01 chapter05]# cat web-svc-loadbalancer.yaml 
apiVersion: v1
kind: Service
metadata:name: web-loadbalancer
spec:type: LoadBalancerports:- port: 80targetPort: 80selector:app: nginx[root@k8s-01 chapter05]# cat service-external-ip.yaml 
apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: nginxports:- name: httpprotocol: TCPport: 80targetPort: 80externalIPs:- 192.168.100.199

在这里插入图片描述

无头服务

无头服务:没有clusterIp字段的服务就是无头服务。
有些服务需要直接连接后端的pod 案例:
- 创建无头服务
# kubectl create –f web-headless.yaml[root@k8s-01 chapter05]# cat web-headless.yaml 
apiVersion: v1
kind: Service
metadata:name: web-headless
spec:clusterIP: Noneports:- port: 80targetPort: 80selector:app: nginx- 查看创建的服务
# kubectl get svc
# kubectl describe svc web-headless通过dns发现pods
# kubectl run dnsutils --image=tutum/dnsutils --generator=run-pod/v1 --command -- sleep infinity
# kubectl exec dnsutils nslookup web-headless[root@k8s-01 chapter05]# kubectl exec dnsutils nslookup web-headless
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Server:         10.96.0.10
Address:        10.96.0.10#53Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.61
Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.60
Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.2
Name:   web-headless.default.svc.cluster.local
Address: 10.244.1.59[root@k8s-01 chapter05]# kubectl get svc
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.96.0.1        <none>        443/TCP        40h
my-service     ClusterIP   10.104.130.24    <none>        80/TCP         2s
nginx          NodePort    10.104.210.165   <none>        80:30001/TCP   39h
web-headless   ClusterIP   None             <none>        80/TCP         8m50s
[root@k8s-01 chapter05]# kubectl exec dnsutils nslookup my-service
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
Server:         10.96.0.10
Address:        10.96.0.10#53Name:   my-service.default.svc.cluster.local
Address: 10.104.130.24无头服务比有头服务更快些,注意区分

服务,pod和dns的关系

什么东西可以获取DNS的名称?
集群中定义的每个服务都会被分配一个DNS名称。默认情况下,客户机pod的dns搜索列表包括Pod自己的名称空间和集群的默认域。假设k8s集群bar的名称空间中有一个名为foo的服务,在该名称空间运行的pod可以直接对foo执行dns查询来查找此服务。在别的名称空间中执行foo.bar进行查询。服务
A记录
普通服务分配一个DNS A记录作为表单的名称my-svc.my-namespace.svc.cluster-domain.example,这将解析到服务的集群IP。
无头服务也分配一个DNS记录,针对my-svg.my-namespace.svg.cluster-domain.example表单的名称。与普通服务不同,这将解析为服务选择的pod的ip集。SRV记录
SRV记录是作为普通服务或无头服务一部分的指定端口创建的。每于每个指定端口,SRV记录都有相应的形式_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example。对于无头服务,这解析为多个答案,每个答案对应一个支持的pod,并包含pod的端口号和域名。
Auto-generated-name.my-svcc.my-namespace.svc.cluster-domain.examplePods
pods的主机名和子域名字段
比如在名称空间my-namespace中将主机名设置为“foo”,子域设置为“bar”的pod将具有完全限定的域为:foo.bar.my-namespace.svc.cluster-domain.examplePods dns策略有以下4种:
Default
ClusterFirst
ClusterFirstWithHostNet
NonePod dns配置
属性有以下三个:
Nameservers
Searchs
options

端口转发

对于排错比较方便
创建redis的部署和应用
创建deployment资源
# kubectl create –f redis-master-deployment.yaml查看部署状态
# kubectl get pods查看replicaset状态
# kubectl get rs创建服务
# kubectl create –f redis-master-service.yaml查看服务
# kubectl get svc | grep redis校验运行在pod中的redis server是否侦听在6379端口
# kubectl get pods redis-master-7db7f6579f-zd27q –template=‘{{(index(index.spec.containers 0).ports 0).containerPort}}{{“\n”}}’执行端口转发
# kubectl port-forward redis-master-7db7f6579f-zd27q 7000:6379客户端进行测试
# redis-cli –p 7000[root@k8s-01 chapter05]# cat redis-master-deployment.yaml 
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: redis-masterlabels:app: redis
spec:selector:matchLabels:app: redisrole: mastertier: backendreplicas: 1template:metadata:labels:app: redisrole: mastertier: backendspec:containers:- name: masterimage: redis  # or just image: redisresources:requests:cpu: 100mmemory: 100Miports:- containerPort: 6379[root@k8s-01 chapter05]# cat redis-master-service.yaml 
apiVersion: v1
kind: Service
metadata:name: redis-masterlabels:app: redisrole: mastertier: backend
spec:ports:- port: 6379targetPort: 6379selector:app: redisrole: mastertier: backend

通过expose 暴露应用

创建资源
# kubectl create –f hello-application.yaml查看关于部署的信息
# kubectl get deployment hello-world
# kubectl describe deployments hello-world
# kubectl get replicasets
# kubectl describe replicasets暴露刚才的部署
# kubectl expose deployment hello-world --type=NodePort --name=example-service显示关于服务的信息
# kubectl describe services example-service列出在Hello World应用运行的Pods
# kubectl get pods –selector=“run=load-balancer-example” --output=wide使用下面的方法进行测试
# curl http://<public-node-ip>:<node-port>[root@k8s-01 chapter05]# cat hello-application.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: hello-world
spec:selector:matchLabels:run: load-balancer-examplereplicas: 2template:metadata:labels:run: load-balancer-examplespec:containers:- name: hello-worldimage: "mike0405/node-hello:1.0"ports:- containerPort: 8080protocol: TCP[root@k8s-01 chapter05]# cat hello-service.yaml 
apiVersion: v1
kind: Service
metadata:name: hello
spec:selector:app: hellotier: backendports:- protocol: TCPport: 80targetPort: http

服务案例

创建后端的部署
# kubectl create –f hello.yaml创建后端的服务
# kubectl create –f hello-service.yaml创建前端的部署和服务
# kubectl create –f fronted.yaml测试前端和后端的交互
# curl http://${EXTERNAL_IP}[root@k8s-01 chapter05]# curl 192.168.100.31:32746
{"message":"Hello"}
[root@k8s-01 chapter05]# curl 192.168.100.31:32746
{"message":"Hello"}
[root@k8s-01 chapter05]# cat frontend.yaml 
apiVersion: v1
kind: Service
metadata:name: frontend
spec:selector:app: hellotier: frontendports:- protocol: "TCP"port: 80targetPort: 80type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:name: frontend
spec:selector:matchLabels:app: hellotier: frontendtrack: stablereplicas: 1template:metadata:labels:app: hellotier: frontendtrack: stablespec:containers:- name: nginximage: "mike0405/hello-frontend:1.0"lifecycle:preStop:exec:command: ["/usr/sbin/nginx","-s","quit"][root@k8s-01 chapter05]# 
[root@k8s-01 chapter05]# cat hello.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: hello
spec:selector:matchLabels:app: hellotier: backendtrack: stablereplicas: 7template:metadata:labels:app: hellotier: backendtrack: stablespec:containers:- name: helloimage: "mike0405/hello-go-gke:1.0"ports:- name: httpcontainerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: hello
spec:selector:app: hellotier: backendports:- protocol: "TCP"port: 80targetPort: 80[root@k8s-01 chapter05]# kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
dnsutils                        1/1     Running   0          129m
frontend-76c7d58dc5-l5kcz       1/1     Running   0          5m30s
hello-84ccf7cd9d-97htk          1/1     Running   0          7m2s
hello-84ccf7cd9d-9sl6v          1/1     Running   0          7m2s
hello-84ccf7cd9d-9tg8f          1/1     Running   0          7m2s
hello-84ccf7cd9d-bps5g          1/1     Running   0          7m2s
hello-84ccf7cd9d-lh446          1/1     Running   0          7m2s
hello-84ccf7cd9d-tl2gx          1/1     Running   0          7m2s
hello-84ccf7cd9d-w2hjz          1/1     Running   0          7m2s
hello-world-7457d6ddb5-g2fcf    1/1     Running   0          37m
hello-world-7457d6ddb5-mknkq    1/1     Running   0          37m
nginx-97499b967-jzxwg           1/1     Running   0          42h
redis-master-7d557b94bb-8wqjh   1/1     Running   0          60m
web-764vs                       1/1     Running   0          4h8m
web-kd8ml                       1/1     Running   0          4h8m
web-rqc7q                       1/1     Running   0          4h8m

INGRESS

为什么需要INGRESS ? 
一个重要原因,每个LoadBalancer服务都需要自己负载均衡器和自己的公共IP地址,而一个Ingress只需要一个,即使提供对数个服务的访问时也是如此。对象发送HTTP请求时请求中的主机和路径决定请求转发给哪个服务。internet - ingress - serviceingress 可以理解成nginx配置文件

MetalLB使用

这个了解下,根据实际情况看

参考文档

https://edu.csdn.net/course/detail/27762?spm=1003.2449.3001.8295.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝商品数据采集(如何快速获取淘宝商品信息),淘宝API接口申请指南

淘宝作为国内的电商平台&#xff0c;拥有海量的商品信息。对于想要进行淘宝商品数据采集的人来说&#xff0c;如何快速获取淘宝商品信息是一个重要的问题。本文将介绍一些快速获取淘宝商品信息的方法。 1. 使用淘宝开放平台PI 淘宝开放平台提供了多种PI接口&#xff0c;可以通…

C# Winfrom通过COM接口访问和控制Excel应用程序,将Excel数据导入DataGridView

1.首先要创建xlsx文件 2.在Com中添加引用 3. 添加命名空间 using ApExcel Microsoft.Office.Interop.Excel; --这样起个名字方面后面写 4.样例 //点击操作excelDataTable dt new DataTable();string fileName "D:\desktop\tmp\test.xlsx";ApExcel.Application exA…

uview ui 查看版号

版本查询2种方式 有两种方式可以查询到正在使用的uView的版本&#xff1a; // 通过console.log打印的形式 console.log(uni.$u.config.v);// 可以查阅uView的配置文件得知当前版本号&#xff0c;具体位置为&#xff1a; /uview-ui/libs/config/config.js

基于Python+djangoAI 农作物病虫害预警系统智能识别系统设计与实现(源码&教程)

1.背景 随着科技的发展&#xff0c;机器学习技术在各个领域中的应用越来越广泛。在农业领域&#xff0c;机器学习技术的应用有助于提高农作物的产量和质量&#xff0c;降低农业生产的成本。本文针对农作物健康识别问题&#xff0c;提出一种基于机器学习方法的农作健康识别系统&…

创建延时队列、springboot配置多个rabbitmq

创建延时队列 queue.file_delay_destroy x-dead-letter-exchange: exchange.file_delay_destroy x-message-ttl: 259200000 259200000为3天,1000为1秒创建普通队列 queue.file_destroy创建普通交换机 exchange.file_delay_destroytype选择fanout 交换机绑定普通队列 (图中…

node没有自动安装npm时,如何手动安装 npm

之前写过一篇使用 nvm 管理 node 版本的文章&#xff0c;node版本管理&#xff08;Windows&#xff09; 有时候&#xff0c;我们使用 nvm 下载 node 时&#xff0c;node 没有自动下载 npm &#xff0c;此时就需要我们自己手动下载 npm 1、下载 npm下载地址&#xff1a;&…

【SpringBoot】第一篇:redis使用

背景&#xff1a; 本文是教初学者如何正确使用和接入redis。 一、引入依赖 <!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><depen…

如何延长周末体验感

美好的周末永远都是从周五开始 为了享受周末的美好时光一定要在周五下班前把工作中应该处理的事情处理好&#xff0c;避免突发事件影响后续的计划。 此外过周五晚上开始做让自己感到开心的事情&#xff0c;以此让自己感觉到周末已经开始了。包括单不限于 享受美食 周五晚上是一…

以getPositionList为例,查找接口函数定义及接口数据格式定义

job-app-master/pages/index/index.vue中299行 async getPositionList(type refresh, pulldown false) {this.status 请求中;if (type refresh) {this.query.page 1;} else {this.query.page;}let res await this.$apis.getPositionList(this.query);if (res) {if (type …

Vue3.0 新特性以及使用变更总结

Vue3.0 在2020年9月正式发布了&#xff0c;也有许多小伙伴都热情的拥抱Vue3.0。去年年底我们新项目使用Vue3.0来开发&#xff0c;这篇文章就是在使用后的一个总结&#xff0c; 包含Vue3新特性的使用以及一些用法上的变更。 图片.png 为什么要升级Vue3 使用Vue2.x的小伙伴都熟悉…

使用Linux部署Kafka教程

目录 一、部署Zookeeper 1 拉取Zookeeper镜像 2 运行Zookeeper 二、部署Kafka 1 拉取Kafka镜像 2 运行Kafka 三、验证是否部署成功 1 进入到kafka容器中 2 创建topic 生产者 3 生产者发送消息 4 消费者消费消息 四、搭建kafka管理平台 五、SpringBoot整合Kafka 1…

大彩串口屏使用记录

写在最前面 屏幕型号 DC10600M070 IDE VisualTFT&#xff08;官方&#xff09; VSCode&#xff08;lua编程&#xff09; 用之前看一下官方那个1小时的视频教程就大概懂控件怎么用了&#xff0c;用官方的软件VisualTFT很简单 本文只是简单记录遇到的一些坑 lua编辑器 VisualTF…

内嵌功能强大、低功耗STM32WB55CEU7、STM32WB55CGU7 射频微控制器 - MCU, 48-UFQFN

一、概述&#xff1a; STM32WB55xx多协议无线和超低功耗器件内嵌功能强大的超低功耗无线电模块&#xff08;符合蓝牙 低功耗SIG规范5.0和IEEE 802.15.4-2011标准&#xff09;。该器件内含专用的Arm Cortex -M0&#xff0c;用于执行所有的底层实时操作。这些器件基于高性能Arm …

TensorFlow中slim包的具体用法

TensorFlow中slim包的具体用法 1、训练脚本文件&#xff08;该文件包含数据下载打包、模型训练&#xff0c;模型评估流程&#xff09;3、模型训练1、数据集相关模块&#xff1a;2、设置网络模型模块3、数据预处理模块4、定义损失loss5、定义优化器模块 本次使用的TensorFlow版本…

Redis五大数据类型

Redis五大数据类型 Redis-Key 官网&#xff1a;https://www.redis.net.cn/order/ 序号命令语法描述1DEL key该命令用于在 key 存在时删除 key2DUMP key序列化给定 key &#xff0c;并返回被序列化的值3EXISTS key检查给定 key 是否存在&#xff0c;存在返回1&#xff0c;否则返…

yolov8热力图可视化

安装pytorch_grad_cam pip install grad-cam自动化生成不同层的bash脚本 # 循环10次&#xff0c;将i的值从0到9 for i in $(seq 0 13) doecho "Running iteration $i";python yolov8_heatmap.py $i; done热力图生成python代码 import warnings warnings.filterwarn…

vscode流程图插件使用

vscode流程图插件使用 1.在vscode中点击左下角设置然后选择扩展。 2.在扩展中搜索Draw.io Integration&#xff0c;安装上面第一个插件。 3.安装插件后在工程中创建一个后缀为drawio的文件并且双击打开即可绘制流程图

2023-08-26 LeetCode每日一题(汇总区间)

2023-08-26每日一题 一、题目编号 228. 汇总区间二、题目链接 点击跳转到题目位置 三、题目描述 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖…

如何在地图上寻找最密集点的位置?

最近我在工作中遇到了一个小的需求点&#xff0c;大概是需要在地图上展示出一堆点中的点密度最密集的位置。最开始没想到好的方法&#xff0c;就使用了一个非常简单的策略——所有点的坐标求平均值&#xff0c;这个方法大部分的时候好用&#xff0c;因为大部分城市所有点位基本…

深度学习4. 循环神经网络 – Recurrent Neural Network | RNN

目录 循环神经网络 – Recurrent Neural Network | RNN 为什么需要 RNN &#xff1f;独特价值是什么&#xff1f; RNN 的基本原理 RNN 的优化算法 RNN 到 LSTM – 长短期记忆网络 从 LSTM 到 GRU RNN 的应用和使用场景 总结 百度百科维基百科 循环神经网络 – Recurre…