概要
チャットツールであるMattermostをKubernetesに配置する方法を紹介します。
環境
- Kubernetes 1.8
方法
Mattermostは、Podを作り直したりしたときにデータを残しておくために永続化の設定をする必要があります。
永続化しておくデータとして、投稿されたファイルやMattermostの設定があります。
さらにその前段階として、データベースを用意しておく必要があります。
以上のことから、流れとしてはデータベースの作成、ストレージの用意、Mattermostの配置のようになります。
データベースの作成
Mattermostでは、データベースとしてMySQLかPostgreSQLを選べます。
今回は、PostgreSQLの方が推奨されているということで、PostgreSQLでデータベースを用意するとします。
データベースの作成についてはここでは扱いません。
次の作業へ進む前に、PostgreSQLでデータベースを作成し、そのデータベース名、PostgreSQLにアクセスするためのユーザ名とパスワードを覚えておいてください。
ストレージの用意
ストレージの用意のために、PersistentVolumeとPersistentVolumeClaimを使います。
ここでは、nfsを使う場合の例を示しますが、他のものを使うのであれば適当な値で書き換えてください。
投稿されたファイルを置くためのストレージと設定情報を置くためのストレージの2つのPersistentVolumeを用意します。
最初に、投稿されたファイルを置くためのストレージを用意するためのPersistentVolumeのyamlです。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mattermost-pv
labels:
name: mattermost-pv
spec:
capacity:
storage: "5Gi"
accessModes:
- ReadWriteOnce
nfs:
server: ***
path: ***
PersistentVolumeClaimのyamlです。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mattermost-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "5Gi"
selector:
matchLabels:
name: mattermost-pv
次に、設定情報を置くためのストレージを用意するPersistentVolumeのyamlです。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mattermost-config-pv
labels:
name: mattermost-config-pv
spec:
capacity:
storage: "1Gi"
accessModes:
- ReadWriteOnce
nfs:
server: ***
path: ***
PersistentVolumeClaimのyamlです。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mattermost-config-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: "1Gi"
selector:
matchLabels:
name: mattermost-config-pv
これらのyamlを元にストレージを用意しましょう。
Mattermostの配置
では、Mattermostの配置します。
配置はDeploymentでします。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mattermost
labels:
app: mattermost
spec:
replicas: 1
selector:
matchLabels:
app: mattermost
template:
metadata:
labels:
app: mattermost
spec:
containers:
- image: mattermost/mattermost-prod-app:latest
name: mattermost
env:
- name: DB_HOST
value:
- name: MM_USERNAME
value:
- name: MM_PASSWORD
value:
- name: MM_DBNAME
value:
volumeMounts:
- name: mattermost-persistent-storage
mountPath: /mattermost/data
- name: mattermost-config-persistent-storage
mountPath: /mattermost/config
volumes:
- name: mattermost-persistent-storage
persistentVolumeClaim:
claimName: mattermost-pvc
- name: mattermost-config-persistent-storage
persistentVolumeClaim:
claimName: mattermost-config-pvc
追加しなければならない情報として、環境変数としてデータベースに関する設定を書く必要があります。
DB_HOSTには、PostgreSQLにアクセスするためのホスト名、MM_USERNAMEにはユーザ名、MM_PASSWORDにはユーザ名に対するパスワード、MM_DBNAMEにはデータベース名を書きましょう。
これを元に、MattermostのDeploymentを作成すれば、Mattermostが動作します。
Serviceの用意
外部からアクセスできるようにするには、Serviceを用意する必要があります。
ここでは、Kubernetes内部に公開するClusterIPの例を示します。
apiVersion: v1
kind: Service
metadata:
labels:
app: mattermost
name: mattermost
spec:
type: ClusterIP
ports:
- name: http
port: 8065
targetPort: 8065
protocol: TCP
selector:
app: mattermost
Mattermostは8065番ポートで公開されているので、そのポートを公開します。
まとめ
当初、設定ファイルの永続化をしておらず、Mattermostにアクセスして設定を終えた後にコンテナを一度作り直したら、設定が消えていたということがありました。
設定に関してもデータの永続化を忘れないようにしましょう。