From 195150d9b1dc25c129096f34a3c58947e9233a5b Mon Sep 17 00:00:00 2001 From: douxu Date: Wed, 3 Jun 2026 17:11:54 +0800 Subject: [PATCH] fix: fix K8s service names, deployment command, and GORM logger - rename all K8s services to xxx-service convention and update all configmap references (postgres, mongodb, loki, jaeger) - add explicit command: ["/app/modelrt"] to deployment to prevent args from being treated as the executable (no ENTRYPOINT in Dockerfile) - set deploy_env to development to bypass Redis empty-password guard in non-production Minikube environment - fix GormLogger Info/Warn/Error to use fmt.Sprintf(msg, data...) so GORM printf-style messages are formatted correctly and avoid json: unsupported type: func() time.Time serialization panic - expand pg PVC storage from 2Gi to 6Gi - rename loop variable msg to task in PushTaskToRabbitMQ for clarity - align comment indentation in queue_producer.go --- deploy/k8s/grafana-configmap.yaml | 4 +-- deploy/k8s/grafana-service.yaml | 4 +-- deploy/k8s/jaeger-service.yaml | 10 +++--- deploy/k8s/loki-service.yaml | 4 +-- deploy/k8s/modelrt-configmap.yaml | 6 ++-- deploy/k8s/modelrt-deployment.yaml | 3 +- deploy/k8s/mongodb-service.yaml | 2 +- deploy/k8s/pg-pvc.yaml | 2 +- deploy/k8s/pg-service.yaml | 2 +- deploy/k8s/promtail-configmap.yaml | 2 +- logger/gorm_logger.go | 7 +++-- task/queue_producer.go | 50 +++++++++++++++--------------- 12 files changed, 49 insertions(+), 47 deletions(-) diff --git a/deploy/k8s/grafana-configmap.yaml b/deploy/k8s/grafana-configmap.yaml index 76b2cb0..234a881 100644 --- a/deploy/k8s/grafana-configmap.yaml +++ b/deploy/k8s/grafana-configmap.yaml @@ -10,7 +10,7 @@ data: - name: Loki type: loki access: proxy - url: http://loki:3100 + url: http://loki-service:3100 isDefault: true jsonData: # derivedFields: 从日志的 traceID 字段生成跳转链接到 Jaeger @@ -23,4 +23,4 @@ data: type: jaeger uid: jaeger access: proxy - url: http://jaeger:16686 + url: http://jaeger-service:16686 diff --git a/deploy/k8s/grafana-service.yaml b/deploy/k8s/grafana-service.yaml index 1cc3782..84351ba 100644 --- a/deploy/k8s/grafana-service.yaml +++ b/deploy/k8s/grafana-service.yaml @@ -1,14 +1,14 @@ apiVersion: v1 kind: Service metadata: - name: grafana + name: grafana-service namespace: default spec: ports: - name: http port: 3000 targetPort: 3000 - nodePort: 31000 # Grafana UI: http://:31000 + nodePort: 31000 # Grafana UI: http://:31000 selector: app: grafana type: NodePort diff --git a/deploy/k8s/jaeger-service.yaml b/deploy/k8s/jaeger-service.yaml index d1e4779..ea60d1c 100644 --- a/deploy/k8s/jaeger-service.yaml +++ b/deploy/k8s/jaeger-service.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: jaeger + name: jaeger-serivce labels: app: jaeger spec: @@ -9,19 +9,19 @@ spec: - name: ui port: 16686 targetPort: 16686 - nodePort: 31686 # Jaeger UI,浏览器访问 http://:31686 + nodePort: 31686 # Jaeger UI,浏览器访问 http://:31686 - name: collector-http port: 14268 targetPort: 14268 - nodePort: 31268 # Jaeger 原生 HTTP collector(非 OTel) + nodePort: 31268 # Jaeger 原生 HTTP collector(非 OTel) - name: otlp-http port: 4318 targetPort: 4318 - nodePort: 31318 # OTLP HTTP,集群外使用 :31318 + nodePort: 31318 # OTLP HTTP,集群外使用 :31318 - name: otlp-grpc port: 4317 targetPort: 4317 - nodePort: 31317 # OTLP gRPC,集群外使用 :31317 + nodePort: 31317 # OTLP gRPC,集群外使用 :31317 selector: app: jaeger type: NodePort diff --git a/deploy/k8s/loki-service.yaml b/deploy/k8s/loki-service.yaml index e0df759..cf5ac94 100644 --- a/deploy/k8s/loki-service.yaml +++ b/deploy/k8s/loki-service.yaml @@ -1,14 +1,14 @@ apiVersion: v1 kind: Service metadata: - name: loki + name: loki-service namespace: default spec: ports: - name: http port: 3100 targetPort: 3100 - nodePort: 31100 # 集群外访问: http://:31100 + nodePort: 31100 # 集群外访问: http://:31100 selector: app: loki type: NodePort diff --git a/deploy/k8s/modelrt-configmap.yaml b/deploy/k8s/modelrt-configmap.yaml index b1a6afc..39f2b59 100644 --- a/deploy/k8s/modelrt-configmap.yaml +++ b/deploy/k8s/modelrt-configmap.yaml @@ -5,7 +5,7 @@ metadata: data: config.yaml: | postgres: - host: "192.168.1.101" + host: "postgres-service" port: 5432 database: "demo" user: "postgres" @@ -35,7 +35,7 @@ data: endpoint: "" # Promtail handles log collection in K8s, direct push disabled otel: - endpoint: "jaeger:4318" + endpoint: "jaeger-service:4318" insecure: true ants: @@ -77,7 +77,7 @@ data: service_addr: ":8080" service_name: "modelRT" secret_key: "" # injected via env SERVICE_SECRET_KEY - deploy_env: "production" + deploy_env: "development" dataRT: host: "http://127.0.0.1" diff --git a/deploy/k8s/modelrt-deployment.yaml b/deploy/k8s/modelrt-deployment.yaml index 38a9a23..d6db31f 100644 --- a/deploy/k8s/modelrt-deployment.yaml +++ b/deploy/k8s/modelrt-deployment.yaml @@ -16,8 +16,9 @@ spec: spec: containers: - name: modelrt - image: coslight/modelrt:latest + image: modelrt:v1 imagePullPolicy: IfNotPresent + command: ["/app/modelrt"] args: - "-modelRT_config_dir=/app/configs" - "-modelRT_config_name=config" diff --git a/deploy/k8s/mongodb-service.yaml b/deploy/k8s/mongodb-service.yaml index daf946a..8345287 100644 --- a/deploy/k8s/mongodb-service.yaml +++ b/deploy/k8s/mongodb-service.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: mongodb + name: mongodb-service labels: app: mongodb spec: diff --git a/deploy/k8s/pg-pvc.yaml b/deploy/k8s/pg-pvc.yaml index f172ce7..d3bd112 100644 --- a/deploy/k8s/pg-pvc.yaml +++ b/deploy/k8s/pg-pvc.yaml @@ -7,4 +7,4 @@ spec: - ReadWriteOnce resources: requests: - storage: 2Gi + storage: 6Gi diff --git a/deploy/k8s/pg-service.yaml b/deploy/k8s/pg-service.yaml index 5e11fe0..d525be9 100644 --- a/deploy/k8s/pg-service.yaml +++ b/deploy/k8s/pg-service.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: postgres + name: postgres-service labels: app: postgres spec: diff --git a/deploy/k8s/promtail-configmap.yaml b/deploy/k8s/promtail-configmap.yaml index 0ccf089..888350d 100644 --- a/deploy/k8s/promtail-configmap.yaml +++ b/deploy/k8s/promtail-configmap.yaml @@ -13,7 +13,7 @@ data: filename: /tmp/positions.yaml clients: - - url: http://loki:3100/loki/api/v1/push + - url: http://loki-service:3100/loki/api/v1/push scrape_configs: - job_name: kubernetes-pods diff --git a/logger/gorm_logger.go b/logger/gorm_logger.go index fadd2e6..2387b5f 100644 --- a/logger/gorm_logger.go +++ b/logger/gorm_logger.go @@ -4,6 +4,7 @@ package logger import ( "context" "errors" + "fmt" "time" "gorm.io/gorm" @@ -29,17 +30,17 @@ func (l *GormLogger) LogMode(_ gormLogger.LogLevel) gormLogger.Interface { // Info define func for implementing gormLogger.Interface func (l *GormLogger) Info(ctx context.Context, msg string, data ...any) { - Info(ctx, msg, "data", data) + Info(ctx, fmt.Sprintf(msg, data...)) } // Warn define func for implementing gormLogger.Interface func (l *GormLogger) Warn(ctx context.Context, msg string, data ...any) { - Warn(ctx, msg, "data", data) + Warn(ctx, fmt.Sprintf(msg, data...)) } // Error define func for implementing gormLogger.Interface func (l *GormLogger) Error(ctx context.Context, msg string, data ...any) { - Error(ctx, msg, "data", data) + Error(ctx, fmt.Sprintf(msg, data...)) } // Trace define func for implementing gormLogger.Interface diff --git a/task/queue_producer.go b/task/queue_producer.go index cfacad6..5019d6b 100644 --- a/task/queue_producer.go +++ b/task/queue_producer.go @@ -67,12 +67,12 @@ func (p *QueueProducer) declareInfrastructure() error { // Declare durable direct exchange err := p.ch.ExchangeDeclare( constants.TaskExchangeName, // name - "direct", // type - true, // durable - false, // auto-deleted - false, // internal - false, // no-wait - nil, // arguments + "direct", // type + true, // durable + false, // auto-deleted + false, // internal + false, // no-wait + nil, // arguments ) if err != nil { return fmt.Errorf("failed to declare exchange: %w", err) @@ -81,12 +81,12 @@ func (p *QueueProducer) declareInfrastructure() error { // Declare durable queue with priority support and message TTL _, err = p.ch.QueueDeclare( constants.TaskQueueName, // name - true, // durable - false, // delete when unused - false, // exclusive - false, // no-wait + true, // durable + false, // delete when unused + false, // exclusive + false, // no-wait amqp.Table{ - "x-max-priority": constants.TaskMaxPriority, // support priority levels 0-10 + "x-max-priority": constants.TaskMaxPriority, // support priority levels 0-10 "x-message-ttl": constants.TaskDefaultMessageTTL.Milliseconds(), // message TTL }, ) @@ -99,8 +99,8 @@ func (p *QueueProducer) declareInfrastructure() error { constants.TaskQueueName, // queue name constants.TaskRoutingKey, // routing key constants.TaskExchangeName, // exchange name - false, // no-wait - nil, // arguments + false, // no-wait + nil, // arguments ) if err != nil { return fmt.Errorf("failed to bind queue: %w", err) @@ -148,8 +148,8 @@ func (p *QueueProducer) PublishTask(ctx context.Context, taskID uuid.UUID, taskT ctx, constants.TaskExchangeName, // exchange constants.TaskRoutingKey, // routing key - false, // mandatory - false, // immediate + false, // mandatory + false, // immediate publishing, ) if err != nil { @@ -211,10 +211,10 @@ func (p *QueueProducer) Close() error { func (p *QueueProducer) GetQueueInfo() (*amqp.Queue, error) { queue, err := p.ch.QueueDeclarePassive( constants.TaskQueueName, // name - true, // durable - false, // delete when unused - false, // exclusive - false, // no-wait + true, // durable + false, // delete when unused + false, // exclusive + false, // no-wait amqp.Table{ "x-max-priority": constants.TaskMaxPriority, "x-message-ttl": constants.TaskDefaultMessageTTL.Milliseconds(), @@ -246,22 +246,22 @@ func PushTaskToRabbitMQ(ctx context.Context, cfg config.RabbitMQConfig, taskChan case <-ctx.Done(): logger.Info(ctx, "push task to RabbitMQ stopped by context cancel") return - case msg, ok := <-taskChan: + case task, ok := <-taskChan: if !ok { logger.Info(ctx, "task channel closed, exiting push loop") return } // Restore trace context from the handler that enqueued this message - taskCtx := otel.GetTextMapPropagator().Extract(ctx, propagation.MapCarrier(msg.TraceCarrier)) + taskCtx := otel.GetTextMapPropagator().Extract(ctx, propagation.MapCarrier(task.TraceCarrier)) taskCtx, pubSpan := otel.Tracer("modelRT/task").Start(taskCtx, "task.publish", - oteltrace.WithAttributes(attribute.String("task_id", msg.TaskID.String())), + oteltrace.WithAttributes(attribute.String("task_id", task.TaskID.String())), ) - if err := producer.PublishTaskWithRetry(taskCtx, msg.TaskID, msg.TaskType, msg.Priority, msg.Params, 3); err != nil { + if err := producer.PublishTaskWithRetry(taskCtx, task.TaskID, task.TaskType, task.Priority, task.Params, 3); err != nil { pubSpan.RecordError(err) logger.Error(taskCtx, "publish task to RabbitMQ failed", - "task_id", msg.TaskID, "error", err) + "task_id", task.TaskID, "error", err) } pubSpan.End() } } -} \ No newline at end of file +}