装修网站开发前的准备工作/怎么登录百度app
目录
1.Ingress 简介
2.Ingress 组成
3.Ingress-Nginx 工作原理
4.部署 nginx-ingress-controller
5.总结
1.Ingress 简介
service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问。
在Kubernetes中,Pod的IP地址和service的ClusterIP仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,Kubernetes目前提供了以下几种方案:
●NodePort:将service暴露在节点网络上,NodePort背后就是Kube-Proxy,Kube-Proxy是沟通service网络、Pod网络和节点网络的桥梁。
测试环境使用还行,当有几十上百的服务在集群中运行时,NodePort的端口管理就是个灾难。因为每个端口只能是一种服务,默认端口范围只能是 30000-32767。
●LoadBalancer:使用外接负载均衡器完成到服务的负载分发,注意此模式需要外部云环境支持。借助第三方的云负载均衡器,将请求分发到所有的Node上,其底层还是NodePort。
LoadBalancer和NodePort很相似,目的都是向外部暴露一个端口,区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备,而这个设备需要外部环境支持的,外部服务发送到这个设备上的请求,会被设备负载之后转发到集群中。
●externalIPs:service允许为其分配外部IP,如果外部IP路由到集群中一个或多个Node上,Service会被暴露给这些externalIPs。通过外部IP进入到集群的流量,将会被路由到Service的Endpoint上。
●Ingress:只需一个或者少量的公网IP和LB,即可同时将多个HTTP服务暴露到外网,七层反向代理。
可以简单理解为service的service,它其实就是一组基于域名和URL路径,把用户的请求转发到一个或多个service的规则。
2.Ingress 组成
●ingress:
ingress是一个API对象,通过yaml文件来配置,ingress对象的作用是定义请求如何转发到service的规则,可以理解为配置模板。
ingress通过http或https暴露集群内部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于域名的反向代理。ingress要依靠 ingress-controller 来具体实现以上功能。
●ingress-controller:
ingress-controller是具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发。
ingress-controller并不是k8s自带的组件,实际上ingress-controller只是一个统称,用户可以选择不同的ingress-controller实现,目前,由k8s维护的ingress-controller只有google云的GCE与ingress-nginx两个,其他还有很多第三方维护的ingress-controller,具体可以参考官方文档。但是不管哪一种ingress-controller,实现的机制都大同小异,只是在具体配置上有差异。
一般来说,ingress-controller的形式都是一个pod,里面跑着daemon程序和反向代理程序。daemon负责不断监控集群的变化,根据 ingress对象生成配置并应用新配置到反向代理,比如ingress-nginx就是动态生成nginx配置,动态更新upstream,并在需要的时候reload程序应用新配置。为了方便,后面的例子都以k8s官方维护的ingress-nginx为例。
总结:ingress-controller才是负责具体转发的组件,通过各种方式将它暴露在集群入口,外部对集群的请求流量会先到 ingress-controller, 而ingress对象是用来告诉ingress-controller该如何转发请求,比如哪些域名、哪些URL要转发到哪些service等等。
3.Ingress-Nginx 工作原理
(1)ingress-controller通过和 kubernetes APIServer 交互,动态的去感知集群中ingress规则变化,
(2)然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置,
(3)再写到nginx-ingress-controller的pod里,这个ingress-controller的pod里运行着一个Nginx服务,控制器会把生成的 nginx配置写入 /etc/nginx.conf文件中,
(4)然后reload一下使配置生效。以此达到域名区分配置和动态更新的作用。
4.部署 nginx-ingress-controller
ingress 暴露服务的方式
●方式一:DaemonSet+HostNetwork+nodeSelector
用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/443端口就能访问服务。这时,ingress-controller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。该方式整个请求链路最简单,性能相对NodePort模式更好。缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod。 比较适合大并发的生产环境使用。●方式二:Deployment+NodePort模式的Service
同样用deployment模式部署ingress-controller,并创建对应的service,但是type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景。
NodePort方式暴露ingress虽然简单方便,但是NodePort多了一层NAT,在请求量级很大时可能对性能会有一定影响。●方式三:Deployment+LoadBalancer 模式的 Service
如果要把ingress部署在公有云,那用这种方式比较合适。用Deployment部署ingress-controller,创建一个 type为 LoadBalancer 的 service 关联这组 pod。 大部分公有云,都会为 LoadBalancer 的 service 自动创建一个负载均衡器,通常还绑定了公网地址。只要把域名解析指向该地址,就实现了集群服务的对外暴露
方式一:DaemonSet+HostNetwork+nodeSelector
1.国内的 gitee
wget https://gitee.com/mirrors/ingress-nginx/raw/controller-v1.3.0/deploy/static/provider/cloud/deploy.yaml2.vim deploy.yaml
435行 image: registry.cn-hangzhou.aliyuncs.com/google_containe rs/nginx-ingress-controller:v1.3.0@sha256:d1707ca76d3b044ab8a282 77a2466a02100ee9f58a86af1535a3edf9323ea1b5
532行 image: registry.cn-hangzhou.aliyuncs.com/google_containe rs/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7 e46aa550362b1d7a01f3a0a91b20cc67868660581 行image: image: image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc678686603、指定 nginx-ingress-controller 运行在 node02 节点
kubectl label node node02 ingress=truekubectl get nodes --show-labels4、修改 Deployment 为 DaemonSet ,指定节点运行,并开启 hostNetwork 网络
vim deploy.yaml
...
apiVersion: apps/v1
# 修改 kind
#kind: Deployment
kind: DaemonSet
......
spec:......template:......spec:# 使用宿主机网络hostNetwork: true# 修改选择节点选择器nodeSelector:ingress: "true"
......5、启动 nginx-ingress-controller
kubectl apply -f deploy.yaml//nginx-ingress-controller 已经运行 node02 节点
kubectl get pod -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-admission-create-vvxjr 0/1 Completed 0 19m 10.244.1.24 node01 <none> <none>
ingress-nginx-admission-patch-9gmdd 0/1 Completed 0 19m 10.244.1.25 node01 <none> <none>
ingress-nginx-controller-575585684c-9qbwp 1/1 Running 0 10m 192.168.80.30 node02 <none> <none>kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.96.3.13 <none> 80:32338/TCP,443:30008/TCP 19m
ingress-nginx-controller-admission ClusterIP 10.96.175.162 <none> 443/TCP 19m//到 node02 节点查看
netstat -lntp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 68911/nginx: master
tcp 0 0 0.0.0.0:8181 0.0.0.0:* LISTEN 68911/nginx: master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 68911/nginx: master
......由于配置了 hostnetwork,nginx 已经在 node 主机本地监听 80/443/8181 端口。其中 8181 是 nginx-controller 默认配置的一个 default backend(Ingress 资源没有匹配的 rule 对象时,流量就会被导向这个 default backend)。
这样,只要访问 node 主机有公网 IP,就可以直接映射域名来对外网暴露服务了。如果要 nginx 高可用的话,可以在多个 node 上部署,并在前面再搭建一套 LVS+keepalived 做负载均衡。6、创建 ingress 规则
//创建一个 deploy 和 svc
vim service-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-app
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-app-svc
spec:type: ClusterIPports:- protocol: TCPport: 80targetPort: 80selector:app: nginx
//创建 ingress
kubectl get ingressclasses
NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 22mvim ingress-app.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-app-ingress
spec:ingressClassName: "nginx"rules:- host: www.kgc.comhttp:paths:- path: /pathType: Prefixbackend:service:name: nginx-app-svcport:number: 80
kubectl apply -f service-nginx.yaml
kubectl apply -f ingress-app.yamlkubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-app-7bffc778db-sw2hl 1/1 Running 0 42s
nginx-app-7bffc778db-xsd5q 1/1 Running 0 42skubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-v1 nginx www.kgc.com 10.96.3.13 80 39s7、测试访问
//本地 host 添加域名解析
vim /etc/hosts
192.168.80.10 master
192.168.80.11 node01
192.168.80.12 node02
192.168.80.12 www.kgc.comcurl http://www.kgc.com8、查看 nginx-ingress-controller
kubectl get pod -n ingress-nginx -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-ingress-controller-99h72 1/1 Running 0 93s 192.168.80.15 node02 <none> <none>kubectl exec -it nginx-ingress-controller-99h72 -n ingress-nginx /bin/bash# more /etc/nginx/nginx.conf
//可以看到从 start server www.kgc.com 到 end server www.kgc.com 之间包含了此域名用于反向代理的配置
方式二:Deployment+NodePort模式的Service
1.国内的 gitee
wget https://gitee.com/mirrors/ingress-nginx/raw/controller-v1.3.0/deploy/static/provider/cloud/deploy.yaml修改镜像地址为:
image: registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.3.0@sha256:d1707ca76d3b044ab8a28277a2466a02100ee9f58a86af1535a3edf9323ea1b5image: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc678686602、修改配置文件
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/component: controllerapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginxapp.kubernetes.io/version: 1.3.0name: ingress-nginx-controllernamespace: ingress-nginx
spec:#externalTrafficPolicy: Local #注释此行,值为Cluster表示流量可以转发到其他节点上的Pod;Local表示:流量只发给本机的Podports:......type: NodePort #Service类型设置为 NodePort 或 LoadBalancer3、启动 nginx-ingress-controller
kubectl apply -f deploy.yamlkubectl get pod,svc -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-admission-create-vvxjr 0/1 Completed 0 37m
pod/ingress-nginx-admission-patch-9gmdd 0/1 Completed 0 37m
pod/ingress-nginx-controller-575585684c-9qbwp 1/1 Running 0 29mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller NodePort 10.96.3.13 <none> 80:32338/TCP,443:30008/TCP 37m
service/ingress-nginx-controller-admission ClusterIP 10.96.175.162 <none> 443/TCP 37m//Ingress HTTP 代理访问
cd /opt/ingress-nodeport#创建 deployment、Service、Ingress Yaml 资源
vim ingress-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-app
spec:replicas: 2selector:matchLabels:name: nginxtemplate:metadata:labels:name: nginxspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:ports:- port: 80targetPort: 80protocol: TCPselector:name: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-test
spec:ingressClassName: "nginx"rules:- host: www.benet.comhttp:paths:- path: /pathType: Prefixbackend:service: name: nginx-svcport:number: 80kubectl apply -f ingress-nginx.yamlkubectl get svc,pods -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 8h <none>
service/nginx-svc ClusterIP 10.96.212.214 <none> 80/TCP 65s name=nginxNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx-app-65d7b99f6b-l4g65 1/1 Running 0 65s 10.244.1.8 node01 <none> <none>
pod/nginx-app-65d7b99f6b-zcqgp 1/1 Running 0 65s 10.244.2.8 node02 <none> <none>kubectl exec -it pod/nginx-app-65d7b99f6b-l4g65 bash# cd /usr/share/nginx/html/# echo 'this is web1' >> index.html kubectl exec -it pod/nginx-app-65d7b99f6b-zcqgp bash# cd /usr/share/nginx/html/# echo 'this is web2' >> index.html#测试访问
curl 10.96.212.214kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.96.67.119 <none> 80:32383/TCP,443:32133/TCP 59m#本地 host 添加域名解析
vim /etc/hosts
192.168.80.10 master
192.168.80.11 node01
192.168.80.12 node02
192.168.80.12 www.kgc.com www.benet.com#外部访问
curl http://www.benet.com:32383//Ingress HTTP 代理访问虚拟主机
mkdir /opt/ingress-nodeport/vhost
cd /opt/ingress-nodeport/vhost#创建虚拟主机1资源
vim deployment1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment1
spec:replicas: 2selector:matchLabels:name: nginx1template:metadata:labels:name: nginx1spec:containers:- name: nginx1image: soscscs/myapp:v1imagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: svc-1
spec:ports:- port: 80targetPort: 80protocol: TCPselector:name: nginx1kubectl apply -f deployment1.yaml#创建虚拟主机2资源
vim deployment2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment2
spec:replicas: 2selector:matchLabels:name: nginx2template:metadata:labels:name: nginx2spec:containers:- name: nginx2image: soscscs/myapp:v2imagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: svc-2
spec:ports:- port: 80targetPort: 80protocol: TCPselector:name: nginx2kubectl apply -f deployment2.yaml#创建ingress资源
vim ingress-nginx.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress1
spec:ingressClassName: "nginx"rules:- host: www1.kgc.comhttp:paths:- path: /pathType: Prefixbackend:service: name: svc-1port:number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress2
spec:ingressClassName: "nginx"rules:- host: www2.kgc.comhttp:
paths:- path: /pathType: Prefixbackend:service: name: svc-2port:number: 80kubectl apply -f ingress-nginx.yaml#测试访问
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.96.67.119 <none> 80:32383/TCP,443:32133/TCP 176mcurl www1.kgc.com:32383
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>curl www2.kgc.com:32383
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>//Ingress HTTPS 代理访问
mkdir /opt/ingress-nodeport/https
cd /opt/ingress-nodeport/https#创建ssl证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"#创建 secret 资源进行存储
kubectl create secret tls tls-secret --key tls.key --cert tls.crtkubectl get secret
NAME TYPE DATA AGE
tls-secret kubernetes.io/tls 2 2m22skubectl describe secret tls-secret
Name: tls-secret
Namespace: default
Labels: <none>
Annotations: <none>Type: kubernetes.io/tlsData
====
tls.crt: 1143 bytes
tls.key: 1704 bytes#创建 deployment、Service、Ingress Yaml 资源
vim ingress-https.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-app
spec:replicas: 2selector:matchLabels:name: nginxtemplate:metadata:labels:name: nginxspec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:ports:- port: 80targetPort: 80protocol: TCPselector:name: nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-https
spec:ingressClassName: "nginx"tls:- hosts:- www3.kgc.comsecretName: tls-secretrules:- host: www3.kgc.comhttp:paths:- path: /pathType: Prefixbackend:service: name: nginx-svcport:number: 80kubectl apply -f ingress-https.yamlkubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.96.67.119 <none> 80:32383/TCP,443:32133/TCP 3h41m#访问测试
在宿主机的 C:\Windows\System32\drivers\etc\hosts 文件中添加 192.168.80.10 www3.kgc.com 记录。
使用谷歌浏览器访问 https://www3.kgc.com:32133//Nginx 进行 BasicAuth
mkdir /opt/ingress-nodeport/basic-auth
cd /opt/ingress-nodeport/basic-auth#生成用户密码认证文件,创建 secret 资源进行存储
yum -y install httpd
htpasswd -c auth zhangsan #认证文件名必须为 auth
kubectl create secret generic basic-auth --from-file=auth#创建 ingress 资源
vim ingress-auth.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-authannotations:#设置认证类型basicnginx.ingress.kubernetes.io/auth-type: basic#设置secret资源名称basic-authnginx.ingress.kubernetes.io/auth-secret: basic-auth#设置认证窗口提示信息nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - zhangsan'
spec:ingressClassName: "nginx"rules:- host: auth.kgc.comhttp:paths:- path: /pathType: Prefixbackend:service: name: nginx-svcport:number: 80
//具体详细设置方法可参考官网https://kubernetes.github.io/ingress-nginx/examples/auth/basic/kubectl apply -f ingress-auth.yaml#访问测试
kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx NodePort 10.96.67.119 <none> 80:32383/TCP,443:32133/TCP 8hecho '192.168.80.10 auth.kgc.com' >> /etc/hosts浏览器访问:http://auth.kgc.com:32383//Nginx 进行重写
#metadata.annotations 配置说明
●nginx.ingress.kubernetes.io/rewrite-target: <字符串> #必须重定向流量的目标URI
●nginx.ingress.kubernetes.io/ssl-redirect: <布尔值> #指示位置部分是否仅可访问SSL(当Ingress包含证书时,默认为true)
●nginx.ingress.kubernetes.io/force-ssl-redirect: <布尔值> #即使Ingress未启用TLS,也强制重定向到HTTPS
●nginx.ingress.kubernetes.io/app-root: <字符串> #定义访问"http://域名/"根路径的请求重定向的路径
●nginx.ingress.kubernetes.io/use-regex: <布尔值> #指示Ingress上定义的路径是否使用正则表达式vim ingress-rewrite.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-rewriteannotations:nginx.ingress.kubernetes.io/rewrite-target: http://www1.kgc.com:32383
spec:ingressClassName: "nginx"rules:- host: re.kgc.comhttp:paths:- path: /pathType: Prefixbackend:#由于re.kgc.com只是用于跳转不需要真实站点存在,因此svc资源名称可随意定义service: name: nginx-svcport:number: 80kubectl apply -f ingress-rewrite.yamlecho '192.168.80.10 re.kgc.com' >> /etc/hosts浏览器访问:http://re.kgc.com:32383
5.总结
ingress是k8s集群的请求入口,可以理解为对多个service的再次抽象
通常说的ingress一般包括ingress资源对象及ingress-controller两部分组成
ingress-controller有多种实现,社区原生的是ingress-nginx,根据具体需求选择
ingress自身的暴露有多种方式,需要根据基础环境及业务类型选择合适的方式
相关文章:

k8s对外服务之Ingress
目录 1.Ingress 简介 2.Ingress 组成 3.Ingress-Nginx 工作原理 4.部署 nginx-ingress-controller 5.总结 1.Ingress 简介 service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了…...

使用Python+moviepy在视频画面上绘制边框
一、 使用VideoFileClip对象的的fx函数设置vfx.margin,在视频画面上绘制边框 from moviepy.editor import * mvVideoFileClip(/home/Download/leaves.mp4) mv2mv.fx(vfx.margin,mar3,color(0,0,255),opacity0.5) # 绘制边框# mar3 :边框宽度3像素&#…...

灵办AI探索之旅:颠覆传统的代码开发工具
前言 灵办AI是一个先进的人工智能工具,专注于提高软件开发和项目管理的效率。其核心功能包括代码生成、优化、评估和自动化修复,旨在帮助开发者和团队提升开发速度和代码质量。 体验地址:https://ilingban.com/browser_extension/?fromjj …...

【Redis】Redis 数据类型与结构—(二)
Redis 数据类型与结构 一、值的数据类型二、键值对数据结构三、集合数据操作效率 一、值的数据类型 Redis “快”取决于两方面,一方面,它是内存数据库,另一方面,则是高效的数据结构。 Redis 键值对中值的数据类型,也…...

