add redis rocketmq xxljob

This commit is contained in:
孙小云 2025-09-19 09:30:02 +08:00
parent 1611120b20
commit b0079fbb31
19 changed files with 1125 additions and 1 deletions

View File

@ -29,5 +29,5 @@ kubectl get svc nacos -n default
kubectl get ingress nacos-ingress -n default
echo "Nacos 安装完成!"
echo "访问地址: https://nacos-ops.t-aaron.com"
echo "访问地址: https://nacos-ops.t-aaron.com/nacos"
echo "默认用户名/密码: nacos/nacos"

118
redis/README.md Normal file
View File

@ -0,0 +1,118 @@
# Redis 安装指南
本目录包含在 Kubernetes 集群中安装 Redis 的配置文件。
## 文件说明
- `install-redis.sh` - Redis 安装脚本
- `redis-deployment.yaml` - Redis Deployment 配置
- `redis-service.yaml` - Redis Service 配置
- `redis-configmap.yaml` - Redis 配置文件
## 安装步骤
1. 确保 kubectl 已安装并配置好集群连接
2. 运行安装脚本:
```bash
chmod +x install-redis.sh
./install-redis.sh
```
## 配置说明
### Redis 配置
- **端口**: 6379
- **密码**: redis123
- **内存限制**: 512Mi
- **持久化**: 启用 RDB 和 AOF
- **数据目录**: /data
### 服务访问
- **集群内访问**: `redis.default.svc.cluster.local:6379`
- **密码**: redis123
## 使用示例
### 连接 Redis
```bash
# 获取 Redis Pod 名称
kubectl get pods -l app=redis
# 连接到 Redis
kubectl exec -it <redis-pod-name> -n default -- redis-cli -a redis123
```
### 基本操作
```bash
# 设置键值
SET mykey "Hello Redis"
# 获取值
GET mykey
# 查看所有键
KEYS *
# 查看 Redis 信息
INFO
```
### 从应用连接
```yaml
# 在应用的配置中使用
redis:
host: redis.default.svc.cluster.local
port: 6379
password: redis123
```
## 监控和维护
### 查看 Redis 状态
```bash
kubectl get pods -l app=redis
kubectl logs <redis-pod-name>
```
### 查看 Redis 信息
```bash
kubectl exec -it <redis-pod-name> -- redis-cli -a redis123 INFO
```
### 备份数据
```bash
# 创建快照
kubectl exec -it <redis-pod-name> -- redis-cli -a redis123 BGSAVE
# 查看备份文件
kubectl exec -it <redis-pod-name> -- ls -la /data/
```
## 故障排除
### 常见问题
1. **Pod 启动失败**
- 检查资源限制
- 查看 Pod 日志:`kubectl logs <pod-name>`
2. **连接被拒绝**
- 检查 Service 配置
- 验证网络策略
3. **内存不足**
- 调整 maxmemory 配置
- 增加 Pod 内存限制
### 日志查看
```bash
kubectl logs -f <redis-pod-name>
```
## 生产环境建议
1. **持久化存储**: 使用 PersistentVolume 替代 emptyDir
2. **高可用**: 考虑 Redis Sentinel 或 Redis Cluster
3. **监控**: 集成 Prometheus 监控
4. **备份**: 定期备份 RDB 和 AOF 文件
5. **安全**: 使用强密码和网络策略

50
redis/install-redis.sh Executable file
View File

@ -0,0 +1,50 @@
#!/bin/bash
echo "开始安装 Redis 到 Kubernetes 集群..."
# 检查 kubectl 是否可用
if ! command -v kubectl &> /dev/null; then
echo "错误: kubectl 命令未找到,请先安装 kubectl"
exit 1
fi
# 应用 Redis 配置
echo "应用 Redis ConfigMap..."
kubectl apply -f redis-configmap.yaml
echo "应用 Redis Deployment..."
kubectl apply -f redis-deployment.yaml
echo "应用 Redis Service..."
kubectl apply -f redis-service.yaml
# 等待 Pod 启动
echo "等待 Redis Pod 启动..."
kubectl wait --for=condition=ready pod -l app=redis -n default --timeout=300s
# 检查状态
echo "检查 Redis 部署状态..."
kubectl get pods -l app=redis -n default
kubectl get svc redis -n default
# 测试 Redis 连接
echo "测试 Redis 连接..."
REDIS_POD=$(kubectl get pods -l app=redis -n default -o jsonpath='{.items[0].metadata.name}')
if [ ! -z "$REDIS_POD" ]; then
echo "在 Pod $REDIS_POD 中测试 Redis..."
kubectl exec -it $REDIS_POD -n default -- redis-cli ping
if [ $? -eq 0 ]; then
echo "Redis 连接测试成功!"
else
echo "Redis 连接测试失败!"
fi
fi
echo "Redis 安装完成!"
echo "Redis 服务地址: redis.default.svc.cluster.local:6379"
echo "默认密码: redis123"
echo ""
echo "使用示例:"
echo "kubectl exec -it <redis-pod-name> -n default -- redis-cli -a redis123"
echo ""
echo "注意: 请确保已正确配置 Redis 密码和持久化存储"

