Files
NianAIGC/deploy/ack/go-api.yaml

208 lines
6.5 KiB
YAML

# Go API workload: owns /api, /uploads, and /generated-results from the first
# production deployment. The embedded WorkerLoop replaces the Node Worker; do
# not deploy zhinian-worker in production.
apiVersion: apps/v1
kind: Deployment
metadata:
name: zhinian-go-api
namespace: zhinian
spec:
# Keep one replica until generated assets live in shared OSS storage and the
# RDS/provider connection budget is measured for more.
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app.kubernetes.io/name: zhinian
app.kubernetes.io/component: go-api
template:
metadata:
labels:
app.kubernetes.io/name: zhinian
app.kubernetes.io/component: go-api
spec:
automountServiceAccountToken: false
securityContext:
seccompProfile:
type: RuntimeDefault
containers:
- name: go-api
image: REGISTRY/PROJECT/zhinian-go-api:REPLACE_TAG
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
envFrom:
- configMapRef:
name: zhinian-go-runtime
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: zhinian-go-db
key: DATABASE_URL
# The session secret must be the same value Next.js uses so the
# frontend middleware and the Go backend verify the same cookies.
- name: ZHINIAN_AUTH_SESSION_SECRET
valueFrom:
secretKeyRef:
name: zhinian-web-auth
key: ZHINIAN_AUTH_SESSION_SECRET
- name: ZHINIAN_BOOTSTRAP_ADMIN_PHONE
valueFrom:
secretKeyRef:
name: zhinian-go-bootstrap
key: ZHINIAN_BOOTSTRAP_ADMIN_PHONE
- name: ZHINIAN_BOOTSTRAP_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: zhinian-go-bootstrap
key: ZHINIAN_BOOTSTRAP_ADMIN_PASSWORD
- name: ZHINIAN_BOOTSTRAP_ADMIN_NAME
valueFrom:
secretKeyRef:
name: zhinian-go-bootstrap
key: ZHINIAN_BOOTSTRAP_ADMIN_NAME
optional: true
- name: VOLCENGINE_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: VOLCENGINE_ACCESS_KEY_ID
optional: true
- name: VOLCENGINE_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: VOLCENGINE_SECRET_ACCESS_KEY
optional: true
- name: JIMENG_IMAGE_GENERATE_46_REQ_KEY
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: JIMENG_IMAGE_GENERATE_46_REQ_KEY
optional: true
- name: EVOLINK_API_KEY
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: EVOLINK_API_KEY
optional: true
- name: SEEDANCE_API_KEY
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: SEEDANCE_API_KEY
optional: true
- name: BAILIAN_API_KEY
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: BAILIAN_API_KEY
optional: true
- name: DASHSCOPE_API_KEY
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: DASHSCOPE_API_KEY
optional: true
- name: ALI_OSS_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: ALI_OSS_ACCESS_KEY_ID
optional: true
- name: ALI_OSS_ACCESS_KEY_SECRET
valueFrom:
secretKeyRef:
name: zhinian-go-providers
key: ALI_OSS_ACCESS_KEY_SECRET
optional: true
- name: ZHINIAN_WEBHOOK_SECRET
valueFrom:
secretKeyRef:
name: zhinian-go-secrets
key: ZHINIAN_WEBHOOK_SECRET
- name: ZHINIAN_API_KEYS
valueFrom:
secretKeyRef:
name: zhinian-go-secrets
key: ZHINIAN_API_KEYS
optional: true
- name: ZHINIAN_INTERNAL_WORKER_TOKEN
valueFrom:
secretKeyRef:
name: zhinian-go-secrets
key: ZHINIAN_INTERNAL_WORKER_TOKEN
optional: true
volumeMounts:
- name: rds-ca
mountPath: /etc/zhinian/rds
readOnly: true
- name: data
mountPath: /var/lib/zhinian
- name: tmp
mountPath: /tmp
startupProbe:
httpGet:
path: /api/health
port: http
periodSeconds: 5
failureThreshold: 24
readinessProbe:
httpGet:
path: /api/ready
port: http
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
livenessProbe:
httpGet:
path: /api/health
port: http
periodSeconds: 20
timeoutSeconds: 3
failureThreshold: 3
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: "1"
memory: 512Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
runAsNonRoot: true
runAsUser: 10001
runAsGroup: 10001
readOnlyRootFilesystem: true
volumes:
- name: rds-ca
secret:
secretName: zhinian-rds-ca
- name: data
emptyDir: {}
- name: tmp
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: zhinian-go-api
namespace: zhinian
spec:
type: ClusterIP
selector:
app.kubernetes.io/name: zhinian
app.kubernetes.io/component: go-api
ports:
- name: http
port: 8080
targetPort: 8080