Tomcat初篇
目录 Tomcat主要特点Tomcat的核心组件Tomcat使用安装Tomcat配置Tomcat启动和停止Tomcat Tomcat工作原理目录结构配置文件性能优化策略 Tomcat Apache Tomcat是一个开源的Servlet容器和Web服务器,广泛用于运行基于Java的Web应用程序。它实现了Java Servlet和JavaSer…...

机器学习(2)-- KNN算法之手写数字识别
KNN算法 KNN(K-Nearest Neighbor,K最近邻)算法是一种用于分类和回归的非参数统计方法,尤其在分类问题中表现出色。在手写数字识别领域,KNN算法通过比较测试样本与训练样本之间的距离,找到最近的K个邻居&am…...

【机器人】关于钉钉机器人如何进行自定义开发问答【详细清晰】
目标:当用户输入问题并钉钉机器人,钉钉机器人进行相应的回答,达到一种交互问答的效果 开发文档参考:https://open.dingtalk.com/document/orgapp/robot-overview 首先进行登录企业,后面如果没有进行登录,会…...

Qt:exit,quit,close的用法及区别
前言 虽然能从单词的字面意思大致理解这些函数的意思,但是总感觉不出来它们的区别以及用法,特地去研究一下 正文 在 Qt 中,quit、exit 和 close 都是用于终止程序或关闭窗口的方法 1. QApplication::quit() 注意:注意quit() …...

