feat(deploy): 切换宁波单节点生产拓扑

移除已停用的香港 API、Web、Worker 和边缘 Service 渲染结果,将 Worker 与容量控制器固定到宁波单实例,并在发布成功后清理旧香港资源。\n\n容量控制器忽略最大副本为零的站点,集群环境允许不再声明香港主机;单节点 production acceptance 不再依赖香港 Service、Deployment 或 SSH 回退。\n\n验证:Go 全量测试与 go vet;迁移安全检查;Kustomize 单节点渲染;ShellCheck;cluster release、production acceptance 和 manual release 测试。
This commit is contained in:
2026-08-03 09:59:34 +08:00
parent 5e9a7888ae
commit 4ff85d96e0
12 changed files with 156 additions and 125 deletions
@@ -46,12 +46,9 @@ data:
AI_GATEWAY_ASYNC_WORKER_GLOBAL_HARD_LIMIT: "48"
AI_GATEWAY_ASYNC_WORKER_REFRESH_INTERVAL_SECONDS: "5"
AI_GATEWAY_WORKER_AUTOSCALING_ENABLED: "false"
AI_GATEWAY_WORKER_REPLICAS_NINGBO: "0"
AI_GATEWAY_WORKER_REPLICAS_HONGKONG: "2"
AI_GATEWAY_WORKER_MIN_REPLICAS_NINGBO: "0"
AI_GATEWAY_WORKER_MIN_REPLICAS_HONGKONG: "1"
AI_GATEWAY_WORKER_MAX_REPLICAS_NINGBO: "0"
AI_GATEWAY_WORKER_MAX_REPLICAS_HONGKONG: "2"
AI_GATEWAY_WORKER_REPLICAS_NINGBO: "1"
AI_GATEWAY_WORKER_MIN_REPLICAS_NINGBO: "1"
AI_GATEWAY_WORKER_MAX_REPLICAS_NINGBO: "1"
AI_GATEWAY_WORKER_TARGET_OUTSTANDING_PER_REPLICA: "48"
AI_GATEWAY_WORKER_SCALE_UP_WINDOW_SECONDS: "20"
AI_GATEWAY_WORKER_SCALE_DOWN_STABILIZATION_SECONDS: "600"
+4 -17
View File
@@ -158,7 +158,7 @@ metadata:
app.kubernetes.io/component: capacity-controller
app.kubernetes.io/part-of: easyai-ai-gateway
spec:
replicas: 2
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
@@ -176,22 +176,9 @@ spec:
spec:
serviceAccountName: easyai-capacity-controller
terminationGracePeriodSeconds: 30
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- topologyKey: easyai.io/site
labelSelector:
matchLabels:
app.kubernetes.io/name: easyai-capacity-controller
nodeSelector:
easyai.io/site: ningbo
easyai.io/workload: "true"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: easyai.io/site
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/name: easyai-capacity-controller
securityContext:
runAsNonRoot: true
runAsUser: 10001
@@ -225,7 +212,7 @@ spec:
- name: AI_GATEWAY_WORKER_DATABASE_MAX_CONNS
value: "32"
- name: AI_GATEWAY_POSTGRES_NON_WORKER_CONNECTION_BUDGET
value: "72"
value: "36"
- name: POD_NAMESPACE
valueFrom:
fieldRef:
@@ -438,7 +425,7 @@ metadata:
app.kubernetes.io/component: worker
app.kubernetes.io/part-of: easyai-ai-gateway
spec:
replicas: 0
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
@@ -8,6 +8,52 @@ resources:
- application.yaml
- database.yaml
- network-policy.yaml
patches:
- target:
kind: Deployment
name: easyai-api-hongkong
patch: |-
$patch: delete
apiVersion: apps/v1
kind: Deployment
metadata:
name: easyai-api-hongkong
- target:
kind: Deployment
name: easyai-worker-hongkong
patch: |-
$patch: delete
apiVersion: apps/v1
kind: Deployment
metadata:
name: easyai-worker-hongkong
- target:
kind: Deployment
name: easyai-web-hongkong
patch: |-
$patch: delete
apiVersion: apps/v1
kind: Deployment
metadata:
name: easyai-web-hongkong
- target:
kind: Service
name: api-hongkong-edge
patch: |-
$patch: delete
apiVersion: v1
kind: Service
metadata:
name: api-hongkong-edge
- target:
kind: Service
name: web-hongkong-edge
patch: |-
$patch: delete
apiVersion: v1
kind: Service
metadata:
name: web-hongkong-edge
images:
# Deployment tooling must replace both sentinel digests with release-manifest
# digests before server-side apply.
@@ -48,11 +48,11 @@ metadata:
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
resourceNames: ["easyai-worker-ningbo", "easyai-worker-hongkong"]
resourceNames: ["easyai-worker-ningbo"]
verbs: ["get"]
- apiGroups: ["apps"]
resources: ["deployments/scale"]
resourceNames: ["easyai-worker-ningbo", "easyai-worker-hongkong"]
resourceNames: ["easyai-worker-ningbo"]
verbs: ["get", "update", "patch"]
- apiGroups: [""]
resources: ["pods"]