Skip to content

Snail-Job Kubernetes

1. 服务命名规范

在 Kubernetes 环境中部署 Snail-Job 时,禁止直接使用 snail-job 作为服务名称。为了避免环境变量冲突,应该服务名称添加项目前缀。

正确示例

yaml
# 正确的命名方式 - 使用项目前缀,示例:ruoyi-snail-job
service:
  name: ruoyi-snail-job

错误示例

yaml
# 错误的命名方式 - 会导致环境变量冲突
service:
  name: snail-job

原因说明:Kubernetes 集群中,当创建名为 snail-job 的 Service 时,K8s 会自动为所有 Pod 注入环境变量 SNAIL_JOB_PORT 等。而 Snail-Job 客户端应用本身也使用 snail-job.port 配置项,这会导致环境变量名称冲突,使得客户端应用无法正确解析配置,最终导致应用启动失败。

2. 客户端配置优化

在 Kubernetes 环境中,客户端配置需要特别注意服务发现和网络通信配置。以下是推荐的客户端配置:

yaml
snail-job:
  # 任务调度服务器信息
  server:
    # 服务器IP地址(或域名);在K8s中直接使用服务名称作为host
    # 使用项目前缀的服务名,示例:ruoyi-snail-job
    host: ruoyi-snail-job
    # 服务器通讯端口(不是后台管理页面服务端口)
    port: 17888
  # 命名空间
  namespace: a1NSize1D5jP83Wj0B6Hre094f7kFeHB
  # 接入组名
  group: test_sj_group
  # 接入组 token
  token: SJ_t3GFbbDCpmznt9M9Pp62GYJecE6S9q9H
  # 客户端绑定IP,必须服务器可以访问到
  # 在K8s中建议使用Pod名称或固定标识
  host: ruoyi-plus
  # 客户端通讯端口
  port: 17899
  # 默认8080,若服务端管理页面接口非8080 则需要配置
  openapi:
    port: xxx

3. K8s 服务发现说明

在 Kubernetes 环境中,不需要额外配置 Nginx 负载均衡。Kubernetes Service 天然具备负载均衡能力:

  • 当配置 host: ruoyi-snail-job 时,K8s 会自动将请求负载均衡到所有 Snail-Job 服务端 Pod
  • Service 会自动维护 Endpoints,当 Pod 状态变化时自动更新路由
  • 建议使用 ClusterIP 类型的 Service,内部通信更高效
  • 重要提示:使用带项目前缀的服务名称(如 ruoyi-snail-job)可以避免 K8s 自动生成的环境变量与应用配置冲突

4. 部署架构建议

4.1 服务端部署

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyi-snail-job
spec:
  replicas: 1 # 按需配置多个节点
  selector:
    matchLabels:
      app: ruoyi-snail-job
  template:
    metadata:
      labels:
        app: ruoyi-snail-job
    spec:
      containers:
      - name: snail-job-server
        image: your-registry/snail-job-server:latest
        ports:
        - containerPort: 8080  # 管理页面端口
        - containerPort: 17888 # 通讯端口
---
apiVersion: v1
kind: Service
metadata:
  name: ruoyi-snail-job
spec:
  selector:
    app: ruoyi-snail-job
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: rpc
    port: 17888
    targetPort: 17888

4.2 JAVA 客户端部署

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyi-plus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-plus
  template:
    metadata:
      labels:
        app: ruoyi-plus
    spec:
      containers:
      - name: app
        image: your-registry/ruoyi-plus:latest
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: ruoyi-plus
spec:
  selector:
    app: ruoyi-plus
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: rpc
    port: 17899
    targetPort: 17899