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

Mr. Cappuccino的第39杯咖啡——Kubernetes之深入理解Pod

Kubernetes之深入理解Pod

      • Pod相关概念
      • Pod详细配置清单
      • Pod核心配置
        • Pod基本配置
          • 1. 创建yaml文件
          • 2. 创建namespace并根据yaml文件创建资源
          • 3. 查看namespace下的pod列表以及pod的详细信息
        • Pod中多个容器的名称和端口号不能相同
        • Pod镜像拉取策略
        • Pod环境变量
        • Pod端口相关设置
        • Pod资源相关配置
        • Pod启动命令配置

Pod相关概念

  1. Pod实际上是容器的集合,是k8s中最小调度单元;
  2. 一个Pod里面可以有n多个不同的容器;
  3. 一个Pod内的容器之间共享相同的Pod Ip网络;
  4. Pause容器,这是每个Pod都会有的一个根容器;
  5. 可以在根容器上设置ip地址,其它容器都共享相同Ip (Pod IP),以实现Pod内部的网路通信,Pod内部的通讯,Pod的之间的通讯采用虚拟二层网络技术来实现。

在这里插入图片描述

Pod详细配置清单

apiVersion: v1      #必填,版本号,例如v1
kind: Pod           #必填,资源类型,例如Pod、service、Deployment
metadata:           #必填,元数据name: pod-name    #必填,Pod名称namespace: namespace-name #Pod所属的命名空间, 默认为"default"labels:           #自定义标签列表- name: v1
spec:               #必填,Pod中容器的详细定义containers:       #必填,Pod中容器列表- name: container-name  #必填,容器名称image: nginx:1.7.9 #必填,容器的镜像名称imagePullPolicy: [ Always|Never|IfNotPresent] #获取镜像的策略command: [string]  #容器的启动命令列表,如不指定,使用打包时使用的启动命令args: [string]     #容器的启动命令参数列表workingDir: string #容器的工作目录volumeMounts:      #挂载到容器内部的存储卷配置- name: string     #引用Pod定义的共享存储卷的名称,需用volumes[ ]部分定义的卷名mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符read0nly: boolean #是否为只读模式ports:              #需要暴露的端口库号列表- name: string      #端口的名称containerPort: int #容器需要监听的端口号hostPort: int   #容器所在主机需要监听的端口号,默认与Container相同protocol: string  #端口协议,支持TCP和UDP,默认TCPenv:      #容器运行前需设置的环境变量列表- name: string    #环境变量名称value: string #环境变量的值resources: #资源限制和请求的设置limits:  #资源限制的设置cpu: string  #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数requests: #资源请求的设置cpu: string     #Cpu请求,容器启动的初始可用数量memory: string  #内存请求,容器启动时的初始可用数量lifecycle: #生命周期钩子postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启preStop:   #容器终止前执行此钩子,无论结果如何,容器都会终止livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器exec:        #对Pod容器内检查方式设置为exec方式command: [string] #exec方式需要制定的命令或脚本httpGet:     #对Pod内容器健康检查方法设置为HttpGet,需要制定path、portpath: stringport: numberhost: stringscheme: stringHttpHeaders:- name: stringvalue: stringtcpSocket: #对Pod内容器健康检查方式设置为tcpSocket方式port: number
apiVersion: v1 # 必选,API的版本号
kind: Pod      # 必选,类型Pod
metadata:      # 必选,元数据即基础信息
name: nginx    # 必选,符合RFC 1035规范的Pod名称
namespace: web-testing # 可选,不指定默认为default,Pod所在的命名空间
labels:        # 可选,标签选择器,一般用于Selector
- app: nginx
annotations:   # 可选,注释列表
- app: nginx
spec:          # 必选,用于定义容器的详细信息
containers:    # 必选,容器列表
name: nginx    # 必选,符合RFC 1035规范的容器名称
image: nginx:v1 # 必选,容器所用的镜像地址
imagePullPolicy: Always # 可选,镜像拉取策略
镜像拉取策略分三种:
Always 不管镜像存不存在本地都拉取(默认)
Nerver 不管镜像存不存在本地都不拉取
IfNotpresent 本地有镜像不拉取,没有就拉取
workingDir: /usr/share/nginx/html # 可选,容器的工作目录
volumeMounts: # 可选,存储卷配置
name: webroot # 存储卷名称
mountPath: /usr/share/nginx/html # 挂载目录
readOnly: true # 只读
ports: # 可选,容器需要暴露的端口号列表
name: http # 端口名称
containerPort: 80 # 端口号
protocol: TCP # 端口协议,默认TCP
env: # 可选,环境变量配置
name: TZ # 变量名
value: Asia/Shanghai
name: LANG
value: en_US.utf8
resources: # 可选,资源限制和资源请求限制
limits: # 最大限制设置
cpu: 1000m
memory: 1024MiB
requests: # 启动所需的资源
cpu: 100m
memory: 512MiB
readinessProbe: # 可选,容器状态检查
httpGet: # 检测方式
path: /  # 检查路径
port: 80 # 监控端口
timeoutSeconds: 2 # 超时时间
initialDelaySeconds: 60 # 初始化时间
livenessProbe: # 可选,监控状态检查
exec:    # 检测方式
command:
- cat
- /health
httpGet: # 检测方式
path: /_health
port: 8080
httpHeaders:
- name: end-user
value: jason
tcpSocket: # 检测方式
port: 80
initialDelaySeconds: 60 # 初始化时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 检测间隔
successThreshold: 2 # 检查成功为2次表示就绪
failureThreshold: 1 # 检测失败1次表示未就绪
securityContext:    # 可选,限制容器不可信的行为
provoleged: false
restartPolicy: Always # 可选,默认为Always
nodeSelector: # 可选,指定Node节点
region: subnet7
imagePullSecrets: # 可选,拉取镜像使用的secret
name: default-dockercfg-86258
hostNetwork: false # 可选,是否为主机模式,如是,会占用主机端口
volumes: # 共享存储卷列表
name: webroot # 名称,与上述对应
emptyDir: {} # 共享卷类型,空
hostPath: # 共享卷类型,本机目录
path: /etc/hosts
secret: # 共享卷类型,secret模式,一般用于密码
secretName: default-token-tf2jp # 名称
defaultMode: 420 # 权限
configMap: # 一般用于配置文件
name: nginx-conf
defaultMode: 420

