helmとは
Kubernetes Helm(以降Helm)とはKubernetesのパッケージマネージャーです。HelmはKubernetesのSIG-Appsで開発がされています。パッケージはChart(s)と呼ばれ、公式でレポジトリkubernetes/chartsが用意されています。Kubernetesクラスタに側にはtillerと呼ばれるデプロイ用のコンポーネントを配置して使用します。
用語
用語 | 意味 | 役割 |
---|---|---|
helm | 船のかじ | yum, aptに相当するパッケージマネージャー。Linux, OSXのバイナリが用意されている |
chart | 海図 | deb, rpmに相当するパッケージ。Kubernetesのマニフェストのテンプレートをまとめたもの |
tiller | 舵柄 | デプロイを担うサーバーコンポーネント |
Package | パッケージ | Jenkins, Sparkなどのhelmを使ってk8s上にインストールアプリケーション |
Release | リリース | k8s上にインストールされたパッケージ |
Repository | リポジトリ | チャートが保存される場所 |
構成と通信方法
主な構成要素はhelm, Repository, tillerの3つです。
helmはChartの、tillerはReleaseの管理を行っていて、ざっくり機能を挙げるとこんな感じ。
Helm
- ローカルの
chart
開発 - レポジトリの管理
-
Tiller
サーバとの通信- インストールする
chart
の送信 -
Release
情報の取得 -
Release
に対するアップグレードやアンインストールの要求
- インストールする
Tiller
- Helmクライアントからのリクエスト受付
-
chart
とconfiguration
を組み合わせたrelease
のビルド -
chart
をk8sへインストールし、release
をトラックする - k8sへ
chart
のアップグレードとアンインストールをする
コマンド
helm init
Kubernetesクラスタ上にtillerをデプロイする。
つまり以下のようになる。
$ kc get po,deploy,svc -n kube-system -l name=tiller
NAME READY STATUS RESTARTS AGE
po/tiller-deploy-7777bff5d-smpx5 1/1 Running 2 2d
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/tiller-deploy 1 1 1 1 2d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/tiller-deploy ClusterIP 10.103.130.98 <none> 44134/TCP 2d
また$HOME/.helm ディレクトリ以下に設定ファイルが設置される
helm repo list
レポジトリの一覧表示
helm repo update
レポジトリのアップデート
helm serve
serveを実行すると$HELM_HOME/repository/local内のchartsが呼び出せるようになります。
$ helm serve
Regenerating index. This may take a moment.
Now serving you on 127.0.0.1:8879
別タブで
curl http://127.0.0.1:8879/charts
helm search
インストール可能なchart一覧が表示される
helm search xxx
例
$ helm search redis
NAME VERSION DESCRIPTION
stable/redis 1.1.7 Open source, advanced key-value store. It is of...
stable/redis-ha 2.0.0 Highly available Redis cluster with multiple se...
stable/sensu 0.2.0 Sensu monitoring framework backed by the Redis ...
helm install xxx
例
helm install stable/redis
helm install helloworld
helm install helloworld-0.1.0.tgz
またhelm install .
でローカルのchartをインストールできる
--name hogehoge
とすると、release-name(helm lsの左側のNAME)が指定できる。
helm upgrade #release-name #chart-path
helm upgrade oily-terrier helloworld # helloworldはchartディレクトリ
helm delete #release-name
インストール済みリリースを削除
ただ、deleteしても削除済みデータとして残っている。
なのでhelm install hoge --name hogehogeと同じnameでインストールするとすでに存在しているエラーになる。
helm delete --purge hogehoge とするとデータが削除され同じ名前でインストールできる。
--purge
しなくても helm install helloworld --name hogehoge --replace
のように--replace
をつければインストールできる。
なんで削除済みリリースが残っているかというと、削除済みリリースをrollbackして再度有効にできるから。
helm create #chart-name
でscaffoldが作成できる
helloworld/
Chart.yaml # chartの情報を記載するyaml
values.yaml # chartのデフォルト設定
charts/ # chartの依存を含めるディレクトリ
templates/ # マニフェストファイルのテンプレートを配置するディレクトリ
helm package #chart-name
でchartをtgzにパッケージできる。
helm list
インストール済みリリース一覧を表示
helm list
NAME REVISION UPDATED STATUS CHART NAMESPACE
rude-pike 1 Sun Jan 21 17:15:49 2018 DEPLOYED helloworld-0.1.0 default
helm list --all
で削除済みリリースも表示
helm list --deleted
で削除済みリリースのみ表示
heml ls
でもok
helm status #release-name
ステータス表示。
削除済みリリースだったらStatus: DELETED
と表示される。
helm inspect values #chart-name
helm inspect values helloworld
helm inspect values stable/mariadb
で設定値が見れる
helm history #release-name
Releaseのリビジョン遷移はhistoryコマンドで確認することができます。
$ helm history angry-bird
REVISION UPDATED STATUS CHART
1 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine-0.1.0
2 Mon Oct 3 10:15:13 2016 SUPERSEDED alpine-0.1.0
3 Mon Oct 3 10:15:13 2016 DEPLOYED alpine-0.1.0
helm rollback #release-name #revision
指定するrevisionは helm history #chart-hame でみれる
例:
helm rollback happy-panda 1
helm init --upgrade
helm reset
ただkubernetesのConfigMapsに保存されているデータは消えないっぽい。
helm initで再インストールできる。
helm home
macでは
$HOME/.helm
が表示された。ここに設定やpluginが入っているっぽい。