開発
[GKE] Google Container EngineでMattermostを立てるまで
Yuki Ito
GKEことGoogle Container EngineでMattermostを立ててみたので、手順を紹介します。
Mattermostとは?
Slackライクなチャットツールです。
Slackを使っていた方なら違和感なく使えると思います。
メリットとしては、
- Slackからのメッセージ履歴のインポート
- メッセージ履歴 & 添付ファイルが無制限
- SlackとのAPI互換
てなところでしょうか。
コンテナクラスタを作成
では早速始めていきましょう。
まず、Google Cloud Platformのコンソールにアクセスし、Mattermost用のプロジェクトを作成します。
次に、Container Engineのページに行き、コンテナクラスタを新規作成します。
設定項目が現れます。すべてデフォルトでも良いですが、リージョンを日本に近そうな “asia-northeast*” とかにしておくと良いかも知れません。
お金が気になる場合はサイズを減らしておきましょう。
「作成」ボタンを押し、しばらく待つとデプロイが完了し、右側に「接続」ボタンが現れます。
クラスタへの接続
「接続」をクリックするとクラスタに接続するためのコマンドが表示されます。
見てのとおり、 gcloud
コマンドと kubectl
コマンドが必要です。
まず、 gcloud
を下記を参照してインストールしてください。
クイックスタート | Cloud SDK | Google Cloud Platform
すると、 gcloud components install kubectl
とすることで kubectl
をインストールすることができるようになります。
それでは接続してみましょう。
今回はWeb UIは使わないため、「接続」ボタンをクリックしたところの上の gcloud container ...
コマンドのみ実行してみてください。
kubeconfig entry generated for <cluster名>
等と出れば成功です。運が良ければ kubectl config current-context
の結果も gke_〜
で始まるものになっているかも知れません。なっていない場合は、まず kubectl config get-contexts
で gke_
で始まるものを見つけられると思いますので、それを kubectl config use-context gke_〜
のように入力して実行してください。
これで接続が完了しました。 kubectl clusterinfo
等でクラスタの情報が確認できます。
Mattermostを動かしてみる
ついにMattermostです。まずはDockerfileをcloneします。
$ git clone https://github.com/mattermost/mattermost-docker
$ cd mattermost-docker
以下、mattermost-docker/README.md at master · mattermost/mattermost-dockerにあるとおりです。
まず、postgresのコンテナを立てます。パスワード等適宜変えてください。
$ kubectl run postgres --image=postgres:9 \
--env="POSTGRES_PASSWORD=mmuser_password" \
--env="POSTGRES_DB=mattermost" \
--env="POSTGRES_USER=mmuser"
サービスを作ります。
$ kubectl expose deployment postgres \
--name=db \
--port 5432 \
--target-port 5432
次に、Mattermost自体のサービスを準備します。
まず、 mattermost.secret.yaml
を先程postgresに設定したパスワード等に書き換えます。具体的には db-host
、 db-port
、 mm-username
、 mm-password
、 mm-dbname
の5つですが、これらはすべてもとの値をbase64化したものを指定しなければならないことに注意してください。
例えば、文字列 db
のbase64化したものは以下のコマンドで得られます。
$ echo -n db | base64
詳しくはSecrets | Kubernetesを参照ください。
$ cd contrib/kubernetes
$ editor mattermost.secret.yaml
できたらデプロイします。
$ kubectl create -f mattermost.secret.yaml
アプリケーションをデプロイします。
$ kubectl create -f mattermost.deployment.yaml
ここまでの進捗は、以下のように確認できます。
$ kubectl get po -l app=mattermost
NAME READY STATUS RESTARTS AGE
mattermost-app-1605216003-fvnz1 1/1 Running 0 44m
最後に、 mattermost.svc.yaml
を少しGKE用に編集してから、サービスとしてアプリケーションをデプロイします。
$ sed -i 's/NodePort/LoadBalancer/' mattermost.svc.yaml
$ kubectl create -f mattermost.svc.yaml
これで動きました。
ブラウザでアクセスして確認してみましょう。アドレスは、 kubectl get svc
としたときの、 EXTERNAL-IP
の欄で確認できます。
これが出れば完成です!