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

Mr. Cappuccino的第40杯咖啡——Kubernetes之Pod生命周期

Kubernetes之Pod生命周期

      • Pod生命周期官方文档
      • Pod的状态
      • 初始化容器
        • 案例
      • 钩子函数
        • Exec命令
        • TCPSocket
        • HTTPGet
        • 案例
      • 容器探测
        • Exec命令
        • TCPSocket
        • HTTPGet
        • 探测时间
      • 重启策略

Pod生命周期官方文档

Pod生命周期官方文档

Pod的状态

  1. pending:挂起,apiserver创建了pod资源对象已存入etcd中,但它尚未被调度完成,或者仍处于从仓库下载镜像的过程中;
  2. running:运行中,pod已经被调度到某节点,并且所有容器都已经被kubelet创建完成;
  3. complet:成功,pod中所有容器都已经成功终止并且不会重启;
  4. failed:失败,pod中所有容器都已经终止了,并且至少有一个容器是因为失败终止的,即容器以非0状态退出或者被系统禁止;
  5. unknown:未知,apiserver无法正常获取到pod对象的状态信息,通常是由于无法与所在工作节点的kubelet通信所致;

初始化容器

  1. k8s的初始化容器(initContainer)优先级都是高于主容器(container)的。无论容器写在初始化容器前还是写在初始化容器后,会最先执行的都是初始化容器。只有初始化容器执行成功后才可以启动主容器。
  2. 初始化容器的应用场景应该是多pod。比如:mysql和业务分开两个pod。此时,业务pod添加初始化容器,初始化容器执行telnet,检查mysql是否启动了。若mysql启动,则业务pod启动;否则业务pod等待mysql启动。

初始化容器是在pod主容器启动之前要运行的容器,主要是做一些主容器的前置工作,它具有两大特征:

  1. 初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成;
  2. 初始化容器必须按照定义的顺序执行,当且仅当前一个成功之后,后面的一个才能运行;

案例

apiVersion: v1
kind: Pod
metadata:name: pod-initcontainernamespace: bubble-dev
spec:containers:- name: main-containerimage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80initContainers:- name: mysqlimage: busybox:1.30  command: [ "/bin/sh","-c","sleep 40;"]   - name: redisimage: busybox:1.30

busybox:1.30启动成功之后,会立即停止,通过使用command命令,40S之后这个容器才会停止;
启动主容器(main-container)必须等待初始化容器(mysql和redis)启动并运行成功之后,才可以启动;

vi pod-initcontainer.yaml
cat pod-initcontainer.yaml
kubectl create ns bubble-dev
kubectl create -f pod-initcontainer.yaml

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

[root@master ~]# kubectl describe pods -n bubble-dev
Name:         pod-initcontainer
Namespace:    bubble-dev
Priority:     0
Node:         node1/192.168.102.160
Start Time:   Thu, 12 Jan 2023 10:44:14 -0500
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           172.17.0.2
IPs:IP:  172.17.0.2
Init Containers:mysql:Container ID:  docker://6c41381ade3cb74d93b4b449920a89ce1b534860da4a3803d886389b7873f5c4Image:         busybox:1.30Image ID:      docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3dPort:          <none>Host Port:     <none>Command:/bin/sh-csleep 40;State:          TerminatedReason:       CompletedExit Code:    0Started:      Thu, 12 Jan 2023 10:44:16 -0500Finished:     Thu, 12 Jan 2023 10:44:56 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-9bq4c (ro)redis:Container ID:   docker://8a504efac19030ab4a266599795e7ad1368f351f48eae8eb45101100aec0dec1Image:          busybox:1.30Image ID:       docker-pullable://busybox@sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3dPort:           <none>Host Port:      <none>State:          TerminatedReason:       CompletedExit Code:    0Started:      Thu, 12 Jan 2023 10:44:57 -0500Finished:     Thu, 12 Jan 2023 10:44:57 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-9bq4c (ro)
Containers:main-container:Container ID:   docker://920298ed4e9f76c825249290078a9a408476df66175e6fc8b9dcdaf25346f324Image:          nginx:1.17.9Image ID:       docker-pullable://nginx@sha256:88ea86df324b03b3205cbf4ca0d999143656d0a3394675630e55e49044d38b50Port:           80/TCPHost Port:      0/TCPState:          RunningStarted:      Thu, 12 Jan 2023 10:44:58 -0500Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-9bq4c (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:default-token-9bq4c:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-9bq4cOptional:    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  4m47s  default-scheduler  Successfully assigned bubble-dev/pod-initcontainer to node1Normal  Pulled     4m46s  kubelet, node1     Container image "busybox:1.30" already present on machineNormal  Created    4m46s  kubelet, node1     Created container mysqlNormal  Started    4m45s  kubelet, node1     Started container mysqlNormal  Pulled     4m4s   kubelet, node1     Container image "busybox:1.30" already present on machineNormal  Created    4m4s   kubelet, node1     Created container redisNormal  Started    4m4s   kubelet, node1     Started container redisNormal  Pulled     4m3s   kubelet, node1     Container image "nginx:1.17.9" already present on machineNormal  Created    4m3s   kubelet, node1     Created container main-containerNormal  Started    4m3s   kubelet, node1     Started container main-container