View File

@ -0,0 +1,61 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
namespace: default
labels:
app: redis
data:
redis.conf: |
# Redis 配置文件
# 网络配置
bind 0.0.0.0
port 6379
timeout 300
tcp-keepalive 60
# 安全配置
requirepass redis123
# 持久化配置
save 900 1
save 300 10
save 60 10000
# RDB 配置
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data
# AOF 配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 内存配置
maxmemory 256mb
maxmemory-policy allkeys-lru
# 日志配置
loglevel notice
logfile ""
# 其他配置
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
# 客户端配置
maxclients 10000
# 慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128
# 延迟监控
latency-monitor-threshold 100

View File

@ -0,0 +1,70 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: default
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: registry.t-aaron.com/redis:7.2-alpine
ports:
- containerPort: 6379
name: redis
command:
- redis-server
- /etc/redis/redis.conf
env:
- name: REDIS_PASSWORD
value: "redis123"
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "200m"
livenessProbe:
exec:
command:
- redis-cli
- -a
- redis123
- ping
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
exec:
command:
- redis-cli
- -a
- redis123
- ping
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
volumeMounts:
- name: redis-config
mountPath: /etc/redis
- name: redis-data
mountPath: /data
volumes:
- name: redis-config
configMap:
name: redis-config
- name: redis-data
emptyDir: {}
restartPolicy: Always

16
redis/redis-service.yaml Normal file
View File

@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
labels:
app: redis
spec:
type: ClusterIP
ports:
- name: redis
port: 6379
targetPort: 6379
protocol: TCP
selector:
app: redis

216
rocketmq/README.md Normal file
View File

