Files
weiyu/deploy/k8s/helm/README.md
2025-08-04 13:30:00 +08:00

510 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ByteDesk Helm Chart
ByteDesk 微语智能客服系统的 Helm Chart支持一键部署完整的应用栈。
## 概述
这个 Helm Chart 包含了 ByteDesk 系统的所有组件:
- **ByteDesk 主应用** - 核心客服系统
- **MySQL** - 关系型数据库
- **Redis** - 缓存和会话存储
- **Elasticsearch** - 搜索引擎
- **Apache Artemis** - 消息队列
- **MinIO** - 对象存储
- **Zipkin** - 链路追踪
## 快速开始
### 前置要求
1. **Kubernetes 集群** (1.19+)
2. **Helm** (3.0+)
3. **kubectl** 配置
### 安装 Helm
```bash
# 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# 验证安装
helm version
```
### 部署 ByteDesk
```bash
# 进入 Helm Chart 目录
cd deploy/k8s/helm
# 使用默认配置部署
./deploy.sh
# 或者使用 Helm 命令
helm install bytedesk . -n bytedesk --create-namespace
```
### 自定义配置部署
```bash
# 使用自定义 values 文件
./deploy.sh -f values-prod.yaml -v v1.0.0
# 部署到不同命名空间
./deploy.sh -n production -r bytedesk-prod
# 试运行模式
./deploy.sh -d
```
## 配置说明
### 默认配置
Chart 提供了合理的默认配置,适合开发和测试环境:
- 所有组件都启用
- 使用默认密码(生产环境请修改)
- 资源限制适中
- 持久化存储启用
### 自定义配置
#### 1. 创建自定义 values 文件
```yaml
# values-prod.yaml
global:
imageRegistry: "registry.cn-hangzhou.aliyuncs.com"
bytedesk:
replicaCount: 3
image:
tag: "v1.0.0"
resources:
limits:
cpu: 4000m
memory: 8Gi
requests:
cpu: 2000m
memory: 4Gi
mysql:
auth:
rootPassword: "your-secure-password"
password: "your-secure-password"
redis:
auth:
password: "your-secure-password"
elasticsearch:
auth:
password: "your-secure-password"
# 禁用不需要的组件
zipkin:
enabled: false
```
#### 2. 使用自定义配置部署
```bash
helm install bytedesk . -f values-prod.yaml -n production
```
### 环境变量配置
#### ByteDesk 主应用环境变量
```yaml
bytedesk:
env:
# 数据库配置
SPRING_DATASOURCE_URL: "jdbc:mysql://bytedesk-mysql:3306/bytedesk"
# Redis 配置
SPRING_DATA_REDIS_HOST: "bytedesk-redis"
SPRING_DATA_REDIS_PORT: "6379"
# Elasticsearch 配置
SPRING_ELASTICSEARCH_HOST: "bytedesk-elasticsearch"
SPRING_ELASTICSEARCH_PORT: "9200"
# Artemis 配置
SPRING_ARTEMIS_HOST: "bytedesk-artemis"
SPRING_ARTEMIS_PORT: "61616"
# MinIO 配置
BYTEDESK_MINIO_ENDPOINT: "http://bytedesk-minio:9000"
BYTEDESK_MINIO_BUCKET: "bytedesk"
# Zipkin 配置
SPRING_ZIPKIN_BASE_URL: "http://bytedesk-zipkin:9411"
```
## 部署选项
### 1. 开发环境
```bash
# 最小化部署,只包含必要组件
helm install bytedesk-dev . \
--set zipkin.enabled=false \
--set elasticsearch.enabled=false \
--set bytedesk.replicaCount=1 \
-n bytedesk-dev
```
### 2. 生产环境
```bash
# 高可用部署
helm install bytedesk-prod . \
--set bytedesk.replicaCount=3 \
--set mysql.primary.persistence.size=50Gi \
--set redis.master.persistence.size=20Gi \
--set elasticsearch.master.persistence.size=100Gi \
-f values-prod.yaml \
-n production
```
### 3. 测试环境
```bash
# 使用外部数据库
helm install bytedesk-test . \
--set mysql.enabled=false \
--set redis.enabled=false \
--set bytedesk.env.SPRING_DATASOURCE_URL="jdbc:mysql://external-mysql:3306/bytedesk" \
--set bytedesk.env.SPRING_DATA_REDIS_HOST="external-redis" \
-n bytedesk-test
```
## 管理操作
### 查看部署状态
```bash
# 查看所有资源
kubectl get all -n bytedesk
# 查看 Pod 状态
kubectl get pods -n bytedesk
# 查看服务
kubectl get svc -n bytedesk
# 查看持久化存储
kubectl get pvc -n bytedesk
```
### 升级应用
```bash
# 升级到新版本
helm upgrade bytedesk . \
--set bytedesk.image.tag=v1.0.1 \
-n bytedesk
# 使用部署脚本
./deploy.sh -u -v v1.0.1
```
### 回滚操作
```bash
# 查看历史版本
helm history bytedesk -n bytedesk
# 回滚到上一个版本
helm rollback bytedesk -n bytedesk
# 回滚到指定版本
helm rollback bytedesk 2 -n bytedesk
```
### 卸载应用
```bash
# 卸载应用(保留数据)
helm uninstall bytedesk -n bytedesk
# 完全清理(包括数据)
kubectl delete namespace bytedesk
```
## 故障排除
### 常见问题
#### 1. Pod 启动失败
```bash
# 查看 Pod 状态
kubectl get pods -n bytedesk
# 查看 Pod 详情
kubectl describe pod <pod-name> -n bytedesk
# 查看日志
kubectl logs <pod-name> -n bytedesk
```
#### 2. 存储问题
```bash
# 检查 PVC 状态
kubectl get pvc -n bytedesk
# 查看存储类
kubectl get storageclass
```
#### 3. 网络问题
```bash
# 检查服务状态
kubectl get svc -n bytedesk
# 测试服务连通性
kubectl run test-pod --image=busybox -n bytedesk --rm -it --restart=Never -- nslookup bytedesk-mysql
```
### 调试命令
```bash
# 进入 Pod 调试
kubectl exec -it <pod-name> -n bytedesk -- /bin/bash
# 端口转发
kubectl port-forward svc/bytedesk 9003:9003 -n bytedesk
# 查看事件
kubectl get events -n bytedesk --sort-by='.lastTimestamp'
```
## 安全配置
### 1. 密码管理
生产环境必须修改默认密码:
```yaml
mysql:
auth:
rootPassword: "your-secure-mysql-password"
password: "your-secure-mysql-password"
redis:
auth:
password: "your-secure-redis-password"
elasticsearch:
auth:
password: "your-secure-elasticsearch-password"
```
### 2. 网络策略
```yaml
# 创建网络策略限制 Pod 间通信
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: bytedesk-network-policy
namespace: bytedesk
spec:
podSelector:
matchLabels:
app: bytedesk
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: bytedesk
ports:
- protocol: TCP
port: 9003
egress:
- to:
- podSelector:
matchLabels:
app: mysql
ports:
- protocol: TCP
port: 3306
```
### 3. RBAC 配置
```yaml
# 创建 ServiceAccount 和 RBAC 规则
apiVersion: v1
kind: ServiceAccount
metadata:
name: bytedesk-sa
namespace: bytedesk
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: bytedesk-role
namespace: bytedesk
rules:
- apiGroups: [""]
resources: ["pods", "services", "endpoints"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: bytedesk-rolebinding
namespace: bytedesk
subjects:
- kind: ServiceAccount
name: bytedesk-sa
namespace: bytedesk
roleRef:
kind: Role
name: bytedesk-role
apiGroup: rbac.authorization.k8s.io
```
## 监控和日志
### 1. 健康检查
Chart 配置了健康检查端点:
```bash
# 检查应用健康状态
kubectl exec -it <pod-name> -n bytedesk -- curl http://localhost:9003/actuator/health
```
### 2. 日志收集
```bash
# 查看应用日志
kubectl logs -f deployment/bytedesk -n bytedesk
# 查看所有组件日志
kubectl logs -f -l app=bytedesk -n bytedesk
```
### 3. 监控指标
ByteDesk 应用暴露了 Prometheus 指标:
```bash
# 端口转发访问指标
kubectl port-forward svc/bytedesk 9003:9003 -n bytedesk
# 访问指标端点
curl http://localhost:9003/actuator/prometheus
```
## 扩展和定制
### 1. 添加新的组件
`values.yaml` 中添加新组件配置:
```yaml
# 添加新组件
newComponent:
enabled: true
image:
repository: new-component
tag: "latest"
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 512Mi
```
### 2. 自定义模板
`templates/` 目录下添加新的模板文件:
```yaml
# templates/new-component-deployment.yaml
{{- if .Values.newComponent.enabled }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "bytedesk.fullname" . }}-new-component
namespace: {{ .Release.Namespace }}
spec:
# ... 部署配置
{{- end }}
```
### 3. 集成外部服务
```yaml
# 使用外部数据库
bytedesk:
env:
SPRING_DATASOURCE_URL: "jdbc:mysql://external-mysql.company.com:3306/bytedesk"
SPRING_DATA_REDIS_HOST: "external-redis.company.com"
```
## 最佳实践
### 1. 资源管理
- 根据实际负载调整资源限制
- 监控资源使用情况
- 设置合理的 HPA 策略
### 2. 备份策略
- 定期备份数据库
- 备份配置文件
- 测试恢复流程
### 3. 安全加固
- 使用强密码
- 启用网络策略
- 定期更新镜像
- 扫描安全漏洞
### 4. 性能优化
- 调整 JVM 参数
- 优化数据库查询
- 配置缓存策略
- 监控性能指标
## 支持
如果遇到问题,请:
1. 查看本文档的故障排除部分
2. 检查 Kubernetes 事件和日志
3. 参考 ByteDesk 项目文档
4. 提交 Issue 到项目仓库
## 贡献
欢迎贡献代码和改进建议:
1. Fork 项目
2. 创建功能分支
3. 提交 Pull Request
4. 参与讨论
## 许可证
本项目采用 MIT 许可证。