Pod核心配置

Pod基本配置

1. 创建yaml文件

文件名称:pod.yaml

apiVersion: v1
kind: Pod # 类型为pod
metadata:name: nginx-podnamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx   # 容器1image: nginx:1.17.9- name: tomcat  # 容器2image: tomcat:8
2. 创建namespace并根据yaml文件创建资源
kubectl create ns bubble-dev
kubectl create -f pod.yaml
3. 查看namespace下的pod列表以及pod的详细信息
kubectl get pods -n bubble-dev
kubectl describe pods -n bubble-dev

在这里插入图片描述
说明pod运行在192.168.102.160这台工作节点上

[root@master ~]# kubectl describe pods -n bubble-dev
Name:         nginx-pod
Namespace:    bubble-dev
Priority:     0
Node:         node1/192.168.102.160
Start Time:   Thu, 12 Jan 2023 08:34:01 -0500
Labels:       user=v1
Annotations:  <none>
Status:       Running
IP:           172.17.0.2
IPs:IP:  172.17.0.2
Containers:nginx:Container ID:   docker://53e89cea6f2dab821a4f274be8b6fa60e39cde65dd7ecd9d3786c2618f5be6dbImage:          nginx:1.17.9Image ID:       docker-pullable://nginx@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50Port:           <none>Host Port:      <none>State:          RunningStarted:      Thu, 12 Jan 2023 08:34:03 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-lnn96 (ro)tomcat:Container ID:   docker://bd2b47f17f18a5983dcb0e2c2da60a96bd016da8c2eb644b095430b1f9132884Image:          tomcat:8Image ID:       docker-pullable://tomcat@sha256:421c2a2c73f3e339c787beaacde0f7bbc30bba957ec653d41a77d08144c6a028Port:           <none>Host Port:      <none>State:          RunningStarted:      Thu, 12 Jan 2023 08:34:58 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-lnn96 (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:default-token-lnn96:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-lnn96Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300snode.kubernetes.io/unreachable:NoExecute for 300s
Events:Type    Reason     Age    From               Message----    ------     ----   ----               -------Normal  Scheduled  2m26s  default-scheduler  Successfully assigned bubble-dev/nginx-pod to node1Normal  Pulled     2m25s  kubelet, node1     Container image "nginx:1.17.9" already present on machineNormal  Created    2m25s  kubelet, node1     Created container nginxNormal  Started    2m24s  kubelet, node1     Started container nginxNormal  Pulling    2m24s  kubelet, node1     Pulling image "tomcat:8"Normal  Pulled     90s    kubelet, node1     Successfully pulled image "tomcat:8"Normal  Created    90s    kubelet, node1     Created container tomcatNormal  Started    89s    kubelet, node1     Started container tomcat
curl 172.17.0.2
curl 172.17.0.2:8080

