--- title: Helm ChartをイメージごとRelocationするメモ tags: ["Kubernetes", "Helm", "Bitnami"] categories: ["Dev", "CaaS", "Kubernetes", "Helm"] date: 2024-12-11T02:30:43Z updated: 2024-12-11T02:31:26Z --- Helm ChartをイメージごとRelocationするメモです。 Helmプラグインである"[Distribution Tooling for Helm](https://github.com/vmware-labs/distribution-tooling-for-helm)"を使います。 次のHelmバージョンで試しました。 ``` $ helm version version.BuildInfo{Version:"v3.16.3", GitCommit:"cfd07493f46efc9debd9cc1b02a0961186df7fdf", GitTreeState:"dirty", GoVersion:"go1.23.3"} ``` "Distribution Tooling for Helm"をインストールします。 ``` helm plugin install https://github.com/vmware-labs/distribution-tooling-for-helm ``` 次のバージョンで試しました。 ``` $ helm dt version Distribution Tooling for Helm v0.4.3 Built on: 2024-09-17T09:13:12Z ``` `helm dt wrap`コマンドで既存のHelm Chartをイメージ含めてtar.gzに梱包できます。 コマンド引数は次のとおりです。 ``` helm dt wrap CHART_PATH|OCI_URI [flags] ``` 例として https://github.com/bitnami/charts/tree/contour/19.3.2/bitnami/contour をGHCRにrelocateしたいと思います。 > [!NOTE] イメージのrelocateまで行うには`Chart.yaml`の`annoations`に https://github.com/vmware-labs/distribution-tooling-for-helm?tab=readme-ov-file#creating-an-images-lock のように`image`の定義を列挙する必要があります。BitnamiのHelm Chartにはこのannotationsが設定されています。 バージョン19.3.2を指定してtar.gzに圧縮します。 ``` helm dt wrap oci://registry-1.docker.io/bitnamicharts/contour --version 19.3.2 ``` 次のようなログが出力されます。 ``` » Wrapping Helm chart "oci://registry-1.docker.io/bitnamicharts/contour" ✔ Helm chart downloaded to "/var/folders/6m/jnyp8461431g15qf217pmth40000gn/T/chart-2060331826/chart-4156122159/contour" ✔ Images.lock file written to "/var/folders/6m/jnyp8461431g15qf217pmth40000gn/T/chart-2060331826/wrap/chart/Images.lock" » Pulling images into "/var/folders/6m/jnyp8461431g15qf217pmth40000gn/T/chart-2060331826/wrap/images" ✔ All images pulled successfully ✔ Compressed into "/tmp/contour-19.3.2.wrap.tgz" 🎉 Helm chart wrapped into "/tmp/contour-19.3.2.wrap.tgz" ``` イメージが含まれているためファイルサイズが大きいです。 ``` $ ls -lh contour-19.3.2.wrap.tgz -rw-r--r-- 1 toshiaki wheel 377M 12 11 10:08 contour-19.3.2.wrap.tgz ``` 梱包されたChartの中身を`helm dt info`のコマンドで確認できます。 ``` $ helm dt info contour-19.3.2.wrap.tgz » Wrap Information Chart: contour Version: 19.3.2 App Version: 1.30.1 » Metadata - generatedBy: Distribution Tooling for Helm - generatedAt: 2024-12-11T01:08:06.006607Z » Images docker.io/bitnami/contour:1.30.1-debian-12-r3 (linux/amd64, linux/arm64) docker.io/bitnami/envoy:1.31.3-debian-12-r1 (linux/amd64, linux/arm64) docker.io/bitnami/nginx:1.27.3-debian-12-r0 (linux/amd64, linux/arm64) ``` Air-gapped環境にrelocateしたい場合は、このtar.gzファイルをUSBメモリか何かでコピーして運べば良いです。 これをGHCRにrelocateします。まずはGHCRにログインします。 ``` docker login ghcr.io ``` `helm dt unwrap`コマンドでrelocateします。 ``` helm dt unwrap contour-19.3.2.wrap.tgz ghcr.io/making/bitnamicharts --yes ``` 次のようなログが出力されます。 ``` » Unwrapping Helm chart "contour-19.3.2.wrap.tgz" ✔ Helm chart uncompressed to "/var/folders/6m/jnyp8461431g15qf217pmth40000gn/T/chart-302831319/dt-wrap1453374076" ✔ Helm chart relocated successfully » The wrap includes the following 3 images: ghcr.io/making/bitnamicharts/bitnami/contour:1.30.1-debian-12-r3 ghcr.io/making/bitnamicharts/bitnami/envoy:1.31.3-debian-12-r1 ghcr.io/making/bitnamicharts/bitnami/nginx:1.27.3-debian-12-r0 » Pushing Images ✔ All images pushed successfully ✔ Chart "/var/folders/6m/jnyp8461431g15qf217pmth40000gn/T/chart-302831319/dt-wrap1453374076/chart" lock is valid ✔ Helm chart successfully pushed 🎉 Helm chart unwrapped successfully: You can use it now by running "helm install oci://ghcr.io/making/bitnamicharts/contour --generate-name" ``` relocateされたChartを使ってYAMLを生成すると、`image`がGHCRに変わっていることがわかります。 ``` $ helm template contour oci://ghcr.io/making/bitnamicharts/contour --version 19.3.2 2>/dev/null | grep 'image: ' image: ghcr.io/making/bitnamicharts/bitnami/contour:1.30.1-debian-12-r3 image: ghcr.io/making/bitnamicharts/bitnami/envoy:1.31.3-debian-12-r1 image: ghcr.io/making/bitnamicharts/bitnami/contour:1.30.1-debian-12-r3 image: ghcr.io/making/bitnamicharts/bitnami/contour:1.30.1-debian-12-r3 image: ghcr.io/making/bitnamicharts/bitnami/contour:1.30.1-debian-12-r3 ``` 今回relocateしたイメージを可視性をpublicに変更したので以下から確認できます。 https://github.com/making?tab=packages&tab=packages&q=bitnamicharts