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

k8s-----19、Helm

Helm

  • 1、引入
  • 2、概述
    • 2.1 重点
    • 2.2 V3版本的Helm
      • 2.2.1 与之前版本的不同之处
      • 2.2.2 V3版本的运行流程
  • 3、安装和配置仓库、一些附带操作
    • 3.1 安装
    • 3.2 配置仓库
    • 3.3 常用命令
    • 3.4 添加helm的自动补齐
  • 4、快速部署应用(weave应用)
  • 5、 自行创建Chart
    • 5.1 Chart目录内容解析
    • 5.2 简单安装部署
    • 5.3 应用升级回退
  • 6、Chart模板实现高效复用
    • 6.1 在values.yaml文件中定义全局变量
    • 6.2 在templates中的yaml文件中定义变量

1、引入

  • K8S 上的应用对象,都是由特定的资源描述组成,包括 deployment、service 等。都保存 各自文件中或者集中写到一个配置文件。然后 kubectl apply –f 部署。如果应用只由一 个或几个这样的服务组成,上面部署方式足够了。而对于一个复杂的应用,会有很多类似 上面的资源描述文件,例如微服务架构应用,组成应用的服务可能多达十个,几十个。如 果有更新或回滚应用的需求,可能要修改和维护所涉及的大量资源文件,而这种组织和管 理应用的方式就显得力不从心了。且由于缺少对发布过的应用版本管理和控制,使 Kubernetes 上的应用维护和更新等面临诸多的挑战,主要面临以下问题:(1)如何将这 些服务作为一个整体管理 (2)这些资源文件如何高效复用 (3)不支持应用级别的版本管理

2、概述

2.1 重点

  • Helm 是一个 Kubernetes 的包管理工具,就像 Linux 下的包管理器,如 yum/apt 等,可以 很方便的将之前打包好的 yaml 文件部署到 kubernetes 上。
  • Helm 有 3 个重要概念: (1)helm:一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、打包、发 布和管理。 (2)Chart:简单理解就是把yaml文件进行打包,是yaml文件的集合。官方描述为应用描述,一系列用于描述 k8s 资源相关文件的集合。 (3)Release:基于 Chart 的部署实体。一个 chart 被 Helm 运行后将会生成对应的一个 release;将在 k8s 中创建出真实运行的资源对象。通俗来说,每次部署后都会对应一个版本,也是所说的release。主要是为了进行版本管理。

2.2 V3版本的Helm

2.2.1 与之前版本的不同之处

  • 删除了Tiller
  • release可以在不同命名空间中进行重用
  • 可以将Chart直接推送到docker镜像仓库中

2.2.2 V3版本的运行流程

在这里插入图片描述

3、安装和配置仓库、一些附带操作

3.1 安装

官网下载V3版本Helm

 [root@master helm]# tar zxvf helm-v3.8.2-linux-amd64.tar.gz 
linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
[root@master helm]# ls
helm-v3.0.0-linux-amd64.tar.gz  helm-v3.8.2-linux-amd64.tar.gz  linux-amd64
[root@master helm]# cd linux-amd64/
[root@master linux-amd64]# ls
helm  LICENSE  README.md
[root@master linux-amd64]# mv helm /usr/bin/  #移动 

3.2 配置仓库

