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

k8s ingress基础

一、ingress 简介

在k8s集群中,service和pod的ip为内网ip,仅集群内部才可以访问。如果外部应用想要直接访问集群内的服务,就需要把外部请求通过负载均衡转发到service上,然后再由kube-proxy组件将其转发给后端pod。一般service可以通过NodePort和LoadBalancer两种方式对外提供访问,但是这两种方式都有以下缺点

  • NodePort:将service暴露在节点网络上,NodePort背后就是Kube-Proxy,Kube-Proxy是沟通service网络、Pod网络和节点网络的桥梁。
    小集群使用还行,当集群规模较大时,NodePort的端口管理就是个灾难。因为每个端口只能是一种服务,端口范围只能是 30000-32767。

  • LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置 Service 的场景。受限于云平台,且通常在云平台部署LoadBalancer还需要额外的费用。在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。

基于这种现状,kubernetes提供了Ingress资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求。

什么是ingress

Ingress 是对集群中服务的外部访问进行管理的 API 对象,通过yaml文件来配置,定义请求如何转发到service的规则。ingress通过http或https暴露集群内部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于域名的反向代理。Ingress相当于一个7层的负载均衡器,它的工作原理类似于Nginx,当在Ingress中建立映射规则,Ingress Controller通过监听这些配置规则并转化成Nginx的反向代理配置 , 然后对外部提供服务。ingress要依靠 ingress-controller 来具体实现以上功能。

ingress组成

  • ingress
通过yaml文件定义的规则集合,一个api对象。
  • 反向负载均衡器
反向代理负载均衡器就是 nginx、apache等中间件,新版k8s已经将Nginx与Ingress Controller合并为一个组件,所以Nginx无需单独部署,只需要部署Ingress Controller即可。在集群中反向代理负载均衡器可以自由部署,可以使用Replication Controller、Deployment、DaemonSet等等方式。常用的负载均衡器有以下几种1:Kubernetes Ingress作为"官方"控制器,它是由社区基于NGINX Web服务器开发的,并补充了一组用于实现额外功能的Lua插件。
2:NGINX Ingress 这是NGINX开发人员的官方产品,NGINX控制器具有很高的稳定性,持续的向后兼容性,没有任何第三方模块,并且由于消除了Lua代码而保证了较高的速度(与官方控制器相比)
3:Kong Ingress 由Kong Inc开发,并且有两个版本:商业版本和免费版本。Kong Ingress建立在NGINX之上,并增加了扩展其功能的Lua模块。
4:HAProxy Ingress 由HAProxy开发,它提供了“软”配置更新(无流量丢失),基于DNS的服务发现,通过API的动态配置。
5:Traefik 是一个全功能的 ingress 控制器 (Let’s Encrypt,secrets,http2,websocket),并且它也有来自 Containous 的商业支持。
6:Istio 是IBM,Google和Lyft(Envoy的原始作者)的联合项目,它是一个全面的服务网格解决方案。它不仅可以管理所有传入的外部流量(作为Ingress控制器),还可以控制集群内部的所有流量。
  • Ingress Controller
监听apiserver,获取服务新增,删除等变化,并结合ingress规则动态更新到反向代理负载均衡器上,并重载配置使其生效。 
使用watch机制: Service始终watch着后端pod变化。只要pod发生变化,api-server立刻检测到 

实现原理

1:ingress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化。
2:读取ingress自定义的规则,规则就是写明了那个域名对应哪个service,生成一段nginx配置。
3;写入nginx-ingress-controller的pod里,这个Ingress controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx/nginx.conf文件中的upstream里面
4:重新加载配置,nginx -s reload一下使配置生效,以此达到分配和动态更新问题。

以nginx为例,流程图如下:
在这里插入图片描述
在这里插入图片描述
架构图如下:
在这里插入图片描述

以上图片来源https://cloud.tencent.com/developer/article/1718482

二、ingress部署

  • 下载ingress yaml文件
通过wget下载需要用到的ingress文件,此次部署用的是1.9.0版本。
[root@node1 ~]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.0/deploy/static/provider/baremetal/deploy.yaml
  • 修改yaml配置
