Homerun2
Homerun2 application stack using the Kustomize Components pattern. Deploys Redis Stack + omni-pitcher + core-catcher microservices into a shared namespace.
Prerequisites
Create a SOPS-encrypted secret with Redis credentials:
kubectl apply -f - <<EOF
---
apiVersion: v1
kind: Secret
metadata:
name: homerun2-flux-secrets
namespace: flux-system
type: Opaque
stringData:
HOMERUN2_REDIS_PASSWORD: "your-secure-password" # pragma: allowlist secret
HOMERUN2_REDIS_PASSWORD_B64: "<base64-encoded-password>"
EOF
Generate the base64 value:
echo -n 'your-secure-password' | base64
Deployment
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: flux-apps
namespace: flux-system
spec:
interval: 1m0s
url: https://github.com/stuttgart-things/flux.git
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: homerun2-flux
namespace: flux-system
spec:
interval: 1h
retryInterval: 1m
timeout: 5m
sourceRef:
kind: GitRepository
name: flux-apps
path: ./apps/homerun2
prune: true
wait: true
postBuild:
substitute:
HOMERUN2_NAMESPACE: homerun2-flux
FLUX_SOURCE_API_VERSION: v1beta2
GATEWAY_NAME: my-gateway
GATEWAY_NAMESPACE: default
DOMAIN: my-cluster.example.com
HOMERUN2_OMNI_PITCHER_VERSION: v1.2.0
HOMERUN2_OMNI_PITCHER_HOSTNAME: pitcher
HOMERUN2_CORE_CATCHER_VERSION: v0.5.0
HOMERUN2_CORE_CATCHER_KUSTOMIZE_VERSION: v0.5.0-web
HOMERUN2_CORE_CATCHER_HOSTNAME: catcher
HOMERUN2_REDIS_VERSION: "17.1.4"
HOMERUN2_REDIS_SERVICE_TYPE: ClusterIP
HOMERUN2_REDIS_PERSISTENCE_ENABLED: "true"
HOMERUN2_REDIS_STORAGE_CLASS: nfs4-csi
HOMERUN2_REDIS_STORAGE_SIZE: 8Gi
substituteFrom:
- kind: Secret
name: homerun2-flux-secrets
Variables
Global
| Variable | Default | Description |
|---|---|---|
HOMERUN2_NAMESPACE |
homerun2 |
Shared namespace for all components |
GATEWAY_NAME |
(required) | Gateway parentRef name |
GATEWAY_NAMESPACE |
default |
Gateway parentRef namespace |
DOMAIN |
(required) | HTTPRoute domain suffix |
FLUX_SOURCE_API_VERSION |
v1 |
OCIRepository API version (v1 or v1beta2) |
Redis Stack
| Variable | Default | Description |
|---|---|---|
HOMERUN2_REDIS_PASSWORD |
(required, from secret) | Redis password |
HOMERUN2_REDIS_PASSWORD_B64 |
(required, from secret) | Base64-encoded Redis password |
HOMERUN2_REDIS_VERSION |
17.1.4 |
Helm chart version |
HOMERUN2_REDIS_SERVICE_TYPE |
ClusterIP |
Redis service type |
HOMERUN2_REDIS_PERSISTENCE_ENABLED |
true |
Enable persistence |
HOMERUN2_REDIS_STORAGE_CLASS |
standard |
Storage class |
HOMERUN2_REDIS_STORAGE_SIZE |
8Gi |
PVC size |
Omni Pitcher
| Variable | Default | Description |
|---|---|---|
HOMERUN2_OMNI_PITCHER_VERSION |
see requirements.yaml |
OCI kustomize base + container image tag |
HOMERUN2_OMNI_PITCHER_HOSTNAME |
(required) | HTTPRoute hostname prefix |
Core Catcher
| Variable | Default | Description |
|---|---|---|
HOMERUN2_CORE_CATCHER_VERSION |
see release.yaml |
Container image tag |
HOMERUN2_CORE_CATCHER_KUSTOMIZE_VERSION |
see requirements.yaml |
OCI kustomize base tag (use -web suffix for web mode) |
HOMERUN2_CORE_CATCHER_HOSTNAME |
(required) | HTTPRoute hostname prefix |
Testing
Send test events to the omni-pitcher /pitch endpoint:
# minimal event
curl -X POST https://pitcher.<DOMAIN>/pitch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-d '{
"title": "Test Message",
"message": "This is a test message"
}'
# full event
curl -X POST https://pitcher.<DOMAIN>/pitch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <AUTH_TOKEN>" \
-d '{
"title": "Deployment Notification",
"message": "Service xyz deployed successfully to production",
"severity": "success",
"author": "ci-pipeline",
"system": "demo-system",
"tags": "deployment,production,success"
}'
# health check
curl https://pitcher.<DOMAIN>/health
Notes
- Uses the Kustomize Components pattern (
redis-stack+omni-pitcher+core-catcher) - Each component is composed via the root
kustomization.yaml - Omni Pitcher and Core Catcher use OCIRepository + inner Flux Kustomization
- Gateway API HTTPRoutes are used for external access (no Ingress)
- See homerun2-omni-pitcher docs and homerun2-core-catcher docs