今回は、GitHubのプライベートリポジトリを使って、自分だけの(あるいはチームだけの)Helm Chartリポジトリを作る方法をご紹介します。
なぜGitHubをHelm Chartリポジトリにするの?
本番環境というより検証用に気軽にHelm Chartをホスティングしたいから:
- プライベートなKubernetesマニフェストを安全に管理できる
- チーム内でHelm Chartを共有しやすい
- 追加のインフラ管理が不要
必要なもの
- GitHubのプライベートリポジトリ
- GitHubのPersonal Access Token
- Classic Tokenの場合:
repo
スコープが必要 - Fine-grained Tokenの場合:「Contents」の読み取り権限があれば OK
- Classic Tokenの場合:
- Helm CLIがインストールされている環境
-
git
コマンド
サンプルチャートの説明
この記事では例としてhello-world
という最小構成のチャートを使用します。チャートの内容は以下の通りです:
# Chart.yaml
apiVersion: v2
name: hello-world
description: A simple Helm chart that creates hello-world namespace
type: application
version: 0.1.0
appVersion: "1.0.0"
# templates/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hello-world
このチャートは非常にシンプルで:
-
hello-world
という名前の名前空間を作成するだけ - 設定可能な値(values)は持っていない
- Kubernetesクラスタ上で実行すると、新しい名前空間が作られる
実際の業務では、より複雑なチャートを扱うことになるでしょうが、ここではプライベートリポジトリの作り方に焦点を当てるため、最小限の構成にしています。
やり方
1. チャートを作ってパッケージング
まずは、上記のhello-world
チャートをパッケージングします:
cd private-repo
helm package hello-world/
これでhello-world-0.1.0.tgz
というアーカイブファイルが作成されます。このファイルには、先ほどのChart.yamlとtemplates/namespace.yamlが含まれています。
2. インデックスファイルを作る
Helmに「どんなチャートがあるよ」って教えてあげるファイルを作ります:
helm repo index .
これによりindex.yaml
が作成され、以下のような内容が含まれます:
apiVersion: v1
entries:
hello-world:
- apiVersion: v2
appVersion: 1.0.0
created: "2024-11-21T10:00:00.000000000Z"
description: A simple Helm chart that creates hello-world namespace
digest: 1234567890abcdef... # 実際のハッシュ値
name: hello-world
type: application
urls:
- hello-world-0.1.0.tgz
version: 0.1.0
3. GitHubにプッシュ
できたファイルたちをGitHubに送り込みます:
git init
git add .
git commit -s -m "Initial commit"
git branch -M main
git remote add origin git@github.com:あなたのユーザー名/リポジトリ名.git
git push -u origin main
4. Helmの設定
ローカルのHelmに「このリポジトリ使っていいよ」って教えてあげます:
helm repo add --username あなたのGitHubユーザー名 --password GitHubトークン private-repo 'https://raw.githubusercontent.com/あなたのユーザー名/リポジトリ名/main'
リポジトリ情報を更新:
helm repo update
5. 確認してみる
ちゃんとチャートが見えるか確認:
helm search repo private-repo/hello-world
こんな感じで出てくるはずです:
NAME CHART VERSION APP VERSION DESCRIPTION
private-repo/hello-world 0.1.0 1.0.0 A simple Helm chart that creates hello-world namespace
実際に使ってみる
チャートをインストールする前に、dry-runで確認するのがおすすめです:
helm install test-hello private-repo/hello-world --dry-run
出力:
# Source: hello-world/templates/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: hello-world
問題なさそうなら、実際にインストール:
helm install hello-world private-repo/hello-world
インストールが成功すると:
NAME: hello-world
LAST DEPLOYED: Thu Nov 21 14:45:40 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
確認:
kubectl get namespace hello-world
ファイル構成
最終的なリポジトリの構成はこんな感じになります:
.
├── README.md
├── index.yaml # Helmリポジトリのインデックス
├── hello-world-0.1.0.tgz # パッケージングされたチャート
└── hello-world/ # チャートのソース
├── Chart.yaml # チャートのメタデータ
└── templates/ # Kubernetesマニフェストのテンプレート
└── namespace.yaml # 名前空間を作成するマニフェスト
これで、あなただけのプライベートなHelm Chartリポジトリの完成です!チーム内でチャートを気軽に共有したり、バージョン管理したりする際に便利に使えると思います。