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

k8s - Flannel

1.Flannel概念剖析

Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。

Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于Linux TUN/TAP,使用UDP封装IP包来创建Overlay网络,并借助Etcd维护网络的分配情况。Flannel is a simple and easy way to configure a layer 3 network fabric designed for Kubernetes.

2. Flannel工作原理

Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的IP地址。

在默认的Docker配置中,每个Node的Docker服务会分别负责所在节点容器的IP分配。Node内部得容器之间可以相互访问,但是跨主机(Node)网络相互间是不能通信。

Flannel设计目的就是为集群中所有节点重新规划IP地址的使用规则,从而使得不同节点上的容器能够获得"同属一个内网"并且"不重复的"IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。

Flannel 使用Etcd存储配置数据和子网分配信息。Flannel 启动之后,后台进程首先检索配置和正在使用的子网列表,然后选择一个可用的子网,然后尝试去注册它。Etcd也存储这个每个主机对应的IP。

Flannel 使用Etcd的watch机制监视/atomic.io/network/subnets下面所有元素的变化信息,并且根据它来维护一个路由表。为了提高性能,Flannel优化了Universal TAP/TUN设备,对TUN和UDP之间的IP分片做了代理。

3. Flannel架构介绍

Flannel默认使用8285端口作为UDP封装报文的端口,VxLan使用8472端口。
在这里插入图片描述
那么一个网络报文请求是怎么从一个容器发送到另外一个容器的呢?例如从node1上的Container1容器(IP:10.244.0.13)访问node2上面Container2容器(IP:10.244.1.14)容器。

  • Container1容器10.244.0.13直接访问目标容器Container2的IP 10.244.1.14,请求默认通过容器内部的eth0网卡发送出去。
  • 请求报文通过Veth pair(虚拟设备对)被发送到Docker宿主机VethXXX设备上。
  • VethXXX设备是直接连接到虚拟交换机Docker0(Cni0)的,所以请求报文通过虚拟Bridge Docker0发送出去。
  • 然后查找Docker宿主机的路由表信息,同时外部容器IP的报文都会转发到Flannel0虚拟网卡,这是一个P2P的虚拟网卡,然后报文就被转发到监听在另一端的Flanneld进程。
  • 因为Flannel在Etcd中存储着子网和宿主机ip的对应关系,所以能够找到10.244.1.14对应的宿主机IP为11.101.1.3,进而开始组装UDP数据包发送数据到目的主机。
    这个请求得以完成的原因每个节点上都启动着一个Flanneld udp进程,都监听着8285端口,所以node1通过Flanneld进程把数据包通过宿主机的Interface网卡发送给node2的Flanneld进程的相应端口即可。
  • 请求报文到达node2之后,继续往上传输,到传输层,交给监听在8285端口的Flanneld程序处理。
  • 请求数据被解包,然后发送给Flannel0虚拟网卡。
  • 查找路由表,发现对应容器的报文要交给Docker0(cni0)。
  • Docker0找到连到自己的容器,把报文发送给Container2,反之同样的工作方式。

4. Kubernetes工作原理剖析

Kubernetes集群是一组节点,这些节点可以是物理服务器或者虚拟机,在其上安装Kubernetes平台。下图为了强调核心概念有所简化。Kubernetes架构图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上图,我们可以看到K8S组件和逻辑关系:Kubernetes集群主要由Master和Node两类节点组成。Master的组件包括:Apiserver、Controller-manager、Scheduler和Etcd等几个组件,其中Apiserver是整个集群的网关。

Node主要由kubelet、kube-proxy、docker引擎等组件组成。kubelet是K8S集群的工作与节点上的代理组件。

在企业生产环境中,一个完整的K8S集群,还包括CoreDNS、Prometheus(或HeapSter)、Dashboard、Ingress Controller等几个附加组件。其中cAdivsor组件作用于各个节点(master和node节点)之上,用于收集及收集容器及节点的CPU、内存以及磁盘资源的利用率指标数据,这些统计数据由Heapster聚合后,可以通过apiserver访问。
K8S集群中创建一个资源(Pod容器)的工作流程和步骤:

  • 客户端提交创建(Deployment、Namespace、Pod)请求,可以通过API Server的Restful API,也可以使用kubectl命令行工具。
  • 然后API Server处理用户的请求,并且存储相关的数据(Deployment、Namespace、Pod)到Etcd配置数据库中。
  • K8S Scheduler调度器通过API Server查看未绑定的Pod。尝试为该Pod分配Node主机资源。
  • 过滤主机 (调度预选):调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。
  • 主机打分(调度优选):对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。
  • 选择主机:选择打分最高的主机,进行binding操作,结果存储到etcd中。
  • Node节点上Kubelet根据调度结果,调用主机上的Docker引擎执行Pod创建操作,绑定成功后,Scheduler会调用APIServer的API在etcd中创建一个boundpod对象,描述在一个工作节点上绑定运行的所有pod信息。
  • 同时运行在每个工作节点上的Kubelet也会定期与etcd同步boundpod信息,一旦发现应该在该工作节点上运行的boundpod对象没有更新,则调用Docker API创建并启动pod内的容器。

