daab on kubernetes

はじめに

Raspberry Pi 4 Model B (4GiB) に k3s を導入して複数の試作ボットを single node 上でコンパクトに稼働させられないかな?と考えていて,今回はまずベースとなるマニフェストを Docker Desktop for Mac の kubernetes 上で作成してみます.

要件

  • single node
  • 複数の試作ボットを稼働させる
  • ボットとペアで Redis を用意*1
  • ログは一先ず kubectl logs でみられたら良い*2

構成

daab は hubot ベースなので Brain が Redis を使用します.daab と Redis にそれぞれ Pod を用意してやります.とてもシンプルな構成です.

redis.yml

github.com

Redis コンテナは公式の説明に従って --appendonly yes を指定して起動します.Persitent Volume はとりあえず hostPath でデフォルトの場所 ($HOME/.docker/Volumes) に作らせておきます*3.これで Pod を更新しても情報が残ります.

後は他の Pod からアクセスするための Service を定義したら完了です.

daab.yml

github.com

daab の方は REDIS_URL を指定し,HUBOT_DIRECT_TOKEN を Secret から受け取るようにします.また Pod 更新の際に同じトークンを持ったボットが (一時的にでも) 複数稼働するような状況を避けるために .spec.strategy.type = Recreate にします.

最後に Webhook 用に Ingress を追加*4したら完了です.

起動

あらかじめ ingress-nginx Installation Guide に従って ingress-nginx を導入しておきます*5

cd daab-ping
docker build -t daab-ping:v0.1.3 .
daab login
#=> アクセストークンを取得する (.env)
cd -

kubectl create namespace krdlab
kubectl create secret generic daab-secrets -n krdlab --from-env-file daab-ping/.env

kubectl apply -f redis.yml
kubectl apply -f daab.yml

kubectl get pods -n krdlab
#=> Running を確認

どちらも Running になったらボットが反応してくれるようになります.

おわりに

今回は 1 つのボットを稼働させるために必要なマニフェストを作成しました.この後は k3s 上で動作するように調整を入れて,実装固有の部分をパラメータ化していきます.

*1:後で共用に変えるかも

*2:後からノードレベルで収集するための調整を入れるかも

*3:今は Docker Desktop for Mac 上なので,path は Raspberry Pi に移してから調整する

*4:NodePort でも良いのですが,Ingress を通しておいた方がいろいろ調整が効くので

*5:k3s の場合は Traefik になる? https://rancher.com/docs/k3s/latest/en/networking/#traefik-ingress-controller