初始化提交

This commit is contained in:
chengcheng
2026-07-09 19:29:46 +08:00
commit 821ffe9e70
25 changed files with 2713 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: easyai-app-config
data:
NUXT_PUBLIC_BASE_APIURL: /api
NUXT_PUBLIC_BASE_SOCKETURL: wss://easyai.example.com/socket.io
NUXT_PUBLIC_SG_APIURL: /asg-api
NUXT_APP_CDN_URL: ""
MALLOC_ARENA_MAX: "2"
MALLOC_TRIM_THRESHOLD_: "131072"
MALLOC_MMAP_THRESHOLD_: "131072"
MALLOC_TOP_PAD_: "131072"
SHARP_CACHE_ENABLED: "false"
SHARP_CONCURRENCY: "1"
CONFIG_COMFYUI_QUENE_REDIS_HOST: CHANGE_ME_REDIS_HOST
CONFIG_COMFYUI_QUENE_REDIS_PORT: "6379"
CONFIG_COMFYUI_QUENE_REDIS_USERNAME: ""
CONFIG_COMFYUI_QUENE_REDIS_DB: "6"
CONFIG_COMFYUI_CACHE_REDIS_DB: "11"
LOG_LEVEL: log,error,warn
WS_GATEWAY_LOG_LEVEL: log,error,warn
CONFIG_TOKEN_EXPIRE: "1800"
CONFIG_PROXY_URL: ""
CONFIG_DOCS_DISABLE: "true"
CONFIG_MQ_PROTOCOL: amqp
CONFIG_MQ_HOST: CHANGE_ME_RABBITMQ_HOST
CONFIG_MQ_PORT: "5672"
CONFIG_MQ_VHOST: /
CONFIG_TCP_HOST: 0.0.0.0
CONFIG_TCP_PORT: "4002"
GATEWAY_CLUSTER_REDIS_ENABLED: "true"
GATEWAY_CLUSTER_REDIS_CHANNEL: easyai:wsgateway:cluster
GATEWAY_CLUSTER_REDIS_ROUTE_PREFIX: easyai:wsgateway:route
GATEWAY_CLUSTER_REDIS_ROUTE_TTL_SEC: "120"
GATEWAY_CLUSTER_REDIS_RECONNECT_INTERVAL_MS: "5000"
GATEWAY_CLUSTER_REDIS_URL: ""
GATEWAY_CLUSTER_REDIS_HOST: CHANGE_ME_REDIS_HOST
GATEWAY_CLUSTER_REDIS_PORT: "6379"
GATEWAY_CLUSTER_REDIS_USERNAME: ""
GATEWAY_CLUSTER_REDIS_DB: "0"
WS_GATEWAY_TCP_EVENT_PATTERN: gateway.event.publish
WS_GATEWAY_TCP_TIMEOUT_MS: "1500"
GATEWAY_INBOUND_TCP_PATTERN: gateway.inbound.command
GATEWAY_INBOUND_TIMEOUT_MS: "5000"
WS_AUTH_REQUIRED: "false"
WS_AUTH_TIMEOUT_MS: "6000"
WS_AUTH_METHODS: none,bearer
WS_AUTH_WS_TICKETS: ""
ASG_REDIS_HOST: CHANGE_ME_REDIS_HOST
ASG_REDIS_PORT: "6379"
ASG_REDIS_DB: "8"
ASG_PORT: "3003"
ASG_TCP_HOST: 0.0.0.0
ASG_TCP_PORT: "4003"
ASG_DOCS_DISABLE: "true"
ASG_MAIN_BACKEND_URL: http://easyai-server:3001
AMS_PORT: "3004"
MEMORY_AI_BASE_URL: http://easyai-server:3001
MEMORY_EMBEDDINGS_PATH: /v1/embeddings
MEMORY_EMBEDDING_MODELS_PATH: /v1/embeddings/models
MEMORY_EMBEDDING_DIMENSION: "1024"
MEMORY_EMBEDDING_MODEL: Qwen3-Embedding-v4
MEMORY_SCORE_CONFIDENCE_BASE: "0.6"
MEMORY_SCORE_CONFIDENCE_GAIN: "0.4"
MEMORY_SCORE_IMPORTANCE_BASE: "0.7"
MEMORY_SCORE_IMPORTANCE_GAIN: "0.3"
MEMORY_DEDUP_MIN_SCORE: "0.92"
MEMORY_TEXT_DEDUP_MIN_SCORE: "0.9"
MEMORY_CHAT_COMPLETIONS_PATH: /v1/chat/completions
MEMORY_CHAT_MODELS_PATH: /v1/models
MEMORY_CHAT_MODEL: qwen-plus
MEMORY_COMPRESSION_ENABLED: "true"
MEMORY_COMPRESSION_MIN_LENGTH: "80"
MEMORY_MAINTENANCE_ENABLED: "true"
MEMORY_MAINTENANCE_DRY_RUN: "false"
MEMORY_MAINTENANCE_BATCH_SIZE: "200"
MEMORY_MAINTENANCE_LLM_ENABLED: "true"
MEMORY_MAINTENANCE_LLM_MAX_PAIRS: "20"
MEMORY_DOCS_DISABLE: "true"
OSS_REGION: us-east-1
OSS_DOMAIN: ""
+38
View File
@@ -0,0 +1,38 @@
apiVersion: v1
kind: Secret
metadata:
name: easyai-app-secret
type: Opaque
stringData:
CONFIG_DB_MONGO_URI: mongodb://CHANGE_ME_MONGO_HOST:27017
CONFIG_DB_MONGO_USERNAME: CHANGE_ME_MONGO_USERNAME
CONFIG_DB_MONGO_PASSWORD: CHANGE_ME_MONGO_PASSWORD
MONGO_INITDB_ROOT_USERNAME: CHANGE_ME_MONGO_USERNAME
MONGO_INITDB_ROOT_PASSWORD: CHANGE_ME_MONGO_PASSWORD
CONFIG_COMFYUI_QUENE_REDIS_PASSWORD: CHANGE_ME_REDIS_PASSWORD
GATEWAY_CLUSTER_REDIS_PASSWORD: CHANGE_ME_REDIS_PASSWORD
ASG_REDIS_PASSWORD: CHANGE_ME_REDIS_PASSWORD
CONFIG_MQ_USER: CHANGE_ME_RABBITMQ_USERNAME
CONFIG_MQ_PASSWORD: CHANGE_ME_RABBITMQ_PASSWORD
CONFIG_JWT_SECRET: CHANGE_ME_LONG_RANDOM_JWT_SECRET
CONFIG_TOKEN_SIGN_SK: CHANGE_ME_LONG_RANDOM_TOKEN_SIGN_KEY
WS_AUTH_BEARER_TOKENS: ""
ASG_DATABASE_URL: postgresql://CHANGE_ME_POSTGRES_USER:CHANGE_ME_POSTGRES_PASSWORD@CHANGE_ME_POSTGRES_HOST:5432/agent_governance?schema=public
MEMORY_DATABASE_URL: postgresql://CHANGE_ME_POSTGRES_USER:CHANGE_ME_POSTGRES_PASSWORD@CHANGE_ME_POSTGRES_HOST:5432/easyai_memory?schema=public
ASG_POSTGRES_USER: CHANGE_ME_POSTGRES_USER
ASG_POSTGRES_PASSWORD: CHANGE_ME_POSTGRES_PASSWORD
ASG_POSTGRES_DB: agent_governance
ASG_ADMIN_USERNAME: admin
ASG_ADMIN_PASSWORD: CHANGE_ME_EASYAI_ADMIN_PASSWORD
MEMORY_AI_API_KEY: ""
SANDBOX_JUPYTER_TOKEN: CHANGE_ME_DISABLE_PUBLIC_JUPYTER_OR_SET_TOKEN
OSS_ENDPOINT: ""
OSS_ACCESS_KEY_ID: ""
OSS_ACCESS_KEY_SECRET: ""
OSS_BUCKET: ""
+137
View File
@@ -0,0 +1,137 @@
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: easyai-web
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: easyai-web
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: easyai-server
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: easyai-server
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 75
behavior:
scaleDown:
stabilizationWindowSeconds: 300
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: ws-gateway
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ws-gateway
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: video-edit
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: video-edit
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 600
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: easyai-asg
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: easyai-asg
minReplicas: 2
maxReplicas: 8
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: agent-memory
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: agent-memory
minReplicas: 2
maxReplicas: 8
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
behavior:
scaleDown:
stabilizationWindowSeconds: 300
+126
View File
@@ -0,0 +1,126 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: easyai-web
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
spec:
ingressClassName: nginx
tls:
- hosts:
- easyai.example.com
secretName: easyai-tls
rules:
- host: easyai.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: easyai-web
port:
number: 3010
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: easyai-api
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/proxy-buffering: "off"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1200"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1200"
spec:
ingressClassName: nginx
tls:
- hosts:
- easyai.example.com
secretName: easyai-tls
rules:
- host: easyai.example.com
http:
paths:
- path: /api(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: easyai-server
port:
number: 3001
- path: /asg-api(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: easyai-asg
port:
number: 3003
- path: /ams-api(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: agent-memory
port:
number: 3004
- path: /sandbox(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: sandbox
port:
number: 8000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: easyai-ws
annotations:
nginx.ingress.kubernetes.io/proxy-buffering: "off"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
spec:
ingressClassName: nginx
tls:
- hosts:
- easyai.example.com
secretName: easyai-tls
rules:
- host: easyai.example.com
http:
paths:
- path: /socket.io
pathType: Prefix
backend:
service:
name: ws-gateway
port:
number: 3002
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: easyai-mcp
annotations:
nginx.ingress.kubernetes.io/proxy-buffering: "off"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
spec:
ingressClassName: nginx
tls:
- hosts:
- easyai.example.com
secretName: easyai-tls
rules:
- host: easyai.example.com
http:
paths:
- path: /mcp
pathType: Prefix
backend:
service:
name: easyai-server
port:
number: 3001
+107
View File
@@ -0,0 +1,107 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: easyai
resources:
- namespace.yaml
- ../../base
- app-config.yaml
- app-secret.yaml
- shared-pvc.yaml
- ingress.yaml
- hpa.yaml
- pdb.yaml
images:
- name: registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai
newTag: latest
- name: registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server
newTag: latest
- name: registry.cn-shanghai.aliyuncs.com/easyaigc/wsgateway
newTag: latest
- name: registry.cn-shanghai.aliyuncs.com/easyaigc/videoedit
newTag: latest
- name: registry.cn-shanghai.aliyuncs.com/easyaigc/sandbox
newTag: latest
- name: registry.cn-shanghai.aliyuncs.com/easyaigc/agent-governance
newTag: latest
- name: registry.cn-shanghai.aliyuncs.com/easyaigc/agent-memory
newTag: latest
patches:
- target:
kind: Deployment
name: easyai-server
patch: |-
- op: replace
path: /spec/template/spec/volumes/0
value:
name: shared-files
persistentVolumeClaim:
claimName: easyai-shared-files
- target:
kind: Deployment
name: easyai-web
patch: |-
- op: add
path: /spec/template/spec/topologySpreadConstraints
value:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: easyai-web
- target:
kind: Deployment
name: easyai-server
patch: |-
- op: add
path: /spec/template/spec/topologySpreadConstraints
value:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: easyai-server
- target:
kind: Deployment
name: ws-gateway
patch: |-
- op: add
path: /spec/template/spec/topologySpreadConstraints
value:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: ws-gateway
- target:
kind: Deployment
name: easyai-asg
patch: |-
- op: add
path: /spec/template/spec/topologySpreadConstraints
value:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: easyai-asg
- target:
kind: Deployment
name: agent-memory
patch: |-
- op: add
path: /spec/template/spec/topologySpreadConstraints
value:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: agent-memory
+7
View File
@@ -0,0 +1,7 @@
apiVersion: v1
kind: Namespace
metadata:
name: easyai
labels:
app.kubernetes.io/name: easyai
app.kubernetes.io/part-of: easyai
+49
View File
@@ -0,0 +1,49 @@
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: easyai-web
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: easyai-web
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: easyai-server
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: easyai-server
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: ws-gateway
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: ws-gateway
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: easyai-asg
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: easyai-asg
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: agent-memory
spec:
minAvailable: 1
selector:
matchLabels:
app.kubernetes.io/name: agent-memory
+13
View File
@@ -0,0 +1,13 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: easyai-shared-files
labels:
app.kubernetes.io/name: easyai-shared-files
spec:
accessModes:
- ReadWriteMany
storageClassName: CHANGE_ME_RWX_STORAGE_CLASS
resources:
requests:
storage: 100Gi