使用脚本在AWS创建K8S集群时遇到timestamp格式错误
错误原因说明
核心诱因
- 错误的根因是脚本中时间解析格式与实际输入的时间格式不匹配:K8S API返回的
metadata.creationTimestamp字段为标准RFC3339格式,末尾自带UTC时区标识Z,即你报错信息里的2021-09-07T08:29:29Z,但脚本中strptime函数传入的格式串仅为%Y-%m-%dT%H:%M:%S,没有匹配末尾的Z字符,解析时自然会抛出格式不匹配的错误。 - 这行代码原本的设计逻辑是读取K8S资源的创建时间字段,解析为时间对象后再格式化为末尾带
Z的标准UTC时间格式,但编写人员忽略了输入值本身就已经携带Z后缀的情况,属于脚本本身的逻辑漏洞。
与本地配置的关系
该错误和你本地的timestamp格式配置完全无关,只要运行环境从K8S API拿到的creationTimestamp字段自带Z后缀,触发该报错是必然结果,属于通用的脚本编写错误。
修复方案
只需要调整strptime的格式串,加上对末尾Z的匹配即可,修改后的代码参考:
yq '.metadata.creationTimestamp |= (. | strptime("%Y-%m-%dT%H:%M:%SZ") | strftime("%Y-%m-%dT%H:%M:%SZ"))' | \
如果使用的是较高版本的yq,也可以直接调用内置的RFC3339时间解析函数,无需手动编写格式串,兼容性会更好。
内容的提问来源于stack exchange,提问作者DeirdreRodgers
相关产品推荐
相关产品推荐

