helm
kubernetes

helmとは & helmの使い方

helmとは

https://github.com/kubernetes/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クライアントからのリクエスト受付
  • chartconfigurationを組み合わせた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 upgrate #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

https://docs.helm.sh/using_helm/#upgrading-tiller

helm reset

ただkubernetesのConfigMapsに保存されているデータは消えないっぽい。
helm initで再インストールできる。

helm home

macでは
$HOME/.helm
が表示された。ここに設定やpluginが入っているっぽい。