##添加仓库: helm repo add 自己起仓库名字   仓库地址 
[root@master ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts  ##添加微软仓库
"stable" has been added to your repositories
[root@master ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 添加阿里云仓库
"aliyun" has been added to your repositories
[root@master ~]# helm repo update  ##更新仓库[root@master ~]# helm repo list  ##列出仓库信息
NAME  	URL                                                   
stable	http://mirror.azure.cn/kubernetes/charts              
aliyun	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts[root@master ~]# helm repo remove stable   ##删除仓库
"stable" has been removed from your repositories
[root@master ~]# helm repo list
NAME  	URL                                                   
aliyun	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

3.3 常用命令

命令描述
dependency管理 chart 依赖
get下载一个 release。可用子命令:all、hooks、manifest、notes、values
history获取 release 历史
install安装一个 chart
list列出 release
package将 chart 目录打包到 chart 存档文件中
pull从远程仓库中下载 chart 并解压到本地 # helm pull stable/mysql – untar
repo添加,列出,移除,更新和索引 chart 仓库。可用子命令:add、index、 list、remove、update
rollback从之前版本回滚
search根据关键字搜索 chart。可用子命令:hub、repo
show查看 chart 详细信息。可用子命令:all、chart、readme、values
status显示已命名版本的状态
template本地呈现模板
uninstall卸载一个 release
upgrade更新一个 release
version查看 helm 客户端版本

3.4 添加helm的自动补齐

[root@master bash_completion.d]# echo "source <(helm completion bash)" >>  ~/.bash_profile
[root@master bash_completion.d]# source ~/.bash_profile [root@master bash_completion.d]# helm completion bash > /usr/share/bash-completion/completions/helm

4、快速部署应用(weave应用)

[root@master ~]# helm install ui aliyun/weave-scope  #出现下面错误是因为仓库的问题,阿里云可能没事实时匹配到k8s,换成微软源可以解决
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: [unable to recognize "": no matches for kind "DaemonSet" in version "extensions/v1beta1", unable to recognize "": no matches for kind "Deployment" in version "apps/v1beta1"][root@master ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts/   ##添加微软仓库
[root@master ~]# helm repo update
[root@master ~]# helm repo list
NAME  	URL                                                   
aliyun	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
stable	http://mirror.azure.cn/kubernetes/charts/  ##部署           
[root@master ~]# helm search repo weave   ##部署的是一个ui界面应用,所以需要对外暴露端口,需要查看SVC的状态是否为NodePort
NAME              	CHART VERSION	APP VERSION	DESCRIPTION                                       
aliyun/weave-cloud	0.1.2        	           	Weave Cloud is a add-on to Kubernetes which pro...
aliyun/weave-scope	0.9.2        	1.6.5      	A Helm chart for the Weave Scope cluster visual...
stable/weave-cloud	0.3.9        	1.4.0      	DEPRECATED - Weave Cloud is a add-on to Kuberne...
stable/weave-scope	1.1.12       	1.12.0     	DEPRECATED - A Helm chart for the Weave Scope c...##helm install 自己起的名称  仓库里包的名称
[root@master ~]# helm install ui stable/weave-scope
WARNING: This chart is deprecated
W0514 11:23:29.545784   20101 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
W0514 11:23:29.546481   20101 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
W0514 11:23:29.567192   20101 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
W0514 11:23:29.569900   20101 warnings.go:70] rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
NAME: ui
LAST DEPLOYED: Sat May 14 11:23:29 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
You should now be able to access the Scope frontend in your web browser, by
using kubectl port-forward:kubectl -n default port-forward $(kubectl -n default get endpoints \
ui-weave-scope -o jsonpath='{.subsets[0].addresses[0].targetRef.name}') 8080:4040then browsing to http://localhost:8080/.
For more details on using Weave Scope, see the Weave Scope documentation:https://www.weave.works/docs/scope/latest/introducing/[root@master ~]# helm list   ##查看部署的应用
NAME	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART             	APP VERSION
ui  	default  	1       	2022-05-14 11:23:29.478377222 +0800 CST	deployed	weave-scope-1.1.12	1.12.0     
[root@master ~]# helm status ui      #查看部署应用的状态
NAME: ui
LAST DEPLOYED: Sat May 14 11:23:29 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
You should now be able to access the Scope frontend in your web browser, by
using kubectl port-forward:
kubectl -n default port-forward $(kubectl -n default get endpoints \
ui-weave-scope -o jsonpath='{.subsets[0].addresses[0].targetRef.name}') 8080:4040
then browsing to http://localhost:8080/.
For more details on using Weave Scope, see the Weave Scope documentation:
https://www.weave.works/docs/scope/latest/introducing/##查看部署情况
[root@master ~]# kubectl get pods   ##查看部署的pod
NAME                                            READY   STATUS    RESTARTS   AGE
weave-scope-agent-ui-d7fv8                      1/1     Running   0          9m21s
weave-scope-agent-ui-mrnb5                      1/1     Running   0          9m21s
weave-scope-agent-ui-nrtrn                      1/1     Running   0          9m21s
weave-scope-cluster-agent-ui-5cbc84db49-fzf7f   1/1     Running   0          9m21s
weave-scope-frontend-ui-6698fd5545-pn8tc        1/1     Running   0          9m21s
web-96d5df5c8-zcshb                             1/1     Running   1          15h
[root@master ~]# kubectl get svc   ##ui-weave-scope的svc状态没有暴露端口
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP        65d
ui-weave-scope   ClusterIP   10.101.125.54   <none>        80/TCP         9m25s
web              NodePort    10.96.63.223    <none>        80:31281/TCP   15h      
[root@master ~]# kubectl edit svc ui-weave-scope   ## 编辑内部yaml文件,将状态换为NodePort
service/ui-weave-scope edited
[root@master ~]# kubectl describe svc ui-weave-scope
Name:                     ui-weave-scope
Namespace:                default
Labels:                   app=weave-scopeapp.kubernetes.io/managed-by=Helmchart=weave-scope-frontend-1.1.10component=frontendheritage=Helmrelease=ui
Annotations:              cloud.weave.works/launcher-info:{"server-version": "master-4fe8efe","original-request": {"url": "/k8s/v1.7/scope.yaml"},"email-address": "support@weave.works","source-app": "weave-scope","weave-cloud-component": "scope"}meta.helm.sh/release-name: uimeta.helm.sh/release-namespace: default
Selector:                 app=weave-scope,component=frontend,release=ui
Type:                     NodePort   ##状态已经修改
IP Families:              <none>
IP:                       10.101.125.54
IPs:                      10.101.125.54
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  31055/TCP
Endpoints:                10.244.2.36:4040
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
[root@master ~]# kubectl get svc
NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP        65d
ui-weave-scope   NodePort    10.101.125.54   <none>        80:31055/TCP   15m
web              NodePort    10.96.63.223    <none>        80:31281/TCP   15h
  • 最终布置效果
    在这里插入图片描述

5、 自行创建Chart

5.1 Chart目录内容解析

  • chart.yaml 指当前chart属性配置信息
  • templates 编写的yaml文件放到当前目录
  • values.yaml yaml文件可以使用全局变量

5.2 简单安装部署

[root@master ~]# helm create mychart   ##创建Chart[root@master ~]# cd mychart/
[root@master mychart]# ls
charts  Chart.yaml  templates  values.yaml
[root@master mychart]# cd templates/
[root@master templates]# ls
deployment.yaml  hpa.yaml      NOTES.txt            service.yaml  
_helpers.tpl     ingress.yaml  serviceaccount.yaml  tests[root@master mychart]# kubectl create deployment web1 --image=nginx --dry-run -o yaml >
deployment.yaml[root@master mychart]# kubectl create deployment web1 --image=nginx   ##后续创建svc需要web1存在
[root@master templates]# kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml   ##创建service.yaml
[root@master ~]# kubectl delete deployments.apps web1    ##删除,一会通过helm进行安装
[root@master templates]# ls
deployment.yaml  service.yaml# helm安装
[root@master ~]# helm install web1 mychart/   ##install+ 自己起名称+ Chart目录
NAME: web1
LAST DEPLOYED: Sat May 14 20:15:51 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master ~]# kubectl get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP        66d
ui-weave-scope   NodePort    10.101.125.54    <none>        80:31055/TCP   8h
web              NodePort    10.96.63.223     <none>        80:31281/TCP   24h
web1             NodePort    10.108.249.102   <none>        80:30502/TCP   7s
[root@master ~]# kubectl get pod 
NAME                                            READY   STATUS              RESTARTS   AGE
web1-6fbb48567f-pdgxv                           1/1     Running   0          13s

5.3 应用升级回退

[root@master ~]# helm history web1 
REVISION	UPDATED                 	STATUS    	CHART        	APP VERSION	DESCRIPTION     
1       	Sat May 14 20:15:51 2022	superseded	mychart-0.1.0	1.16.0     	Install complete
2       	Sat May 14 20:18:18 2022	superseded	mychart-0.1.0	1.16.0     	Upgrade complete
3       	Sat May 14 20:18:31 2022	deployed  	mychart-0.1.0	1.16.0     	Rollback to 1   
[root@master ~]# helm upgrade web1 mychart/   ##升级
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Sat May 14 20:18:18 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
[root@master ~]# helm rollback web1   ##回退到上一版本
Rollback was a success! Happy Helming!
[root@master ~]# helm rollback web1 2  ##回退到指定版本

6、Chart模板实现高效复用

  • 通过传递参数,动态渲染模板,yaml文件内容动态传入参数生成。主要是通过value.yaml文件

  • 实现主要分为两步:1、通过values.yaml文件定义变量和值;2、在具体的模板下的yaml文件中进行获取变量

  • 一般情况下,yaml文件中不同的有name、label、replicas、tag、port

6.1 在values.yaml文件中定义全局变量

[root@master ~]# cd mychart/
[root@master mychart]# ls
charts  Chart.yaml  templates  values.yaml
[root@master mychart]# vim values.yaml 
[root@master mychart]# cat values.yaml    ##主要修改的变量信息
image: nginx
replicas: 1
tag: 1.16
label: nginx
port: 80

6.2 在templates中的yaml文件中定义变量

  • 通过表达式形式定义变量 {{ .Values.变量名称}} 还有一种常用的定义名字的{{ .Release.Name}}
[root@master templates]# pwd
/root/mychart/templates[root@master templates]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: {{ .Values.label}}name: {{ .Release.Name}}-deploy
spec:replicas: {{ .Values.replicas}}selector:matchLabels:app: {{ .Values.label}}strategy: {}template:metadata:creationTimestamp: nulllabels:app: {{ .Values.label}}spec:containers:- image: {{ .Values.image}}name: {{ .Values.label}}resources: {}
status: {}[root@master templates]# cat service.yaml 
apiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: {{ .Values.label}}name: {{ .Release.Name}}-svc
spec:ports:- port: {{ .Values.port}}protocol: TCPtargetPort: {{ .Values.port}}selector:app: {{ .Release.Name}}-svctype: NodePort
status:loadBalancer: {}[root@master ~]# helm install web2 mychart/ --dry-run   ##生成说明成功了
NAME: web2
LAST DEPLOYED: Sat May 14 21:33:23 2022
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
HOOKS:
MANIFEST:
---
# Source: mychart/templates/service.yaml
apiVersion: v1
kind: Service
metadata:creationTimestamp: nulllabels:app: nginxname: web2-svc
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: web2-svctype: NodePort
status:loadBalancer: {}
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginxname: web2-deploy
spec:replicas: 1selector:matchLabels:app: nginxstrategy: {}template:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginxname: nginxresources: {}
status: {}
[root@master ~]# helm install web2 mychart/ 
NAME: web2
LAST DEPLOYED: Sat May 14 21:35:06 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@master ~]# kubectl get pods
NAME                                            READY   STATUS    RESTARTS   AGE
web2-deploy-6799fc88d8-8khvj                    1/1     Running   0          25s
[root@master ~]# kubectl get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
web2-svc         NodePort    10.101.45.10     <none>        80:30704/TCP   30s