在这里插入图片描述

Pod中多个容器的名称和端口号不能相同

名称不能相同

apiVersion: v1
kind: Pod # 类型为pod
metadata:name: podnamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx # 容器1image: nginx:1.17.9- name: nginx # 容器2image: nginx:1.17.9

在这里插入图片描述

端口号不能相同

apiVersion: v1
kind: Pod # 类型为pod
metadata:name: podnamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx1 # 容器1image: nginx:1.17.9- name: nginx2 # 容器2image: nginx:1.17.9

在这里插入图片描述

在这里插入图片描述
其中nginx2由于端口号被占用无法启动,一直在重试启动
在这里插入图片描述
在这里插入图片描述

Pod镜像拉取策略

  1. Always:每次都是从远程仓库拉取镜像
  2. IfNotPresent:如果本地有该镜像则使用本地,如果本地没有该镜像则使用远程
  3. Never:只使用本地镜像,不去远程仓库拉取,本地没有该镜像则会报错

yaml配置清单实例:

apiVersion: v1
kind: Pod # 类型为pod
metadata:name: pod-namenamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx # 容器名称image: nginx:1.17.9imagePullPolicy: IfNotPresent # 用于设置镜像拉取策略

Pod环境变量

apiVersion: v1
kind: Pod # 类型为pod
metadata:name: pod-envnamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx # 容器名称image: nginx:1.17.9env: # 设置环境变量列表- name: "username"value: "honey"- name: "age"value: "22"

在这里插入图片描述
进入容器

kubectl exec -it pod的名称 -n 命名空间 -c 容器名称 /bin/sh
kubectl exec -it pod-env -n bubble-dev -c nginx /bin/sh

读取环境变量

echo $username
echo $age

在这里插入图片描述
退出容器

exit

在这里插入图片描述

Pod端口相关设置

name <string> # 端口的名称,name在pod中是唯一的,不允许重复
containerPort <integer> # 容器要暴露的端口 (0<x<65536)
hostPort <integer> # 容器要映射到主机上的端口
hostIP <string> # 容器要映射到主机的IP(一般省略)
protocol <string> # 端口协议,必须是UDP、TCP或SCTP,默认为“TCP"
apiVersion: v1
kind: Pod # 类型为pod
metadata:name: pod-portnamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx # 容器名称image: nginx:1.17.9ports: # 设置容器暴露的端口号列表- name: expose-portcontainerPort: 80protocol: TCP

在这里插入图片描述
在这里插入图片描述

Pod资源相关配置

可以通过资源配置Pod对应的cpu核数、内存配置等

  1. limits:限制容器运行时的最大占用资源,当容器占用资源超过limits设置的值时会被终止,并进行重启;
  2. requests:用于设置限制容器需要的最小资源,如果环境资源不够,容器则将无法启动
    cpu:核心数
    memory:内存大小,可以使用Gi、Mi、G、M等形式

资源不够无法启动案例

apiVersion: v1
kind: Pod # 类型为pod
metadata:name: pod-resourcenamespace: bubble-devlabels:user: v1 # 标签值
spec:containers:- name: nginx # 容器名称image: nginx:1.17.9resources: # 资源配额limits:  # 最大资源限制cpu: "2" # 限制CPU核心线程数memory: "10Gi" # 内存限制requests: # 最小资源限制cpu: "1" # CPU限制,单位是core数memory: "10Gi" # 内存限制

在这里插入图片描述
在这里插入图片描述

Pod启动命令配置

容器启动成功之后 可以执行一些脚本

apiVersion: v1
kind: Pod
metadata:name: pod-command-testnamespace: bubble-dev
spec:containers:- name: busyboximage: busybox:1.30

在这里插入图片描述
在这里插入图片描述
查看pod信息,busybox停止了
在这里插入图片描述
这是因为busybox容器启动后,它会自动关闭,我们可以通过启动命令写脚本,让busybox一直在运行。