5. Kubernetes 本地私有仓库实战

Docker仓库主要用于存放Docker镜像,Docker仓库分为公共仓库和私有仓库,基于registry可以搭建本地私有仓库,使用私有仓库的优点如下:
节省网络带宽,针对于每个镜像不用去Docker官网仓库下载;
下载Docker镜像从本地私有仓库中下载;
组件公司内部私有仓库,方便各部门使用,服务器管理更加统一;
可以基于GIT或者SVN、Jenkins更新本地Docker私有仓库镜像版本。
官方提供Docker Registry来构建本地私有仓库,目前最新版本为v2,最新版的docker已不再支持v1,Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如下为在192.168.1.147服务器上构建Docker本地私有仓库的方法及步骤:
(1)下载Docker registry镜像,命令如下:

docker pull registry

(2)启动私有仓库容器,启动命令如下:

mkdir -p  /data/registry/
docker run -itd  -p  5000:5000 -v /data/registry:/var/lib/registry  docker.io/registry

Docker本地仓库启动后台容器启动,如图24-2所示:
在这里插入图片描述
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下。

(3)上传镜像至本地私有仓库:
客户端上传镜像至本地私有仓库,如下以busybox镜像为例,将busybox上传至私有仓库服务器。

docker   pull    busybox
docker   tag    busybox  192.168.1.147:5000/busybox
docker   push  192.168.1.147:5000/busybox

(4)检测本地私有仓库:

curl -XGET http://192.168.1.147:5000/v2/_catalog
curl -XGET http://192.168.1.147:5000/v2/busybox/tags/list

(5)客户端使用本地私有仓库:
客户端docker配置文件添加如下代码,同时重启docker服务,获取本地私有仓库如图24-3所示:

OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry 192.168.1.147:5000'
ADD_REGISTRY='--add-registry 192.168.1.147:5000'

在这里插入图片描述
至此,docker本地私有仓库部署完毕,可以向仓库中添加或者更新Docker镜像。
在K8S Docker客户端主机添加本地仓库地址,添加方法如下:
vim /etc/docker/daemon.json文件中代码如下:

{
"insecure-registries":["192.168.1.147:5000"]
}

6. Kubernetes+Jenkins+Docker仓库整合

在企业生产环境中,通常会将K8S+Jenkins+Docker仓库整合起来,实现业务全自动发布。需求如下:
1)K8S云计算平台、Jenkins平台、Docker仓库平台;(提前准备好)
2)部署一套bbs.jfedu.net业务,在Jenkins创建工程-绑定SVN仓库地址-从SVN下载网站代码;
3)网站代码下载成功-制作CentOS7镜像-将网站程序打包至镜像中;
4)将制作的CentOS7镜像(网站程序)-上传至Docker仓库平台;
5)基于K8S云计算平台-部署bbs.jfedu.net业务(CentOS云主机)-NodePort端口-外网用户访问。
6)编写SHELL编程脚本,实现以上步骤整合操作,SHELL代码如下:

