理解Helm安装升级参数wait、wait-for-jobs、atomic、cleanup-on-fail、timeout

使用 Helm 3 包管理器在 Kubernetes 集群上安装软件 Helm是Kubernetes的包管理器,它允许开发人员和网络管理员员更轻松地在Kubernetes集群上配置和部署应用程序。Helm包称为charts,它们包含资源定义模板,这些模板可以部署和配置给定的应用程序,用户只需付出最少的工作。使用模板,你可以通过传入变量定义来管理图表、其设置和行为,而无需修改实际图表。Helm自动管理自定义资源定义以及对已部署定义的修改。具有可能自定义的已部署chart称为发布。。这将创建一个名为├──chartstemplates目录中。... 阅读详情
AI摘要

本文深入探讨了Helm在执行install和upgrade命令时的参数wait、wait-for-jobs、atomic和cleanup-on-fail的含义和作用。wait参数确保所有pod资源正常运行,wait-for-jobs等待所有job完成。atomic保证安装或升级的原子性,失败时自动回滚。cleanup-on-fail在升级失败时删除新增资源。文章还分析了这些参数在 Helm 源码中的实现逻辑,帮助读者更好地管理和监控chart应用状态。

理解Helm安装升级参数wait、wait-for-jobs、atomic、cleanup-on-fail、timeout

Helm执行install、upgrade指令时可以指定–wait、–atomic、–timeout参数,并且upgrade指令还可以指定–cleanup-on-fail参数。此篇文章将从helm源码的角度去理解这几个参数的实现及其意义,并给出如何自己管理chart应用的状态

wait、wait-for-jobs参数

语义

Helm应用在执行升级安装时,其实现逻辑是将values参数及内置参数按模版渲染成K8s资源,并发送给K8s集群。当K8s集群接收资源后helm就认为安装成功,此时应用的状态将更新成deployed。此时其实K8s并没有真正将Chart包中定义的资源创建、更新好,如果K8s资源更新创建失败,整个发布其实不能算是成功了,因为根本没有运行起来。而添加了–wait参数后,helm将启动一个循环,查看Chart包下所有pod资源在K8s中是否正常更新创建并运行。如果所有pod资源都正常被K8s
更新创建并运行,则将发布状态设置为deployed;如果有pod资源出现异常将返回failed状态。如果到达timeout设置的超时时间仍然所有pod资源没有正常运行,则返回failed状态。wait-for-jobs参数与wait参数类似,但需要先开启wait参数,否则不生效,wait-for-jobs区别于wait参数的地方是需要等到所有job完成。由此可见在设置–wait参数后,如果升级安装操作正常完成,返回deployed状态,则可以确认此次升级安装是执行成功了。但我们也发现有一个不太完美的事情,由于要设置超时时间,如果超过超时时间则认为这次安装失败,有可能由于设置的超时时间不太合理导致虚假故障。并且这个循环操作是在helm中执行的,如果是自己依赖helm源码做的客户化工具,那么客户化工具重启或升级也会加大出问题的风险。对于哪些在升级安装前需要通过钩子实现初始化种子数据的Chart而言超时的可能性更大,因为初始化种子数据一般耗时较长,而且在3.2.0之前是串行执行,在3.2.0之后对于相同权重的钩子资源执行顺序与非钩子资源相同

helm客户端中如何设置及源码处理逻辑

通过helm升级、安装Chart并开启wait、wait-for-jobs

我们需要添加helm客户端的依赖。下面列出的helm依赖是我自己客户化的helm客户端

require (
	github.com/aimjianzhang/helm v0.0.0-20220411123222-8d7d0eade5d5
)

我们需要自己写安装chart包的逻辑,这个安装方法可以参考helm客户端中的helm.cmd.helm.install.go@runInstall方法。通过设置创建的Install对象的Wait属性为ture可以启用wait,我们认真观察一下,可以发现Install对象的属性其实和我们通过helm命令install安装时可以指定的参数是一样的,helm的install命令其实最后转换成的就是Install对象。获取代码

