k8s/zoo-mainnet: bring zoo-bot + zoo-build under zoo/universe ownership

Coordination with the Lux universe DX cleanup — Zoo brand sites belong
in Zoo universe, not Lux universe. The corresponding files in
~/work/lux/universe/k8s/zoo-mainnet/ will be removed in the matched
Lux universe commit.

zoo-bot.yaml and zoo-build.yaml each declare a Deployment + Service +
hanzo.ai/v1alpha1 IngressRoute. The previous lux/universe/k8s/zoo-mainnet/
directory had no kustomization.yaml, so these were applied imperatively
to lux-k8s; folding them into the zoo/universe kustomization brings them
under the same brand-bounded reconciliation path as zoo-industries.

Live deployments preserved:
  lux-k8s zoo-mainnet/zoo-bot           1/1   33d
  lux-k8s zoo-mainnet/zoo-build         1/1   34d
  lux-k8s zoo-mainnet/zoo-industries    1/1   33d   (already in repo)

zoo-build image still on ghcr.io/luxfi/build-zoo:0.1.7 — follow-up to
migrate the build pipeline to ghcr.io/zooai/* per the canonical
container registry rule.
This commit is contained in:
Hanzo AI
2026-06-03 11:24:02 -07:00
parent f518621f63
commit 436b90b62f
3 changed files with 187 additions and 0 deletions
+2
View File
@@ -3,6 +3,8 @@ kind: Kustomization
namespace: zoo-mainnet
resources:
- ../base
- zoo-bot.yaml
- zoo-build.yaml
- zoo-industries.yaml
labels:
- pairs:
+73
View File
@@ -0,0 +1,73 @@
# zoo.bot — Zoo Labs Foundation chat/bot SPA.
#
# Lives on lux-k8s zoo-mainnet (Zoo brand sites run alongside Zoo L2
# validators on the Lux cluster — no separate zoo-k8s cluster).
#
# Moved 2026-06-03 from lux/universe/k8s/zoo-mainnet/zoo-bot.yaml as part
# of cross-repo cleanup (brand isolation: Zoo content belongs in Zoo
# universe, not Lux universe).
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zoo-bot
namespace: zoo-mainnet
labels:
app: zoo-bot
spec:
replicas: 1
selector:
matchLabels:
app: zoo-bot
template:
metadata:
labels:
app: zoo-bot
spec:
imagePullSecrets:
- name: ghcr-luxfi
containers:
- name: spa
image: ghcr.io/zooai/zoo-bot:0.1.0
ports:
- containerPort: 3000
readinessProbe:
httpGet: { path: /health, port: 3000 }
initialDelaySeconds: 2
periodSeconds: 10
livenessProbe:
httpGet: { path: /health, port: 3000 }
initialDelaySeconds: 10
periodSeconds: 30
resources:
requests: { cpu: 50m, memory: 32Mi }
limits: { cpu: 200m, memory: 128Mi }
---
apiVersion: v1
kind: Service
metadata:
name: zoo-bot
namespace: zoo-mainnet
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 3000
selector:
app: zoo-bot
---
apiVersion: hanzo.ai/v1alpha1
kind: IngressRoute
metadata:
name: zoo-bot
namespace: zoo-mainnet
spec:
entryPoints: [websecure]
routes:
- match: Host(`zoo.bot`) || Host(`www.zoo.bot`)
kind: Rule
services:
- name: zoo-bot
port: 3000
tls:
certResolver: letsencrypt
+112
View File
@@ -0,0 +1,112 @@
# zoo.builders / build.zoo.network — Zoo developer onboarding SPA.
#
# Lives on lux-k8s zoo-mainnet (Zoo brand sites run alongside Zoo L2
# validators on the Lux cluster — no separate zoo-k8s cluster).
#
# Image is built by luxfi/build CI from the Zoo content image; once Zoo
# CI takes over the build, the image should move to ghcr.io/zooai/* per
# CLAUDE.md container registry rules.
#
# Moved 2026-06-03 from lux/universe/k8s/zoo-mainnet/zoo-build.yaml as
# part of cross-repo cleanup (brand isolation: Zoo content belongs in
# Zoo universe, not Lux universe).
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zoo-build
namespace: zoo-mainnet
labels:
app: zoo-build
spec:
replicas: 1
selector:
matchLabels:
app: zoo-build
template:
metadata:
labels:
app: zoo-build
spec:
imagePullSecrets:
- name: ghcr-luxfi
containers:
- name: build
image: ghcr.io/luxfi/build-zoo:0.1.7
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: production
- name: NEXT_TELEMETRY_DISABLED
value: "1"
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 10
periodSeconds: 30
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
---
apiVersion: v1
kind: Service
metadata:
name: zoo-build
namespace: zoo-mainnet
labels:
app: zoo-build
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 3000
protocol: TCP
selector:
app: zoo-build
---
apiVersion: hanzo.ai/v1alpha1
kind: IngressRoute
metadata:
name: zoo-build
namespace: zoo-mainnet
spec:
entryPoints:
- websecure
routes:
- match: Host(`zoo.builders`) || Host(`www.zoo.builders`)
kind: Rule
services:
- name: zoo-build
port: 3000
- match: Host(`build.zoo.network`)
kind: Rule
middlewares:
- name: redirect-build-zoo-network
services:
- name: zoo-build
port: 3000
tls:
certResolver: letsencrypt
---
apiVersion: hanzo.ai/v1alpha1
kind: Middleware
metadata:
name: redirect-build-zoo-network
namespace: zoo-mainnet
spec:
redirectRegex:
regex: "^https://build\\.zoo\\.network/(.*)"
replacement: "https://zoo.builders/${1}"
permanent: true