HelmのプライベートリポジトリをAmazon S3で構築する

Helmをご存知だろうか?簡単に言うと、Kubernetesのパッケージマネージャと位置付けられているもの。最近はかなり開発が活発化していて、Kubernetes運用のためのエコシステムとしてメインストリームに出てきている(と言っても良いと思う)。

ロゴを見ればわかるとが、Helmは日本語に訳すとのこと。KubernetesではService、Deployment、ConfigMap等のKubernetesの様々なリソースを組み合わせることで初めてアプリケーションとして動作できるようにしているわけだが、HelmはKubernetesのリソース群をChartsという単位でパッケージングしてしまおうというもの。

プライベートリポジトリを立てたい

自分のプロジェクトでもKubernetesをHelm管理していこうと思っているので、さっそくプライベートリポジトリを立ててみた。

Helmはプラグインで拡張できる構造となっている。AWSを使っているので、今回はリポジトリをAmazon S3上に構築できるhelm-s3を利用する。

その前にhelmを導入する必要があるので、以下を見て進めてほしい。

Installing Helm

特に設定なしでHelmをインストールすると、$HOME/.helm以下にインストールされる。ウチの場合はkubernetesオペレーション用のインスタンスを一つ立てて、そこでKubernetes関連のオペレーションをできるようにしているので、インストール先を変えて一箇所に集約している。プラグインも同じ配下にインストールされるので同様。これは以下のように適宜環境変数を設定して変えてやればいい。

  • HELM_HOME: Helmのルートディレクトリ(/opt/helm
  • HELM_PLUGIN_DIR: Helmのルートディレクトリ(/opt/helm/plugins

この状態でhelm initすればhelmが構築される。また、対象のKubernetesクラスタのkube-systemにはtillerがデプロイされる。tillerはKubernetesクラスタにChartsをインストールしたりするHelmのコア機能を司るデーモンのようなものでHelmにとっては必要不可欠なもの。

Helmがインストールされた状態で、helm-s3をインストール。

$ helm plugin install https://github.com/hypnoglow/helm-s3.git

S3のバケットは予め作っておく。基本的に空っぽのバケットでOKで、helm-s3がHelmリポジトリのディレクトリ構成で構築してくれる。helm-s3をIAMロールベースのS3制御にまだ対応してないようなので、環境変数かaws configureでAWSのアクセスキーやシークレットを設定しておく(暇見つけてPR投げておきたい)。

$ helm s3 init s3://helm-example-repository/charts

次にリポジトリの設定。helm repos add {リポジトリ名} {s3のcharts置き場のパス}形式で実行。

$ helm repo add testrepo s3://helm-example-repository/charts

こうすると、S3上のHelmリポジトリを利用する準備ができる。$HELM_HOME/repository/repositories.yamlに設定が追加されてるので確認しておく。

apiVersion: v1
generated: 2017-10-12T05:54:55.552234217Z
repositories:
- caFile: ""
  cache: /opt/helm/repository/cache/stable-index.yaml
  certFile: ""
  keyFile: ""
  name: stable
  url: https://kubernetes-charts.storage.googleapis.com
- caFile: ""
  cache: /opt/helm/repository/cache/local-index.yaml
  certFile: ""
  keyFile: ""
  name: local
  url: http://127.0.0.1:8879/charts
- caFile: ""
  cache: /opt/helm/repository/cache/testrepo-index.yaml
  certFile: ""
  keyFile: ""
  name: testrepo
  url: s3://helm-example-repository/charts

まとめ

プライベートHelpリポジトリもできたので色々揃ってきたのでHelmやっていき💪