目前国外的镜像源已经不可用,需要修改镜像的源地址,如下:
1:修改ingress-controller的镜像源地址- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: LD_PRELOADvalue: /usr/local/lib/libmimalloc.soimage: registry.aliyuncs.com/google_containers/nginx-ingress-controller:v1.9.0   ###此处修改为阿里的源 imagePullPolicy: IfNotPresent#############################
2:修改webhook-certgen的镜像源地址(有两处需要修改)env:- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespaceimage: registry.aliyuncs.com/google_containers/kube-webhook-certgen:v20230407    #####修改镜像源地址                                                                       imagePullPolicy: IfNotPresent3:修改ingress-controller的网络模式spec:               hostNetwork: true    #####添加此处配置,修改为主机模式containers:       - args:           - /nginx-ingress-controller- --election-id=ingress-nginx-leader- --controller-class=k8s.io/ingress-nginx- --ingress-class=nginx- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller- --validating-webhook=:8443- --validating-webhook-certificate=/usr/local/certificates/cert- --validating-webhook-key=/usr/local/certificates/keyenv:            - name: POD_NAME
  • 启动ingress
[root@node1 ingress]# kubectl apply  -f  deploy.yaml 
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
deployment.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created
[root@node1 ingress]# kubectl get po  -n ingress-nginx 
NAME                                        READY   STATUS              RESTARTS   AGE
ingress-nginx-admission-create-hk2sx        0/1     ContainerCreating   0          3s
ingress-nginx-admission-patch-h6f5d         0/1     ContainerCreating   0          3s
ingress-nginx-controller-548689bbd7-8lzrj   0/1     ContainerCreating   0          3s[root@node1 ~]# kubectl get po  -n ingress-nginx  -o wide
NAME                                        READY   STATUS      RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
ingress-nginx-admission-create-hk2sx        0/1     Completed   0          43h   172.16.44.4    node2   <none>           <none>
ingress-nginx-admission-patch-h6f5d         0/1     Completed   0          43h   172.16.28.8    node3   <none>           <none>
ingress-nginx-controller-6c88c85c98-v8mgs   1/1     Running     0          30h   192.168.5.79   node1   <none>           <none>
[root@node1 ~]# 
###########以上可以看到ingress-controller的ip使用的是主机的ip。

三、测试http方式

  • 启动nginx和tomcat
1:编写yaml如下:
[root@node1 yaml]# cat  nginx-tomcat.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: nginxlabels:app: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: docker.io/library/nginx:latestimagePullPolicy: IfNotPresentports:- containerPort: 80---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:selector:app: nginxports:- port: 80protocol: TCPtargetPort: 80type: ClusterIP---
apiVersion: apps/v1
kind: Deployment
metadata:name: tomcatlabels:app: tomcat
spec:replicas: 1selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: tomcatimage: docker.io/library/tomcat:8.0-alpine   ###测试了好几个镜像,就这个能显示tom 猫imagePullPolicy: IfNotPresentports:- containerPort: 8080---            
apiVersion: v1 
kind: Service  
metadata:      name: tomcat-svc
spec:          selector:    app: tomcat ports:       - port: 8080protocol: TCPtargetPort: 8080type: ClusterIP[root@node1 yaml]# #################################################
2;启动nginx 和tomcat
[root@node1 yaml]# kubectl get po -o wide 
NAME                                      READY   STATUS    RESTARTS        AGE    IP             NODE    NOMINATED NODE   READINESS GATES
nginx-5977dc5756-glczk                    1/1     Running   0               30h    172.16.44.6    node2   <none>           <none>
tomcat-656df44d6c-6znd9                   1/1     Running   0               29h    172.16.28.13   node3   <none>           <none>
[root@node1 yaml]# kubectl get  svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
nginx-svc    ClusterIP   10.233.43.219   <none>        80/TCP     30h
tomcat-svc   ClusterIP   10.233.52.85    <none>        8080/TCP   30h####################################################
3:测试nginx服务没问题
[root@node1 yaml]# curl 10.233.43.219
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
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@node1 yaml]# ###################################
4:测试tomcat 服务
[root@node1 yaml]# curl 10.233.52.85:8080<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Apache Tomcat/8.0.53</title><link href="favicon.ico" rel="icon" type="image/x-icon" /><link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /><link href="tomcat.css" rel="stylesheet" type="text/css" /></head><body><div id="wrapper"><div id="navigation" class="curved container"><span id="nav-home"><a href="https://tomcat.apache.org/">Home</a></span><span id="nav-hosts"><a href="/docs/">Documentation</a></span>
  • 创建ingress 规则
