Helmチャートをインストールすると、sh.helm.release.v1.<リリース名>.v1
というシークレットリソースが作成されるけど、これ何だっけ?と思って調べてみた。
結論から言うと、Helmでインストールしたリリース情報がgzip形式で格納されている。これを手動で消したりするとHelmによる制御・管理ができなくなり、リリースの削除等のhelm
を使った管理ができなくなる。なので手動で消したりするのは厳禁。
また、アップグレードすると、シークレットは増えていく。
チャートのインストール
$ helm upgrade --install fluentbit fluent/fluent-bit -n logging --create-namespace --version 0.43.0 -f values.yam l Release "fluentbit" does not exist. Installing it now. NAME: fluentbit LAST DEPLOYED: Thu Feb 29 15:45:51 2024 NAMESPACE: logging STATUS: deployed REVISION: 1 [...] $ kubectl get secret -n logging NAME TYPE DATA AGE sh.helm.release.v1.fluentbit.v1 helm.sh/release.v1 1 9s
この通り、チャートをインストールするとシークレットが生成される。
シークレットを削除すると…
$ kubectl delete secret -n logging sh.helm.release.v1.fluentbit.v1 secret "sh.helm.release.v1.fluentbit.v1" deleted
以下の通りリリースが削除できなくなる。
$ helm uninstall -n logging fluentbit Error: uninstall: Release not loaded: fluentbit: release: not found
ので、シークレットを削除するのはやめましょう。
リリースをアップグレードすると
デプロイ済みのアプリがある状態で、次のバージョン2をデプロイ
$ helm upgrade --install fluentbit fluent/fluent-bit -n logging --create-namespace --version 0.43.0 -f values.yam l Release "fluentbit" has been upgraded. Happy Helming! NAME: fluentbit LAST DEPLOYED: Thu Feb 29 15:46:13 2024 NAMESPACE: logging STATUS: deployed REVISION: 2 NOTES: Get Fluent Bit build information by running these commands: export POD_NAME=$(kubectl get pods --namespace logging -l "app.kubernetes.io/name=fluent-bit,app.kubernetes.io/instance=fluentbit" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace logging port-forward $POD_NAME 2020:2020 curl http://127.0.0.1:2020
すると、v2のシークレットが作成される。
$ kubectl get secret -n logging NAME TYPE DATA AGE sh.helm.release.v1.fluentbit.v1 helm.sh/release.v1 1 26s sh.helm.release.v1.fluentbit.v2 helm.sh/release.v1 1 3s
ここでv2のシークレットを削除すると、Helmとしては「Revision 2はなく、Revision 1の状態」と認識してしまうため、その状態からhelm upgrade
を実行するとRevision 2としてデプロイされる。
$ helm upgrade --install fluentbit fluent/fluent-bit -n logging --create-namespace --version 0.43.0 -f values.yam l Release "fluentbit" has been upgraded. Happy Helming! NAME: fluentbit LAST DEPLOYED: Thu Feb 29 15:50:08 2024 NAMESPACE: logging STATUS: deployed REVISION: 2 [...]
で、このシークレットの中身って何なの?
$ kubectl describe -n logging secrets sh.helm.release.v1.fluentbit.v1 Name: sh.helm.release.v1.fluentbit.v1 Namespace: logging Labels: modifiedAt=1709189817 name=fluentbit owner=helm status=deployed version=1 Annotations: <none> Type: helm.sh/release.v1 Data ==== release: 28832 bytes
サイズはそこそこある。
何のデータか確認するためBase64デコードした内容をみると、何かがBase64エンコードされた文字列に見えるので、さらにBase64デコードしてみるとバイナリデータだった。
ファイルへ出力すると中身はgzip圧縮されたデータだった。
$ kubectl get -n logging secrets sh.helm.release.v1.fluentbit.v1 -o jsonpath='{.data.release}' | base64 -d | base64 -d > zzz $ file zzz zzz: gzip compressed data, max compression, original size modulo 2^32 108244
$ mv zzz zzz.gz $ gunzip zzz.gz $ file zzz zzz: JSON text data
中身を確認するとチャートとリリースの情報一式が入ってるようだった。
ドキュメント
自力で中身調べてたけど、ドキュメントに載ってましたね。。