我正在编写一个 Helm Chart 来帮助我们为不同的项目提供命名空间。 该图表负责创建命名空间、服务帐户、限制、配额、卷和角色绑定。
到目前为止,除了一点之外,它运行得很好......
如果您运行
helm upgrade
,Helm 似乎不会更新角色绑定。
我们希望能够定期重新应用图表,以纠正与参考点的任何偏差。
实际上,
helm upgrade
所做的是创建正确的角色绑定(如果它不存在),但是如果角色绑定已经存在,但具有不同的用户/组主题,则它不会纠正它。
我可以通过指定
helm upgrade --force
来强制执行此操作。在这种情况下,角色绑定正在重新创建,但是,我无法使用此技术:在命名空间上使用 --force
选项时,会重新创建命名空间的用户 ID (sa.scc.uid-range),然后重新创建任何 NFS 安装的卷必须手动“chown”到新的 UID ...
我尝试在命名空间上使用注释“helm.sh/resource-policy=keep”,但这没有帮助。
我被这两个选项困住了:
一种解决方案是将图表分为两部分:一部分负责命名空间创建,另一部分负责内部的 k8s 对象,但我不太喜欢这样。
也许有人有更好的主意?
---
{{- range .Values.evsEnv }}
apiVersion: authorization.openshift.io/v1
kind: RoleBinding
metadata:
name: evs-rb-admin
namespace: {{ $.Values.evsName }}-{{ .name }}
roleRef:
name: admin
subjects:
{{- range $.Values.evsGroupAdmin }}
- kind: Group
name: {{ . | quote }}
{{- end }}
{{- range $.Values.evsUserAdmin }}
- kind: User
name: {{ . | quote }}
{{- end }}
- kind: User
name: {{ $.Values.evsRequester | quote }}
---
{- end }}
您是否尝试过添加注释,使您的
RoleBinding
清单在每次运行时都会发生变化helm install
?
metadata:
annotations:
rollme: {{ randAlphaNum 8 | quote }}
来源:https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
我可以实施的唯一解决方法是创建第二个图表并在两个图表之间拆分我的模板:
helm upgrade
helm upgrade --force
现在我已经修改了我的管道以像这样工作,这就是我想要的,但这不是最优雅的方式......