@int128

int128.hatenablog.com

Helm ChartsをGitHub Pagesで公開する

KubernetesではHelmというパッケージマネージャが広く使われています。HelmではChartという単位でパッケージを管理します。有名なソフトウェアであればOfficial Chartsが公開されていますが、場合によっては自分で書いたChartを公開したいこともあるでしょう。本稿ではGitHub PagesにHelm Chartsを公開する方法を説明します。

TL;DR

  • helm create でひな型を作る。
  • helm lint で文法チェックを行う。
  • CircleCIでHelm ChartsをビルドしてGitHub Pagesに公開する。

WebサーバがあればChartを公開できます。サーバを構築してデーモンを実行するといった難しい作業は必要ありません。GitHub Pagesなら無料です。

順を追って説明します。

1. GitHub Pages用のリポジトリを作る

まず、GitHubで新しいリポジトリを作ります。ここでは https://github.com/YOUR_NAME/helm-charts というURLのリポジトリとします。

gh-pages ブランチが公開されるように設定しておきます。

https://raw.githubusercontent.com/int128/helm-github-pages/master/github-pages-settings.png

2. Helm Chartを作る

サンプルのChartを作ってみましょう。

mkdir example
cd example
git init
mkdir charts
cd charts
helm create example

helm create コマンドを実行すると、Helm Chartのひな型が生成されます。以下のファイルが並んでいるはずです。

/charts
/charts/example
/charts/example/.helmignore
/charts/example/Chart.yaml
/charts/example/templates
/charts/example/templates/NOTES.txt
/charts/example/templates/_helpers.tpl
/charts/example/templates/deployment.yaml
/charts/example/templates/ingress.yaml
/charts/example/templates/service.yaml
/charts/example/values.yaml

values.yaml ファイルを開いてみましょう。以下のようにnginxを実行するサンプルが入っているはずです。

# Default values for example.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
replicaCount: 1
image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent
#(以下略)

helm lint コマンドを実行してみましょう。文法チェックが行われます。アイコンを設定した方がいいよと言われますが、とりあえず次に進みます。

% helm lint
==> Linting .
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, no failures

Chartができたら、GitHubリポジトリをpushします。

git remote add origin https://github.com/YOUR_NAME/example
git push origin master

3. CircleCIでビルドして公開する

以下の内容で .circleci/config.yml を作ります。

version: 2
jobs:
  build:
    docker:
      - image: alpine
    steps:
      - checkout
      - run:
          name: helm-github-pages
          command: wget -O - https://raw.githubusercontent.com/int128/helm-github-pages/master/publish.sh | sh
          environment:
            - GITHUB_PAGES_REPO: YOUR_NAME/helm-charts

CircleCIを開き、リポジトリを追加します。CircleCIからGitHub PagesにpushできるようにSSH鍵を設定します。

  1. CircleCIのリポジトリ設定を開く。
  2. Checkout SSH keys in the Permissionsセクションを開く。
  3. Create and add user keyボタンをクリックする。

設定が終わったらビルドを実行してみましょう。GitHub Pages用のリポジトリにコミットが増えていればOKです。気になる人はリポジトリの内容を見てみてください。以下のようにTAR.GZファイルと index.yaml ファイルが並んでいるはずです。

/example/example-0.1.0.tgz
/index.yaml

4. Helm Chartsを取得する

GitHub Pagesに公開したHelm Chartsを実際に取得できるか確認します。

helm repo add YOUR_NAME https://YOUR_NAME.github.io/helm-charts
helm repo list
helm repo update

以下のように表示されれば成功です。

% helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "YOUR_NAME" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "incubator" chart repository
Update Complete. ⎈ Happy Helming!⎈ 

先ほど公開したサンプルのHelm Chartを確認してみましょう。

helm inspect YOUR_NAME/example

ValuesのYAMLが表示されれば成功です。

まとめ

  • helm create でひな型を作る。
  • helm lint で文法チェックを行う。
  • CircleCIでHelm ChartsをビルドしてGitHub Pagesに公開する。

詳しい使い方は下記を参照してください。

github.com


入門 Kubernetes

入門 Kubernetes

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