Helm模板始终返回相同值:terminationGracePeriodSeconds配置异常排查
问题分析与修复方案
核心错误1:模板逻辑不符合需求,默认delay值导致条件恒成立
你的Helm模板中,$delay默认值设为30,而if条件用的是or .Values.lifecycleHooks.enabled (gt (int $delay) 0)——因为30>0永远为真,所以不管lifecycleHooks.enabled设置成什么,都会触发延迟叠加逻辑,结果自然一直是120+30=150。
同时你的需求是**“启用lifecycleHooks且存在shutdownDelay时才加delay”**,但模板用了or(或)逻辑,完全不符合需求,应该改成and(与)逻辑,还要把默认delay值调整为0,避免默认值干扰条件判断。
核心错误2:values.yaml中service配置缩进错误
你的values.yaml里,terminationGracePeriodSeconds: 120和service:处于同一层级,导致.Values.service.terminationGracePeriodSeconds无法读取到该值,模板会使用默认的120。正确的缩进应该把该配置放在service:的子层级。
修复后的代码与配置
修复后的Helm模板
{{- /* shutdownDelay不存在时默认设为0,避免干扰条件判断 */}} {{- $delay := hasKey .Values "shutdownDelay" | ternary .Values.shutdownDelay 0 }} {{- $graceperiod := hasKey .Values.service "terminationGracePeriodSeconds" | ternary .Values.service.terminationGracePeriodSeconds 120 }} {{- /* 匹配需求:启用lifecycleHooks 且 shutdownDelay>0 时才叠加延迟 */}} {{- if and .Values.lifecycleHooks.enabled (gt (int $delay) 0) }} terminationGracePeriodSeconds: {{ add $graceperiod $delay }} {{- else }} terminationGracePeriodSeconds: {{ int $graceperiod }} {{- end }}
修复后的values.yaml
# 需要启用时取消注释 # shutdownDelay: 40 lifecycleHooks: enabled: true service: terminationGracePeriodSeconds: 120 # 注意缩进,属于service的子配置项
验证场景
- 当
lifecycleHooks.enabled: true且shutdownDelay: 40时,结果为120+40=160 - 当
lifecycleHooks.enabled: true但shutdownDelay被注释(不存在)时,结果为120 - 当
lifecycleHooks.enabled: false,无论shutdownDelay是否存在,结果都为120
内容的提问来源于stack exchange,提问作者cloudbud
相关产品推荐
相关产品推荐

