Dev > CaaS > Kubernetes > Helm
Dec 11, 2024
Dec 11, 2024
N/A Views
MD

Helm ChartをイメージごとRelocationするメモです。

Helmプラグインである"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.yamlannoationshttps://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

Found a mistake? Update the entry.
Share this article: