KubernetesにMattermostを構築する

オープンソースのチャットシステムであるMattermostはSlackの代替として使われることが多いですが、Kubernetes上に構築することもできます。

この記事では、ローカルで構築したKubernetes上にMattermostを構築する方法について説明します。今回はKubernetesのDeployment、Service、Ingressを使ってMattermostを構築します。

Mattermostは、社内ネットワークなどネットワークの制約が多い場合に、自前で構築することができ、Slackと同様の機能を提供してくれるので便利です。

環境

今回は次の環境にMattermostを構築します。

  • Windows 11 Pro
  • Ubuntu 22.04(WSL2)
  • Kubernetes v1.27.3(KinDにて構築)
    • Nginx Ingress Controller

上記の環境構築の方法は下記が参考になります。

Windows 11 ProにWSL2をインストールする

Mattermostの構築手順

次の手順でMattermostを構築します。

  1. NameSpaceの作成
    • MattermostをデプロイするためのNameSpaceを作成します。
  2. DBの構築
    • マニフェストファイルの作成
    • DBをKubernetesにデプロイ
  3. Mattermostの構築
    • マニフェストファイルの作成
    • MattermostをKubernetesにデプロイ
  4. Mattermostの公開
    • Ingressの作成
    • ブラウザにて確認

NameSpaceの作成

まずは、MattermostをデプロイするためのNameSpaceを作成します。次の手順で作成します。

  1. NameSpaceの作成

まず、MattermostをデプロイするためのNameSpaceを作成します。

コマンド実行

kubectl create namespace mattermost

DBの構築

  1. ディレクトリの作成

まず、Mattermostのマニフェストファイルを保存するディレクトリを作成します。

コマンド実行

mkdir mattermost
cd mattermost
  1. マニフェストファイルの作成(Deployment)

次に、Mattermostのマニフェストファイルを作成します。mattermostディレクトリ内にdbディレクトリを作成してdeployment.yamlという名前でファイルを作成し、次の内容を記述します。

mattermost/db/deployment.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: mattermost-db namespace: mattermost labels: app: mattermost tier: db spec: replicas: 1 selector: matchLabels: app: mattermost tier: db template: metadata: labels: app: mattermost tier: db spec: containers: - name: mattermost-db image: postgres:13 env: - name: POSTGRES_USER value: mattermost - name: POSTGRES_PASSWORD value: mattermost - name: POSTGRES_DB value: mattermost ports: - containerPort: 5432
CAUTION

今回、DBにはPersistentVolumeを使っていません。本番環境では、PersistentVolumeを使うことをお勧めします。またDBのパスワードはmattermostとしていますが、本番環境では適切なパスワードを設定してSecretリソースを使うことをお勧めします。

  1. DBのServiceの作成

次に、DBのServiceのマニフェストファイルを作成します。mattermost/dbディレクトリの中にservice.yamlという名前でファイルを作成し、次の内容を記述します。

mattermost/db/service.yaml

apiVersion: v1 kind: Service metadata: name: mattermost-db namespace: mattermost labels: app: mattermost tier: db spec: ports: - port: 5432 protocol: TCP selector: app: mattermost tier: db

Mattermostのアプリ側からDBにアクセスするために、Headless Serviceを作成しています。

  1. DBのデプロイ

次のコマンドでDBをKubernetesにデプロイします。

コマンド実行

kubectl apply -f db/
  1. DBの確認

次のコマンドでDBのPodとServiceが正常に作成されていることを確認します。

コマンド実行

kubectl get pod -n mattermost
kubectl get svc -n mattermost

次のように表示されれば、DBのPodとServiceが正常に作成されています。

$ kubectl get pod -n mattermost
NAME                             READY   STATUS    RESTARTS   AGE
mattermost-db-79d4f7f7bd-twzxq   1/1     Running   0          62s
$ kubectl get svc -n mattermost
NAME            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
mattermost-db   ClusterIP   10.96.80.31   <none>        5432/TCP   64s 

これで、DBの構築が完了しました。

