1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubのプライベートリポジトリをHelm Chartリポジトリにする方法

Posted at

今回は、GitHubのプライベートリポジトリを使って、自分だけの(あるいはチームだけの)Helm Chartリポジトリを作る方法をご紹介します。

なぜGitHubをHelm Chartリポジトリにするの?

本番環境というより検証用に気軽にHelm Chartをホスティングしたいから:

  • プライベートなKubernetesマニフェストを安全に管理できる
  • チーム内でHelm Chartを共有しやすい
  • 追加のインフラ管理が不要

必要なもの

  • GitHubのプライベートリポジトリ
  • GitHubのPersonal Access Token
    • Classic Tokenの場合:repoスコープが必要
    • Fine-grained Tokenの場合:「Contents」の読み取り権限があれば OK
  • 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リポジトリの完成です!チーム内でチャートを気軽に共有したり、バージョン管理したりする際に便利に使えると思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?