Githubを使って簡単に
Helm Repoを公開してみよう
Kubernetes Meetup Tokyo #7
Shingo Omura (@everpeace)
自己紹介
✓ Kubernetes歴 実運用 約1年
✓ ChatWorkの新メッセージングシステムを支える技術
Kubernetes & Concourse CIを使ったDevOps改善
@ AWS Summit Tokyo 2017
✓ kube-aws#645: NVIDIA driver installation support
on GPU instances
everpeace
everpeace
Helm: The package manager for Kubernetes
✓ https://helm.sh/
✓ CNCFによって運営されている(Microsoft, Google, Bitnamiのメンバーが主)
✓ Chartと呼ばれるパッケージにKubernetesの要素をまとめることが出来て
パッケージとして扱える(Service, Deployment, ConfigMap, Secretes, etc.)
✓ Helm Chart は Helm Repoで公開されている
○ 公式レポジトリ ➔ stable / Incubator
✓ 参考: Kubernetes: パッケージマネージャHelm
✓ 今日はhelmの全体のアーキテクチャ, Chartの作り方、使い方の話は割愛します
Helm は複数 Repo に対応しています
Helm Repositoryはどうやって公開する?
● ドキュメント
○ kubernetes/helm/blob/master/docs/chart_repository.md
● 下記を含んだ HTTP/HTTPS エンドポイントならOK
○ index.yaml という名前のインデックスファイル
■ helm repo indexコマンドで生成できる
○ Index.yaml に含まれるパッケージ本体 (.tgz, .tgz.prov)たち
■ 実際には別のurlでホストすることも可能
Helm Repositoryの構造
kubernetes/helm/blob/master/docs/chart_repository.md
⬅ ‘helm package ...’ で生成
⬅ ‘helm package --sign ...’ で生成 (ref: Helm Provenance and Integrity )
⬅ ‘helm repo index ...’ で生成
index.yamlの構造
✓ Chart.yamlに記述された
Metadata
✓ 実際のパッケージのurl
○ helm repo index で指定
……
kubernetes/helm/blob/master/docs/chart_repository.md
helm repo index
コマンドの使い方
● Chartを特定dirにpackageしておいて
○ 手順はQiita参照
● ‘helm repo index DIR --url URL’
を実行
○ DIR = chart群のあるdirectory
○ URL = 公開したいRepo URL
Githubを使って簡単に
Helm Repoを公開してみよう
おさらい
● Helm Repoは単純な http/https エンドポイント
○ index.yaml, Chart群 をフラットに置くだけ
○ それらのファイルは全部 helm コマンドで生成できる
■ ‘helm package --destination DIR’ でchartのtgzを作って
■ ‘helm repo index DIR --url <external url>’ でindex.yamlを生成
つまりいろんな手段で公開できる
● Google Cloud Storage (GCS) bucket
● S3 bucket
● Github Pages
○ gh-pages ブランチを使う
○ master ブランチを使う
○ master ブランチの /docs フォルダを使う (⬅ 今回はこれ)
■ gh-pagesのようにブランチを切り替えなくて済む
■ master ブランチにdocsを作っておいてそこに commit & pushするだけなのでお手軽
master ブランチの /docs フォルダ
をGithub Pages として公開する設定
● RepositoryのSettingページ
で右のように設定するだけ
○ ここに表示されるurlを
‘helm repo index’コマンドで指定する
Github Repositoryの構造
● /docs ディレクトリを作っておく
● 残りはチャート開発用のディレクトリ
● build.sh みたいなのを作ると便利です
https://github.com/everpeace/helm-charts/
後は helm repo add, update で使えます!
How to Secure Helm Repo ?
● 絶賛 Open Issue (opened by mumoshu)
○ helm#1038: feat: Securing a chart repository (AuthN)
● 現状
○ client 証明書認証はサポートされている (version 2.2.0)
■ tiller側(helm init), client側 (helm repo add)
● 今後
○ S3, GCS, Swift みたいな Cloud Storage は Helm Plugin で対応予定だそうです
○ 最近 helm-s3 というpluginが出来たようです!
⎈ Happy Helming! ⎈
Thank you!

