なんとなく動いている。
Holloとは
以下を参照。
https://docs.hollo.social/ja/intro
Kubernetesで動かして何が嬉しいか
Holloは基本的に一人用サーバのため、現状ではあまり嬉しいことはないように思える。ただ、弊環境はDocker等のコンテナ基盤が常時動作していないため、Kubernetesに載せた。
使用したKubernetesディストロとオペレータ等
k0s + Cilium CNI + Cloudflare tunnel ingress controller + CloudNativePG + NFS CSI
セットアップ
Holloは現在、S3互換オブジェクトストレージを必要としている。今回はCloudflare R2を使用。
HolloはHelmの提供を目指している?様子だが、まだ無いのでとりあえずYAMLで書いていく。
Containerが同時に起動してDBにアクセスすると恐らく壊れるので、DeploymentのストラテジをデフォルトからRecreateへ変更する。※k8sドキュメントにあるように、これではContainerの単一性は保証できないので本来はStatefulSetを使用すべきである。
Hollo本体
kind: Deployment
apiVersion: apps/v1
metadata:
name: hollo-app
namespace: hollo-1
spec:
strategy:
type: Recreate
replicas: 1
selector:
matchLabels:
app: hollo
template:
metadata:
labels:
app: hollo
spec:
initContainers:
- name: wait-db
image: busybox:latest
imagePullPolicy: Always
command: ['sh', '-c', 'until nc -z hollo-db-cluster-rw 5432; do echo waiting for hollo-db-cluster-rw; sleep 2; done;']
containers:
- name: hollo
image: ghcr.io/dahlia/hollo:<version>
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: hollo-config
ports:
- containerPort: 3000
resources:
limits:
cpu: "2"
memory: "2048Mi"
volumes:
- name: hollo-config
configMap:
name: hollo-config
Service(宅内からの試験用にCiliumのLoadbalancer機能を使用。Calico等の人はMetalLBとか、よしなに。今回のようにCloudflare tunnel Ingressコントローラ使う場合はClusterIPで十分)
apiVersion: v1
kind: Service
metadata:
name: hollo
namespace: hollo-1
spec:
type: LoadBalancer
selector:
app: hollo
ports:
- name: http
protocol: TCP
port: 3000
targetPort: 3000
DBは適当に。(この記事では記載しません。)
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: hollo-config
namespace: hollo-1
data:
DATABASE_URL: postgres://省略
以下環境変数省略。詳細はドキュメントを参照。
上記を作成することにより、HolloをKubernetes上で起動できる。
Cloudflare関連の設定は以下のような感じで。(YAMLでも作れるよ)
kubectl create -n hollo-1 ingress hollo-1-to-cftunnel --rule="Hollo動かすFQDN/*=hollo:3000" --class cloudflare-tunnel
DBの待機などは以下を参考にした。うまく動いているかはわからない。
【kubernetes】Pod間に依存関係を持たせるときの一工夫
Hollo開発者のホン・ミンヒさんがかなり情熱を注いでおられて、個人的に注目しているプロジェクトです。
ぜひ、使ってみてくださいね。