とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

Helmで自動ロールアウト

Helmはデプロイの仕様自体に変更がない場合、古い状態のまま動き続けます。これではシークレットやConfigMapsのみ更新した場合、同じタグを指定している場合にポッドの更新ができなくて困りますよね。公式ドキュメントにもこのことが取り上げられていましたので紹介します。

helm.sh

やっていることはそんなに複雑ではなくて

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とかを指定して、毎回更新してあげればいいんですけどね。。。)