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: xxx3. 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: 178884.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