var helmInstallReleaseParams model.HelmInstallReleaseParams
	err := json.Unmarshal([]byte(cmd.Payload), helmInstallReleaseParams)
	if err != nil {
		return nil, NewResponseReleaseError(cmd.Key, cmd.Type, err.Error())
	}

	chartPathOptions := action.ChartPathOptions{
		RepoURL:  helmInstallReleaseParams.RepoURL,
		Version:  helmInstallReleaseParams.ChartVersion,
		Username: helmInstallReleaseParams.RepoUserName,
		Password: helmInstallReleaseParams.RepoPassword,
	}
	// 获取helm配置信息
	actionConfiguration, settings := getCfg(helmInstallReleaseParams.Namespace)

	// 创建install客户端,可以设置helm install支持的参数
	instClient := action.NewInstall(actionConfiguration)
	// 设置chart仓库地址及版本、认证信息等
	instClient.ChartPathOptions = chartPathOptions
	// 设置安装chart包等待所有pod起好
	instClient.Wait = true
	// 设置安装chart包等待所有job运行完成
	instClient.WaitForJobs = true
	// 设置安装是原子的,如果安装失败会回滚到上一个正常版本
	instClient.Atomic = true
	// 需要在那个命名空间下安装
	instClient.Namespace = helmInstallReleaseParams.Namespace
	// release的名称
	instClient.ReleaseName = helmInstallReleaseParams.ReleaseName

	// 查找chart返回完整路径或错误。如果有配置验证chart,将尝试验证
	cp, err := instClient.ChartPathOptions.LocateChart(helmInstallReleaseParams.ChartName, settings)
	if err != nil {
		return nil, NewResponseReleaseError(cmd.Key, cmd.Type, err.Error())
	}

	valuesOptions := getValuesOptions(helmInstallReleaseParams.Values)
	getters := getter.All(settings)
	vals, err := valuesOptions.MergeValues(getters)
	if err != nil {
		return nil, NewResponseReleaseError(cmd.Key, cmd.Type, err.Error())
	}
	// Check chart dependencies to make sure all are present in /charts
	chartRequested, err := loader.Load(cp)
	if err != nil {
		return nil, NewResponseReleaseError(cmd.Key, cmd.Type, er
kubernetes-helm详细介绍及使用 致读者 完整入门示例请参考:Helm完整入门实战 Helm 本指南介绍了使用 Helm 来管理 Kubernetes 集群上的软件包的基础知识。在这之前,假定您已经 安装了 Helm 客户端。 如果您仅对运行一些快速命令感兴趣,则不妨从 快速入门指南开始。本章包含了 Helm 命令的详细说明,并解释如何使用 Helm。 三大概念 Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebre 阅读详情

相关推荐

深入解析Helm部署控制参数:wait、atomic与cleanup-on-fail的实战应用

本文深入解析Helm部署控制参数wait、atomic与cleanup-on-fail的实战应用,揭示其在保障业务连续性中的核心价值。通过实际案例展示如何组合这些参数实现自动回滚、资源清理和状态检查,帮助开发者在Kubernetes环境中构建可靠的部署流程。特别针对金融、电商等关键业务场景提供参数配置黄金法则。

weixin_30632089的博客 652

Helm 3/4 版本命令实战:从安装到卸载的 8 个核心场景与 3 个关键参数

本文详细介绍了Helm 3/4版本的核心命令实战,涵盖从安装到卸载的8个关键场景,重点解析了`--atomic`、`--wait`和`--dry-run`等3个关键参数的使用方法。通过具体示例和最佳实践,帮助DevOps工程师高效管理Kubernetes应用部署,提升运维效率。

weixin_30345577的博客 375

【信息科学与工程学】计算机科学与技术——第二百二十五篇 架构设计 03 云原生架构02

启用HPA Controller Partial Cache(只缓存必要字段)、调整Informer Resync Period减少内存、启用Controller Memory Limit、监控Informer Cache内存。: 设置HPA stabilizationWindowSeconds大于CA扩容时间、启用CA scale-down-delay-after-add、使用PriorityBased策略优先保留Pod、监控HPA-CA震荡频率。模型并行allreduce需5TB/s→满足;

weixin_49199313的博客 353

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 401

2025反爬虫革命:京东商品接口的动态指纹认证与量子加密传输方案

在2025年,全球电商API接口面临的安全威胁呈现指数级增长:京东构建了基于硬件、软件、行为三重维度的设备指纹模型:京东构建了基于BB84+E91混合协议的量子密钥中继网络:

FB13713612741的博客 1649

Python+Flask+Echarts打造全国气象数据可视化分析大屏

本文详细介绍了如何使用Python+Flask+Echarts构建全国气象数据可视化分析大屏,实现实时监控、趋势分析和快速决策。通过Python强大的数据处理能力、Flask的轻量级优势和Echarts的交互体验,打造高效的气象数据可视化系统,提升农业、物流等行业的决策效率。

weixin_29061531的博客 1061

PVE 9.0 保姆级安装及优化教程(换源、网络配置、远程唤醒等)【基础篇】

最近,Proxmox VE 推出了基于 Debian 13 的 9.0 版本。正巧我手头有一台闲置的老电脑,与其闲置,不如装上 PVE,让它化身 All in One,继续发挥它的余热。G4560 算是一颗 NAS 神 U,十几元的售价就能有双核四线程,比起什么 J1900 不知道强到哪里去了,尽管定位上是奔腾处理器,但性能甚至能和同代的酷睿 i3-7100 掰掰手腕,并且它还自带 HD 610 的核显,对于解码的支持也还不错。

zc_mk的博客 7512

风控IV、AUC、KS python计算代码

df_temp:数据集,Y:是否逾期标签,feas_list:需要计算IV的 变量。2、 按月和不同Y 下的 IV计算。

暮雨听轩的专栏 1618

【Python 实战基础】如何绘制热力图来模拟绘制北京景区热度图

Python如何绘制热力图来模拟绘制北京景区热度图 文件读写 基础语法 字符串处理 文件生成 数据构建

菜鸟实战的博客 3403

c++ mysql_init 返回无效指针_C++操作MYSQL遇到的一些问题

首先 我使用的是 vcpkg上面是我装的一些库《大大安利vcpkg 安装时一定要使用powershell进行编译装上vcpkg后装ligmariadb这个库,这个对Mysql操作还是挺方便的,然后说一下 在装库时碰到的一些问题1.网络问题1.参考了一下 github上的答案 将下载失败的url拷下来 自己下 然后再重新开始安装《vcpkg在安装时每一个需要下载的 都会提供url-仔细找,2.这个问...

weixin_32176627的博客 681

14、多标签分类与卷积神经网络在医学图像处理中的应用

本文探讨了多标签分类与卷积神经网络(CNN)在医学图像处理中的应用。文章详细介绍了多标签分类的概念和挑战,以及如何通过CNN进行高效、准确的分类任务。内容涵盖模型设计、损失函数选择、数据增强技术、类别权重调整等关键技术点,并结合实际案例,如白内障手术工具检测、视网膜血管分割等,展示了CNN在医学图像分析中的强大潜力。此外,还讨论了模型优化策略及面临的挑战与解决方案。

t8u9v0的博客 193

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Helm安装钩子资源chart包报错
下一篇: 拉取私有仓库镜像配置
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值