1:编写ingress yaml
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-test
spec:ingressClassName: nginx    ########使用的实际负载均衡器类型rules:- host: "test.nginx.com"    #########nginx的域名http:paths:- path: "/"pathType: Prefixbackend:service:name: nginx-svc   ###nginx的svc nameport:number: 80- host: "test.tomcat.com"   ######tomcat的域名http:paths:- path: "/"pathType: Prefixbackend:service:name: tomcat-svc  ###tomcat的svc nameport:number: 8080###############################################
2:apply创建规则
[root@node1 yaml]# kubectl apply -f ingress.yaml
[root@node1 ~]# 
[root@node1 ~]# kubectl get ingress
NAME           CLASS   HOSTS                            ADDRESS        PORTS   AGE
ingress-test   nginx   test.nginx.com,test.tomcat.com   192.168.5.79   80      29h可以看到address为ingress-controller pod所在节点的物理地址,port为80##################################################
3:进入ingress-controller pod里面,查看更新的规则
[root@node1 ~]# kubectl exec -it ingress-nginx-controller-6c88c85c98-v8mgs  -n ingress-nginx   bash 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-5.1$ 
bash-5.1$ cat /etc/nginx/nginx.conf
## start server test.nginx.comserver {server_name test.nginx.com ;   ###ingress中定义的hostlisten 80  ;   ###container portlisten [::]:80  ;   listen 443  ssl http2 ;listen [::]:443  ssl http2 ;set $proxy_upstream_name "-";ssl_certificate_by_lua_block {certificate.call()}location / {set $namespace      "default";   ###命名空间set $ingress_name   "ingress-test";  ###ingress 名称set $service_name   "nginx-svc";   ###nginx svc名称set $service_port   "80";set $location_path  "/";set $global_rate_limit_exceeding n;#############下面是tomcat的配置
## start server test.tomcat.comserver {server_name test.tomcat.com ;listen 80  ;listen [::]:80  ;listen 443  ssl http2 ;listen [::]:443  ssl http2 ;set $proxy_upstream_name "-";ssl_certificate_by_lua_block {certificate.call()}location / {set $namespace      "default";set $ingress_name   "ingress-test";set $service_name   "tomcat-svc";set $service_port   "8080";set $location_path  "/";set $global_rate_limit_exceeding n;
  • 浏览器测试
windows 机器添加host解析
文件位置:C:\WINDOWS\System32\drivers\etc\hosts
192.168.5.79  test.nginx.com test.tomcat.com

访问nginx界面
在这里插入图片描述
访问tomcat界面
在这里插入图片描述

四、测试https模式

  • 创建secret
1:生成证书
[root@node1 cert]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=test.com"  ###注意此处的域名
Generating a RSA private key
.........................................................+++++
...+++++
writing new private key to 'tls.key'
-----
[root@node1 cert]# ll
total 8
-rw-r--r-- 1 root root 1261 Nov 10 16:55 tls.crt
-rw------- 1 root root 1704 Nov 10 16:55 tls.key
[root@node1 cert]# 2:创建secret
[root@node1 cert]# kubectl create secret tls tls-secret --key tls.key --cert tls.crt
secret/tls-secret created
[root@node1 cert]# kubectl get secret  | grep tls-secret
tls-secret                    kubernetes.io/tls    2      19s
[root@node1 cert]# 
  • 创建带tls的ingress
1:编辑yaml文件
[root@node1 yaml]# cat ingress-https.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-test
spec:tls:- hosts:- nginx.test.com     ###制定使用tls的主机- tomcat.test.comsecretName: tls-secret   ###指定secretingressClassName: nginxrules:- host: "nginx.test.com"http:paths:- path: "/"pathType: Prefixbackend:service:name: nginx-svcport:number: 80- host: "tomcat.test.com"http:paths:- path: "/"pathType: Prefixbackend:service:name: tomcat-svcport:number: 8080[root@node1 yaml]# ########################################
2:创建ingress,如下可以看到ports 多了个443端口
[root@node1 yaml]# kubectl apply -f  ingress-https.yaml 
ingress.networking.k8s.io/ingress-test created
[root@node1 yaml]# kubectl get ingress
NAME           CLASS   HOSTS                            ADDRESS   PORTS     AGE
ingress-test   nginx   nginx.test.com,tomcat.test.com             80, 443   7s
[root@node1 yaml]# kubectl get ingress
NAME           CLASS   HOSTS                            ADDRESS        PORTS     AGE
ingress-test   nginx   nginx.test.com,tomcat.test.com   192.168.5.79   80, 443   43s
  • 浏览器测试