@ -0,0 +1,216 @@
# RocketMQ 安装指南
本目录包含在 Kubernetes 集群中安装 RocketMQ 的配置文件。
## 文件说明
- `install-rocketmq.sh` - RocketMQ 安装脚本
- `rocketmq-nameserver-deployment.yaml` - NameServer Deployment 配置
- `rocketmq-broker-deployment.yaml` - Broker Deployment 配置
- `rocketmq-nameserver-service.yaml` - NameServer Service 配置
- `rocketmq-broker-service.yaml` - Broker Service 配置
- `rocketmq-configmap.yaml` - RocketMQ 配置文件
## RocketMQ 架构
RocketMQ 由两个核心组件组成:
### 1. NameServer
- **作用**: 注册中心,管理 Broker 和 Topic 的路由信息
- **端口**: 9876
- **服务地址**: `rocketmq-nameserver.default.svc.cluster.local:9876`
### 2. Broker
- **作用**: 消息存储和转发
- **端口**: 10911 (主端口), 10912 (VIP端口)
- **服务地址**: `rocketmq-broker.default.svc.cluster.local:10911`
## 安装步骤
1. 确保 kubectl 已安装并配置好集群连接
2. 运行安装脚本:
```bash
chmod +x install-rocketmq.sh
./install-rocketmq.sh
```
## 配置说明
### 镜像配置
- **NameServer**: `registry.t-aaron.com/apache/rocketmq:4.9.7`
- **Broker**: `registry.t-aaron.com/apache/rocketmq:4.9.7`
### 资源限制
- **NameServer**: 512Mi-1Gi 内存, 200m-500m CPU
- **Broker**: 1Gi-2Gi 内存, 300m-1000m CPU
### 存储配置
- **日志目录**: `/opt/rocketmq-4.9.7/logs`
- **数据目录**: `/opt/rocketmq-4.9.7/store`
- **配置目录**: `/opt/rocketmq-4.9.7/conf`
## 使用示例
### 查看服务状态
```bash
# 查看 NameServer Pod
kubectl get pods -l app=rocketmq-nameserver
# 查看 Broker Pod
kubectl get pods -l app=rocketmq-broker
# 查看服务
kubectl get svc -l app=rocketmq
```
### 查看日志
```bash
# NameServer 日志
kubectl logs -f <nameserver-pod-name>
# Broker 日志
kubectl logs -f <broker-pod-name>
```
### 进入容器
```bash
# 进入 NameServer 容器
kubectl exec -it <nameserver-pod-name> -- sh
# 进入 Broker 容器
kubectl exec -it <broker-pod-name> -- sh
```
### 测试连接
```bash
# 测试 NameServer 连接
kubectl exec -it <nameserver-pod-name> -- netstat -tlnp | grep 9876
# 测试 Broker 连接
kubectl exec -it <broker-pod-name> -- netstat -tlnp | grep 10911
```
## 应用集成
### Java 应用配置
```properties
# application.properties
rocketmq.name-server=rocketmq-nameserver.default.svc.cluster.local:9876
rocketmq.producer.group=producer-group
rocketmq.consumer.group=consumer-group
```
### Spring Boot 集成
```xml
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.3</version>
</dependency>
```
```java
@RestController
public class MessageController {
@Autowired
private RocketMQTemplate rocketMQTemplate;
@PostMapping("/send")
public String sendMessage(@RequestParam String message) {
rocketMQTemplate.convertAndSend("test-topic", message);
return "Message sent: " + message;
}
}
```
## 监控和维护
### 健康检查
```bash
# 检查 NameServer 健康状态
kubectl get pods -l app=rocketmq-nameserver -o wide
# 检查 Broker 健康状态
kubectl get pods -l app=rocketmq-broker -o wide
```
### 性能监控
```bash
# 查看资源使用情况
kubectl top pods -l app=rocketmq
# 查看详细资源信息
kubectl describe pods -l app=rocketmq
```
### 数据备份
```bash
# 备份 Broker 数据
kubectl exec -it <broker-pod-name> -- tar -czf /tmp/rocketmq-backup.tar.gz /opt/rocketmq-4.9.7/store
# 复制备份文件到本地
kubectl cp <broker-pod-name>:/tmp/rocketmq-backup.tar.gz ./rocketmq-backup.tar.gz
```
## 故障排除
### 常见问题
1. **NameServer 启动失败**
- 检查内存配置
- 查看启动日志
- 验证端口占用
2. **Broker 连接 NameServer 失败**
- 检查网络连接
- 验证 NameServer 地址配置
- 查看 Broker 日志
3. **消息发送失败**
- 检查 Topic 是否存在
- 验证 Producer 配置
- 查看 Broker 状态
4. **消息消费失败**
- 检查 Consumer 配置
- 验证 Topic 和 Tag 配置
- 查看消费日志
### 日志分析
```bash
# 查看错误日志
kubectl logs <pod-name> | grep ERROR
# 查看警告日志
kubectl logs <pod-name> | grep WARN
# 实时查看日志
kubectl logs -f <pod-name>
```
## 生产环境建议
1. **高可用部署**: 部署多个 NameServer 和 Broker 实例
2. **持久化存储**: 使用 PersistentVolume 替代 emptyDir
3. **资源监控**: 集成 Prometheus 和 Grafana 监控
4. **日志管理**: 配置日志收集和分析
5. **安全配置**: 启用 ACL 和网络策略
6. **备份策略**: 定期备份消息数据
7. **性能调优**: 根据业务需求调整 JVM 参数
## 扩展功能
### 管理控制台
可以部署 RocketMQ Console 来管理消息队列:
```bash
# 部署 Console
kubectl apply -f rocketmq-console-deployment.yaml
kubectl apply -f rocketmq-console-service.yaml
```
### 集群部署
对于生产环境,建议部署 RocketMQ 集群:
- 多个 NameServer 实例
- 多个 Broker 实例Master-Slave
- 负载均衡配置

65
rocketmq/install-rocketmq.sh Executable file
View File