#进入Jenkins工程目录;
cd /root/.jenkins/workspace/bbs.jfedu.net/
#查看从SVN下载网站代码;
ls -l index.html
#创建Dockerfile镜像制作文件;
cat>Dockerfile<<EOF
#2022年11月23日11:22:12
#指定基础镜像;
FROM ansible/centos7-ansible:latest
#指定维护者信息;
MAINTAINER www.jfedu.net 2022
#指定工作目录;
WORKDIR /root/
#删除EPEL扩展源;
RUN rm -rf /etc/yum.repos.d/epel*
#安装网络工具和openssh server服务;
RUN yum install -y net-tools openssh-server httpd
#修改系统密码为1;
RUN echo 1|passwd --stdin root
#生成SSHD服务启动基础KEY文件;
RUN ssh-keygen -A
#将网站程序部署至镜像中;
COPY index.html /var/www/html/
RUN chmod 644 /var/www/html/index.html
#暴露映射目录;
VOLUME /var/www/html/
#指定容器入口命令;
ENTRYPOINT /usr/sbin/init
CMD /usr/sbin/sshd -D
EOF
#制作CentOS7镜像文件;
docker build -t centos7-ssh:v2 ./
#修改CentOS7镜像文件tag号;
docker tag centos7-ssh:v2 10.0.12.13:5000/centos7-ssh:v2
#将CentOS7镜像上传Docker私有仓库;
docker push 10.0.12.13:5000/centos7-ssh:v2
#创建K8S bbs-jfedu-net部署yaml文件;
cat>bbs-jfedu-net.yaml<<EOF
kind: Deployment
apiVersion: apps/v1
metadata:name: bbs-jfedu-netnamespace: defaultuid: 16adfc69-ecf1-48d3-9190-518ecffb8818resourceVersion: '3854'generation: 1creationTimestamp: '2022-11-23T13:02:03Z'labels:k8s-app: bbs-jfedu-netannotations:deployment.kubernetes.io/revision: '1'managedFields:- manager: dashboardoperation: UpdateapiVersion: apps/v1time: '2022-11-23T13:02:03Z'fieldsType: FieldsV1fieldsV1:'f:metadata':'f:labels':.: {}'f:k8s-app': {}'f:spec':'f:progressDeadlineSeconds': {}'f:replicas': {}'f:revisionHistoryLimit': {}'f:selector': {}'f:strategy':'f:rollingUpdate':.: {}'f:maxSurge': {}'f:maxUnavailable': {}'f:type': {}'f:template':'f:metadata':'f:labels':.: {}'f:k8s-app': {}'f:name': {}'f:spec':'f:containers':'k:{"name":"bbs-jfedu-net"}':.: {}'f:image': {}'f:imagePullPolicy': {}'f:name': {}'f:resources': {}'f:securityContext':.: {}'f:privileged': {}'f:terminationMessagePath': {}'f:terminationMessagePolicy': {}'f:dnsPolicy': {}'f:restartPolicy': {}'f:schedulerName': {}'f:securityContext': {}'f:terminationGracePeriodSeconds': {}- manager: kube-controller-manageroperation: UpdateapiVersion: apps/v1time: '2022-11-23T13:02:04Z'fieldsType: FieldsV1fieldsV1:'f:metadata':'f:annotations':.: {}'f:deployment.kubernetes.io/revision': {}'f:status':'f:conditions':.: {}'k:{"type":"Available"}':.: {}'f:lastTransitionTime': {}'f:lastUpdateTime': {}'f:message': {}'f:reason': {}'f:status': {}'f:type': {}'k:{"type":"Progressing"}':.: {}'f:lastTransitionTime': {}'f:lastUpdateTime': {}'f:message': {}'f:reason': {}'f:status': {}'f:type': {}'f:observedGeneration': {}'f:replicas': {}'f:unavailableReplicas': {}'f:updatedReplicas': {}
spec:replicas: 1selector:matchLabels:k8s-app: bbs-jfedu-nettemplate:metadata:name: bbs-jfedu-netcreationTimestamp: nulllabels:k8s-app: bbs-jfedu-netspec:containers:- name: bbs-jfedu-netimage: '10.0.12.13:5000/centos7-ssh:v2'resources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentsecurityContext:privileged: truerestartPolicy: AlwaysterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstsecurityContext: {}schedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%revisionHistoryLimit: 10progressDeadlineSeconds: 600
status:observedGeneration: 1replicas: 1updatedReplicas: 1unavailableReplicas: 1conditions:- type: Availablestatus: 'False'lastUpdateTime: '2022-11-23T13:02:04Z'lastTransitionTime: '2022-11-23T13:02:04Z'reason: MinimumReplicasUnavailablemessage: Deployment does not have minimum availability.- type: Progressingstatus: 'True'lastUpdateTime: '2022-11-23T13:02:04Z'lastTransitionTime: '2022-11-23T13:02:03Z'reason: ReplicaSetUpdatedmessage: ReplicaSet "bbs-jfedu-net-598fb758b6" is progressing.EOF
#创建bbs-jfedu-net-service.yaml文件;
cat>bbs-jfedu-net-service.yaml<<EOF
kind: Service
apiVersion: v1
metadata:name: bbs-jfedu-netnamespace: defaultuid: c259b7a1-4688-4e51-b5ce-7b9d0a600e15resourceVersion: '4636'creationTimestamp: '2022-11-23T13:16:20Z'labels:k8s-app: bbs-jfedu-netmanagedFields:- manager: dashboardoperation: UpdateapiVersion: v1time: '2022-11-23T13:16:20Z'fieldsType: FieldsV1fieldsV1:'f:metadata':'f:labels':.: {}'f:k8s-app': {}'f:spec':'f:externalTrafficPolicy': {}'f:ports':.: {}'k:{"port":80,"protocol":"TCP"}':.: {}'f:name': {}'f:port': {}'f:protocol': {}'f:targetPort': {}'f:selector':.: {}'f:k8s-app': {}'f:sessionAffinity': {}'f:type': {}
spec:ports:- name: tcp-80-80-js226protocol: TCPport: 80targetPort: 80nodePort: 30286selector:k8s-app: bbs-jfedu-netclusterIP: 10.10.232.164clusterIPs:- 10.10.232.164type: LoadBalancersessionAffinity: NoneexternalTrafficPolicy: Cluster
status:loadBalancer: {}
EOF
#基于yaml文件部署bbs-jfedu-net业务和Service;
kubectl apply -f bbs-jfedu-net.yaml
kubectl apply -f bbs-jfedu-net-service.yaml
#查看bbs-jfedu-net业务是否部署成功;
sleep 20
kubectl get pods -n default

