feat(platform): Add connections (signal-cli-rest-api) service
- Deploy signal-cli-rest-api 0.85 for Hermes Signal notifications - Replace broken astro-orbiter VM (10.1.71.130:8080) with K8s service - ArgoCD-managed GitOps deployment in connections namespace - NFS-backed persistent storage for signal-cli state - Fixes UNREGISTERED_FAILURE affecting midday market cron job - Epcot-themed service (communication pavilion concept) Service endpoint: http://connections.connections.svc.cluster.local:8080
This commit is contained in:
35
cluster/platform/connections/application.yaml
Normal file
35
cluster/platform/connections/application.yaml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Platform: connections (Signal Gateway)
|
||||||
|
# Theme: epcot-connections (EPCOT: Communication & World Showcase)
|
||||||
|
# Wave 8 — Signal-cli REST API for Hermes notifications
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: connections
|
||||||
|
namespace: argocd
|
||||||
|
annotations:
|
||||||
|
argocd.argoproj.io/sync-wave: "8"
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
source:
|
||||||
|
repoURL: https://gitea.mk-labs.cloud/rblundon/homelab.git
|
||||||
|
targetRevision: main
|
||||||
|
path: cluster/platform/connections
|
||||||
|
directory:
|
||||||
|
exclude: "application.yaml"
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: connections
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
retry:
|
||||||
|
limit: 5
|
||||||
|
backoff:
|
||||||
|
duration: 5s
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 3m
|
||||||
67
cluster/platform/connections/deployment.yaml
Normal file
67
cluster/platform/connections/deployment.yaml
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: connections
|
||||||
|
namespace: connections
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
|
app.kubernetes.io/component: messaging-gateway
|
||||||
|
app.kubernetes.io/version: "0.85" # Pin version initially
|
||||||
|
spec:
|
||||||
|
replicas: 1 # MUST be 1 - signal-cli state is not multi-instance safe
|
||||||
|
strategy:
|
||||||
|
type: Recreate # Prevents dual mount of PVC
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
|
app.kubernetes.io/component: messaging-gateway
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
fsGroup: 1000
|
||||||
|
runAsUser: 1000
|
||||||
|
runAsNonRoot: true
|
||||||
|
containers:
|
||||||
|
- name: signal-cli-rest-api
|
||||||
|
image: bbernhard/signal-cli-rest-api:0.85 # Pin version, test upgrades
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
name: http
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
- name: MODE
|
||||||
|
value: "json-rpc" # json-rpc mode for API compatibility
|
||||||
|
volumeMounts:
|
||||||
|
- name: signal-data
|
||||||
|
mountPath: /home/.local/share/signal-cli
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "256Mi"
|
||||||
|
cpu: "100m"
|
||||||
|
limits:
|
||||||
|
memory: "512Mi"
|
||||||
|
cpu: "500m"
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /v1/health
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
failureThreshold: 3
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /v1/health
|
||||||
|
port: 8080
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 5
|
||||||
|
timeoutSeconds: 3
|
||||||
|
failureThreshold: 2
|
||||||
|
volumes:
|
||||||
|
- name: signal-data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: signal-cli-data
|
||||||
8
cluster/platform/connections/namespace.yaml
Normal file
8
cluster/platform/connections/namespace.yaml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: connections
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
|
app.kubernetes.io/component: messaging-gateway
|
||||||
|
theme: epcot
|
||||||
16
cluster/platform/connections/persistentvolumeclaim.yaml
Normal file
16
cluster/platform/connections/persistentvolumeclaim.yaml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: signal-cli-data
|
||||||
|
namespace: connections
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
|
app.kubernetes.io/component: storage
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClassName: nfs-emporium # NFS CSI storage class
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 2Gi # signal-cli state is small, 2Gi provides headroom
|
||||||
|
volumeMode: Filesystem
|
||||||
17
cluster/platform/connections/service.yaml
Normal file
17
cluster/platform/connections/service.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: connections
|
||||||
|
namespace: connections
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
|
app.kubernetes.io/component: messaging-gateway
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
targetPort: 8080
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: connections
|
||||||
Reference in New Issue
Block a user