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

Kubernetes k8s Pod容器 探针 健康探测

目录

Pod容器健康探测

 为什么要对容器做探测?

启动探测startupprobe

存活性探测livenessProbe

就绪性探测readinessProbe

 ReadinessProbe + LivenessProbe +startupProbe配合使用示例一般程序中需要设置三种探针结合使用,并且也要结合实际情况,来配置初始化检查时间和检测间隔,下面列一个简单的 SpringBoot 项目的例子。


文档中的YAML文件配置直接复制粘贴可能存在格式错误,故实验中所需要的YAML文件以及本地包均打包至网盘

链接:https://pan.baidu.com/s/1FRbgxf-O7ZxOnmS5SE-0Kw 
提取码:693j 

作者:韩先超老师

Pod容器健康探测

 为什么要对容器做探测?

在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是一个应用,应用在运行期间,可能因为某些意外情况致使程序挂掉。那么如何监控这些容器状态稳定性,保证服务在运行期间不会发生问题,发生问题后进行重启等机制,就成为了重中之重的事情,考虑到这点 kubernetes 推出了活性探针机制。有了存活性探针能保证程序在运行中如果挂掉能够自动重启,但是还有个经常遇到的问题,比如说,在Kubernetes 中启动Pod,显示明明Pod已经启动成功,且能访问里面的端口,但是却返回错误信息。还有就是在执行滚动更新时候,总会出现一段时间,Pod对外提供网络访问,但是访问却发生404,这两个原因,都是因为Pod已经成功启动,但是 Pod 的的容器中应用程序还在启动中导致,考虑到这点Kubernetes推出了就绪性探针机制。

1、默认的健康检查

Kubernetes默认的健康检查机制: 每个容器启动时都会执行一个进程, 此进程由Dockerfile的CMD或ENTRYPOINT指定。 如果进程退出时返回码非零, 则认为容器发生故障, Kubernetes就会根据restartPolicy策略决定是否重启容器。

[root@xianchaomaster1]# cat check.yaml

apiVersion: v1

kind: Pod

metadata:

  name: check

  namespace: default

  labels:

    app: check

spec:

  containers:

  - name: check

    image: busybox:1.28

    imagePullPolicy: IfNotPresent

    command:

    - /bin/sh

    - -c

    - sleep 10;exit

[root@xianchaomaster1 ~]# kubectl get pods -w

NAME        READY   STATUS    RESTARTS   AGE

check       0/1     Pending   0          0s

check       0/1     Pending   0          0s

check       0/1     ContainerCreating   0          0s

check       0/1     ContainerCreating   0          1s

check       1/1     Running             0          1s

check       0/1     Completed           0          11s

check       1/1     Running             1 (1s ago)   12s

check       0/1     Completed           1 (11s ago)   22s

check       0/1     CrashLoopBackOff    1 (13s ago)   34s

check       1/1     Running             2 (13s ago)   34s

check       0/1     Completed           2 (23s ago)   44s

在上面的例子中, 容器进程返回值非零, Kubernetes则认为容器发生故障, 需要重启。 有不少情况是发生了故障, 但进程并不会退出。 比如访问Web服务器时显示500内部错误, 可能是系统超载, 也可能是资源死锁, 此时httpd进程并没有异常退出, 在这种情况下重启容器可能是最直接、 最有效的解决方案。

k8s 提供了三种来实现容器探测的方法,分别是:

1、startupProbe:探测容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。

     

2、livenessprobe:用指定的方式(exec、tcp、http)检测pod中的容器是否正常运行,如果检测失败,则认为容器不健康,那么Kubelet将根据Pod中设置的 restartPolicy策略来判断Pod 是否要进行重启操作,如果容器配置中没有配置 livenessProbe,Kubelet 将认为存活探针探测一直为success(成功)状态。

 

3、readnessprobe:就绪性探针,用于检测容器中的应用是否可以接受请求,当探测成功后才使Pod对外提供网络访问,将容器标记为就绪状态,可以加到pod前端负载,如果探测失败,则将容器标记为未就绪状态,会把pod从前端负载移除。

 

可以自定义在pod启动时是否执行这些检测,如果不设置,则检测结果均默认为通过,如果设置,则顺序为startupProbe>readinessProbe和livenessProbe,readinessProbe和livenessProbe是并发关系

真正的启动顺序

官方文档:Caution: Liveness probes do not wait for readiness probes to succeed. If you want to wait before executing a liveness probe you should use initialDelaySeconds or a startupProbe

