k8s helm
k8s Helm 是Kubernetes的包管理工具,类似于Linux系统中常用的apt、yum等包管理工具。Helm通过定义、安装和升级Kubernetes应用程序来简化Kubernetes应用部署的复杂性。以下是对k8s Helm的详细解析:
一、Helm的基本概念
Chart:Chart是Helm的包,包含了运行一个应用所需要的镜像、依赖和资源定义等。它是Helm部署应用的基本单位,类似于Linux系统中的软件包。
Release:Release是在Kubernetes集群上运行的Chart的一个实例。同一个Chart可以在同一个集群上安装多次,每次安装都会创建一个新的Release。
Repository:Repository是用于发布和存储Chart的存储库。用户可以从Repository中检索、下载和安装所需的Chart。
二、Helm的架构
Helm主要包括Helm客户端(helm CLI)和Tiller服务端两部分。Tiller部署在Kubernetes集群中,负责处理Chart的安装、升级和卸载等操作。然而,需要注意的是,随着Helm的发展,Tiller组件已经被逐渐废弃,取而代之的是直接在客户端执行操作,并通过Kubernetes API与集群交互。
三、Helm的使用场景
Helm广泛应用于Kubernetes应用的部署和管理中,特别是在需要频繁部署、升级和回滚应用的场景下。通过使用Helm,用户可以轻松地将应用打包成Chart,并在不同的Kubernetes集群中部署和管理这些应用。
四、Helm的操作流程
添加Repository:用户首先需要添加包含所需Chart的Repository。这可以通过helm repo add命令完成,例如添加Elasticsearch的Helm Repository。
搜索Chart:用户可以使用helm search命令在Repository中搜索所需的Chart。
安装Chart:使用helm install命令安装Chart,并创建新的Release。用户可以指定Chart的版本、命名空间以及自定义的配置参数等。
升级Chart:当需要更新应用时,可以使用helm upgrade命令升级Chart。这将更新Release中的Chart到新版本,并根据需要更新相关的Kubernetes资源。
卸载Chart:使用helm uninstall命令可以卸载Chart并删除相关的Kubernetes资源。
五、Helm的优势
简化部署:Helm通过定义Chart来封装应用的部署逻辑,使得应用的部署变得简单快捷。
版本控制:Helm支持Chart的版本控制,用户可以轻松地回滚到之前的版本。
可重用性:Chart可以在不同的Kubernetes集群中重复使用,提高了应用的可移植性和可重用性。
自定义配置:用户可以通过修改Chart中的values.yaml文件来自定义应用的配置参数。
六、总结
k8s Helm是Kubernetes的包管理工具,它通过定义、安装和升级Chart来简化Kubernetes应用的部署和管理。Helm的使用可以大大提高Kubernetes应用的部署效率和可维护性,是Kubernetes生态系统中不可或缺的一部分。
参考4条信息源k8s Helm 是Kubernetes的包管理工具,类似于Linux系统中常用的apt、yum等包管理工具。Helm通过定义、安装和升级Kubernetes应用程序来简化Kubernetes应用部署的复杂性。以下是对k8s Helm的详细解析:
七、HELM部署
[root@master helm]# curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
[root@master helm]# tar -zvxf helm-v3.12.3-linux-amd64.tar.gz
linux-amd64/
linux-amd64/LICENSE
linux-amd64/README.md
linux-amd64/helm
[root@master helm]# ls
get_helm.sh helm-v3.12.3-linux-amd64.tar.gz linux-amd64
[root@master helm]# cp -a linux-amd64/helm /usr/local/bin/
[root@master helm]# chmod a+x /usr/local/bin/helm
[root@master helm]# helm version
version.BuildInfo{Version:"v3.12.3", GitCommit:"3a31588ad33fe3b89af5a2a54ee1d25bfe6eaa5e", GitTreeState:"clean", GoVersion:"go1.20.7"}
# helm与/home/.kube/config的用户权限相同# 添加官方仓库
[root@master helm]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories[root@master helm]# helm repo ls
NAME URL
bitnami https://charts.bitnami.com/bitnami# 查看有哪些包
[root@master helm]# helm search repo bitnami# 安装 chart 示例$ helm repo update # 确定我们可以拿到最新的 charts 列表
$ helm show values bitnami/apache
$ helm install bitnami/apache --generate-name$ helm show chart bitnami/apache # chart 的基本信息
$ helm show all bitnami/apache # chart 的所有信息#卸载一个版本
$ helm uninstall apache-1612624192 # 该命令会从Kubernetes卸载 mysql-
1612624192, 它将删除和该版本相关的所有相关资源(service、deployment、 pod等等)甚至版本历
史--keep-history # 选项, Helm 将会保存版本历史$ helm status apache-1612624192 # 查看该版本的信息
Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定
义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物
‘helm search’:查找 Charts
# 用于在 Helm Hub(https://hub.helm.sh)上搜索 Helm charts
$ helm search hub wordpress
# 用于在配置的 Helm 仓库中搜索 Helm charts,~/.config/helm/repositories.yaml 中被定义
持久化
helm search repo wordpress
# Helm 搜索使用模糊字符串匹配算法,所以你可以只输入名字的一部分
[root@master ~]# cat ~/.config/helm/repositories.yaml
apiVersion: ""
generated: "0001-01-01T00:00:00Z"
repositories:
- caFile: ""certFile: ""insecure_skip_tls_verify: falsekeyFile: ""name: kubernetes-dashboardpass_credentials_all: falsepassword: ""url: https://kubernetes.github.io/dashboard/username: ""
- caFile: ""certFile: ""insecure_skip_tls_verify: falsekeyFile: ""name: stablepass_credentials_all: falsepassword: ""url: https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartsusername: ""
- caFile: ""certFile: ""insecure_skip_tls_verify: falsekeyFile: ""name: stable2pass_credentials_all: falsepassword: ""url: http://mirror.azure.cn/kubernetes/chartsusername: ""
- caFile: ""certFile: ""insecure_skip_tls_verify: falsekeyFile: ""name: bitnamipass_credentials_all: falsepassword: ""url: https://charts.bitnami.com/bitnamiusername: ""
- caFile: ""certFile: ""insecure_skip_tls_verify: falsekeyFile: ""name: prometheus-communitypass_credentials_all: falsepassword: ""url: https://prometheus-community.github.io/helm-chartsusername: ""
‘helm install’:安装一个 helm 包
$ helm install apache-1612624192 bitnami/apache#安装资源顺序
Namespace > NetworkPolicy > ResourceQuota > LimitRange > PodSecurityPolicy > PodDisruptionBudget > ServiceAccount > Secret > SecretList > ConfigMap > StorageClass > PersistentVolume > PersistentVolumeClaim > CustomResourceDefinition > ClusterRole > ClusterRoleList > ClusterRoleBinding > ClusterRoleBindingList > Role > RoleList > RoleBinding > RoleBindingList > Service > DaemonSet > Pod > ReplicationController > ReplicaSet > Deployment > HorizontalPodAutoscaler > StatefulSet > Job > CronJob > Ingress > APIService
安装前自定义 chart
$ helm show values bitnami/apache # 查看 chart 中的可配置选项
# 使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件
$ vi values.yaml
service:type: NodePort$ helm install -f values.yaml bitnami/apache --generate-name
安装过程中有两种方式传递配置数据
–values (或 -f ):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件
–set :通过命令行的方式对指定项进行覆盖
如果同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。
在 --set 中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values 来
查看指定 release 中 --set 设置的值。也可以通过运行 helm upgrade 并指定 --reset-values 字段来
清除 --set 中设置的值
–set 的格式和限制
–set 选项使用0或多个 name/value 对。最简单的用法类似于: --set name=value ,等价于如下
YAML 格式:
name: value
多个值使用逗号分割,因此 --set a=b,c=d 的 YAML 表示是:
a: b
c: d
支持更复杂的表达式。例如, --set outer.inner=value 被转换成了:
outer:inner: value
列表使用花括号( {} )来表示。例如, --set name={a, b, c} 被转换成了:
name:- a- b- c
某些 name/key 可以设置为 null 或者空数组,例如 --set name=[],a=null
name: []
a: null
从 2.5.0 版本开始,可以使用数组下标的语法来访问列表中的元素。例如 --set servers[0].port=80
就变成了:
servers:- port: 80
多个值也可以通过这种方式来设置。 --set servers[0].port=80,servers[0].host=example 变成
了:
servers:- port: 80host: example
如果需要在 --set 中使用特殊字符,你可以使用反斜线来进行转义; --set name=value1,value2 就
变成了:
name: "value1,value2"
–set nodeSelector.“kubernetes.io/role”=master
nodeSelector:kubernetes.io/role: master
更多安装方法
helm install 命令可以从多个来源进行安装:
- chart 的仓库(如上所述)
- 本地 chart 压缩包( helm install foo foo-0.1.1.tgz )
- 解压后的 chart 目录( helm install foo path/to/foo )
- 完整的 URL( helm install foo https://example.com/charts/foo-1.2.3.tgz )
‘helm upgrade’ 和 ‘helm rollback’:升级 release 和失败时恢复当你想升级到 chart 的新版本,或是修改release 的配置,你可以使用 helm upgrade 命令。Helm 会尝试执行最小侵入式升级。即它只会更新自上次发布以来发生了更改的内容
$ helm upgrade -f clusterip.yaml apache-23213213 bitnami/apache
在上面的例子中, apache-23213213 这个 release 使用相同的 chart 进行升级,但是使用了一个新的
YAML 文件:
service.type: ClusterIP
我们可以使用 helm get values 命令来看看配置值是否真的生效了:
$ helm get values apache-23213213
现在,假如在一次发布过程中,发生了不符合预期的事情,也很容易通过 helm rollback [RELEASE]
[REVISION] 命令回滚到之前的发布版本
$ helm history apache-23213213
$ helm rollback apache-23213213 1
上面这条命令将我们的 apache-23213213 回滚到了它最初的版本。release 版本其实是一个增量修订
(revision)。 每当发生了一次安装、升级或回滚操作,revision 的值就会加1。第一次 revision 的值
永远是1。我们可以使用 helm history [RELEASE] 命令来查看一个特定 release 的修订版本号
安装、升级、回滚时的有用选项
- –timeout:一个 Go duration 类型的值, 用来表示等待 Kubernetes 命令完成的超时时间,默认
值为 5m0s。such as “300ms”, “-1.5h” or “2h45m”. Valid time units are “ns”, “us” (or “µs”),
“ms”, “s”, “m”, “h”。 - –wait:表示必须要等到所有的 Pods 都处于 ready 状态,PVC 都被绑定,Deployments 都至少拥
有最小 ready 状态 Pods 个数(Desired减去 maxUnavailable),并且 Services 都具有 IP 地址
(如果是LoadBalancer, 则为 Ingress),才会标记该 release 为成功。最长等待时间由 –
timeout 值指定。如果达到超时时间,release 将被标记为 FAILED。注意:当 Deployment 的
replicas 被设置为1,但其滚动升级策略中的 maxUnavailable 没有被设置为0时,–wait 将返回就
绪,因为已经满足了最小 ready Pod 数 - –no-hooks :不运行当前命令的钩子,即为安装此 chart 时的已定义的安装前或者安装后的动作
- –recreate-pods:(仅适用于 upgrade 和 rollback ):这个参数会导致重建所有的Pod(deployment中的Pod 除外)。(在 Helm 3 中已被废弃)
‘helm uninstall’:卸载 release
$ helm uninstallapache-23213213 # 使用 helm uninstall 命令从集群中卸载一个
release
helm v2 版本中,当一个 release 被删除,会保留一条删除记录。而在 Helm 3 中,删除也会移除
release 的记录。 如果你想保留删除记录,使用 helm uninstall --keep-history 。使用 helm list
–uninstalled 只会展示使用了 --keep-history 删除的 release
helm list --all 会展示 Helm 保留的所有 release 记录,包括失败或删除的条目(指定了 --keephistory )
‘helm repo’:使用仓库
$ helm repo list # 查看配置的仓库,v3 版本已经不再默认添加一个仓库
$ helm repo add dev https://example.com/dev-charts # 添加新的仓库
$ helm repo update # 可以通过执行 helm repo update 命令来确保你的 Helm 客户端是最
新的
$ helm repo remove # 移除仓库
三、创建一个自己的 Chart
基本模式
# 1、创建一个模板
$ helm create myapp
# 2、删除不用的文件
# 3、编写 template 下的 service 和 deployment 资源清单
[root@k8s-master01 myapp]# cat templates/nodePort.yaml
apiVersion: v1
kind: Service
metadata:labels:app: myapp-testname: myapp-test-202401110926-svc
spec:ports:- name: 80-80port: 80protocol: TCPtargetPort: 80nodePort: 31111selector:app: myapp-testtype: NodePort
[root@k8s-master01 myapp]# cat templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: myapp-testname: myapp-test-202401110926-deploy
spec:replicas: 5selector:matchLabels:app: myapp-testtemplate:metadata:labels:app: myapp-testspec:containers:- image: wangyanglinux/myapp:v1.0name: myapp
# 4、发布部署
$ helm install myapp myapp/
注入 HELM 灵魂
[root@k8s-master01 myapp]# cat templates/NOTES.txt
1、这是一个测试的 myapp chart
2、myapp release 名字:myapp-test-{{ now | date "20060102030405" }}-deploy
3、service 名字:myapp-test-{{ now | date "20060102030405" }}-svc
---------------------------------------------------------------------------------
-
[root@k8s-master01 myapp]# cat templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: myapp-testname: myapp-test-{{ now | date "20060102030405" }}-deploy
spec:replicas: {{ .Values.replicaCount }}selector:matchLabels:app: myapp-testtemplate:metadata:labels:app: myapp-testspec:containers:- image: {{ .Values.image.repository }}:{{ .Values.image.tag }}name: myapp
---------------------------------------------------------------------------------
-
[root@k8s-master01 myapp]# cat templates/service.yaml
apiVersion: v1
kind: Service
metadata:labels:app: myapp-testname: myapp-test-{{ now | date "20060102030405" }}-svc
spec:ports:- name: 80-80port: 80protocol: TCPtargetPort: 80{{- if eq .Values.service.type "NodePort" }}nodePort: {{.Values.service.nodeport }}{{- end }}selector:app: myapp-testtype: {{ .Values.service.type | quote }}
---------------------------------------------------------------------------------
-
[root@k8s-master01 myapp]# cat values.yaml
# Default values for myapp.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 5
image:repository: wangyanglinux/myapptag: "v1.0"
service:type: NodePortnodeport: 32321
部署dashboard
[root@master kubernetes-dashboard]# helm install kubernetes-dashboard kubernetes-dashboard-7.5.0.tgz --namespace kubernetes-dashboard
Release “kubernetes-dashboard” does not exist. Installing it now.
NAME: kubernetes-dashboard
LAST DEPLOYED: Thu Aug 29 16:26:51 2024
NAMESPACE: kubernetes-dashboard
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
*** PLEASE BE PATIENT: Kubernetes Dashboard may need a few minutes to get up and become ready ***
Congratulations! You have just installed Kubernetes Dashboard in your cluster.
To access Dashboard run:
kubectl -n kubernetes-dashboard port-forward svc/kubernetes-dashboard-kong-proxy 8443:443
NOTE: In case port-forward command does not work, make sure that kong service name is correct.
Check the services in Kubernetes Dashboard namespace using:
kubectl -n kubernetes-dashboard get svc
Dashboard will be available at:
https://localhost:8443
kubectl edit svc -n kubernetes-dashboard kubernetes-dashboard-kong-proxy
type: ClusterIP --> type: NodePort
#查看
kubectl get svc -A |grep kubernetes-dashboard
[root@master kubernetes-dashboard]# kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 8d
kube-system calico-typha ClusterIP 10.12.153.109 <none> 5473/TCP 43h
kube-system kube-dns ClusterIP 10.0.0.10 <none> 53/UDP,53/TCP,9153/TCP 8d
kubernetes-dashboard kubernetes-dashboard-api ClusterIP 10.4.13.106 <none> 8000/TCP 5m46s
kubernetes-dashboard kubernetes-dashboard-auth ClusterIP 10.7.255.171 <none> 8000/TCP 5m46s
kubernetes-dashboard kubernetes-dashboard-kong-manager NodePort 10.13.194.147 <none> 8002:31893/TCP,8445:30742/TCP 5m46s
kubernetes-dashboard kubernetes-dashboard-kong-proxy NodePort 10.8.2.56 <none> 443:32646/TCP 5m46s
kubernetes-dashboard kubernetes-dashboard-metrics-scraper ClusterIP 10.3.118.3 <none> 8000/TCP 5m46s
kubernetes-dashboard kubernetes-dashboard-web ClusterIP 10.15.211.70 <none> 8000/TCP 5m46s
#获取token
[root@master kubernetes-dashboard]# vi dashboard-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard
#
[root@master kubernetes-dashboard]# kubectl apply -f dashboard-user.yaml
#获取token
[root@master kubernetes-dashboard]# kubectl -n kubernetes-dashboard create token admin-user#创建正式token
[root@master kubernetes-dashboard]# vi dashboard-admin.yaml
apiVersion: v1
kind: Secret
metadata:name: admin-usernamespace: kubernetes-dashboardannotations:kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token#
[root@master kubernetes-dashboard]# kubectl apply -f dashboard-admin.yaml
#获取Token
[root@master kubernetes-dashboard]# kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d#访问这个端口
kubernetes-dashboard kubernetes-dashboard-kong-proxy NodePort 10.8.2.56 <none> 443:32646/TCP 5m46s
相关文章:
k8s helm
k8s Helm 是Kubernetes的包管理工具,类似于Linux系统中常用的apt、yum等包管理工具。Helm通过定义、安装和升级Kubernetes应用程序来简化Kubernetes应用部署的复杂性。以下是对k8s Helm的详细解析: 一、Helm的基本概念 Chart:Chart是Helm的…...

KMP 详解
KMP数组存的是什么 对于一个字符串 b,下标从1开始。 则kmp[i]表示 以i结尾的连续子串 s的前缀的最大值(等价于前缀最大结尾处) 如何求KMP 假设 i 以前的KMP都被求出来了。 j 表示上一个字符可以成功匹配的长度(等价于下标) …...

go语言并发编程-超详细mutex解析
文章目录 1 go语言并发编程学习-mutex1.1 学习过程1.2 如何解决资源并发访问的问题?【基本用法】1.2.1 并发访问带来的问题1.2.1.1 导致问题的原因 1.2.2 race detector检查data race1.2.3 mutex的基本实现机制以及使用方法1.2.3.1 具体使用-11.2.3.1 具体使用-2 1 …...
VirtualBox Debian 自动安装脚本
概览 相较于原脚本(安装目录/UnattendedTemplates/debian_pressed.cfg)更新如下内容: 配置清华镜像源配置仅主机网卡(后续只需添加仅主机网卡即可)配置Root用户远程登录配置用户sudo组 脚本 debian_pressed.cfg ##…...

最好的开放式耳机?五款红榜开放式耳机推荐!
面对众多的开放式耳机选项,消费者可能会感到难以抉择。买耳机不一定要买最贵最好的,但是一定要选最适合自己的,为了使选择过程更加容易,我提供了一些建议,推荐了几款既适合日常使用又佩戴舒适的热门开放式耳机。 开放式…...

线性代数之线性方程组
目录 线性方程组 1. 解的个数 齐次线性方程组: 非齐次线性方程组: 2. 齐次线性方程组的解 3. 非齐次线性方程组的解 4. 使用 Python 和 NumPy 求解线性方程组 示例代码 齐次线性方程组 非齐次线性方程组 示例结果 齐次线性方程组 非齐次线性…...
速盾:怎么查看是否使用cdn服务?
CDN(Content Delivery Network),即内容分发网络,是一种加速网络内容传输的技术。通过在全球各地建立分布式的节点服务器,将网站的静态资源缓存到最近的节点服务器上,使用户可以从离自己地理位置最近的节点服…...

828华为云征文|采用Flexus云服务器X实例部署RTSP直播服务器
一、前言 这篇文章讲解: 采用华为云最新推出的Flexus云服务器X实例搭建RTSP服务器,完成视频直播需求。 随着实时视频流传输需求的增长,RTSP(实时流协议)服务器成为了许多视频监控、直播和多媒体应用的核心组件。在当…...
Spring Cloud Gateway(二)
Spring Cloud Gateway(二) 文章目录 Spring Cloud Gateway(二)Gateway工作原理为什么使用API网关高并发Gateway性能优化 Gateway工作原理 Spring Cloud Gateway旨在为微服务架构提供简单、有效并且统一的API路由管理方式。它不仅…...
docker 简易入门
# docker 简易入门 docker由几个组成部分 docker client: 即 docker 命令行工具 docker host: 宿主机,docker daemon 的运行环境服务器 docker daemon: docker 的守护进程,docker client 通过命令行与 docker daemon 交互 container: 最小型的一个操…...

【看雪-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
记录一个前端学习小组的收集的模版
问题1:输入“您的姓名”,选择“短答案”作为问题类型。问题2:输入“您是否愿意继续参加前端学习小组?”,选择“单选”作为问题类型,并添加选项“是”和“否”。问题3:输入“如果您选择‘是’&am…...

Rk3588 Android12 AIDL 开发
AIDL (Android Interface Definition Language) 和 HIDL (HAL Interface Definition Language) 都是 Android 系统中用于定义接口的工具,但它们有不同的用途和特性。 AIDL (Android Interface Definition Language) 用途: 主要用于应用程序之间的进程间…...
两个长整数字符串求和(不允许使用ES6+)
两个长整数字符串求和(不允许使用ES6), 面试手撸代码遇到到这个问题 1. 实现方式第一种 // 短整数字符串前边补 0; num需要补 0 的短整数字符串, len 长整数字符串的长度 function fillZero (num, len) {let str num.toString();if (str.length < len) {str 0.repeat(…...

11 Java 方法引用、异常处理、Java接口之函数式编程(接口知识补充Function<T,R>、BiFunction<T, U, R>和自定义泛型接口)
文章目录 前言一、Java接口之函数式编程 --- 接口知识补充1 Function<T,R>泛型接口2 BiFunction<T, U, R>泛型接口3 自定义泛型函数式编程接口4 使用lambda表达式、方法引用进行函数式编程二、方法引用1 方法引用初体验(以Array.sort()方法为例)(1)什么是方法引…...
深入探索 Go 语言的编译器与垃圾回收机制
Go 编译器 Go 编译器是通过 go 工具执行的,这个工具的功能不仅仅是生成可执行文件。你可以使用 go tool compile 命令来编译一个 Go 源文件。这个操作将生成一个目标文件,也就是 .o 后缀的文件。以下是在 macOS Mojave 系统上执行的命令和结果展示&…...

2024国赛数学建模-模拟火算法(MATLAB 实现)
模拟退火算法 1.1 算法原理 模拟退火算法的基本思想是从一给定解开始 ,从邻域 中随机产生另一个解 ,接受 Metropolis准则允许目标函数在 有限范围内变坏 ,它由一控制参数 t决定 ,其作用类似于物 理过程中的温度 T,对于控制参数的每一取值 ,算法持续进 行“产生 —判断 —接受…...
YOLOv8 只检测人 只画框不要标签
参考了这个:YOLOv8只检测人(或其他一种或者多种类别)_yolov8只检测指定类别-CSDN博客 1. 只检测人:predict的时候指定参数classes[0] 2. 只画框不要标签:plot的时候传入labelsFalse 3. 标签中去掉置信度:…...

如何将网络安全防范游戏化
组织对威胁的准备和恢复能力跟不上网络犯罪分子的进步。 一些首席执行官仍然认为网络安全需要偶尔干预,而不是持续关注。 但对于许多公司来说,情况并非如此;网络威胁准备需要协调一致的培训工作,因此网络安全团队在攻击发生时已…...

Qt QGraphicsView实现图片放缩、鼠标拖动移动、鼠标点位置放大缩小_图片查看
QtQGraphicsView实现图片放缩、鼠标拖动移动、鼠标点位置放大缩小 头文件: #ifndef TIMGWIDGET_H #define TIMGWIDGET_H#include <QGraphicsItem> #include <QMainWindow> #include <QObject> #include <QWidget>// class TImgWidget : pu…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...