@ -0,0 +1,65 @@
#!/bin/bash
echo "开始安装 RocketMQ 到 Kubernetes 集群..."
# 检查 kubectl 是否可用
if ! command -v kubectl &> /dev/null; then
echo "错误: kubectl 命令未找到,请先安装 kubectl"
exit 1
fi
# 应用 RocketMQ 配置
echo "应用 RocketMQ ConfigMap..."
kubectl apply -f rocketmq-configmap.yaml
echo "应用 RocketMQ NameServer Deployment..."
kubectl apply -f rocketmq-nameserver-deployment.yaml
echo "应用 RocketMQ NameServer Service..."
kubectl apply -f rocketmq-nameserver-service.yaml
echo "应用 RocketMQ Broker Deployment..."
kubectl apply -f rocketmq-broker-deployment.yaml
echo "应用 RocketMQ Broker Service..."
kubectl apply -f rocketmq-broker-service.yaml
# 等待 Pod 启动
echo "等待 RocketMQ NameServer Pod 启动..."
kubectl wait --for=condition=ready pod -l app=rocketmq-nameserver -n default --timeout=300s
echo "等待 RocketMQ Broker Pod 启动..."
kubectl wait --for=condition=ready pod -l app=rocketmq-broker -n default --timeout=300s
# 检查状态
echo "检查 RocketMQ 部署状态..."
echo "=== NameServer Pods ==="
kubectl get pods -l app=rocketmq-nameserver -n default
echo "=== Broker Pods ==="
kubectl get pods -l app=rocketmq-broker -n default
echo "=== Services ==="
kubectl get svc -l app=rocketmq -n default
# 测试 RocketMQ 连接
echo "测试 RocketMQ NameServer 连接..."
NAMESERVER_POD=$(kubectl get pods -l app=rocketmq-nameserver -n default -o jsonpath='{.items[0].metadata.name}')
if [ ! -z "$NAMESERVER_POD" ]; then
echo "在 Pod $NAMESERVER_POD 中测试 NameServer..."
kubectl exec -it $NAMESERVER_POD -n default -- sh -c "netstat -tlnp | grep 9876"
if [ $? -eq 0 ]; then
echo "RocketMQ NameServer 连接测试成功!"
else
echo "RocketMQ NameServer 连接测试失败!"
fi
fi
echo "RocketMQ 安装完成!"
echo "NameServer 地址: rocketmq-nameserver.default.svc.cluster.local:9876"
echo "Broker 地址: rocketmq-broker.default.svc.cluster.local:10911"
echo ""
echo "使用示例:"
echo "1. 查看 NameServer 日志: kubectl logs -f <nameserver-pod-name> -n default"
echo "2. 查看 Broker 日志: kubectl logs -f <broker-pod-name> -n default"
echo "3. 进入 NameServer 容器: kubectl exec -it <nameserver-pod-name> -n default -- sh"
echo ""
echo "注意: 请确保已正确配置 RocketMQ 的存储和网络策略"

View File

@ -0,0 +1,57 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-broker
namespace: default
labels:
app: rocketmq-broker
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-broker
template:
metadata:
labels:
app: rocketmq-broker
spec:
containers:
- name: rocketmq-broker
image: registry.t-aaron.com/apache/rocketmq:5.3.2
command:
- sh
- mqbroker
ports:
- containerPort: 10909
name: broker-admin
- containerPort: 10911
name: broker
- containerPort: 10912
name: broker-vip
env:
- name: JAVA_OPT_EXT
value: "-Xms1g -Xmx1g -Xmn512m"
- name: NAMESRV_ADDR
value: "rocketmq-nameserver:9876"
resources:
requests:
memory: "1Gi"
cpu: "300m"
limits:
memory: "2Gi"
cpu: "1000m"
livenessProbe:
tcpSocket:
port: 10911
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
tcpSocket:
port: 10911
initialDelaySeconds: 30
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
restartPolicy: Always

View File

@ -0,0 +1,24 @@
apiVersion: v1
kind: Service
metadata:
name: rocketmq-broker
namespace: default
labels:
app: rocketmq-broker
spec:
type: ClusterIP
ports:
- name: broker-admin
port: 10909
targetPort: 10909
protocol: TCP
- name: broker
port: 10911
targetPort: 10911
protocol: TCP
- name: broker-vip
port: 10912
targetPort: 10912
protocol: TCP
selector:
app: rocketmq-broker

Binary file not shown.

View File