相关文章:

k8s-----19、Helm

Helm 1、引入2、概述2.1 重点2.2 V3版本的Helm2.2.1 与之前版本的不同之处2.2.2 V3版本的运行流程 3、安装和配置仓库、一些附带操作3.1 安装3.2 配置仓库3.3 常用命令3.4 添加helm的自动补齐 4、快速部署应用(weave应用)5、 自行创建Chart5.1 Chart目录内容解析5.2 简单安装部…...

怒刷LeetCode的第28天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;动态规划 方法二&#xff1a;迭代 方法三&#xff1a;斐波那契数列公式 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;栈 方法二&#xff1a;路径处理类 方法三&#xff1a;正则表达式 方法…...

Kotlin(八) 数据类、单例

目录 一&#xff1a;创建数据类 二&#xff1a;单例类 一&#xff1a;创建数据类 和Java的不同&#xff0c;kotlin的数据类比较简单&#xff0c;New→Kotlin File/Class&#xff0c;在弹出的对话框中输入“Book”&#xff0c;创建类型选择“Data”。如图&#xff1a; 然后编…...

IAR For ARM 安装教程

电脑环境 安装包下载 1、官网下载 ①搜索 IAR ②切换产品&#xff0c;选择Arm ③选择IAR Embedded Workbench for Arm ④免费试用 2、网盘下载 EWARM-CD-8202-14838.exe(访问密码: 1666) https://url48.ctfile.com/f/33868548-961057458-611638?p1666 软件下载 1、点击安…...

