EKSでMattermostを構築した話：4-1. Mattermostのインストール(helm理解編)

## これまでの復習
- EKSでMattermostを構築ということで少しずつ進めてきました。

1.  [EKSでMattermostを構築した話：0.概要編 - Qiita](https://qiita.com/tnagano1981/items/555301cecd3ed309fa43)
1.  [EKSでMattermostを構築した話：1. VPC作成編 - Qiita](https://qiita.com/tnagano1981/items/75408d509c0660408c97)
1.  [EKSでMattermostを構築した話：2. EKSクラスター作成編 - Qiita](https://qiita.com/tnagano1981/items/fc5d96ddf9a3b5c4fb03)
1.  [EKSでMattermostを構築した話：3-1. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/c91d27fa2e286a96b6ff)
1. [EKSでMattermostを構築した話：3-2. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/b477f3a6a21038b76db2)
1. Mattermostのインストール ← `今回はここ`
1. Mattermost Configの設定

## 今回作成するもの
- これまでの対応でEKSができたので、次はEKS上で実際にアプリケーションを動かしていきたいです。
- 今回、実際に動かすアプリケーションは`Mattermost`です。チャットアプリですね。
    - このMattermostをhelmでインストールする前段階として、今回は`helm`についての理解を深めていきます。

## helmを利用するのですが
- Mattermostのインストールには`helm`を利用します。
    - ところで、この`helm`って何なのでしょうか？
- `helm`は`船のかじ`のことらしいです。`かじ`って分かりますか？
    - 個人的には`かじ`って言われてもピンとこなかったのでちょっと調べてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/25d7c14a-10ca-1b09-4be2-a547de234dfa.png)
    - 参考：[helmとは & helmの使い方 - Qiita](https://qiita.com/sheepland/items/75b647b71c34c7d38804)
    - 参考：[helmを使ってKubernetesを楽にする - Qiita](https://qiita.com/Hiroyuki_OSAKI/items/8965ceb6c90bae3bea76)

- 船の図を見てみて分かるのは、かじは船の後方の下の方についていて、かじの方向を変えることで船の進行方向を変えられる、そんなイメージですよね。
- でも水面に接しているかじの方向を直接変えるのはむずかしいので、「舵柄(かじづか)」があって、その柄の先に動かしやすいハンドル的ななものがつく。それで「面舵いっぱーい」とかやるってことですよね。
    - この図では船が純和風なので舵柄の先がハンドルみたいな円状にはなっていないですが、洋風の船だったらここが円状のハンドルみたいになるのかなと。
    - で、便利に船を操作するためにハンドルが必要なように、便利にKubernetesを操作するためにhelmが必要になってくる、ということなんですね。で、あのハンドルみたいなの名称は「操舵輪(そうだりん)」と言ったり、それ自体を「かじ」と言ったりするそうです。
    - ここまできて、`helm`=「かじ(操舵輪)」=船(Kubernetes)を便利に操作するものってイメージがつながってきました。
- ということで改めてKubernetesのアイコンを見てみると、完全にあのハンドルの「かじ」ですよね。このアイコンだけ見るとKubernetes単体でハンドル的な「かじ」も含まれていると思ってしまいますが、この「かじ」の部分は`helm`が担っていると考えると、Kubernetesのアイコンに「かじ」使っていいの？とは思いますが、もはや`helm`自体がKubernetes上でアプリケーションをデプロイするための事実上の標準的ツールになっているので、そこの辺り含めてKubernetesとまとめて考えても良いのでしょう。  
     ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/889fa757-d3d7-d90f-f050-7cf7f9739b31.png)
    - 参考：[事実上の標準ツールとなっているKubernetes向けデプロイツール「Helm」入門 | さくらのナレッジ](https://knowledge.sakura.ad.jp/23603/)


## 便利ツール「helm」の便利さとは？
- Kubernetes上でアプリケーションを便利にデプロイできるのが`helm`だ、ということは理解できましたが、どんな便利さがあるのでしょうか？これについても調べてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/c5737d15-6493-e66b-a68f-6f92553291b3.png)
    - 参考：[【2019年最新】Helm 2.12.3のインストール手順 | k8sInfo](https://k8sinfo.com/2019/02/18/helm-installation-2-12-3/)

- これは確かにそうだなーと納得できますよね。個人的にもKubernetesを学び始めてすぐの頃は、podから始まってdeploymentを作っていき、Ingressとか、PersistentVolumeとかを１つずつyamlを作ってapplyしていったのですが、これを毎回１つずつ作ったり、それぞれのリソースを連携させたりとかは面倒だろうなーと感じていました。
    - ここで`helm`を利用すれば複数のリソースを`helm install XXXXX`って実行するだけで全部いい感じに作って連携までしてくれるってことだと思うと、それは便利だなぁって思いますよね。 


## helmのインストール
- ということで`helm`の便利さを理解し、その必要性に納得がいったところで、実際に`helm`をインストールしていきます。
    - ちなみに今回利用するのは`helm3`です。インストール先は`踏み台サーバー`です。
    - `curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash `を実行するとインストールできます。

```
$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash 
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed 
100 6840 100 6840 0 0 33861 0 --------------- 33694 
Downloading https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz 
Preparing to install helm into /usr/local/bin 
helm installed into /usr/local/bin/helm 
```

- 確認します。helm3がインストールされました。

```
$ helm version 
version BuildInfo{Version: "v3.2.4", GitCommit:"8ad808ef43d3b826f31a5ad8dfbb4fe05d143688", GitTreeState: "clean", GoVersion:"g01.13.12"}
```

- これで「操舵輪(ハンドル)」をゲットできたので、次はどこに船を進ませればいいかを決めるための「Charts(海図)」が必要になります。たしかに地図(海図)は大事ですよね。
- この海図が`helm hub`という場所にあるということなので、helm hubを見行きたいと思います。
    - [Artifact Hub](https://artifacthub.io/)
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/a45091a3-06ad-947e-be71-d253c3af86ca.png)
- `Mattermost`で検索するといくつかヒットします
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/415280/2cd52afa-bb6e-6f57-758b-48d2237b304d.png)

- 上記のようにブラウザ越しで確認はできましたが、今回helmを実行するのは踏み台サーバーなので、そこから見れるか以下のコマンドを実行します。

```
$ helm repo list 
Error: no repositories to show 
```

- だめ、、、リポジトリがない。ということなのでリポジトリを追加します。

```
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/ 
"stable" has been added to your repositories 
```

- もう一度確かめます。

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

- リポジトリの追加ができました！ではこの追加したリポジトリにMattermostのChartsが含まれているか確認します。

```
$ helm search repo | grep mattermost
mattermost/mattermost-enterprise-edition        1.6.0           5.25.0                                                                                                  Mattermost Enterprise server with high availiti...
mattermost/mattermost-push-proxy                0.5.0           5.22.4                                                                                                  Mattermost Push Proxy server
mattermost/mattermost-team-edition              3.13.0          5.25.0                                                                                                  Mattermost Team Edition server.
stable/mattermost-team-edition                  3.1.2           5.9.0                                                                                                   Mattermost Team Edition server.
```

- ありました。いくつか種類がありますが、今回は`mattermost/mattermost-team-edition `を使うことにしました。

## まとめ
- helm事始め、としてhelmがなぜ必要かを確認して、その便利さを知ることができました。
- helmのインストールとリポジトリの追加、そしてMattermostのchartsがあることを確認しました。
- 次は`mattermost/mattermost-team-edition `を利用して、EKS上にMattermostを構築していきたいと思います。

## 関連記事
-   [EKSでMattermostを構築した話：0.概要編 - Qiita](https://qiita.com/tnagano1981/items/555301cecd3ed309fa43)
-   [EKSでMattermostを構築した話：1. VPC作成編 - Qiita](https://qiita.com/tnagano1981/items/75408d509c0660408c97)
-   [EKSでMattermostを構築した話：2. EKSクラスター作成編 - Qiita](https://qiita.com/tnagano1981/items/fc5d96ddf9a3b5c4fb03)
-   [EKSでMattermostを構築した話：3-1. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/c91d27fa2e286a96b6ff)
-   [EKSでMattermostを構築した話：3-2. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita](https://qiita.com/tnagano1981/items/b477f3a6a21038b76db2)