Helmをご存知だろうか?簡単に言うと、Kubernetesのパッケージマネージャと位置付けられているもの。最近はかなり開発が活発化していて、Kubernetes運用のためのエコシステムとしてメインストリームに出てきている(と言っても良いと思う)。
ロゴを見ればわかるとが、Helm
は日本語に訳すと舵
のこと。KubernetesではService、Deployment、ConfigMap等のKubernetesの様々なリソースを組み合わせることで初めてアプリケーションとして動作できるようにしているわけだが、HelmはKubernetesのリソース群をChartsという単位でパッケージングしてしまおうというもの。
プライベートリポジトリを立てたい
自分のプロジェクトでもKubernetesをHelm管理していこうと思っているので、さっそくプライベートリポジトリを立ててみた。
Helmはプラグインで拡張できる構造となっている。AWSを使っているので、今回はリポジトリをAmazon S3上に構築できるhelm-s3を利用する。
その前に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やっていき💪