@ -0,0 +1,144 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: rocketmq-config
namespace: default
labels:
app: rocketmq
data:
broker.conf: |
# RocketMQ Broker 配置文件
# Broker 集群名称
brokerClusterName=DefaultCluster
# Broker 名称
brokerName=broker-a
# Broker ID (0 表示 Master)
brokerId=0
# 删除文件时间点默认凌晨4点
deleteWhen=04
# 文件保留时间默认48小时
fileReservedTime=48
# Broker 角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# NameServer 地址
namesrvAddr=rocketmq-nameserver:9876
# Broker 监听端口
listenPort=10911
# Broker 对外服务端口
brokerIP1=
# Broker 对外服务端口2
brokerIP2=
# 存储路径
storePathRootDir=/home/rocketmq/store
# CommitLog 存储路径
storePathCommitLog=/home/rocketmq/store/commitlog
# 消息队列存储路径
storePathConsumeQueue=/home/rocketmq/store/consumequeue
# 消息索引存储路径
storePathIndex=/home/rocketmq/store/index
# checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/store/checkpoint
# abort 文件存储路径
abortFile=/home/rocketmq/store/abort
# 限制的消息大小
maxMessageSize=65536
# 发送消息线程池数量
sendMessageThreadPoolNums=128
# 拉消息线程池数量
pullMessageThreadPoolNums=128
# 注册Broker到NameServer的超时时间
registerBrokerTimeoutMills=3000
# 发送心跳间隔
heartbeatBrokerInterval=30000
# 持久化Consumer消费进度间隔
persistConsumerOffsetInterval=5000
# 是否允许 Broker 自动创建Topic
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup=true
# 是否启动时允许重复注册Broker
checkThreadPoolQueueSize=1000
# 客户端回调线程池数量
clientCallbackExecutorThreads=8
# 消费线程池最小线程数
consumeThreadMin=20
# 消费线程池最大线程数
consumeThreadMax=20
# 消费线程池队列大小
consumeConcurrentlyMaxSpan=2000
# 消费超时时间
consumeTimeout=15m
# 消费失败重试次数
maxReconsumeTimes=16
# 消费失败重试间隔
retryMaxTimes=16
# 发送消息超时时间
sendMessageTimeout=3000
# 压缩消息体阈值
compressMsgBodyOverHowmuch=4096
# 是否压缩消息体
compressedReadEnable=true
# 是否启用消息轨迹
traceTopicEnable=false
# ACL 配置
aclEnable=false
# 消息过滤
messageFilterClass=
# 是否启用消息过滤
enablePropertyFilter=false
# 是否启用消息过滤
enableConsumeMessageExtProperty=false
# 是否启用消息过滤
enableConsumeMessageExtProperty=false
# 是否启用消息过滤
enableConsumeMessageExtProperty=false

View File

@ -0,0 +1,51 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: rocketmq-nameserver
namespace: default
labels:
app: rocketmq-nameserver
spec:
replicas: 1
selector:
matchLabels:
app: rocketmq-nameserver
template:
metadata:
labels:
app: rocketmq-nameserver
spec:
containers:
- name: rocketmq-nameserver
image: registry.t-aaron.com/apache/rocketmq:5.3.2
command:
- sh
- mqnamesrv
ports:
- containerPort: 9876
name: nameserver
env:
- name: JAVA_OPT_EXT
value: "-Xms512m -Xmx512m -Xmn128m"
resources:
requests:
memory: "512Mi"
cpu: "200m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
tcpSocket:
port: 9876
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
tcpSocket:
port: 9876
initialDelaySeconds: 10
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
restartPolicy: Always

View File

@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: rocketmq-nameserver
namespace: default
labels:
app: rocketmq-nameserver
spec:
type: ClusterIP
ports:
- name: nameserver
port: 9876
targetPort: 9876
protocol: TCP
selector:
app: rocketmq-nameserver

100
xxljob/README.md Normal file
View File