Linux——进程地址空间
前言 在操作系统中,内存分为以下几个区域,从下往上按照从小到大排列 一、程序地址的分布 代码 #include <stdio.h> #include <stdlib.h> int noval; int val 1;int main(int argc,char*argv[],char*env[]){printf("code addr %p\n&q…...

信创(国产化)方案
信创 信创,即信息技术应用创新,旨在实现信息技术自主可控openEuler openEuler是一款开源、免费的操作系统,由openEuler社区运作,前身为运行在华为公司通用服务器上的操作系统EulerOS。openEuler作为一款开源、免费的操作系统,由开放原子开源基金会(OpenAtom Foundation)…...

EasyRecovery17中文版永久汉化版电脑数据恢复工具下载
🎈🎉安利时间到!今天要跟大家分享的是——EasyRecovery17中文版的最新功能!🎉🎈 🌟✨ “数据恢复小能手” ✨🌟 让我来介绍一下这款软件的主打特点。 EasyRecovery17中文版是一款强…...

Cesium倾斜相机视角观察物体
先看效果: 在cesium中,我们有时需要倾斜相机视角去观察物体,如相机俯视45观察物体。 cesium的api提供了倾斜相机视角的配置,但是直接使用cesium的api不能达到我们想要的效果。 函数如下: function flyToBox() {let l…...

C/C++开发---全篇
1、统筹 学习目标: C/C、python精通。 就业匹配方向:专精一个领域,延长职业生涯。 (1)适配行业; (2)量化; (3)安全; (4&…...

Android全面解析之context机制(二): 从源码角度分析context创建流程(上)
前言 这篇文章从源码角度分析context创建流程。 在上一篇Android全面解析之Context机制(一) :初识context一文中讲解了context的相关实现类。经过前面的讨论,读者对于context在心中有了一定的理解。但始终觉得少点什么:activity是什么时候被创建的&…...

WPS真题题库导入刷题小程序:百思考个人使用经验分享
这篇文章的诞生,是因为我即将踏上一场超级有趣的挑战——备考全国计算机等级二级WPS Office高级应用与设计的冒险之旅! WPS的分值: 单项选择题20分(含公共基础知识部分10分)。 WPS处理文字文档操作题30分。 WPS处理电子表格操作题30分。 …...

拯救者双系统问题 Verifiying shim SBAT data failed: Security Policy Violation
Verifiying shim SBAT data failed: Security Policy Violation Something has gone seriously wrong: SBAT self-check failed: Security Policy Violation windows更新的问题 https://forums.linuxmint.com/viewtopic.php?t427297 https://github.com/Metabolix/HackBGRT/…...

ThreeJs学习笔记--坐标系,光源,相机控件
坐标系 一、创建添加坐标系 给场景添加坐标系THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸 const axesHelper new THREE.AxesHelper(200)//数值是坐标的尺寸 scene.add(axesHelper)//添加到场景里 坐标系包含三个坐标轴&…...

基于 Android studio 实现停车场管理系统--原创
目录 一、项目演示 二、开发环境 三、项目页面 四、项目详情 五、项目完整源码 一、项目演示 二、开发环境 三、项目详情 1.启动页 这段代码是一个简单的Android应用程序启动活动(Activity),具体功能如下: 1. **延迟进入登…...

8 个最佳 Java IDE 和文本编辑器
从 2024 年使用的最佳 Java IDE 和代码编辑器中进行选择,并提高您的 Java 生产力。 Java 是世界上最流行的编程语言之一,于 1995 年首次推出,它确实践行了“编写一个,随处运行”的座右铭。该语言用途广泛,可用于构建从…...

【2024最新版版】PyCharm安装教程
简介 由于Python语法简单容易入门,并且Python在办公自动化等领域的功能非常强大,所以现在越来越多非IT行业的人也开始学起了Python,要学习和使用一门编程语言,一个好用的IDE是必不可少的,而对于Python来说,…...

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?
作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满,几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代,AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现,同样值得业界关注&…...

Java进阶篇之包的概念及其应用
引言 在前面的文章中,我们介绍了抽象类和抽象方法(Java进阶篇之抽象类和抽象方法),在Java编程中,包(Package)是管理类和接口的重要工具。包不仅提供了一种层次化的命名空间机制,还可…...

短剧出海,赚钱新途径,掌握海外短剧CPS分销的秘诀
国内短剧发展的如日中天,需要的资质也是越来越严格,不少人已经将目标瞄向海外短剧市场,海外短剧这块相对来说并没有那么严格,但很多人在海外推广的道路上举步维艰,推广异常困难,重点讲下目前海外短剧的推广…...

uniapp小程序openid和unionId
1. openid 1. 用户的openid在小程序中的固定不变的; 2. 用户在不同的小程序里的openid是不一样的; 3. 只要appid不变,openid就不变。 获取openid 1. 使用uni.login获取code 2. 使用code调接口换取 用户唯一标识 OpenID 、 用户在微信开放平台…...

前端工程化-04.Vue项目简介
一.Vue项目-创建 1.使用如图两种方式创建Vue项目 2.在此创建新项目 点击创建项目 创建成功! 二.Vue项目-目录结构 三.Vue项目-运行 启动后直接在下方找到连接端口 成功启动项目 这个项目即为Vue中的自带项目Vue.app。修改其中的Home为Vue Home。ctals保存发…...

10 Checkbutton 组件
10 Checkbutton 组件 Tkinter 是 Python 的标准 GUI 库,它提供了一系列的控件来创建图形用户界面。Checkbutton 是其中的一个组件,用于创建可以被选中或取消选中的按钮,通常用于实现布尔值的开关功能。 创建 Checkbutton 创建一个基本的 C…...

获奖方案|趋动科技:资源池化释放AI算力价值
“据统计,GPU的平均利用率不超过30%,会产生巨大的算力资源浪费。我们用软件定义的方式通常可以把用户GPU的利用率提升3-8倍,甚至可以到10倍。” 这是算力池化软件公司趋动科技援引行业报告数据并结合自身企业最佳实践经验给出的最新数据。通…...

Gin框架接入pyroscope完美替代pprof实现检测内存泄露
传统检测内存泄露可以看一下我这篇文章Gin框架接入Prometheus,grafana辅助pprof检测内存泄露-CSDN博客 pyroscope被Grafana收购,GPT来总结一下pyroscope的强大之处🐶 pyroscope github地址 pyroscope与grafana的安装 docker compose安装,这里我们其实…...

记录一个lombok和mybatisplus的问题,@Data注解失效
刚开始我这里一直爆红,Article实体类也加了Data注解 依赖也导入了lombok,后来觉得是版本的问题,换了几个版本也是不行 后来最后还是在各种资料下,找到了原因 首先使用lombok不是只要导入依赖就行的,还要有插件&#…...

React学习-初始化react项目
目标: reactv18:->1.核心的22中api2路由3.数据状态管理:redux项目: 1.b端业务闭环:登录方案、权限设计、用户管理方案、业务功能、系统架构设计、路由设计流程闭环:开发环境、生产环境、测试环境、代码规范、分支管理规范、项…...