Githubを使って簡単に helm repoを公開してみよう

  • 1.
  • 2.
    自己紹介 ✓ Kubernetes歴 実運用約1年 ✓ ChatWorkの新メッセージングシステムを支える技術 Kubernetes & Concourse CIを使ったDevOps改善 @ AWS Summit Tokyo 2017 ✓ kube-aws#645: NVIDIA driver installation support on GPU instances everpeace everpeace
  • 3.
    Helm: The packagemanager for Kubernetes ✓ https://helm.sh/ ✓ CNCFによって運営されている(Microsoft, Google, Bitnamiのメンバーが主) ✓ Chartと呼ばれるパッケージにKubernetesの要素をまとめることが出来て パッケージとして扱える(Service, Deployment, ConfigMap, Secretes, etc.) ✓ Helm Chart は Helm Repoで公開されている ○ 公式レポジトリ ➔ stable / Incubator ✓ 参考: Kubernetes: パッケージマネージャHelm ✓ 今日はhelmの全体のアーキテクチャ, Chartの作り方、使い方の話は割愛します
  • 4.
    Helm は複数 Repoに対応しています
  • 5.
    Helm Repositoryはどうやって公開する? ● ドキュメント ○kubernetes/helm/blob/master/docs/chart_repository.md ● 下記を含んだ HTTP/HTTPS エンドポイントならOK ○ index.yaml という名前のインデックスファイル ■ helm repo indexコマンドで生成できる ○ Index.yaml に含まれるパッケージ本体 (.tgz, .tgz.prov)たち ■ 実際には別のurlでホストすることも可能
  • 6.
    Helm Repositoryの構造 kubernetes/helm/blob/master/docs/chart_repository.md ⬅ ‘helmpackage ...’ で生成 ⬅ ‘helm package --sign ...’ で生成 (ref: Helm Provenance and Integrity ) ⬅ ‘helm repo index ...’ で生成
  • 7.
    index.yamlの構造 ✓ Chart.yamlに記述された Metadata ✓ 実際のパッケージのurl ○helm repo index で指定 …… kubernetes/helm/blob/master/docs/chart_repository.md
  • 8.
    helm repo index コマンドの使い方 ●Chartを特定dirにpackageしておいて ○ 手順はQiita参照 ● ‘helm repo index DIR --url URL’ を実行 ○ DIR = chart群のあるdirectory ○ URL = 公開したいRepo URL
  • 9.
  • 10.
    おさらい ● Helm Repoは単純なhttp/https エンドポイント ○ index.yaml, Chart群 をフラットに置くだけ ○ それらのファイルは全部 helm コマンドで生成できる ■ ‘helm package --destination DIR’ でchartのtgzを作って ■ ‘helm repo index DIR --url <external url>’ でindex.yamlを生成
  • 11.
    つまりいろんな手段で公開できる ● Google CloudStorage (GCS) bucket ● S3 bucket ● Github Pages ○ gh-pages ブランチを使う ○ master ブランチを使う ○ master ブランチの /docs フォルダを使う (⬅ 今回はこれ) ■ gh-pagesのようにブランチを切り替えなくて済む ■ master ブランチにdocsを作っておいてそこに commit & pushするだけなのでお手軽
  • 12.
    master ブランチの /docsフォルダ をGithub Pages として公開する設定 ● RepositoryのSettingページ で右のように設定するだけ ○ ここに表示されるurlを ‘helm repo index’コマンドで指定する
  • 13.
    Github Repositoryの構造 ● /docsディレクトリを作っておく ● 残りはチャート開発用のディレクトリ ● build.sh みたいなのを作ると便利です https://github.com/everpeace/helm-charts/
  • 14.
    後は helm repoadd, update で使えます!
  • 15.
    How to SecureHelm Repo ? ● 絶賛 Open Issue (opened by mumoshu) ○ helm#1038: feat: Securing a chart repository (AuthN) ● 現状 ○ client 証明書認証はサポートされている (version 2.2.0) ■ tiller側(helm init), client側 (helm repo add) ● 今後 ○ S3, GCS, Swift みたいな Cloud Storage は Helm Plugin で対応予定だそうです ○ 最近 helm-s3 というpluginが出来たようです!
  • 16.
    ⎈ Happy Helming!⎈ Thank you!