在这里插入图片描述
我们可以分析出Pod中首先启动并运行的是mysql容器,mysql容器运行成功后,redis容器开始启动并运行,完成运行后主容器才开始启动。

钩子函数

k8s在主容器启动之后和停止之前提供了两个钩子函数

  1. post-start:容器创建之后执行(相关命令),如果失败了则会自动重启容器,容器创建后立即执行,注意由于是异步执行,它无法保证一定在ENTRYPOINT之前运行。如果失败,容器会被杀死,并根据RestartPolicy决定是否重启;
  2. pre-stop:容器终止之前执行(相关命令) ,例如杀死进程等,容器终止前执行,常用于资源清理。执行完成之后容器将成功终止,如果失败,容器同样也会被杀死。在其完成之前,会阻塞删除容器的操作;

钩子的回调函数支持三种方式:Exec命令、TCPSocket、HTTPGet

Exec命令

spec:containers:- name: main-containerimage: nginx:1.17.1lifecycle:postStart:exec: # 容器创建之后执行(相关命令)修改nginx页面command: ["/bin/sh","-c","echo honey > /usr/share/nginx/html/index.html"]preStop:exec: # 容器停止之后执行停止nginx服务command: ["/usr/sbin/nginx","-s","quit" ]

TCPSocket

spec:containers:- name: main-containerimage: nginx:1.17.1lifecycle:postStart:tcpSocket:port: 8080

HTTPGet

spec:containers:- name: main-containerimage: nginx:1.17.1lifecycle:postStart:httpGet:path: /init  # URI地址port: 80     # 端口号host: 192.168.110.1 # 主机地址scheme: HTTP # 支持的协议,http或https

案例

apiVersion: v1
kind: Pod
metadata:name: pod-hooknamespace: bubble-dev
spec:containers:- name: main-containerimage: nginx:1.17.9lifecycle:postStart:exec: # 容器创建之后执行(相关命令)修改nginx页面command: ["/bin/sh","-c","echo honey > /usr/share/nginx/html/index.html"]preStop:exec: # 容器停止之后执行停止nginx服务command: ["/usr/sbin/nginx","-s","quit" ]

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

容器探测

k8s提供了livenessProbe(可用性探针)和readinessProbe(就绪性探针)对容器的健康性进行检测,类似心跳机制。
判断我们的应用实例是否存活,如果为宕机状态,则自动重启,同时如果发现该pod无法接受请求,则service不会转发到该pod上执行。

  1. 存活探针(可用性探针):用于检测容器实例当前是否处于正常运行的状态,如果不是正常运行的状态,k8s则会重启容器;
  2. 就绪探针(就绪性探针):用于检测应用实例当前是否可以接收请求,如果不能接收请求,k8s不会将请求转发到该实例;