也就是 Liveness probes 并不会等到 Readiness probes 成功之后才运行,根据上面的官方文档,Liveness 和 readiness 应该是某种并发的关系。

目前LivenessProbe和ReadinessProbe、startupprobe探测都支持下面三种探针:

1、exec:在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。

2、TCPSocket:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。

3、HTTPGet:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则认为容器健康

探针探测结果有以下值:

1、Success:表示通过检测。

2、Failure:表示未通过检测。

3、Unknown:表示检测没有正常进行。

Pod探针相关的属性:

探针(Probe)有许多可选字段,可以用来更加精确的控制Liveness和Readiness两种探针的行为

    initialDelaySeconds:容器启动后要等待多少秒后探针开始工作,单位“秒”,默认是 0 秒,最小值是 0

    periodSeconds: 执行探测的时间间隔(单位是秒),默认为 10s,单位“秒”,最小值是1

    timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为1,单位“秒”。

successThreshold:连续探测几次成功,才认为探测成功,默认为 1,在 Liveness 探针中必须为1,最小值为1。

failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3,最小值为 1

 两种探针区别:

ReadinessProbe 和 livenessProbe 可以使用相同探测方式,只是对 Pod 的处置方式不同:

readinessProbe 当检测失败后,将 Pod 的 IP:Port 从对应的 EndPoint 列表中删除。

livenessProbe 当检测失败后,将杀死容器并根据 Pod 的重启策略来决定作出对应的措施。

启动探测startupprobe

1、exec模式

[root@xianchaomaster1]# cat startup-exec.yaml

apiVersion: v1

kind: Pod

metadata:

  name: startupprobe

spec:

  containers:

  - name: startup

image: xianchao/tomcat-8.5-jre8:v1

imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

    startupProbe:

     exec:

       command:

       - "/bin/sh"

       - "-c"

       - "aa ps aux | grep tomcat"

     initialDelaySeconds: 20 #容器启动后多久开始探测

     periodSeconds: 20 #执行探测的时间间隔

     timeoutSeconds: 10 #探针执行检测请求后,等待响应的超时时间

     successThreshold: 1 #成功多少次才算成功

     failureThreshold: 3 #失败多少次才算失败

2、tcpsocket模式

[root@xianchaomaster1]# cat startup-tcpsocket.yaml

apiVersion: v1

kind: Pod

metadata:

  name: startupprobe

spec:

  containers:

  - name: startup

image: xianchao/tomcat-8.5-jre8:v1

imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

    startupProbe:

     tcpSocket:

       port: 8080

     initialDelaySeconds: 20 #容器启动后多久开始探测

     periodSeconds: 20 #执行探测的时间间隔

     timeoutSeconds: 10 #探针执行检测请求后,等待响应的超时时间

     successThreshold: 1 #成功多少次才算成功

     failureThreshold: 3 #失败多少次才算失败

3、httpget模式

[root@xianchaomaster1]# cat startup-httpget.yaml

apiVersion: v1

kind: Pod

metadata:

  name: startupprobe

spec:

  containers:

  - name: startup

image: xianchao/tomcat-8.5-jre8:v1

imagePullPolicy: IfNotPresent

    ports:

    - containerPort: 8080

    startupProbe:

      httpGet:

        path: /

        port: 8080

     initialDelaySeconds: 20 #容器启动后多久开始探测

     periodSeconds: 20 #执行探测的时间间隔

     timeoutSeconds: 10 #探针执行检测请求后,等待响应的超时时间

     successThreshold: 1 #成功多少次才算成功

     failureThreshold: 3 #失败多少次才算失败

存活性探测livenessProbe