相关文章:

k8s - Flannel

1.Flannel概念剖析 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络&#xff08;Overlay Network&#xff09;工具&#xff0c;其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方…...

服务器中了balckhoues勒索病毒怎么办?勒索病毒解密,数据恢复

近日&#xff0c;云天数据恢复中心发现&#xff0c;有多位用户的服务器中了一种名为balckhoues的勒索病毒&#xff0c;因为绝大多数用户是第一次遇到这种情况&#xff0c;所以对这种类型的勒索病毒并不是很了解。那接下来我们将对balckhoues勒索病毒做一个分析。 中毒特征 服务…...

react-pdf | Warning: TextLayer styles not found.

问题描述&#xff1a; 使用react-pdf展示pdf&#xff0c;但是报警告&#xff0c;Warning: TextLayer styles not found. 解决方法&#xff1a; <Pageloading{"加载中..."}renderAnnotationLayer{false}renderTextLayer{false}/> 添加属性如上&#xff0c;设…...

vue上传文件MD5加密

1.下载MD5依赖 npm install crypto-js 2.在utils文件夹中新增文件md5方法文件&#xff0c;文件名自定义&#xff08;fileMd5Sum.js&#xff09; import CryptoJs from crypto-js export default {// md5值计算fileMd5Sum(file) {let CryptoJS require("crypto-js"…...

vue2 .sync 修饰符

vue2 .sync 修饰符 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\13-sync修饰符 vue --version vue create v-sy…...

使用Tensorrt的一般步骤

使用Tensorrt的一般步骤 TensorRT的使用包括两个阶段&#xff1a;build and deployment。 build&#xff1a;该阶段主要完成模型转换&#xff08;从caffe或TensorFlow到TensorRT&#xff09;&#xff0c;如下图所示&#xff0c;在模型转换时会完成前述优化过程中的层间融合&am…...

uniapp apple 苹果登录 离线本地打包

官方文档 uni-app官网 文档写的不全&#xff0c;没有写离线打包流程 加lib 签名里带 sign in with apple hbuilder开关 代码 测试代码&#xff0c;获取app里所有的provider uni.getProvider({service: oauth,success: function (res) {console.log(res.provider)uni.showT…...

【数据库】Sql Server数据迁移,处理自增字段赋值

给自己一个目标&#xff0c;然后坚持一段时间&#xff0c;总会有收获和感悟&#xff01; 在实际项目开发中&#xff0c;如果遇到高版本导入到低版本&#xff0c;或者低版本转高版本&#xff0c;那么就会出现版本不兼容无法导入&#xff0c;此时通过程序遍历创建表和添加数据方式…...

JOSEF约瑟 矿用一般型选择性漏电继电器 LXY2-660 Φ45 JKY1-660

