# Tank War Server - 完整部署指南

## 概述

本指南详细说明如何将Tank War Server部署到由3台CVM组成的Kubernetes集群中。

## 集群信息

目标K8s集群由以下4台CVM组成：
- 43.139.80.61 (host_172.16.16.16) — Master
- 10.1.0.6 (vm-0-6-opencloudos) — Worker
- 172.16.32.10 (vm-32-10-tencentos) — Worker
- 172.16.32.16 (vm-32-16-tencentos) — Worker

SSH连接：`ssh root@host_172.16.16.16`

## 部署前准备

### 1. 环境检查

```bash
# 在server目录下运行测试脚本
cd /Users/hanchengxi/workspace/tankwar_proj/server
./test-deployment.sh
```

### 2. 配置Kubernetes访问

确保kubectl已配置连接到目标集群：

```bash
# 检查集群连接
kubectl cluster-info

# 查看当前上下文
kubectl config current-context

# 如果未配置，需要获取集群的kubeconfig文件
# 通常从集群管理员处获取或通过云平台控制台下载
```

## 部署步骤

### 步骤1：构建Docker镜像

```bash
# 在server目录下构建镜像
docker build -t tankwar-server:latest .

# 验证镜像构建成功
docker images | grep tankwar-server
```

### 步骤2：部署到Kubernetes

```bash
# 方法1：使用部署脚本（推荐）
chmod +x deploy.sh
./deploy.sh

# 方法2：手动部署
kubectl create namespace tankwar --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -f k8s-deployment.yaml -n tankwar
```

### 步骤3：验证部署

```bash
# 运行验证脚本
chmod +x verify-deployment.sh
./verify-deployment.sh

# 或手动验证
kubectl get all -n tankwar
kubectl logs -l app=tankwar-server -n tankwar
```

## 配置文件说明

### Dockerfile
- 基于Node.js 18 Alpine镜像
- 暴露端口3000
- 生产环境配置

### k8s-deployment.yaml
包含以下Kubernetes资源：

1. **ConfigMap**: 环境变量配置
2. **Deployment**: 
   - 3个副本
   - 资源限制：内存512Mi，CPU 500m
   - 健康检查探针
3. **Service**: 
   - LoadBalancer类型
   - 端口3000

## 网络配置

### 服务暴露

服务使用LoadBalancer类型，将通过云平台的负载均衡器暴露：

```bash
# 获取外部IP
kubectl get svc tankwar-server-service -n tankwar

# WebSocket连接地址
ws://<external-ip>:3000
```

### 端口映射

- 容器端口：3000
- 服务端口：3000
- 外部访问端口：3000

## 健康检查

服务器提供HTTP健康检查端点：

```bash
# 健康检查URL
http://<external-ip>:3000/health

# 返回JSON格式的健康状态
{
  "status": "healthy",
  "timestamp": "2024-01-01T00:00:00.000Z",
  "activeConnections": 0,
  "activeRooms": 0,
  "activeTeamRooms": 0
}
```

## 监控和维护

### 查看状态

```bash
# 查看Pod状态
kubectl get pods -n tankwar -w

# 查看服务状态
kubectl get svc -n tankwar

# 查看日志
kubectl logs -l app=tankwar-server -n tankwar --tail=50

# 查看资源使用
kubectl top pods -n tankwar
```

### 扩展和伸缩

```bash
# 扩展副本数量
kubectl scale deployment/tankwar-server --replicas=5 -n tankwar

# 自动伸缩（如果配置了HPA）
kubectl autoscale deployment/tankwar-server --min=3 --max=10 --cpu-percent=80 -n tankwar
```

### 更新部署

```bash
# 重新构建镜像
docker build -t tankwar-server:latest .

# 滚动更新
kubectl rollout restart deployment/tankwar-server -n tankwar

# 查看更新状态
kubectl rollout status deployment/tankwar-server -n tankwar
```

## 故障排除

### 常见问题

1. **镜像构建失败**
   ```bash
   # 检查Docker守护进程
   docker info
   
   # 检查Dockerfile语法
   docker build --no-cache -t tankwar-server:latest .
   ```

2. **Pod无法启动**
   ```bash
   # 查看Pod详情
   kubectl describe pod <pod-name> -n tankwar
   
   # 查看事件
   kubectl get events -n tankwar
   ```

3. **服务无法访问**
   ```bash
   # 检查服务端点
   kubectl get endpoints tankwar-server-service -n tankwar
   
   # 检查网络策略
   kubectl get networkpolicies -n tankwar
   ```

4. **健康检查失败**
   ```bash
   # 检查Pod内部
   kubectl exec -it <pod-name> -n tankwar -- wget -qO- http://localhost:3000/health
   ```

### 调试命令

```bash
# 进入Pod调试
kubectl exec -it <pod-name> -n tankwar -- /bin/sh

# 端口转发本地调试
kubectl port-forward svc/tankwar-server-service 3000:3000 -n tankwar

# 然后访问：http://localhost:3000/health
```

## 清理部署

```bash
# 删除部署
kubectl delete -f k8s-deployment.yaml -n tankwar

# 删除命名空间
kubectl delete namespace tankwar

# 清理镜像
docker rmi tankwar-server:latest
```

## 安全考虑

1. **网络策略**: 配置适当的网络策略限制访问
2. **资源限制**: 设置合理的资源限制防止资源耗尽
3. **镜像安全**: 定期更新基础镜像修复安全漏洞
4. **访问控制**: 配置RBAC权限控制

## 性能优化建议

1. **副本数量**: 根据负载调整副本数量
2. **资源分配**: 根据实际使用情况调整资源限制
3. **连接池**: 考虑使用连接池优化WebSocket连接
4. **监控告警**: 配置监控和告警系统

## 支持信息

如有问题，请检查：
- 服务器日志：`kubectl logs -l app=tankwar-server -n tankwar`
- 部署状态：`kubectl get all -n tankwar`
- 集群状态：`kubectl cluster-info`