官网地址:配置存活、就绪和启动探针 | Kubernetes这篇文章介绍如何给容器配置存活(Liveness)、就绪(Readiness)和启动(Startup)探针。kubelet 使用存活探针来确定什么时候要重启容器。 例如,存活探针可以探测到应用死锁(应用在运行,但是无法继续执行后面的步骤)情况。 重启这种状态下的容器有助于提高应用的可用性,即使其中存在缺陷。存活探针的常见模式是为就绪探针使用相同的低成本 HTTP 端点,但具有更高的 failureThreshold。 这样可以确保在硬性终止 Pod 之前,将观察到 Pod 在一段时间内处于非就绪状态。kubelet 使用就绪探针可以知道容器何时准备好接受请求流量,当一个 Pod 内的所有容器都就绪时,才能认为该 Pod 就绪。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 若 Pod 尚未就绪,会被从 Service 的负载均衡器中剔除。kubelet 使用启动探针来了解应用容器何时启动。 如果配置了这类探针,存活探针和就绪探针成功之前不会重启,确保这些探针不会影响应用的启动。 启动探针可以用于对慢启动容器进行存活性检测,避免它们在启动运行之前就被杀掉。注意: 存活探针是一种从应用故障中恢复的强劲方式,但应谨慎使用。 你必须仔细配置存活探针,确保它能真正标示出不可恢复的应用故障,例如死锁。说明: 错误的存活探针可能会导致级联故障。 这会导致在高负载下容器重启;例如由于应用无法扩展,导致客户端请求失败;以及由于某些 Pod 失败而导致剩余 Pod 的工作负载增加。了解就绪探针和存活探针之间的区别, 以及何时为应用配置使用它们非常重要。准备开始 你必须拥有一个 Kubernetes 的集群,且必须配置 kubectl 命令行工具让其与你的集群通信。 建议运行本教程的集群至少有两个节点,且这两个节点不能作为控制平面主机。 如果你还没有集群,你可以通过 Minikube 构建一个你自己的集群,或者你可以使用下面的 Kubernetes 练习环境之一:Killercoda 玩转 Kubernetes 定义存活命令 许多长时间运行的应用最终会进入损坏状态,除非重新启动,否则无法被恢复。 Kubernetes 提供了存活探针来发现并处理这种情况。在本练习中,你会创建一个 Pod,其中运行一个基于 registry.k8s.io/busybox 镜像的容器。 下面是这个 Pod 的配置文件。icon-default.png?t=N7T8https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

   

Pod探针使用示例:

1、LivenessProbe 探针使用示例
(1)、通过exec方式做健康探测
示例文件 liveness-exec.yaml

apiVersion: v1

kind: Pod

metadata:

  name: liveness-exec

  labels:

    app: liveness

spec:

  containers:

  - name: liveness

image: busybox:1.28

imagePullPolicy: IfNotPresent

    args:                       #创建测试探针探测的文件

    - /bin/sh

    - -c

    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600

    livenessProbe:

      initialDelaySeconds: 10   #延迟检测时间

      periodSeconds: 5          #检测时间间隔

      exec:

        command:

        - cat

        - /tmp/healthy

容器启动设置执行的命令:

    /bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

容器在初始化后,首先创建一个 /tmp/healthy 文件,然后执行睡眠命令,睡眠 30 秒,到时间后执行删除 /tmp/healthy 文件命令。而设置的存活探针检检测方式为执行 shell 命令,用 cat 命令输出 healthy 文件的内容,如果能成功执行这条命令,存活探针就认为探测成功,否则探测失败。在前 30 秒内,由于文件存在,所以存活探针探测时执行 cat /tmp/healthy 命令成功执行。30 秒后 healthy 文件被删除,所以执行命令失败,Kubernetes 会根据 Pod 设置的重启策略来判断,是否重启 Pod。

(2)、通过HTTP方式做健康探测

[root@xianchaonode1 ~]# ctr -n k8s.io images import springboot.tar.gz

[root@xianchaonode2 ~]# ctr -n k8s.io images import springboot.tar.gz
示例文件 liveness-http.yaml

apiVersion: v1

kind: Pod

metadata:

  name: liveness-http

  labels:

    test: liveness

spec:

  containers:

  - name: liveness

image: mydlqclub/springboot-helloworld:0.0.1

imagePullPolicy: IfNotPresent

    livenessProbe:

      initialDelaySeconds: 20   #延迟加载时间

      periodSeconds: 5          #重试时间间隔

      timeoutSeconds: 10        #超时时间设置

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

上面 Pod 中启动的容器是一个 SpringBoot 应用,其中引用了 Actuator 组件,提供了 /actuator/health 健康检查地址,存活探针可以使用 HTTPGet 方式向服务发起请求,请求 8081 端口的 /actuator/health 路径来进行存活判断:

任何大于或等于200且小于400的代码表示探测成功。

任何其他代码表示失败。

如果探测失败,则会杀死 Pod 进行重启操作。


httpGet探测方式有如下可选的控制字段:

scheme: 用于连接host的协议,默认为HTTP。

host:要连接的主机名,默认为Pod IP,可以在http request head中设置host头部。

port:容器上要访问端口号或名称。

path:http服务器上的访问URI。

httpHeaders:自定义HTTP请求headers,HTTP允许重复headers。

(3)、通过TCP方式做健康探测
示例文件 liveness-tcp.yaml

apiVersion: v1

kind: Pod

metadata:

  name: liveness-tcp

  labels:

    app: liveness

