Files
riotpiao.com/infra/portfolio/base/deployment.yaml
T
Story Crater Bot 6506a639c9
CI / Test (push) Failing after 29s
CI / Build & Push Image (push) Skipped
fix: move LLM config to encrypted ConfigMap (CI-friendly)
Problem: LLM_API_URL was hardcoded to external endpoint
- Uses https://api.riotpiao.com/v1/chat/completions (TLS hairpin)
- Not externalizable for CI/different environments

Solution: Move to encrypted ConfigMap with in-cluster endpoint
- LLM_API_URL: http://api-gateway.api.svc.cluster.local:8080/v1/chat/completions
- No TLS, no nginx hairpin, direct cluster communication
- Encrypted with SOPS for security
- CI can update values.yaml and auto-deploy

Changes:
- Create configmap.enc.yaml (SOPS-encrypted)
- Update deployment.yaml to use configMapKeyRef
- Add SOPS config to kustomization.yaml
- Deployment now references portfolio-llm-config ConfigMap
2026-09-06 23:24:12 -07:00

83 lines
2.1 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: portfolio
namespace: portfolio
labels:
app.kubernetes.io/name: portfolio
app.kubernetes.io/component: web
spec:
replicas: 2
selector:
matchLabels:
app.kubernetes.io/name: portfolio
template:
metadata:
labels:
app.kubernetes.io/name: portfolio
spec:
containers:
- name: portfolio
image: forgejo.riotpiao.com/rock/portfolio:latest
imagePullPolicy: Always
env:
- name: FORGEJO_TOKEN
valueFrom:
secretKeyRef:
name: portfolio-secrets
key: FORGEJO_TOKEN
# OAuth credentials for LLM API (client_credentials grant)
- name: AUTHENTIK_CLIENT_ID
valueFrom:
secretKeyRef:
name: portfolio-agent-oidc
key: CLIENT_ID
- name: AUTHENTIK_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: portfolio-agent-oidc
key: CLIENT_SECRET
- name: AUTHENTIK_TOKEN_URL
valueFrom:
secretKeyRef:
name: portfolio-agent-oidc
key: TOKEN_URL
# LLM API configuration (from encrypted ConfigMap)
- name: LLM_API_URL
valueFrom:
configMapKeyRef:
name: portfolio-llm-config
key: LLM_API_URL
- name: LLM_MODEL
valueFrom:
configMapKeyRef:
name: portfolio-llm-config
key: LLM_MODEL
ports:
- name: http
containerPort: 3000
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 2
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi