Helm v3.0.0-alphaの試し方

# 概要

HelmはKubernetesのパッケージマネージャーです。
Helmは2019年5月現在でv2系が主流ですが、アルファ版として[v3.0.0](https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1)が公開されました。

> 同日の2019/05/16には[Helm v2.14.0](https://github.com/helm/helm/releases/tag/v2.14.0)もリリースされています

v2 → v3.0.0-alphaへの変更点は次のリンクにまとまっています。
※よく見れば分かりますが、あくまでアルファ版のため、ほとんどのページがv2の内容のままです。

https://v3.helm.sh/docs/faq/

v3自体の構想が次のページにまとまっており、合わせてブログでのv3シリーズに関する投稿もあります。

Proposal: https://github.com/helm/community/blob/master/helm-v3/000-helm-v3.md
Blog(全7本): https://helm.sh/blog/helm-3-preview-pt1/
※リンクは7本のうちの1本目

ProposalとBlogを読むと、v2→v3の変更がなかなかの破壊的変更に思えます。
ただし、今回のアルファ版では全てが実現されているわけではないので注意しましょう。
最大の変更点はHelmのサーバーであるTillerがなくなったことですが、それ以外は大きな違いはそれほどないように感じます(個人の感想です)。

もちろん細かい変更点がいくつもありますが、本記事はそれらを全ては取り扱わずに、Helm v3を試したいという方向けの情報だけをまとめています。

# 実施した環境

・Mac Pro(2018) OS Mojave 10.14.1
・Docker for Mac(Docker Engine 18.09)
・Helm v2.13(※インストール済だが今回は使わない)
・Kubernetesクラスタ(Docker for Macの機能)

# v3のインストール方法

[Releaseページ](https://github.com/helm/helm/releases/tag/v3.0.0-alpha.1)にも書かれていますが、既存のv2環境を壊さないように/tmp/helm3といった一時ディレクトリにインストールした方が良いでしょう。

次のスクリプトを使うとMacOS向けに/tmpにHelm v3をインストールできます

https://gist.github.com/jdolitsky/0ec804b09f24a24b05acb681f01903c9

> 当たり前のことですが、実施前にスクリプトを見て問題がないか確認しましょう

```
$ curl https://gist.githubusercontent.com/jdolitsky/0ec804b09f24a24b05acb681f01903c9/raw/install_helm3alpha1_mac.sh | bash
```

環境変数として「HELM_HOME」と「PATH」を設定しなさい、という表示が出ますが、PATHを設定しても私の環境ではHelm v2の方のバイナリが実行されていました。
そのため、多少不恰好ですがPATHは通さずに毎回「/tmp/helm3/bin/helm」でコマンドを打っていきます。

```
$ export HELM_HOME=/tmp/helm3
```

環境変数を設定し、バージョンを確認します。

```
$ /tmp/helm3/bin/helm version
version.BuildInfo{Version:"v3.0.0-alpha.1", GitCommit:"b9a54967f838723fe241172a6b94d18caf8bcdca", GitTreeState:"clean"}
```

# Chartのインストール

Charts Repositoryを確認するとstableのみでlocalは削除されていました。
これはhelm serveコマンドがなくなったためでしょう(Releaseページに書いてないので推測)。

```
$ /tmp/helm3/bin/helm repo list
NAME    URL
stable  https://kubernetes-charts.storage.googleapis.com
```

インストールが完了したので、試しにMySQLのChartを実行してます。
まずはChartをローカルにダウンロードします。
v2では「helm fetch」でChartをダウンロードしていましたが、v3ではDockerライクにpullが使えます。
※helm fetchも依然として利用できます

```
# Chartのダウンロード
$ /tmp/helm3/bin/helm pull stable/mysql

# tarボールを解凍
$ tar -zxf mysql-1.1.1.tgz

# Chartの中身を確認
$ cd mysql
$ tree mysql
mysql
├── Chart.yaml
├── README.md
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── configurationFiles-configmap.yaml
│   ├── deployment.yaml
│   ├── initializationFiles-configmap.yaml
│   ├── pvc.yaml
│   ├── secrets.yaml
│   ├── servicemonitor.yaml
│   ├── svc.yaml
│   └── tests
│       ├── test-configmap.yaml
│       └── test.yaml
└── values.yaml
```

v2のChartをそのまま使っているようです。
Kubernetesクラスタにインストールしてみます。

```
$ /tmp/helm3/bin/helm install mysql
Error: must either provide a name or specify --generate-name
```

v2では「--name」を指定しない限り、ランダムな名前が生成されていましたが、
v3では「--name-template」で名前を指定するか、「--generate-name」で従来の動きを指定する必要があります。

せっかくなので「--name-template」で名前を指定しました。

```
$ /tmp/helm3/bin/helm install mysql --name-template mysql
```

インストールするとNOTESでMySQLへのアクセス方法が表示されます(本記事では省略)。
ここはv2と変わりありません。

```
$ /tmp/helm3/bin/helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART
mysql   default         1               2019-05-18 23:28:47.300221 +0900 JST    deployed        mysql-1.1.1
```

「helm list」でReleaseが生成されたことが確認できます。

# Releaseの削除

Releaseが生成されているのが確認できたので、Clean Upします。
v2では「helm delete」でReleaseを削除していましたが、v3ではuninstallを使います。
※helm deleteも依然として利用できます

```
$ /tmp/helm3/bin/helm uninstall mysql
release "mysql" uninstalled
```

# 終わりに

変更点はまだまだありますが、今回はHelm v3の試し方を紹介しました。

Helm v3はアルファバージョンです。
IssueやPRも絶賛受付中のようなので、使ってみてどんどんコントリビュートしていきましょう。

以上