apiVersion: v1
kind: Pod
metadata:name: pod-commandnamespace: bubble-dev
spec:containers:- name: busyboximage: busybox:1.30command: [ "/bin/sh","-c","while true;do  sleep 3; done;"]

“/bin/sh”,“-c”:使用sh执行命令
“while true;do sleep 3; done;”:一直死循环,为了避免cpu飙高的问题 休眠3s时间

在这里插入图片描述
在这里插入图片描述
可以发现,busybox仍在运行。
在这里插入图片描述

相关文章:

Mr. Cappuccino的第39杯咖啡——Kubernetes之深入理解Pod

Kubernetes之深入理解PodPod相关概念Pod详细配置清单Pod核心配置Pod基本配置1. 创建yaml文件2. 创建namespace并根据yaml文件创建资源3. 查看namespace下的pod列表以及pod的详细信息Pod中多个容器的名称和端口号不能相同Pod镜像拉取策略Pod环境变量Pod端口相关设置Pod资源相关配…...

SqlSession 和 SqlSessionTemplate 简单使用及注意事项

1、SqlSession 简单使用 先简单说下 SqlSession 是什么&#xff1f;SqlSession 是对 Connection 的包装&#xff0c;简化对数据库操作。所以你获取到一个 SqlSession 就相当于获取到一个数据库连接&#xff0c;就可以对数据库进行操作。 SqlSession API 如下图示&#xff1a;…...

1. QSaveFile和QFile的简单使用

1. 说明 QSaveFile和QFile两个类都是用来操作文件的&#xff0c;区别在于QSaveFile在对文件进行写入时有一种保护机制&#xff0c;再写入出错时&#xff0c;不会对源文件中的内容进行操作。该类在执行写操作时&#xff0c;会先将内容写入到一个临时文件中&#xff0c;如果没有…...

工业4.0是如何优化垃圾处理行业的

如今&#xff0c;工业4.0正在影响着制造业和物流等行业&#xff0c;其发展潜力在未来还有望进一步扩大。一些全球领先的垃圾处理公司已经开始在水处理和废物回收等领域应用工业4.0。工业4.0的创新给这个领域带来了一些必要的改进。随着环境危机的加剧&#xff0c;垃圾处理行业面…...

vue 动画(transition)

一、 实现原理 在插入、更新、移除 DOM 元素时&#xff0c;在合适的时候给元素添加样式类名&#xff0c;配合 CSS 样式使用&#xff0c;实现动画效果。 通俗来讲&#xff0c;就是将要进行动画操作的 DOM 元素用 transition 标签包裹起来。在此html元素运动前&#xff0c;运动…...

Python 爬虫工程师面试经验分享,金三银四

&#x1f643; 作为一个 Python 爬虫工程师&#xff0c;我可以分享一些我在面试中的经验和建议。 首先一点是在面试中要表现自信、友好、乐于合作&#xff0c;同时对公司的业务和文化也要有一定的了解和兴趣&#xff0c;这些也是公司在招聘中看重的因素。 文章目录&#x1f55b…...

MySQL实战篇-MySQL 降配导致的实例宕机

问题描述 由于近期对服务器进行了降配&#xff0c;该mysql数据库会进行批量写入操作&#xff0c;直接导致实例宕机 查看错误日志: 2021-02-02T09:09:23.557505Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 16791ms. The settings might not be optimal. (fl…...

时隔多年,这次我终于把动态代理的源码翻了个地儿朝天

本文内容整理自 博学谷狂野架构师 动态代理简介 ​ Proxy模式是常用的设计模式&#xff0c;其特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。 用户可以更加结构图&#xff0…...

数据分析-深度学习 Tensorflow Day6

我们需要解决的问题&#xff1a;1&#xff1a; 什么是bp 神经网络&#xff1f;2&#xff1a;理解bp神经网络需要哪些数学知识&#xff1f;3&#xff1a;梯度下降的原理4: 激活函数5&#xff1a;bp的推导。1.什么是bp网络&#xff1f;引用百度知道回复&#xff1a;“我们最常用的…...

leaflet 设置多个marker,导出为一个geojson文件(066)

第066个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用L.marker设置多个markers, 通过数据重组,导出为geojson文件。 这里面 ayer instanceof L.Marker 是一个很重要的判断条件,可以灵活地去运用。 直接复制下面的 vue+openlayers源代码,操作2分钟即可…...

