The minute I saw the UI, I told myself: I want this. Uptime Kuma is “a fancy self-hosted monitoring tool”, and yes it’s fancy. On top of that, it also supports a long list of notification types to send you alert if the target is down.
It’s pretty easy to set up with docker, but I want to deploy it to my “Kubernetes Pi cluster”, so a little bit of extra work is needed.
Installation#
It’s always a good idea to create a separate namespace for the service
1
2
3
4
| apiVersion: v1
kind: Namespace
metadata:
name: uptime-kuma
|
Since it has a Web UI we’d like to create a load balancer with fixed IP for it, so we can visit it at http://<LB-IP>:3001
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| apiVersion: v1
kind: Service
metadata:
name: uptime-kuma-tcp
namespace: uptime-kuma
spec:
type: LoadBalancer
loadBalancerIP: <LB-IP>
ports:
- name: web-ui
protocol: TCP
port: 3001
targetPort: 3001
selector:
app: uptime-kuma
|
Create a PersistentVolume (PV) on the NFS server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv-uptime-kuma
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /nfs/export/uptime-kuma
server: <NFS-server-IP>
|
Create a PersistentVolumeClaim (PVC) for the Uptime Kuma pod
1
2
3
4
5
6
7
8
9
10
11
12
13
| apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: uptime-kuma-pvc
namespace: uptime-kuma
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: slow
|
Finally, create the deployment for Uptime Kuma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| apiVersion: apps/v1
kind: Deployment
metadata:
name: uptime-kuma
namespace: uptime-kuma
spec:
selector:
matchLabels:
app: uptime-kuma
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: uptime-kuma
spec:
containers:
- name: uptime-kuma
image: louislam/uptime-kuma:1
imagePullPolicy: IfNotPresent
env:
# only need to set PUID and PGUI because of NFS server
- name: PUID
value: "1000"
- name: PGID
value: "1000"
ports:
- containerPort: 3001
name: web-ui
resources:
limits:
cpu: 200m
memory: 512Mi
requests:
cpu: 50m
memory: 128Mi
livenessProbe:
tcpSocket:
port: web-ui
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
scheme: HTTP
path: /
port: web-ui
initialDelaySeconds: 30
periodSeconds: 10
volumeMounts:
- name: data
mountPath: /app/data
volumes:
- name: data
persistentVolumeClaim:
claimName: uptime-kuma-pvc
|
That’s it.
Monitor#
It can even be used to monitor things outside of the home network, for example, my website.
Notification#
You’d be amazed on how many tools can used by Uptime Kuma to send notifications, such as Telegram, Slack, Email etc.. For me the best option is sending notifications to my Discord server:
Reference#