spec:

  containers:

  - name: liveness

image: docker.io/xianchao/nginx:v1

imagePullPolicy: IfNotPresent

    livenessProbe:

      initialDelaySeconds: 15

      periodSeconds: 20

      tcpSocket:

        port: 80

TCP 检查方式和 HTTP 检查方式非常相似,在容器启动 initialDelaySeconds 参数设定的时间后,kubelet 将发送第一个 livenessProbe 探针,尝试连接容器的 80 端口,如果连接失败则将杀死 Pod 重启容器。

就绪性探测readinessProbe

1、ReadinessProbe 探针使用示例

Pod 的ReadinessProbe 探针使用方式和 LivenessProbe 探针探测方法一样,也是支持三种,只是一个是用于探测应用的存活,一个是判断是否对外提供流量的条件。这里用一个 Springboot 项目,设置 ReadinessProbe 探测 SpringBoot 项目的 8081 端口下的 /actuator/health 接口,如果探测成功则代表内部程序以及启动,就开放对外提供接口访问,否则内部应用没有成功启动,暂不对外提供访问,直到就绪探针探测成功。

示例文件 readiness-exec.yaml

apiVersion: v1

kind: Service

metadata:

  name: springboot

  labels:

    app: springboot

spec:

  type: NodePort

  ports:

  - name: server

    port: 8080

    targetPort: 8080

    nodePort: 31180

  - name: management

    port: 8081

    targetPort: 8081

    nodePort: 31181

  selector:

    app: springboot

---

apiVersion: v1

kind: Pod

metadata:

  name: springboot

  labels:

    app: springboot

spec:

  containers:

  - name: springboot

image: mydlqclub/springboot-helloworld:0.0.1

imagePullPolicy: IfNotPresent

    ports:

    - name: server

      containerPort: 8080

    - name: management

      containerPort: 8081

    readinessProbe:

      initialDelaySeconds: 20  

      periodSeconds: 5         

      timeoutSeconds: 10  

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

 ReadinessProbe + LivenessProbe +startupProbe配合使用示例
一般程序中需要设置三种探针结合使用,并且也要结合实际情况,来配置初始化检查时间和检测间隔,下面列一个简单的 SpringBoot 项目的例子。

[root@xianchaomaster1]# cat start-read-live.yaml

apiVersion: v1

kind: Service

metadata:

  name: springboot-live

  labels:

    app: springboot

spec:

  type: NodePort

  ports:

  - name: server

    port: 8080

    targetPort: 8080

    nodePort: 31180

  - name: management

    port: 8081

    targetPort: 8081

    nodePort: 31181

  selector:

    app: springboot

---

apiVersion: v1

kind: Pod

metadata:

  name: springboot-live

  labels:

    app: springboot

spec:

  containers:

  - name: springboot

    image: mydlqclub/springboot-helloworld:0.0.1

    imagePullPolicy: IfNotPresent

    ports:

    - name: server

      containerPort: 8080

    - name: management

      containerPort: 8081

    readinessProbe:

      initialDelaySeconds: 20  

      periodSeconds: 5         

      timeoutSeconds: 10  

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

    livenessProbe:

      initialDelaySeconds: 20

      periodSeconds: 5

      timeoutSeconds: 10

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

    startupProbe:

      initialDelaySeconds: 20

      periodSeconds: 5

      timeoutSeconds: 10

      httpGet:

        scheme: HTTP

        port: 8081

        path: /actuator/health

相关文章:

Kubernetes k8s Pod容器 探针 健康探测

目录 Pod容器健康探测 为什么要对容器做探测? 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用,并且也要结合实际情况&#xff…...

Conformal low power-2.电源感知等效性检查

电源感知等效性检查 ■ 第24页:电源感知等效性检查概述 ■ 第24页:启动低功耗(等效性检查)软件 ■ 第25页:电源感知等效性检查流程 ■ 第28页:电源感知等效性检查示例Do文件 电源感知等效性检查概述…...

【密码学】从有限状态自动机到密钥流生成器

本文是对流密码内容的拓展,在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题: 伪随机密钥流是如何生成的?流密码、流密钥生成器和有限状态自动机之间是什么关系?…...

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 (1)像素坐标系(单位:像素(pixel)) 像素坐标系是指相机拍到的图片的坐标系,以图片的左上角为坐标原点&a…...

Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)

一、操作系统要求: 要安装Docker Engine,您需要CentOS 7及以上的维护版本。存档版本不受支持或测试。必须启用centos临时存储库。默认情况下,此存储库已启用,但如果已禁用,则需要重新启用它。建议使用overlay2存储驱动…...

