LoginSignup
1
0

More than 3 years have passed since last update.

EKSでMattermostを構築した話:4-2. Mattermostのインストール(helm適用編)

Posted at

これまでの復習

  • EKSでMattermostを構築ということで少しずつ進めてきました。
  1. EKSでMattermostを構築した話:0.概要編 - Qiita
  2. EKSでMattermostを構築した話:1. VPC作成編 - Qiita
  3. EKSでMattermostを構築した話:2. EKSクラスター作成編 - Qiita
  4. EKSでMattermostを構築した話:3-1. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita
  5. EKSでMattermostを構築した話:3-2. EKSクラスターでアプリケーションを稼働させる前にセットアップしておくべきツール編 - Qiita
  6. EKSでMattermostを構築した話:4-1. Mattermostのインストール(helm理解編) - Qiita
  7. Mattermostのインストール(helm適用編) ← 今回はここ
  8. Mattermost Configの設定

今回作成するもの

  • Mattermostアプリ
    • 前回でhelmの便利さを理解できたので、次はhelmを利用して実際にMattermost(チャットアプリ)を利用できるようにしていきます。

Mattermostをhelm install

  • ということで早速インストールをしていきます。
  • で、インストールだけであれば実は以下のコマンドを実行するだけで完了です。
helm install --generate-name mattermost/mattermost-team-edition --set mysql.mysqlUser=sampleUser --set mysql.mysqlPassword=samplePassword
  • 上記コマンドを実行すると以下のようにレスポンスがあります。
$ helm install --generate-name mattermost/mattermost-team-edition --set mysql.mysqlUser=sampleUser --set mysql.mysqlPassword=samplePassword
NAME: mattermost-team-edition-1604794691
LAST DEPLOYED: Sun Nov  8 09:18:12 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
You can easily connect to the remote instance from your browser. Forward the webserver port to localhost:8065

- kubectl port-forward --namespace default $(kubectl get pods --namespace default -l "app.kubernetes.io/name=mattermost-team-edition,app.kubernetes.io/instance=mattermost-team-edition-1604794691" -o jsonpath='{ .items[0].metadata.name }') 8080:8065



To expose Mattermost via an Ingress you need to set host and enable ingress.

helm install --set host=mattermost.yourdomain.com --set ingress.enabled=true stable/mattermost-team-edition



WARNING:
--------

Every `helm upgrade` will generate a new set of keys unless it is set manually like this:

configJSON:
  EmailSettings:
    InviteSalt: xHapfJOG3LMFuOEqKhmB0JOi33w4IosO
  FileSettings:
    PublicLinkSalt: onBRMAQ7Y10qNfg18HyrMFHEzkBM35Mm
  SqlSettings:
    AtRestEncryptKey: QW87SR3D8sjpibppi6CYW2GJYRRWIaqI
  • deploymentを確認します
$ kubectl get deploy
NAME                                       READY   UP-TO-DATE   AVAILABLE   AGE
mattermost-team-edition-1604794691         1/1     1            1           2m5s
mattermost-team-edition-1604794691-mysql   1/1     1            1           2m5s
  • podを確認します
$ kubectl get pod
NAME                                                        READY   STATUS    RESTARTS   AGE
mattermost-team-edition-1604794691-68fbb9568-krlwt          1/1     Running   0          2m11s
mattermost-team-edition-1604794691-mysql-84d7db4588-dbhlm   1/1     Running   0          2m11s
  • Mattermostの機能を提供するpodと、投稿などを保存するmysqlのpodが作成されています。
    • でも、この構成はあまり実用的ではなく、今回求めている構成ではないんです。

どこが実用的ではないのか?

  • まず上記の構成では、Mattermostのpodもmysqlのpodも全部EKSクラスタを構成している2台のEC2上に作成されています。データの永続性という観点で見ると、EC2がオートスケーリングで増えたり減ったりした際や、podが消えてしまった際などには、データも消えてしまうのでは?という不安がでてきます。
    • なのでデータベースは外部に切り出したいです。特に今回はせっかくAWS上に構築しているので、AWSのマネージドサービス(RDS)を利用したいです。
    • あとMattermostのpodが利用するデータ保存領域もデータベースと同様の考えをすれば、外部に切り出したいですよね。今回ここはS3にデータを保存するというMattermost自体の機能があったのでそれを利用することで実現しています。

helm chartsの編集

  • そうなってくるとhelm hub上にあるchartsを単純にインストールするだけでは自分たちが求める内容を満たすことはできない、ということになってきます。
    • そこでhelm chartsの編集が必要になってくるのです。
  • で、helm chartsはすでに固定された内容でhelm hub上にアップロードされてしまっています。とはいえ最初からhelm chartsを作るのもとても面倒です。
    • ということで、アップロードされているhelm chartsを手元の環境にダウンロードする、ということから始めていきましょう。以下のコマンドでダウンロードします。
$ helm fetch mattermost/mattermost-team-edition
  • そうするとmattermost-team-edition-3.13.0.tgzがダウンロードされているので、これを解凍していきます。そしてディレクトリ構成を見てみるとこんな感じになっています。
$ tree .
.
└── mattermost-team-edition
    ├── Chart.yaml
    ├── README.md
    ├── charts
    │   └── mysql
    │       ├── Chart.yaml
    │       ├── README.md
    │       ├── templates
    │       │   ├── NOTES.txt
    │       │   ├── _helpers.tpl
    │       │   ├── configurationFiles-configmap.yaml
    │       │   ├── deployment.yaml
    │       │   ├── initializationFiles-configmap.yaml
    │       │   ├── pvc.yaml
    │       │   ├── secrets.yaml
    │       │   ├── serviceaccount.yaml
    │       │   ├── servicemonitor.yaml
    │       │   ├── svc.yaml
    │       │   └── tests
    │       │       ├── test-configmap.yaml
    │       │       └── test.yaml
    │       └── values.yaml
    ├── ci
    │   ├── default-values.yaml
    │   └── extra-values.yaml
    ├── requirements.lock
    ├── requirements.yaml
    ├── templates
    │   ├── NOTES.txt
    │   ├── _deprecations.tpl
    │   ├── _helpers.tpl
    │   ├── _warnings.tpl
    │   ├── deployment.yaml
    │   ├── ingress.yaml
    │   ├── pvc-plugins.yaml
    │   ├── pvc.yaml
    │   ├── route.yaml
    │   ├── secret-config.yaml
    │   ├── service.yaml
    │   └── tests
    │       ├── mattermost-config-test.yaml
    │       └── mattermost-test.yaml
    └── ★values.yaml

8 directories, 35 files
  • このあと変更していくのは、★をつけたvalues.yamlになります。

values.yamlの変更点

まとめ

  • helm hub上に用意されているhelm chartsでは、自分たちの作りたい内容と比べて足りない箇所がある、、、ということは往々にしてあることだと思います。
  • 次からはその解決のためにvalues.yamlの変更をしていくわけですが、上記でも記載したように一部はvalues.yaml以外のファイルも変更していきます。本当はここをvalues.yamlの変更のみで対応できるようにするのが良いのだと考えています。
    • おそらく、そういう時に必要になってくるのがKustomizeなどのツールになってくるのでしょう。
    • とはいえ、最初にhelmのみで色々と試行錯誤をしておくことで、Kustomizeの便利さやその使い所などもよく理解できるようになると思うので、ここはひとまずhelmでの構築を続けて最終形態にまで、もっていきたいと考えています。
    • 参考:Kustomizeを利用してk8sの構成管理をシンプルにやってみる - CADDi Tech Blog

関連記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0