向量数据库Weaviate Cloud 和 Milvus Cloud:性能大比拼

最近,随着检索增强生成系统(RAG)的持续火爆,开发者对于“如何选择一个向量数据库”的疑惑也越来越多。过去几周,我们从性能和特性能力两个方面对 Weaviate Cloud 和 MilvusCloud 进行了详细的对比。在对比过程中,我们使用了开源的性能基准测试套件 VectorDBBench,围绕诸…...

微信小程序控制元素显示隐藏

微信小程序是一种轻量级的应用程序&#xff0c;它可以在微信中运行&#xff0c;具有快速、便捷、易用等特点。在微信小程序中&#xff0c;我们可以通过控制元素的显示和隐藏来实现特定的功能。本文将介绍如何使用微信小程序控制元素的显示和隐藏&#xff0c;以及如何应用这些技…...

轻量封装WebGPU渲染系统示例<2>-彩色立方体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/VertColorCube.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 5. …...

电脑技巧:Win10飞行模式相关知识介绍

目录 一、飞行模式简介 二、如何开关Windows 10中的飞行模式 方法一&#xff1a;使用硬件开关 方法二&#xff1a;使用Windows 10操作中心 方法三&#xff1a;使用Windows 10设置 三、飞行模式开关被卡住、变灰或不工作时怎么办 什么是 Windows 10 飞行模式? 用户如何打…...