其实非常好理解,livenessProbe 判断容器是否重启、readinessProbe 判断是否路由转发

支持三种探测方式:

  1. Exec命令:在容器内执行一次命令,如果命令执行的退出码为0,则认为程序正常,否则不正常;
  2. TCPSocket:会尝试访问一个用户指定的容器端口,如果能够成功建立连接则认为正常,否则认为不正常;
  3. HTTPGet:调用容器内Web系统的url,如果http状态码是在200和399之间,则认为程序正常,否则不正常;

Exec命令

apiVersion: v1
kind: Pod
metadata:name: pod-execnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80livenessProbe: # 存活探针(可用性探针)exec:        # 执行一个查看文件的命令command: ["/bin/cat" ,"/tmp/honey.txt"] 

在这里插入图片描述
在这里插入图片描述
我们可以看到,由于没有/tmp/honey.txt这个文件,执行的查看命令是失败的,所以容器一直在进行重新启动操作

如果将命令修改成pwd则不会有问题

apiVersion: v1
kind: Pod
metadata:name: pod-execnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80livenessProbe: # 存活探针(可用性探针)exec:        # 执行一个pwd的命令command: ["/bin/pwd" ,"/"] 

TCPSocket

apiVersion: v1
kind: Pod
metadata:name: pod-tcpnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80livenessProbe: # 存活探针(可用性探针)tcpSocket:   # 底层会尝试访问容器ip:8080port: 8080

在这里插入图片描述
在这里插入图片描述
将端口号修改成80则不会有问题

apiVersion: v1
kind: Pod
metadata:name: pod-tcpnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80livenessProbe: # 存活探针(可用性探针)tcpSocket:   # 底层会尝试访问容器ip:80port: 80

HTTPGet

apiVersion: v1
kind: Pod
metadata:name: pod-httpnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80protocol: TCPlivenessProbe:httpGet:   # 访问指定的scheme://host:port/pathscheme: HTTP # 支持的协议,http或者httpsport: 80 # 端口号path: /honey # URI地址 该地址不存在会报错404

在这里插入图片描述
在这里插入图片描述
将URI地址修改成 / 则不会有问题

apiVersion: v1
kind: Pod
metadata:name: pod-httpnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80protocol: TCPlivenessProbe:httpGet:   # 访问指定的scheme://host:port/pathscheme: HTTP # 支持的协议,http或者httpsport: 80 # 端口号path: /  # URI地址

探测时间

容器探测的原理本身就是心跳策略

initialDelaySeconds <integer>    # 容器启动后 等待多少秒 开始执行第一次探测
timeoutSeconds <integer>         # 探测超时时间 默认1秒,最小1秒
periodSeconds <integer>          # 执行探测的频率,默认是10秒,最小1秒
failureThreshold <integer>       # 连续探测失败多少次才被认定为失败,默认是3,最小值是1
successThreshold <integer>       # 连续探测成功多少次才被认定为成功,默认是1
apiVersion: v1
kind: Pod
metadata:name: pod-secondsnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80protocol: TCPlivenessProbe:httpGet:   # 访问指定的scheme://host:port/pathscheme: HTTP # 支持的协议,http或者httpsport: 80 # 端口号path: /honey # URI地址 该地址不存在会报错404initialDelaySeconds: 10 # 容器启动后10s开始探测   failureThreshold: 2     # 探测2次认为是失败restartPolicy: Never        # 设置重启策略为Never 无论状态如何都不会重启

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

重启策略

重启策略有三种:

  1. Always:出现问题时自动重启该容器,默认方式
  2. OnFailure:容器终止运行且退出码不为0时重启
  3. Never:不论状态为何,都不重启该容器
apiVersion: v1
kind: Pod
metadata:name: pod-restartnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9ports:- name: nginx-portcontainerPort: 80protocol: TCPlivenessProbe:httpGet:   # 访问指定的scheme://host:port/pathscheme: HTTP # 支持的协议,http或者httpsport: 80 # 端口号path: /honey # URI地址 该地址不存在会报错404restartPolicy: Never # 设置重启策略为Never 无论状态如何都不会重启