@ -0,0 +1,100 @@
# XXL-JOB 安装说明
## 概述
XXL-JOB 是一个分布式任务调度平台,本目录包含了在 Kubernetes 集群中部署 XXL-JOB 的所有配置文件。
## 文件说明
- `xxljob-deployment.yaml` - XXL-JOB Admin 部署配置
- `xxljob-service.yaml` - XXL-JOB Admin 服务配置
- `xxljob-ingress.yaml` - XXL-JOB Admin 入口配置
- `install-xxljob.sh` - 自动安装脚本
## 安装前准备
### 1. 数据库准备
确保 MySQL 数据库已安装并运行,并创建 `xxl_job` 数据库:
```sql
CREATE DATABASE xxl_job DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
### 2. 数据库初始化
执行 XXL-JOB 提供的数据库初始化脚本 `/sql/xxl_job.sql`
### 3. 镜像准备
确保以下镜像已推送到镜像仓库:
- `registry.t-aaron.com/xxl-job/xxl-job-admin:latest`
## 安装步骤
### 方法一:使用安装脚本(推荐)
```bash
chmod +x install-xxljob.sh
./install-xxljob.sh
```
### 方法二:手动安装
```bash
# 应用部署配置
kubectl apply -f xxljob-deployment.yaml
# 应用服务配置
kubectl apply -f xxljob-service.yaml
# 应用入口配置
kubectl apply -f xxljob-ingress.yaml
```
## 访问信息
- **访问地址**: https://xxljob-ops.t-aaron.com
- **默认用户名**: admin
- **默认密码**: 123456
## 配置说明
### 数据库连接
默认配置连接到名为 `mysql` 的 MySQL 服务:
- 数据库: xxl_job
- 用户名: root
- 密码: 123456
如需修改数据库连接信息,请编辑 `xxljob-deployment.yaml` 文件中的 `PARAMS` 环境变量。
### 访问令牌
默认访问令牌为 `default_token`,如需修改请编辑 `xxljob-deployment.yaml` 文件。
## 验证安装
安装完成后,可以通过以下命令检查部署状态:
```bash
# 检查 Pod 状态
kubectl get pods -l app=xxl-job-admin
# 检查服务状态
kubectl get svc xxl-job-admin
# 检查入口状态
kubectl get ingress xxl-job-admin-ingress
```
## 故障排除
### 常见问题
1. **Pod 启动失败**: 检查数据库连接配置是否正确
2. **无法访问**: 检查 Ingress 配置和域名解析
3. **数据库连接失败**: 确认 MySQL 服务是否正常运行
### 日志查看
```bash
kubectl logs -l app=xxl-job-admin
```
## 卸载
如需卸载 XXL-JOB执行以下命令
```bash
kubectl delete -f xxljob-ingress.yaml
kubectl delete -f xxljob-service.yaml
kubectl delete -f xxljob-deployment.yaml
```

37
xxljob/install-xxljob.sh Executable file
View File

@ -0,0 +1,37 @@
#!/bin/bash
echo "开始安装 XXL-JOB 到 Kubernetes 集群..."
# 检查 kubectl 是否可用
if ! command -v kubectl &> /dev/null; then
echo "错误: kubectl 命令未找到,请先安装 kubectl"
exit 1
fi
# 应用 XXL-JOB 配置
echo "应用 XXL-JOB Deployment..."
kubectl apply -f xxljob-deployment.yaml
echo "应用 XXL-JOB Service..."
kubectl apply -f xxljob-service.yaml
echo "应用 XXL-JOB Ingress..."
kubectl apply -f xxljob-ingress.yaml
# 等待 Pod 启动
echo "等待 XXL-JOB Pod 启动..."
kubectl wait --for=condition=ready pod -l app=xxl-job-admin -n default --timeout=300s
# 检查状态
echo "检查 XXL-JOB 部署状态..."
kubectl get pods -l app=xxl-job-admin -n default
kubectl get svc xxl-job-admin -n default
kubectl get ingress xxl-job-admin-ingress -n default
echo "XXL-JOB 安装完成!"
echo "访问地址: https://xxljob-ops.t-aaron.com"
echo "默认用户名/密码: admin/123456"
echo ""
echo "注意: 请确保MySQL数据库已正确配置并且xxl_job数据库已创建"
echo "数据库初始化脚本: /sql/xxl_job.sql"

View File

@ -0,0 +1,57 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: xxl-job-admin
namespace: default
labels:
app: xxl-job-admin
spec:
replicas: 1
selector:
matchLabels:
app: xxl-job-admin
template:
metadata:
labels:
app: xxl-job-admin
spec:
containers:
- name: xxl-job-admin
image: registry.t-aaron.com/xxl-job/xxl-job-admin:latest
ports:
- containerPort: 8080
name: http
env:
- name: PARAMS
value: "--spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=123456 --xxl.job.accessToken=default_token"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
volumeMounts:
- name: xxl-job-logs
mountPath: /data/applogs
volumes:
- name: xxl-job-logs
emptyDir: {}
restartPolicy: Always

View File

@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xxl-job-admin-ingress
namespace: default
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
traefik.ingress.kubernetes.io/router.tls: "true"
spec:
tls:
- hosts:
- xxljob-ops.t-aaron.com
secretName: tls
rules:
- host: xxljob-ops.t-aaron.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: xxl-job-admin
port:
number: 8080

View File

@ -0,0 +1,17 @@
apiVersion: v1
kind: Service
metadata:
name: xxl-job-admin
namespace: default
labels:
app: xxl-job-admin
spec:
type: ClusterIP
ports:
- name: http
port: 8080
targetPort: 8080
protocol: TCP
selector:
app: xxl-job-admin