关于Helm模板中trimSuffix "-"在StatefulSet与Deployment中的使用疑问
Helm Charts模板函数疑问解答
先看原模板代码:
{{/* Expand the name of the chart. */}} {{- define "tpl.name" -}} {{- .Chart.Name | trunc 63 | trimSuffix "-" }} {{- end }}
这段代码的作用是把Chart名称截断到63字符(符合K8s名称长度限制),并移除末尾的单个连字符。针对你的两个疑问,解答如下:
问题1:Deployment加随机UUID后,trimSuffix "-"是否安全?
不安全。trimSuffix "-"只会删除最后一个连字符,如果截断后的名称本身末尾有多个连字符(比如截断后是queue-93h---),处理后会变成queue-93h--,依然违反K8s“名称不能以连字符结尾”的规范。
正确的做法应该用trimRight "-"替代trimSuffix "-",trimRight会删除字符串右侧所有的连字符,不管有多少个,这样就能确保处理后的名称末尾不会有任何连字符,完全符合K8s命名要求。
问题2:StatefulSet是否无需使用该函数?
不是。StatefulSet的名称虽然没有随机UUID后缀,但依然需要这个函数处理:
- 首先,Chart.Name本身可能超过63字符,截断是必须的,否则StatefulSet名称会超长报错;
- 其次,如果Chart.Name本身以连字符结尾(比如
my-service-),不处理的话StatefulSet名称就违反K8s规范; - 另外,StatefulSet的Pod名称是由StatefulSet名称加序号组成(比如
my-sts-0),基础名称合法才能保证Pod名称也符合规则。
所以不管是Deployment还是StatefulSet,都需要用这个函数来保证资源基础名称的合法性,只是要注意把trimSuffix "-"改成trimRight "-"来覆盖所有末尾连字符的情况。
内容的提问来源于stack exchange,提问作者Masuri
相关产品推荐
相关产品推荐