在这里插入图片描述

相关文章:

Mr. Cappuccino的第40杯咖啡——Kubernetes之Pod生命周期

Kubernetes之Pod生命周期Pod生命周期官方文档Pod的状态初始化容器案例钩子函数Exec命令TCPSocketHTTPGet案例容器探测Exec命令TCPSocketHTTPGet探测时间重启策略Pod生命周期官方文档 Pod生命周期官方文档 Pod的状态 pending&#xff1a;挂起&#xff0c;apiserver创建了pod资…...

记一次OOM

1,问题描述&#xff1a; 新上了一版代码之后&#xff0c;上游服务请求我们服务失败&#xff0c;报错&#xff1a;“服务不可用”&#xff0c;发现注册中心上服务掉线&#xff0c;查询日志&#xff1a;发现oom&#xff1a;Java heap space,GC overhead limit exceeded。 容易…...

idea插件生成dao类service类controller类以及mapper.xml

idea插件生成dao类service类controller类以及mapper.xml 安装插件Easycode和MybatisX&#xff0c;不用自己写代码 1.Files——》Settings——》Plugins&#xff0c;分别搜索Easycode和MybatisX&#xff0c;点击下载。 2.新建一个springboot模板&#xff0c;选择的依赖如下 3.…...

DML 数据操作语言

概述 DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09;修改数据&#xff08;UPDATE&#xff09;删除数据&#xff08;DELETE&#xff09; 添加数据 1、给指定字段…...

PySpark实战一之入门

1、PySpark的编程模型 分三个模块&#xff1a; 数据输入&#xff1a;通过SparkContext对象&#xff0c;完成数据输入 数据处理计算&#xff1a;输入数据后得到RDD对象&#xff0c;对RDD对象的成员方法进行迭代计算 数据输出&#xff1a;最后通过RDD对象的成员方法&#xff0…...

【DockerCE】Docker-CE 23.0.1正式版发布

很意外啊&#xff01;Docker社区版竟然直接从20.xx.xx版本&#xff0c;升级到23.xx.xx版本了。官网地址&#xff08;For RHEL/CentOS 7.9&#xff09;&#xff1a;https://download.docker.com/linux/centos/7/x86_64/stable/Packages/23.0.1版本官方安装包如下&#xff1a;# l…...

vscode开发的Vue家用电器维修服务系统nodejs+mysql

主要功能包括管理员&#xff1a;首页、个人中心、用户管理、维修员管理、维修信息管理、维修申请管理、维修处理管理、家电类别管理、配件信息管理、配件领用管理、维修结果管理、家电维修知识管理、公告信息管理、留言板管理&#xff0c;用户&#xff1a;首页、个人中心、维修…...

PyQt5数据库开发1 4.2 配置SQL Server 2008 数据源(ODBC编程)

文章目录 配置SQL Server 2008 数据源&#xff08;ODBC编程&#xff09; 1. 了解要配置的数据源服务器名称&#xff0c;以及数据库和对应表 2. 打开控制面板&#xff0c;点击管理工具 3. 双击数据源 4. 选择“用户DSN”选项卡&#xff0c;点击“添加” 5. 选择SQL Serv…...

【JavaEE】多线程代码实例:单例模式与阻塞队列BlockingQueue

目录 单例模式&#xff1a; 什么是单例模式&#xff1f; 单例模式的实现方式&#xff1a; 饿汉模式&#xff1a; 懒汉模式&#xff1a; 基于并发编程对单例模式线程安全问题的讨论&#xff1a; 阻塞队列&#xff1a; 标准库中的阻塞队列&#xff1a; 自实现阻塞…...

算法思想 - 搜索算法

