自宅k8sにuptime robotクローンなOSS “Uptime Kuma"をリリースしてみた話


Uptime Kumaとは

Uptime Kumaはサーバの死活監視を行うOSSで、似たSaaSにUptimeRobotがある。 Uptime KumaはUptimeRobot同様、

  • 死活監視
  • 通知機能
  • ステータスダッシュボード

等の機能を備えていて、Grafana+Prometheus+alertmanagerな死活監視スタックよりも軽量なオールインワン死活監視といった理解をしている。

実際UptimeRobotのほうはすでに活用していて、NASが死ぬとか、停電で自宅鯖が全滅するレベルの障害が起きたときにメールで通知が受けられるようにしてある。

今回はUptime Kumaを使って、podやNode単位での障害のステータスページを作ったり、discordへの通知を行うことにした。

manifests

さっそくだがマニフェストファイルは以下

Namespace

namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: uptime-kuma

PV,PVC

pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-uptime-kuma
spec:
  storageClassName: uptime-kuma
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  nfs:
    server: xxx.xxx.xxx.xxx
    path: /k8s/uptime-kuma
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: uptime-kuma-pvc
  namespace: uptime-kuma
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: uptime-kuma

Service

service.yaml
apiVersion: v1
kind: Service
metadata:
  name: uptime-kuma
  namespace: uptime-kuma
  labels:
    app: uptime-kuma
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: 3001
      protocol: TCP
      name: http
  selector:
    app: uptime-kuma

Deployment

deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: uptime-kuma
  namespace: uptime-kuma
  labels:
    app: uptime-kuma
spec:
  replicas: 1
  selector:
    matchLabels:
      app: uptime-kuma
  template:
    metadata:
      labels:
        app: uptime-kuma
    spec:
      containers:
        - name: uptime-kuma
          image: louislam/uptime-kuma:latest
          ports:
            - containerPort: 3001
              name: http
          volumeMounts:
            - name: uptime-kuma-data
              mountPath: /app/data
          resources:
            limits:
              cpu: "500m"
              memory: "512Mi"
            requests:
              cpu: "200m"
              memory: "256Mi"
      volumes:
        - name: uptime-kuma-data
          persistentVolumeClaim:
            claimName: uptime-kuma-pvc

省略するが、Ingressにもhostを記載しておく。

アクセスしてみる

ダッシュボード

こんな見た目。(落ちてるサーバは友人の公開しているサービス笑)

通知

Discord通知の様子。シンプルで良い。

ステータスページ

ログインが必要な監視画面とは別に、公開用のステータスページを作ることができる。

公開中のマイクラサーバのステータスページを作ってみた。

感想

UptimeRobotみたいな使用感で簡単に死活監視ができそうだった。自宅鯖ユースならGrafanaとか入れるより、こっちのほうが楽かなと思った。

個人的には組み込みでマイクラ鯖の死活監視ができたりするのが良かった。