Mattermostの構築

  1. マニフェストファイルの作成(Deployment)

次に、Mattermostのマニフェストファイルを作成します。mattermostディレクトリ内にappディレクトリを作成してdeployment.yamlという名前でファイルを作成し、次の内容を記述します。

mattermost/app/deployment.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: mattermost-app namespace: mattermost labels: app: mattermost tier: app spec: replicas: 1 selector: matchLabels: app: mattermost tier: app template: metadata: labels: app: mattermost tier: app spec: containers: - name: mattermost-app image: mattermost/mattermost-team-edition:8.1.9 env: - name: MM_USERNAME value: "admin" - name: MM_PASSWORD value: "admin" - name: MM_SQLSETTINGS_DATASOURCE value: "postgres://mattermost:mattermost@mattermost-db:5432/mattermost?sslmode=disable&connect_timeout=10" ports: - containerPort: 8065
  1. MattermostのServiceの作成

次に、MattermostのServiceのマニフェストファイルを作成します。mattermost/appディレクトリの中にservice.yamlという名前でファイルを作成し、次の内容を記述します。

mattermost/app/service.yaml

apiVersion: v1 kind: Service metadata: name: mattermost-app namespace: mattermost labels: app: mattermost tier: app spec: ports: - port: 8065 targetPort: 8065 selector: app: mattermost tier: app
  1. Mattermostのデプロイ

次のコマンドでMattermostをKubernetesにデプロイします。

コマンド実行

kubectl apply -f app/
  1. Mattermostの確認

次のコマンドでMattermostのPodとServiceが正常に作成されていることを確認します。

コマンド実行

kubectl get pod,svc -n mattermost

次のように表示されれば、MattermostのPodとServiceが正常に作成されています。

NAME                              READY   STATUS    RESTARTS   AGE
pod/mattermost-app-7f8f8f7f8-7f8f8f7f8   1/1     Running   0          1m
pod/mattermost-db-7f8f8f7f8-7f8f8f7f8   1/1     Running   0          1m

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/mattermost-app   ClusterIP
service/mattermost-db   ClusterIP

これで、Mattermostの構築が完了しました。

Mattermostの公開

  1. Ingressの作成

次に、Mattermostを公開するためのIngressのマニフェストファイルを作成します。mattermostディレクトリ内にingress.yamlという名前でファイルを作成し、次の内容を記述します。

mattermost/ingress.yaml

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: mattermost-ingress namespace: mattermost annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: ingressClassName: nginx rules: - host: mattermost.example.com http: paths: - backend: service: name: mattermost-app port: number: 8065 path: / pathType: Prefix
  1. Ingressのデプロイ

次のコマンドでIngressをKubernetesにデプロイします。

コマンド実行

kubectl apply -f mattermost/ingress.yaml
  1. ブラウザにて確認

次に、ブラウザでhttp://mattermost.example.comにアクセスしてMattermostが正常に表示されることを確認します。

Mattermostのトップ画面

これで、Kubernetes上にMattermostを構築することができました。

まとめ

この記事では、Kubernetes上にMattermostを構築する方法について説明しました。MattermostをKubernetes上に構築することで、Mattermostをスケーラブルに運用することができます。ぜひ、参考にしてみてください。

コメントを残す

マークダウン形式でコメントを入力できます。

アップロードファイルの最大サイズ: 512 MB。 画像, 音声, 動画, 文書, スプレッドシート, 対話型, テキスト, アーカイブ, コード, その他 をアップロードできます。 Youtube、Facebook、Twitter および他サービスへのリンクは自動的にコメント内に埋め込まれます。 ここにファイルをドロップ

プロフィール背景
Ryosuke
Ryosuke

ITエンジニア & 講師

クラウドネイティブやアーキテクチャ設計の講師として活動しながら、ITエンジニアのDXを推進するために新しい技術やベストプラクティスを常に学び、エンジニアの生産性と開発品質の向上に貢献することを目指しています。猫5匹飼っています。山奥のポツンと一軒家に住んでいて、事務所は海の近くです。