本文主要介绍算法中搜索算法的思想&#xff0c;主要包含BFS&#xff0c;DFS。搜索相关题目深度优先搜索和广度优先搜索广泛运用于树和图中&#xff0c;但是它们的应用远远不止如此。BFS广度优先搜索的搜索过程有点像一层一层地进行遍历&#xff0c;每层遍历都以上一层遍历的结果…...

C#底层库--日期扩展类(上周、本周、明年、前年等)

系列文章 C#底层库–记录日志帮助类 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/124187709 C#底层库–数据库访问帮助类&#xff08;MySQL版&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/126886379 …...

如何在 Webpack 中开启图片压缩

工具对比 npmtrends.com/image-minim… 这四个压缩工具&#xff0c;从下载量来看&#xff0c;image-webpack-loader 较多&#xff0c;image-minimizer-webpack-plugin、imagemin-webpack-plugin 次之&#xff0c;imagemin-webpack 已经不再维护&#xff0c;因此不考虑此工具。 …...

Web-Filter

## 今日内容 1. Filter&#xff1a;过滤器 2. Listener&#xff1a;监听器 # Filter&#xff1a;过滤器 1. 概念&#xff1a; * 生活中的过滤器&#xff1a;净水器,空气净化器&#xff0c;土匪、 * web中的过滤器&#xff1a;当访问服务器的资源时…...

测试写文章自动保存

近日恰逢双十一,瞅了瞅自己干瘪的钱包,没忍心入手期待已久的 macPro,只好在虚拟机里玩一下 mac好了,等以后钱包傲气的时候再来个真实的。 安装环境: windows10 VMWare14.2 2018-7-28 小嘚瑟补充:唧唧歪歪大半年,一夜回到解放前,终于剁手整了个真机,可以折腾一下了 ——…...

云平台搭建实例

嗨嗨&#xff0c;每天一更是不是很奈斯&#xff1f;我也觉得&#xff0c;昨天晚上我学校的老师借一天一千的设备&#xff0c;只能用七天&#xff0c;所以我拿出来给你们没有设备和刚用设备的看看吧。操作&#xff1a;首先我们将云平台安装好后&#xff0c;插上网线&#xff0c;…...

【Airplay_BCT】关于Bonjour的概念解答

1.什么是Bonjour&#xff1f; Bonjour&#xff0c;也称为零配置网络&#xff0c;可以自动发现 IP 网络上的计算机、设备和服务。 Bonjour 使用行业标准 IP 协议&#xff0c;允许设备自动发现彼此&#xff0c;无需输入 IP 地址或配置 DNS 服务器。具体来说&#xff0c;Bonjour …...

C++深入浅出(九)—— 多态

文章目录1. 多态的概念2. 多态的定义及实现&#x1f351; 多态的构成条件&#x1f351; 虚函数&#x1f351; 虚函数的重写&#x1f351; 虚函数重写的两个例外&#x1f351; C11的override 和 final&#x1f351; 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类&#x1f351;…...

shell学习4

目录 一、统计文本中的词频 二、压缩javascript 三、打印文件的或行中的第n个单词或列---awk 3.1 利用awk打印文件中每行中的第五个单词。 3.2 利用awk打印当前目录下的文件的权限和文件名 3.3 利用awk打印从M行到N行这个范围内的所有文本 3.4 利用awk 部分提取文件中的内…...

VR全景行业的应用价值如何呈现?

互联网高速发展的今天&#xff0c;多媒体所包含的种类也是越来越多&#xff0c;而一些较为传统的表现方式已经越来越无法满足大部分客户对展示方式的要求。而在传统的表现方式中&#xff0c;展现的方式无非是静态的平面图片以及动态的视频&#xff0c;但是他们都有一个缺点就是…...

ESP-IDF:TCP多线程并发服务器

核心代码&#xff1a; 核心思想就是主线程只处理socket监听功能&#xff0c;把数据处理部分分配到不同的线程中去处理。来了一个客户端连接&#xff0c;就分配新的线程去处理该客户端的数据请求。 代码&#xff1a; /多线程并发服务器/ #include <stdio.h> #include …...

QMC5883L的驱动

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

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...