【C语言】符号优先级详解

C语言符号优先级详细解析 在C语言中,不同的运算符具有不同的优先级和结合性,这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级,包括各类运算符的优先级、结…...

天翼云高级运维工程师202407回忆题库 最新出炉

备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企,拔地而起,民企也不错,工资高,有钱途 现在看来看去,还是国企好,体制内的,有保障,树大根深 有必要备考下天…...

在Python中什么是上下文管理器以及如何使用with语句来管理资源

什么是上下文管理器? 在Python中,上下文管理器(Context Manager)是一种支持with语句的协议,允许对象管理资源,如文件、线程锁的获取和释放、数据库连接等。上下文管理器负责资源的分配和释放,确…...

(四)、python程序--贪吃蛇游戏

一、绪论 贪吃蛇游戏。 已实现功能: 1、上下左右移动; 2、吃食物,随机生成食物; 3、碰撞检测,判断是否游戏结束。 二、代码分享 1、main.py import pygame import sys import food as c_food import snake as c…...

什么是DNS欺骗

DNS欺骗(DNS Spoofing),也称为DNS缓存中毒(DNS Cache Poisoning),是一种网络攻击形式,攻击者通过操纵DNS记录,将用户重定向到一个伪造的、恶意的网站。这些恶意网站可能看起来与用户…...

C++实现对结构体信息排序

思路解读: 定义结构体 Student: 结构体 Student 用来表示学生信息,包含两个成员变量:name(学生姓名)和 score(学生分数)。Student 结构体定义了一个构造函数,用于初始化 name 和 sco…...

[CTF]-PWN:House of Cat堆题型综合解析

原理: 调用顺序: exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源码: off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…...

18.按键消抖模块设计(使用状态机,独热码编码)

(1)设计意义:按键消抖主要针对的时机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子就断开。因而在闭合以及断开的瞬…...

【Hec-HMS】第一期:模型简介及软件安装

HEC-HMS模型简介及软件安装 HEC-HMS模型简介建模思路 HEC-HMS软件安装步骤1:安装InstallShield Wizard步骤2:安装HEC-HMS 参考 HEC-HMS模型简介 HEC-HMS(The Hydrologic Engineering Center’s-Hydrologic Modelimng System),美国陆军工程兵…...

逻辑回归不是回归吗?那为什么叫回归?

RNN 逻辑回归不是回归吗?那为什么叫回归?逻辑回归的基本原理逻辑函数(Sigmoid函数)二元分类 为什么叫做“回归”?逻辑回归的应用场景总结 逻辑回归不是回归吗?那为什么叫回归? 逻辑回归&#x…...

Activity对象的部分常见成员变量

在Android开发中,Activity 类是一个非常重要的类,它代表了应用程序中的一个屏幕。每个Activity都有一系列的成员变量和方法,这些成员变量通常用于控制和管理活动生命周期、UI界面元素、应用资源等。虽然具体的成员变量会根据Android的不同版本…...

量化交易策略:赌徒在股市会运用凯利公式(附python代码)

一、凯利公式的历史 凯利公式(Kelly Criterion)是由美国贝尔实验室物理学家约翰拉里凯利(John Larry Kelly)于1956年提出的,用于计算最优投资比例的一种数学公式。凯利公式的核心思想是:在期望收益和风险之间找到一个平衡点,使得投资者在承担一定风险的情况下,能够获得…...

信息系统项目管理师【一】英文选择题词汇大全(1)

一、计算机相关词汇 数据挖掘 Data Mining分布式计算 Distributed Computing云计算 Cloud Computing物联网 IOT Internet of Things大数据 Big Data人工智能 artificial intelligence互联网 Internet plus区块链 Blockchain5G 5th-Generation感知层 sensing layer机器学习 mac…...

怎么判断自己是否适合学习PMP?

判断自己是否适合学习PMP项目管理专业人士认证,可以从以下几个方面进行考量: 1、职业发展需求: 如果您在项目管理领域工作,或计划未来从事相关工作,PMP认证能显著提升您的竞争力。 对于项目经理、产品经理、技术领导…...

最新的数据防泄密方案来袭!

沙箱技术作为一种先进的数据安全解决方案,在数据防泄密领域发挥着日益重要的作用。它通过构建一个隔离的虚拟环境,使得应用程序在该环境中运行,从而隔离了应用程序对系统资源的直接访问,有效防止了数据泄露的风险。 一、沙箱技术在…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

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

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

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...