windows 机器添加host解析
文件位置:C:\WINDOWS\System32\drivers\etc\hosts
192.168.5.79  nginx.test.com tomcat.test.com

访问nginx,如下:
在这里插入图片描述
在这里插入图片描述
访问tomcat,如下:
在这里插入图片描述
在这里插入图片描述
注意:如果显示以下问题,可以在当前浏览器页面,直接敲键盘输入thisisunsafe就可以了
在这里插入图片描述

相关文章:

k8s ingress基础

一、ingress 简介 在k8s集群中&#xff0c;service和pod的ip为内网ip&#xff0c;仅集群内部才可以访问。如果外部应用想要直接访问集群内的服务&#xff0c;就需要把外部请求通过负载均衡转发到service上&#xff0c;然后再由kube-proxy组件将其转发给后端pod。一般service可…...

【网络奇缘】我和英特网再续前缘

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络的概念 计算机网络的功能 ⭐1.数据通信 ⭐2.资源共享 ⭐3.分布式处理 ⭐4.提高可靠性 ⭐…...

node插件MongoDB(四)—— 库mongoose 的条件控制(三)

文章目录 前言一、运算符二、逻辑运算1. $or 逻辑或2. $and 逻辑与 三、正则匹配 前言 在mongodb 不能使用 > < > < ! 等运算符&#xff0c;需要使用替代符号。 一、运算符 > 使用 $gt< 使用 $lt> 使用 $gte< 使用 $lte! 使用 $ne 例子&#xff1a;获…...

【Amazon】云上探索实验室—了解 AI 编程助手 Amazon Codewhisperer

文章目录 一、前言&#x1f4e2;二、关于云上探索实验室&#x1f579;️三、领学员需要做什么&#xff1f;✴️四、领学员能获得什么&#xff1f;&#x1f523;五、学课通道入口&#x1f447;1️⃣CSDN平台2️⃣网易云课堂3️⃣Skill Builder 平台 六、活动详情链接 一、前言&a…...

【安卓13】谷歌原生桌面launcher3 禁止桌面图标拖拽和所有应用拖拽

前言 如果我们需要固定住布局&#xff0c;不给用户拖拽&#xff0c;可以通过修改长按点击监听事件来达到禁止拖拽的目的二、代码追踪 1、src/com/android/launcher3/touch/ItemLongClickListener.java 在这个类开头注册了两种类型的监听&#xff0c;一个是在桌面拖拽应用&…...

SA实战 ·《SpringCloud Alibaba实战》第13章-服务网关:项目整合SpringCloud Gateway网关

