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…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
