HackMDをKubernetesで構築した
年明けから、クラウドネイティブになったのでKubernetesを触るモチベーション作りがてら、HackMDをペパボで利用できるように構築した。
HackMDはSaaSで提供されているメモアプリで、Dockerイメージなども提供されている。HackMDの便利な点は下記の通り。
- マークダウンで編集しながらスタイルが見える
- 複数人で編集が可能
- Google oAuth2など複数の認証に対応している
個人的にはミーティングとかの議事録とか、ちょっとしたメモをGistsで書くと双方向編集できないし、Googleドキュメントだとマークダウン使えないしみたいなところをちょうど埋めてくれるアプリだったので採用した。
最終的にはこんな感じの構成で作った。
まずペパボでは @r_takaishi がOpenStack上で構築したKubernetesクラスタがNKS(中洲)というプロダクト名で運用されている。それらは彼のブログなどでも触れられているので、見に行くか入社してください。
僕がやったのは、NKS上でhackmdのpodを作成し、それにトラフィックを流すプロキシサーバの構築と、RDS的に使える冗長化された共用DBの構築を行った。
プロキシサーバは当初、Ingress使うかとも思ったのだけど、Serviceを使ったほうが諸々便利そうだったので、今回はServiceを利用して、そのVIPに対してshare proxyからトラフィックを流す構成にした。もう少し頑張ればnginx-Ingress出来ると思うからそれは次やってみる。
ペパボにはxxx.pepabo.comのような共用サービスがいくつかあり、これまではそのサービスごとにプロキシサーバを作り、そこにワイルドカード証明書を入れるということをやっていたのだけど、どうせオンプレなOpenStack使ってるんだからもうそこはプロビジョニングするだけでみんな使い回せるProxyがあったほうが便利だというということで今回構築した感じ。
DBについてもそうで、ちょっとした共用システム作るのに都度DB作るのしんどいし、冗長化とかも考えたくないから今回MySQLとMHAで冗長構成を作って共用できるようにした。
HackMDはデフォルトでoAuthサポートしてるから良かったのだけど、対応してない場合はoAuthProxyを利用してクッキーベースでアクセス制御していく形になると思う。
HackMD自体はホントこれだけのYAMLでシュッと動く。
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: hackmd
spec:
replicas: 1
template:
metadata:
labels:
name: hackmd
spec:
containers:
- name: app
image: hackmdio/hackmd:1.2.1
env:
- name: CMD_DOMAIN
value: "xxxxxxxxxxxxxxxxxxxxxxx"
- name: HMD_DB_URL
valueFrom:
secretKeyRef:
name: hackmd-secret
key: mysql_url
- name: CMD_GOOGLE_CLIENTID
valueFrom:
secretKeyRef:
name: hackmd-secret
key: google_client_id
- name: CMD_GOOGLE_CLIENTSECRET
valueFrom:
secretKeyRef:
name: hackmd-secret
key: google_client_secret
- name: CMD_PROTOCOL_USESSL
value: "true"
- name: CMD_URL_ADDPORT
value: "false"
- name: CMD_ALLOW_ANONYMOUS
value: "false"
- name: CMD_ALLOW_ANONYMOUS_EDITS
value: "false"
- name: CMD_ALLOW_FREEURL
value: "false"
- name: CMD_ALLOW_EMAIL_REGISTER
value: "false"
- name: CMD_EMAIL
value: "false"
- name: CMD_DEFAULT_PERMISSION
value: "limited"
ports:
- containerPort: 3000
工夫というほどでもないけど、認証・DB周りの設定やらはSecret使って隠匿する感じかな。
最後に、何かしら学習するのに自分の困り事や会社の方針と重ねて手を動かすと学習も捗るし、必要な技術に寄り道する必要も生まれてくるのでおすすめです。