系列型号&#xff1a; JY82A检漏继电器 JY82B检漏继电器 JY82-380/660检漏继电器 JY82-IV检漏继电器 JY82-2P检漏继电器 JY82-2/3检漏继电器 JJKY检漏继电器 JD型检漏继电器 JY82-IV;JY82J JY82-II;JY82-III JY82-1P;JY82-2PA;JY82-2PB JJB-380;JJB-380/660 JD-12…...

DHCP自动分配IP原理

DHCP自动分配IP原理 1.采用UDP通信方式 2.服务器IP&#xff1a;255.255.255.255&#xff1b; 服务器端口&#xff1a;67, 设备接收端口&#xff1a;68 3.设备向服务器发送DISCOVER信息 4.设备收到服务器回应&#xff0c;且解析正确 5.设备向服务器发送REQUEST请求消息 6.设备接…...

读书笔记-《ON JAVA 中文版》-摘要26[第二十三章 注解]

文章目录 第二十三章 注解1. 基本语法1.1 基本语法1.2 定义注解1.3 元注解 2. 编写注解处理器2.1 编写注解处理器2.2 注解元素2.3 默认值限制 3. 使用javac处理注解4. 基于注解的单元测试5. 本章小结 第二十三章 注解 注解&#xff08;也被称为元数据&#xff09;为我们在代码…...

IDEA报Error:java:无效的源发行版13解决方式

出现问题原因&#xff1a;原本项目是spingboot2.0版本开发的&#xff0c;IDEA启动正常&#xff0c;后期新项目使用spingboot3.0&#xff0c;通过原来的IDEA版本及JDK1.8启动报上述错误&#xff0c;以下为版本文件 解决方式&#xff1a; 项目背景&#xff1a;项目已经上线&…...

基于SpringBoot的健身房管理系统

目录 前言 一、技术栈 二、系统功能介绍 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步…...

竞赛选题 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…...

希尔贝壳受邀参加《人工智能开发平台通用能力要求 第4部分:大模型技术要求》标准第一次研讨会

随着大模型技术与经验的不断累积&#xff0c;该方向也逐渐从聚焦技术突破&#xff0c;到关注开发、部署、应用的全流程工程化落地。为完善人工智能平台标准体系建设&#xff0c;满足产业多样化需求&#xff0c;2023年9月7日&#xff0c;中国信通院云大所在线上召开《人工智能开…...

虹科方案 | AR助力仓储物流突破困境:规模化运营与成本节约

文章来源&#xff1a;虹科数字化AR 点击阅读原文&#xff1a;https://mp.weixin.qq.com/s/xis_I5orLb6RjgSokEhEOA 虹科方案一览 HongKe DigitalizationAR 当今的客户体验要求企业在人员、流程和产品之间实现全面的连接。为了提升整个组织的效率并提高盈利能力&#xff0c;物流…...

spring容器ioc和di

spring ioc 容器的创建 BeanFactory 接口提供了一种高级配置机制&#xff0c;能够管理任何类型的对象&#xff0c;它是SpringIoC容器标准化超接口&#xff01; ApplicationContext 是 BeanFactory 的子接口。它扩展了以下功能&#xff1a; 更容易与 Spring 的 AOP 功能集成消…...

Maven 仓库地址

一、Maven 中央仓库地址 http://www.sonatype.org/nexus/http://mvnrepository.com/ &#xff08;本人推荐仓库&#xff09;http://repo1.maven.org/maven2 二、Maven 中央仓库地址大全 1、阿里中央仓库&#xff08;首选推荐&#xff09; <repository> <id>al…...

【2023研电赛】安谋科技企业命题特别奖:面向独居老人的智能居家监护系统

本文为2023年第十八届中国研究生电子设计竞赛安谋科技企业命题特别奖分享&#xff0c;参加极术社区的【有奖活动】分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来领&#xff01;&#xff0c;分享2023研电赛作品扩大影响力&#xff0c;更有丰富电子礼品等你来…...

[Machine learning][Part4] 多维矩阵下的梯度下降线性预测模型的实现

目录 模型初始化信息&#xff1a; 模型实现&#xff1a; 多变量损失函数&#xff1a; 多变量梯度下降实现&#xff1a; 多变量梯度实现&#xff1a; 多变量梯度下降实现&#xff1a; 之前部分实现的梯度下降线性预测模型中的training example只有一个特征属性&#xff1a…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...