企业与第三方供应商合作时,会存在哪些安全风险?

随着现代社会的发展&#xff0c;企业供应链、产业供应链已日渐成熟。其中&#xff0c;供应商与企业的关系也由最初的纯粹买卖关系发展成了合作伙伴关系。在整个供应链体系中&#xff0c;供应商与其受众承担着供应链中环环相扣的责任&#xff0c;可以说&#xff0c;企业安全的薄…...

技术源自洛克希德·马丁,光场XR眼镜FYR解析

专注于医疗场景的一家XR眼镜厂商FYR&#xff08;全称&#xff1a;FYR Medical&#xff09;近期亮相&#xff0c;并宣布完成了260万美元A轮融资&#xff0c;本轮融资由NuVasive领投&#xff0c;资金将用于开发世界上第一个XR光场“放大镜”类产品。据青亭网了解&#xff0c;NuVa…...

剑指 Offer 10- II. 青蛙跳台阶问题(LeetCode 70. 爬楼梯)(动态规划打表)

题目&#xff1a; 链接&#xff1a;剑指 Offer 10- II. 青蛙跳台阶问题&#xff1b;LeetCode 70. 爬楼梯 难度&#xff1a;简单 相关博文&#xff1a;剑指 Offer 10- I. 斐波那契数列&#xff08;动态规划打表&#xff09; 一只青蛙一次可以跳上1级台阶&#xff0c;也可以跳上…...

webpack(高级)--文件的压缩Terser(js/css/html) Tree Shaking

webpack Terser Terser是一个javascript的解释(Parser),Mangler(绞肉机) /Compressor(压缩机)的工具集 早期我们会使用uglify-js来压缩&#xff0c;丑化我们的javascript代码 但是目前已经不在维护 并且不支持ES6语法 Terser是从uglify-es fork 过来的 也就是说 Terser可以帮…...

做软文发布需要注意哪些细节?

软文发布是一种有效的网络营销和推广活动&#xff0c;它以媒体等形式把产品信息植入到软文报道或新闻中&#xff0c;进行心理暗示和引导销售&#xff0c;进行正面宣传以及促进销售的新型网络营销方式&#xff0c;它不但能够有效地推行产品宣传、也能有效地提高网络曝光率&#…...

【Python】一篇文章读懂yield基本用法

这一次&#xff0c;田辛老师想通俗易懂地解释一下Python中的yield功能。 本文要说明以下四个问题&#xff1a; yield是什么什么是迭代器和生成器yield的基本用法如何使用yield from 用真正简单的方法讲解yield并不容易。 我想&#xff0c;就算你不懂yield语句&#xff0c;也…...

Docker getting started

系列文章目录 Docker 概述 Docker getting started 文章目录系列文章目录前言一、容器及镜像的概念二、容器化一个应用三、更新应用四、分享应用五、持久化数据存储volume mount 和 bind mount比较Container volumesbind mounts六、跨多容器的应用七、Docker 其它八、Docker 图…...

【Uniapp使用遇到问题合集】

Uniapp使用遇到问题合集问题一跳转页面后无法进行滑动/滚动的操作描述解决方法问题一 跳转页面后无法进行滑动/滚动的操作 描述 如题,实际操作是我在uniapp自带的组件uni-popup弹出层中加入了一个点击事件,点击后可跳转到指定的页面 但实际运行中出现了跳转过后页面过长时无…...

宝塔面板破解最新教程

宝塔,让运维简单高效。面板支持Linux与Windows系统。一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过Web端轻松管理服务器。今天考高分网就简单说一下BT宝塔面板专业版最新破解教程。 网地址&#xff1a;https://www.bt.cn/ 网上的破解版一般分为两种&#xff0c;一种是直接…...

基于zookeeper的Hadoop集群搭建详细步骤

目录 一、一些基本概念 二、集群配置图 三、Hadoop高可用集群配置步骤 1.在第一台虚拟机解压hadoop-3.1.3.tar.gz到/opt/soft/目录 2.修改文件名、属主和属组 3.配置windows四台虚拟机的ip映射 4.修改hadoop配置文件 (1)hadoop-env.sh (2)workers (3)crore-site.xml …...

java毕业设计基于springboot网上问卷调查系统-编号:project25765

