Skip to content

Commit 85bbe16

Browse files
Retire Frank and promote Felix (#2356)
* Retire Frank and promote Felix Replace the Frank Kubernetes app with Felix, remove stale Frank Authentik and Slack definitions, and drop the obsolete Frank descheduler policy. Add Felix Authentik and Slack configuration, preserve the Goldilocks/VPA namespace behavior from Frank, and update Slack documentation for the new app name. * chore: regenerate Helm manifests --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent fca376e commit 85bbe16

35 files changed

Lines changed: 382 additions & 618 deletions

kubernetes/descheduler/helm/templates/configmap.yaml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,6 @@ data:
4444
enabled:
4545
- PodLifeTime
4646
- RemovePodsHavingTooManyRestarts
47-
- name: frank-daily-restart
48-
pluginConfig:
49-
- args:
50-
evictLocalStoragePods: true
51-
name: DefaultEvictor
52-
- args:
53-
maxPodLifeTimeSeconds: 86400
54-
namespaces:
55-
include:
56-
- frank
57-
states:
58-
- Running
59-
name: PodLifeTime
60-
plugins:
61-
deschedule:
62-
enabled:
63-
- PodLifeTime
6447
- name: node-utilization
6548
pluginConfig:
6649
- args:

kubernetes/descheduler/helm/templates/cronjob.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ spec:
1919
metadata:
2020
name: descheduler
2121
annotations:
22-
checksum/config: c44366ab197059f0c572e61f1ffd0b76e77ecb742cc3465ef008e2e2ea87a5c9
22+
checksum/config: e9a9ab4fceb73cd039544c1623189d0a475d066fe375b666455078932bb05531
2323
labels:
2424
app.kubernetes.io/name: descheduler
2525
app.kubernetes.io/instance: descheduler

kubernetes/descheduler/values.yaml

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,23 +32,6 @@ deschedulerPolicy:
3232
enabled:
3333
- PodLifeTime
3434
- RemovePodsHavingTooManyRestarts
35-
- name: frank-daily-restart
36-
pluginConfig:
37-
- name: DefaultEvictor
38-
args:
39-
evictLocalStoragePods: true
40-
- name: PodLifeTime
41-
args:
42-
namespaces:
43-
include:
44-
- frank
45-
maxPodLifeTimeSeconds: 86400 # 24 hours
46-
states:
47-
- Running
48-
plugins:
49-
deschedule:
50-
enabled:
51-
- PodLifeTime
5235
- name: node-utilization
5336
pluginConfig:
5437
- name: DefaultEvictor
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22
trap 'kill 0; wait; exit 0' TERM INT
33

4-
API_DIR="/home/node/.openclaw/workspace/www/games/api"
4+
API_DIR="/opt/workspace/www/games/api"
55
LOG_DIR="$API_DIR/logs"
66
LOG_FILE="$LOG_DIR/server.log"
77
RESTART_FILE="$API_DIR/.restart"
@@ -11,7 +11,7 @@ KEEP=3
1111
mkdir -p "$LOG_DIR"
1212
: >> "$LOG_FILE"
1313

14-
# Background log rotator - checks every 60s
14+
# Background log rotator - checks every 60 seconds.
1515
(while sleep 60; do
1616
size=$(stat -c%s "$LOG_FILE" 2>/dev/null || echo 0)
1717
if [ "$size" -gt "$MAX_BYTES" ]; then
@@ -25,20 +25,20 @@ mkdir -p "$LOG_DIR"
2525
fi
2626
done) &
2727

28-
# Stream log to stdout for kubectl logs
28+
# Stream log to stdout for kubectl logs.
2929
tail -f "$LOG_FILE" &
3030

3131
cd "$API_DIR" || exit 1
3232

33-
# Main loop restarts bun in-process to avoid CrashLoopBackOff.
33+
# Main loop restarts bun in-process to avoid CrashLoopBackOff.
3434
while true; do
3535
rm -f "$RESTART_FILE"
3636
bun install >> "$LOG_FILE" 2>&1
3737

3838
bun run --watch server.js >> "$LOG_FILE" 2>&1 &
3939
BUN_PID=$!
4040

41-
# Wait for .restart trigger or bun exit
41+
# Wait for .restart trigger or bun exit.
4242
while kill -0 "$BUN_PID" 2>/dev/null; do
4343
if [ -f "$RESTART_FILE" ]; then
4444
rm -f "$RESTART_FILE"

kubernetes/felix/deployment.yaml

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
---
2+
apiVersion: apps/v1
3+
kind: Deployment
4+
5+
metadata:
6+
name: felix
7+
annotations:
8+
reloader.stakater.com/auto: 'true'
9+
10+
spec:
11+
replicas: 1
12+
strategy:
13+
type: Recreate
14+
selector:
15+
matchLabels:
16+
app.kubernetes.io/name: felix
17+
app.kubernetes.io/instance: felix
18+
template:
19+
metadata:
20+
name: felix
21+
labels:
22+
app.kubernetes.io/name: felix
23+
app.kubernetes.io/instance: felix
24+
spec:
25+
serviceAccountName: felix
26+
automountServiceAccountToken: false
27+
securityContext:
28+
runAsNonRoot: true
29+
runAsUser: 10000
30+
runAsGroup: 10000
31+
fsGroup: 10000
32+
initContainers:
33+
- name: www
34+
image: nginxinc/nginx-unprivileged:1.29-alpine@sha256:0c79d56aee561a1d81c63f00eee5fb5fe29279560cdc55e91425133104c7fbe6
35+
restartPolicy: Always
36+
ports:
37+
- containerPort: 8080
38+
name: www
39+
protocol: TCP
40+
securityContext:
41+
runAsUser: 10000
42+
runAsGroup: 10000
43+
allowPrivilegeEscalation: false
44+
capabilities:
45+
drop:
46+
- ALL
47+
readOnlyRootFilesystem: true
48+
seccompProfile:
49+
type: RuntimeDefault
50+
volumeMounts:
51+
- name: data
52+
mountPath: /data
53+
subPath: workspace
54+
readOnly: true
55+
- name: nginx-config
56+
mountPath: /etc/nginx/conf.d
57+
readOnly: true
58+
- name: nginx-tmp
59+
mountPath: /tmp
60+
- name: nginx-cache
61+
mountPath: /var/cache/nginx
62+
- name: api
63+
image: oven/bun:1.3.13-alpine@sha256:4de475389889577f346c636f956b42a5c31501b654664e9ae5726f94d7bb5349
64+
restartPolicy: Always
65+
command:
66+
- /bin/sh
67+
- /etc/api/api-entrypoint.sh
68+
ports:
69+
- containerPort: 3001
70+
name: api
71+
protocol: TCP
72+
env:
73+
- name: DATABASE_URL
74+
valueFrom:
75+
secretKeyRef:
76+
name: felix-db-app
77+
key: uri
78+
- name: PORT
79+
value: '3001'
80+
- name: BUN_INSTALL_CACHE_DIR
81+
value: /tmp
82+
- name: BUN_RUNTIME_TRANSPILER_CACHE_PATH
83+
value: /tmp/bun-cache
84+
securityContext:
85+
runAsUser: 10000
86+
runAsGroup: 10000
87+
allowPrivilegeEscalation: false
88+
capabilities:
89+
drop:
90+
- ALL
91+
readOnlyRootFilesystem: true
92+
seccompProfile:
93+
type: RuntimeDefault
94+
volumeMounts:
95+
- name: data
96+
mountPath: /opt/workspace
97+
subPath: workspace
98+
readOnly: false
99+
- name: api-tmp
100+
mountPath: /tmp
101+
- name: api-entrypoint
102+
mountPath: /etc/api
103+
readOnly: true
104+
containers:
105+
- name: hermes
106+
image: docker.io/nousresearch/hermes-agent:v2026.6.5@sha256:9ad3b04ec916ea2c2da22358fd43b024c788d74073210695af88bfc2e63869b4
107+
args:
108+
- gateway
109+
- run
110+
ports:
111+
- name: gateway
112+
containerPort: 8642
113+
- name: dashboard
114+
containerPort: 9119
115+
env:
116+
- name: API_SERVER_ENABLED
117+
value: 'true'
118+
- name: API_SERVER_HOST
119+
value: 0.0.0.0
120+
- name: HERMES_DASHBOARD
121+
value: '1'
122+
- name: HERMES_DASHBOARD_OIDC_ISSUER
123+
value: https://auth.k.oneill.net/application/o/felix-dashboard/
124+
- name: HERMES_DASHBOARD_OIDC_CLIENT_ID
125+
value: felix-dashboard
126+
- name: HERMES_DASHBOARD_PUBLIC_URL
127+
value: https://felix-dashboard.k.oneill.net
128+
envFrom:
129+
- secretRef:
130+
name: felix-secrets
131+
volumeMounts:
132+
- name: data
133+
mountPath: /opt/data
134+
- name: kube-api-access
135+
mountPath: /var/run/secrets/kubernetes.io/serviceaccount
136+
readOnly: true
137+
volumes:
138+
- name: kube-api-access
139+
projected:
140+
defaultMode: 0444
141+
sources:
142+
- serviceAccountToken:
143+
expirationSeconds: 3600
144+
path: token
145+
- configMap:
146+
name: kube-root-ca.crt
147+
items:
148+
- key: ca.crt
149+
path: ca.crt
150+
- downwardAPI:
151+
items:
152+
- fieldRef:
153+
fieldPath: metadata.namespace
154+
path: namespace
155+
- name: data
156+
persistentVolumeClaim:
157+
claimName: felix-data
158+
- name: nginx-config
159+
configMap:
160+
name: felix-nginx-config
161+
- name: api-entrypoint
162+
configMap:
163+
name: felix-api-entrypoint
164+
defaultMode: 0755
165+
- name: nginx-tmp
166+
emptyDir:
167+
sizeLimit: 1Gi
168+
- name: nginx-cache
169+
emptyDir:
170+
sizeLimit: 1Gi
171+
- name: api-tmp
172+
emptyDir:
173+
sizeLimit: 10Gi
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,29 @@ apiVersion: external-secrets.io/v1
33
kind: ExternalSecret
44

55
metadata:
6-
name: frank-secrets
6+
name: felix-secrets
77

88
spec:
99
secretStoreRef:
1010
name: production
1111
kind: ClusterSecretStore
1212
target:
13-
name: frank-secrets
13+
name: felix-secrets
1414
creationPolicy: Owner
1515
data:
16-
- secretKey: OPENCLAW_GATEWAY_TOKEN
16+
- secretKey: API_SERVER_KEY
1717
remoteRef:
18-
key: frank
19-
property: gateway-api-token
18+
key: felix
19+
property: api-server-key
2020
- secretKey: SLACK_BOT_TOKEN
2121
remoteRef:
22-
key: frank
22+
key: felix
2323
property: bot-user-oauth-token
2424
- secretKey: SLACK_APP_TOKEN
2525
remoteRef:
26-
key: frank
26+
key: felix
2727
property: socket-mode-token
28-
- secretKey: BRAVE_API_KEY
28+
- secretKey: SLACK_ALLOWED_USERS
2929
remoteRef:
30-
key: frank
31-
property: brave-api-key
30+
key: felix
31+
property: slack-allowed-users
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
apiVersion: networking.k8s.io/v1
3+
kind: Ingress
4+
5+
metadata:
6+
name: felix-dashboard
7+
namespace: felix
8+
annotations:
9+
cert-manager.io/cluster-issuer: letsencrypt
10+
ak-type: oidc
11+
ak-oidc-client-type: public
12+
ak-oidc-callback: /auth/callback
13+
14+
spec:
15+
tls:
16+
- hosts:
17+
- felix-dashboard.k.oneill.net
18+
secretName: felix-dashboard-tls
19+
rules:
20+
- host: felix-dashboard.k.oneill.net
21+
http:
22+
paths:
23+
- path: /
24+
pathType: Prefix
25+
backend:
26+
service:
27+
name: felix-dashboard
28+
port:
29+
number: 9119
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,31 @@ apiVersion: networking.k8s.io/v1
33
kind: Ingress
44

55
metadata:
6-
name: frank-www
7-
namespace: frank
6+
name: felix-www
7+
namespace: felix
88
annotations:
99
cert-manager.io/cluster-issuer: letsencrypt
1010
ak-type: simple
1111
gethomepage.dev/enabled: 'true'
12-
gethomepage.dev/name: Frank
12+
gethomepage.dev/name: Felix
1313
gethomepage.dev/description: Personal Assistant
1414
gethomepage.dev/group: Productivity
15-
gethomepage.dev/icon: mdi-cash-multiple
16-
gethomepage.dev/pod-selector: app.kubernetes.io/name=frank
15+
gethomepage.dev/icon: mdi-robot
16+
gethomepage.dev/pod-selector: app.kubernetes.io/name=felix
1717

1818
spec:
1919
tls:
2020
- hosts:
21-
- frank.k.oneill.net
22-
secretName: frank-www-tls
21+
- felix.k.oneill.net
22+
secretName: felix-www-tls
2323
rules:
24-
- host: frank.k.oneill.net
24+
- host: felix.k.oneill.net
2525
http:
2626
paths:
2727
- path: /
2828
pathType: Prefix
2929
backend:
3030
service:
31-
name: frank-www
31+
name: felix-www
3232
port:
3333
number: 8080

0 commit comments

Comments
 (0)