大家好,我是冰河~~ 一不小心[SpringCloud Alibaba实战》专栏都更新到第13章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基于…...

海外ASO优化之谷歌商店的评论优化

应用商店中的评分和评论&#xff0c;显示我们的应用程序的受欢迎程度以及用户对该应用程序的看法。评分和评论是以前或者是现在的用户分享的经验和公开的反馈。 1、提高应用评分评论。 高评分的应用可以从应用商店内的搜索流量中获得更多的点击量&#xff0c;通过推荐和推荐获…...

IP-guard Webserver view 远程命令执行漏洞【2023最新漏洞】

IP-guard Webserver view 远程命令执行漏洞【2023最新漏洞】 一、漏洞描述二、漏洞影响三、漏洞危害四、FOFA语句五、漏洞复现1、手动复现yaml pocburp发包 2、自动化复现小龙POC检测工具下载地址 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传…...

专访|OpenTiny 社区 Mr 栋:结合兴趣,明确定位,在开源中给自己一些技术性挑战

前言 OpenTiny 开源之夏项目终于迎来了圆满的结局。借此机会&#xff0c;我们采访了 TinyReact 的共建者 Mr 栋同学。 Mr 栋同学是一位热衷于前端技术的开发者&#xff0c;对前端开发充满了激情和热爱。同时他也是一位即将毕业的大四在校生。在 OpenTiny 开源项目中&#xff0…...

2023年11月PHP测试覆盖率解决方案

【题记&#xff1a;最近进行了ExcelBDD PHP版的开发&#xff0c;查阅了大量资料&#xff0c;发现PHP测试覆盖率解决方案存在不同的历史版本&#xff0c;让我花费了蛮多时间&#xff0c;为了避免后人浪费时间&#xff0c;整理本文&#xff0c;而且网上没有给出Azure DevOps里面P…...

matlab模糊控制文件m代码实现和基础理论

1、内容简介 略 15-可以交流、咨询、答疑 通过m代码来实现生成模糊文件fis文件 2、内容说明 模糊文件m代码实现和基础理论 matlab模糊控制文件m代码实现和基础理论 模糊文件、m代码和模糊基础理论 3、仿真分析 略 4、参考论文 略 链接&#xff1a;https://pan.baidu.co…...

Java设计模式-创建型模式-单例模式

单例模式 单例模式饿汉式懒汉式 单例模式 解释&#xff1a;一个类只能有一个实例 单例模式可以分为两种 饿汉式 和 懒汉式 饿汉式 也被称为预加载&#xff0c;即 在加载类的时候&#xff0c;就将实例创建出来&#xff0c;加载到内存&#xff0c;不管之后会不会使用这个实例 …...

社区分享|杭银消费金融基于MeterSphere开展接口自动化测试

杭银消费金融有限公司&#xff08;以下简称“杭银消费金融”&#xff09;成立于2015年12月&#xff0c;是经中国银保监会批准&#xff0c;由杭州银行作为主发起人&#xff0c;联合滴滴出行、中国银泰等企业组建的持牌消费金融机构&#xff0c;注册资本为25.61亿元。杭银消费金融…...

阿里云2核2G云服务器99元一年!3M带宽的ECS云服务器哦

经济型e实例2核2G3M带宽优惠价99元一年 除了轻量服务器配置&#xff0c;经济型e实例2核2G3M配置也成为了用户关注的焦点。这款云服务器以99元一年的价格&#xff0c;适合个人和普通企业用户搭建网站、开发测试等需求。 我买的是阿里云这款99元的云服务器&#xff0c;活动参与地…...

【工程部署】在RK3588上部署OCR(文字检测识别)(DBNet+CRNN)

硬件平台&#xff1a; 1、firefly安装Ubuntu系统的RK3588&#xff1b; 2、安装Windows系统的电脑一台&#xff0c;其上安装Ubuntu18.04系统虚拟机。 参考手册&#xff1a;《00-Rockchip_RKNPU_User_Guide_RKNN_API_V1.3.0_CN》 《RKNN Toolkit Lite2 用户使用指南》 1、文…...

Dockerfile运行容器不立即退出

1. 问题描述 运行容器结束&#xff0c;docker container立即退出。 2. 解决方案 在dockerfile中&#xff0c;添加如下命令&#xff0c; ENTRYPOINT ["tail", "-f", "/dev/null"]...

基因检测技术的发展与创新:安全文件数据传输的重要作用

基因是生命的密码&#xff0c;它决定了我们的身体特征、健康状况、疾病风险等。随着基因检测技术的高速发展&#xff0c;我们可以通过对基因进行测序、分析和解读&#xff0c;更深入地认识自己&#xff0c;预防和治疗各种遗传性疾病&#xff0c;甚至实现个性化医疗和精准健康管…...

Flink SQL自定义标量函数(Scalar Function)

使用场景&#xff1a; 标量函数即 UDF&#xff0c;⽤于进⼀条数据出⼀条数据的场景。 开发流程&#xff1a; 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数&#xff0c;名称必须叫做 eval&#xff0c;eval ⽅法签名必须是 p…...

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象

process对象是一个全局对象&#xff0c;提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例&#xff0c;因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…...

觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地

11月10日&#xff0c;2023世界新汽车技术合作生态展期间&#xff0c;觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通&#xff0c;为…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

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

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

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...