Helmはデプロイの仕様自体に変更がない場合、古い状態のまま動き続けます。これではシークレットやConfigMapsのみ更新した場合、同じタグを指定している場合にポッドの更新ができなくて困りますよね。公式ドキュメントにもこのことが取り上げられていましたので紹介します。
やっていることはそんなに複雑ではなくて
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
このようにconfigmap.yamlのハッシュ値をannotationsにセットしておけば、対象のファイルが更新された時にマニフェストも変更され自動でロールされるというものです。
シークレットだと以下のようにします。
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/secret: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
また、デプロイするたびに再起動したい場合は以下です。
kind: Deployment
spec:
template:
metadata:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
こうしておけば同じタグを指定していても、デプロイの度にランダムな文字列でデプロイの仕様を変化させられるので、ポッドの更新ができます。
(タグにコミットIDとかを指定して、毎回更新してあげればいいんですけどね。。。)