化身全能战士:ChatGPT助我横扫办公室【文末送书两本】

化身全能战士&#xff1a;ChatGPT助我横扫办公室 半年签约 16 本书有 ChatGPT 不会的吗&#xff1f;解锁 ChatGPT 秘技&#xff0c;化身全能战士ChatGPT 基本知识办公自动化职场学习与变现 作者简介结语购买链接参与方式往期赠书回顾 &#x1f3d8;️&#x1f3d8;️个人简介&a…...

直方图均衡化算法

直方图均衡化是一种图像处理算法&#xff0c;通过调整图像的灰度级分布&#xff0c;增强图像的对比度和细节。下面是直方图均衡化算法的基本步骤&#xff1a; 统计原始图像的灰度直方图&#xff1a;遍历整个图像&#xff0c;计算每个灰度级出现的频次。 计算累积直方图&#x…...

通过el-tree 懒加载树,创建国家地区四级树

全国四级行政地区树数据库sql下载路径&#xff1a;【免费】全国四级地区(省市县)数据表sql资源-CSDN文库https://download.csdn.net/download/weixin_51722520/88469807?spm1001.2014.3001.5503 我在后台获取地区信息添加了限制&#xff0c;只获取parentid为当前的地…...

Power BI 实现日历图,在一张图中展示天、周、月数据变化规律

《数据可视化》这本书里介绍了一个时间可视化的案例&#xff08;如下图所示&#xff09;&#xff0c;以日历图的形式展示数据的变化&#xff0c;可以在一张图上同时观察到&#xff1a;&#xff08;1&#xff09;每一天的数据变化&#xff1b;&#xff08;2&#xff09;随周变化…...

C/C++计算表达式值 2020年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C计算表达式值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C计算表达式值 2020年12月 C/C编程等级考试一级编程题 一、题目要求 计算(ab)*(c-b)的值 1、编程实现 给定3个整数a、b、c&…...

XTU-OJ 1258-矩阵

编写一个程序&#xff0c;将1~n2按行依次填入nn的矩阵&#xff0c;执行若干条行或者列的循环移动的指令&#xff0c;再将数字按行依次取出。 指令如下&#xff1a; 指令含义L x yx行循环左移y次R x yx行循环右移y次U x yx列循环上移y次D x yx列循环下移y次 输入 第一行是一个整…...

Django token 认证原理与实战

概述 cookie、session 与token 的区别 Cookie的作用 cookie的存储量很小&#xff0c;一般不超过4Kcookie并不会保存很多信息&#xff0c;一般用来存储登录状态cookie是以键值对进行表示的(keyvalue),例如nameli,表示cookie的名字是name,cookie携带的值是licookie的存储分为会…...

JVM虚拟机:Java对象的头信息有什么?

本文重点 在前面的课程中,我们学习了对象头,其中对象头包含Mark Word和class pointer,当然数组还会有一个数组长度。本文主要分析Mark Work中包含的信息。 Mark Word 以下两张图是一个意思: 32位 32位 64位 以上就是Mark Word会存储的信息,这个意思是说Java对象在不同…...

场效应管器件

在面试硬件方面的工作时&#xff0c;我们通常会被提问模电方面的知识。 场效应管简称FET,有三级&#xff1a;源极(S)、漏极(D)、栅极&#xff08;G&#xff09;&#xff1b;可以实现电压控制电流源&#xff1b;“源极和漏极之间的漏极电流Id&#xff0c;由栅极的负电压进行控制…...

javascript之for循环介绍

javascript之for循环介绍 1&#xff09;语法&#xff1a; for ([initialization]; [condition]; [final-expression]) { // code to be executed }1&#xff09;initialization&#xff08;初始化&#xff09;&#xff1a;在循环开始之前执行&#xff0c;通常用于设置循环计…...