前言 随着互联网的快速发展&#xff0c;人们对于在线服务的需求越来越高&#xff0c;这促使了各种在线调查系统的蓬勃发展。其中&#xff0c;在线问卷调查系统因其操作简便、数据统计快速、受访者覆盖范围广等特点&#xff0c;逐渐成为一种主流的调查方式。传统的问卷调查方式由…...

手把手教你调试富文本编辑器:Cannot find a descendant at path 错误排查全记录

手把手教你调试富文本编辑器&#xff1a;Cannot find a descendant at path 错误排查全记录 富文本编辑器作为现代Web应用的核心组件之一&#xff0c;其复杂性往往隐藏在看似简单的API背后。当控制台突然抛出Cannot find a descendant at path [0,2] in node这类错误时&#xf…...

探讨 AI 自动翻译与本地化 SEO:如何在全球搜索中保持跨语言语义一致性?

各位听众&#xff0c;下午好&#xff01;我是今晚的主讲人&#xff0c;一名在软件工程和数据科学领域深耕多年的开发者。今天&#xff0c;我们齐聚一堂&#xff0c;探讨一个既充满挑战又蕴含巨大机遇的前沿话题&#xff1a;AI 自动翻译与本地化 SEO——如何在全球搜索中保持跨语…...

LiuJuan20260223Zimage模型固件更新与管理策略

LiuJuan20260223Zimage模型固件更新与管理策略 1. 引言 想象一下这样的场景&#xff1a;你负责的智能设备部署在全国各地&#xff0c;突然发现一个重要功能需要优化&#xff0c;或者一个安全漏洞需要紧急修复。传统方式可能需要技术人员跑到每个现场&#xff0c;一台台手动升…...

Python自动化翻车实录:我用PyAutoGUI写游戏脚本,结果被系统当成了外挂?

Python自动化实战&#xff1a;用PyAutoGUI打造游戏辅助脚本的避坑指南 上周深夜&#xff0c;当我第37次手动点击《植物大战僵尸》里那些该死的阳光时&#xff0c;一个危险的念头闪过脑海&#xff1a;"能不能写个脚本自动收集阳光&#xff1f;"三小时后&#xff0c;我…...

Wan2.2-T2V-A5B背后的AI原理:卷积神经网络在视频生成中的角色演进

Wan2.2-T2V-A5B背后的AI原理&#xff1a;卷积神经网络在视频生成中的角色演进 1. 引言 你可能已经看过不少由AI生成的短视频&#xff0c;从一段简单的文字描述&#xff0c;就能变出一段流畅、生动的画面。这背后&#xff0c;像Wan2.2-T2V-A5B这样的模型功不可没。当我们惊叹于…...

AS32-100 LoRa模块在ESP32-S3上的UART透传驱动实现

1. AS32-100 LoRa无线通信模块技术解析与ESP32-S3平台移植实践LoRa&#xff08;Long Range&#xff09;作为一种低功耗广域网&#xff08;LPWAN&#xff09;物理层调制技术&#xff0c;凭借其出色的链路预算、抗干扰能力和远距离传输特性&#xff0c;在工业物联网、智能农业、环…...

AI编程省钱技巧:手把手教你用Roo Code+Claude 3搭建私有代码补全系统

AI编程省钱实战&#xff1a;用开源工具打造私有代码补全系统 在AI辅助编程工具日益普及的今天&#xff0c;许多开发者已经习惯了智能补全带来的效率提升。然而主流商业服务的订阅费用往往让个人开发者望而却步——每月动辄上百美元的支出&#xff0c;对于独立开发者或小型团队来…...

MogFace人脸检测模型在学术论文写作中的应用:自动生成图表与结果可视化

MogFace人脸检测模型在学术论文写作中的应用&#xff1a;自动生成图表与结果可视化 如果你是一位正在撰写人脸检测相关论文的研究者&#xff0c;我猜你一定经历过这样的时刻&#xff1a;为了绘制一张精度-召回率曲线图&#xff0c;你需要在多个数据集上手动运行模型、整理数据…...

esp32和stm32的工程宏定义

1.esp32的工程宏定义这个是ESP32的工程结构&#xff0c;能够看到在总工程文件夹中有一个总体的cmakelist。我们在这个cmakelist中添加代码&#xff1a;idf_build_set_property(COMPILE_DEFINITIONS ESP32 APPEND)第一个参数COMPILE_DEFINITIONS表示添加的是编译器宏定义第二个参…...