forked from k-space/kube
88 lines
2.8 KiB
Markdown
88 lines
2.8 KiB
Markdown
# Cameras
|
|
Camtiler is the umbrella name for our homegrown camera surveilance system.
|
|
|
|
Everything besides [Camera](#camera)s is deployed with Kubernetes.
|
|
|
|
## Components
|
|
![cams.graphviz.svg](cams.graphviz.svg)
|
|
<!-- Manually rendered with https://dreampuf.github.io/GraphvizOnline
|
|
digraph G {
|
|
"camera-operator" -> "camera-motion-detect" [label="deploys"]
|
|
"camera-tiler" -> "cam.k-space.ee/tiled"
|
|
camera -> "camera-tiler"
|
|
camera -> "camera-motion-detect" -> mongo
|
|
"camera-motion-detect" -> "Minio S3"
|
|
|
|
"cam.k-space.ee" -> mongo [label="queries events", decorate=true]
|
|
mongo -> "camtiler-event-broker" [label="transforms object to add (signed) URL to S3", ]
|
|
"camtiler-event-broker" -> "cam.k-space.ee"
|
|
|
|
"Minio S3" -> "cam.k-space.ee" [label="using signed URL from camtiler-event-broker", decorate=true]
|
|
|
|
camera [label="📸 camera"]
|
|
}
|
|
-->
|
|
|
|
### 📸 Camera
|
|
Cameras are listed in [application.yml](application.yml) as `kind: Camera`.
|
|
|
|
Two types of camera hosts:
|
|
- GL-AR150 with [openwrt-camera-images](https://git.k-space.ee/k-space/openwrt-camera-image).
|
|
- [Doors](https://wiki.k-space.ee/e/en/hosting/doors) (Raspberry Pi) with mjpg-streamer.
|
|
|
|
### camera-tiler (cam.k-space.ee/tiled)
|
|
Out-of-bound, connects to cameras and streams to web browser.
|
|
|
|
One instance per every camera
|
|
|
|
#### camera-operator
|
|
Functionally the same as a kubernetes deployment for camera-tiler.
|
|
|
|
Operator/deployer for camera-tiler.
|
|
|
|
### camera-motion-detect
|
|
Connects to cameras, on motion writes events to Mongo and frames to S3.
|
|
|
|
### cam.k-space.ee (logmower)
|
|
Fetches motion-detect events from mongo. Fetches referenced images from S3 (minio).
|
|
|
|
#### camtiler-event-broker
|
|
MitM between motion-detect -> mongo. Appends S3 URLs to the response.
|
|
|
|
## Kubernetes commands
|
|
Apply changes:
|
|
```
|
|
kubectl apply -n camtiler \
|
|
-f application.yml \
|
|
-f minio.yml \
|
|
-f mongoexpress.yml \
|
|
-f mongodb-support.yml \
|
|
-f camera-tiler.yml \
|
|
-f logmower.yml \
|
|
-f ingress.yml \
|
|
-f network-policies.yml \
|
|
-f networkpolicy-base.yml
|
|
```
|
|
|
|
Deploy changes:
|
|
```
|
|
kubectl -n camtiler rollout restart deployment.apps/camtiler
|
|
```
|
|
|
|
Initialize secrets:
|
|
```
|
|
kubectl create secret generic -n camtiler mongodb-application-readwrite-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)"
|
|
kubectl create secret generic -n camtiler mongodb-application-readonly-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)"
|
|
kubectl create secret generic -n camtiler minio-secrets \
|
|
--from-literal="MINIO_ROOT_USER=root" \
|
|
--from-literal="MINIO_ROOT_PASSWORD=$(cat /dev/urandom | base64 | head -c 30)"
|
|
kubectl -n camtiler create secret generic camera-secrets \
|
|
--from-literal=username=... \
|
|
--from-literal=password=...
|
|
```
|
|
|
|
Restart all deployments:
|
|
```
|
|
for j in $(kubectl get deployments -n camtiler -o name); do kubectl rollout restart -n camtiler $j; done
|
|
```
|