【机器学习可解释性】3.部分依赖图

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP Value5.SHAP Value 高级使用 正文 每个特征怎么样影响预测结果&#xff1f; 部分依赖图 Partial Dependence Plots 虽然特征重要性显示了哪些变量对预测影响最大&#xff0c;但部分依赖图显示了特征如…...

在CARLA中手动开车,添加双目相机stereo camera,激光雷达Lidar

CARLA的使用逻辑&#xff1a; 首先创建客户端 设置如果2秒没有从服务器返回任何内容&#xff0c;则终止 client carla.Client("127.0.0.1", 2000) client.set_timeout(2.0) 从客户端中get world world client.get_world() 设置setting并应用 这里使用固定时…...

【VUE】ArcoDesign之自定义主题样式和命名空间

前言 Arco Design是什么&#xff1f; Arco Design 是由字节跳动推出的企业级产品的完整设计和开发解决方案前端组件库 官网地址&#xff1a;https://arco.design/同时也提供了一套开箱即用的中后台前端解决方案&#xff1a;Arco Design Pro(https://pro.arco.design/) Arco De…...

TVRNet网络PyTorch实现

文章目录 文章地址网络各层结构代码实现 文章地址 An End-to-End Traffic Visibility Regression Algorithm文章通过训练搜集得到的真实道路图像数据集&#xff08;Actual Road dense image Dataset, ARD&#xff09;&#xff0c;通过专业的能见度计和多人标注&#xff0c;获得…...

opencv之坑(八)——putText中文乱码解决

opencv4.0之前版本和部分4.0版本的putText仅支持英文&#xff0c;如果中文会乱码&#xff0c;可以用下面方法构造函数解决&#xff1a; 头文件如下&#xff1a; #pragma once #ifndef PUTTEXT_H_ #define PUTTEXT_H_#include <windows.h> #include <string> #incl…...

nrf52832 开发板入手笔记:资料搜集

前言 最近翻箱&#xff0c;发现了两块几年前买的 NRF52832 与 NRF52840 的开发板&#xff0c;打算搭个 BLE 的开发环境 NRF52832 与 NRF51822 之前用过&#xff0c; NRF52840 没有用过&#xff0c;好像是 BLE4 与 BLE5 的区别吧 相关介绍 除了开发板&#xff0c;最重要的还是…...

PHP如何批量修改二维数组中值

每个name值加pex&#xff0c;age加5&#xff0c; 原数据&#xff1a; $data[["name">a,age>12],["name">b,age>22],["name">c,age>33],["name">d,age>44], ];实现效果 方案一、foreach引用方式 $data[["…...

Python 算法高级篇:归并排序的优化与外部排序

Python 算法高级篇&#xff1a;归并排序的优化与外部排序 引言 1. 归并排序的基本原理2. 归并排序的优化2.1 自底向上的归并排序2.2 最后优化 3. 外部排序4. 性能比较5. 结论 引言 在计算机科学中&#xff0c;排序是一项基本的任务&#xff0c;而归并排序&#xff08; Merge S…...

LeetCode--1991.找到数组的中间位置

1 题目描述 给你一个下标从 0 开始的整数数组 nums , 请你找到 最左边 的中间位置 middleIndex &#xff08;也就是所有可能中间位置下标最小的一个&#xff09; 中间位置 middleIndex 是满足 nums[0] nums[1] ... nums[middleIndex-1] nums[middleIndex1] nums[middleI…...

物联网数据采集网关连接设备与云平台的关键桥梁

随着工业4.0和智能制造的快速发展&#xff0c;物联网数据采集网关在工业物联网中的应用越来越广泛。物联网数据采集网关作为连接设备与云端之间的关键桥梁&#xff0c;能够实现高效、可靠、安全的数据传输和转换&#xff0c;为智能制造和工业4.0提供了强大的支持。 一、物联网…...

专家级数据恢复:UFS Explorer Professional Recovery Crack

UFS Explorer Professional Recovery - 一款功能强大且方便的数据恢复程序&#xff0c;支持检测大量文件系统、操作系统和各种类型的驱动器&#xff1a;从简单的闪存驱动器到复杂的复合存储&#xff08;各种级别的 RAID 阵列&#xff09;。 该程序由执业专家开发&#xff0c;并…...

2023/10/23 mysql学习

数据库修改 show databases; 展示所有数据库 create database 数据库名; 创建数据库 create database if not exists 数据库名; 如果未创建过当前数据库名则创建 drop database 数据库名; drop database if exists 数据库名;用法和创建类似 删除数据库 use 数据库名; 跳…...