とことんDevOps | 日本仮想化技術が提供するDevOps技術情報メディア

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

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

開催予定の勉強会

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