# Tank War Server - Kubernetes部署指南

## 概述

Tank War Server是一个基于WebSocket的多人坦克对战游戏服务器，支持1v1和3v3对战模式。本文档说明如何将服务器部署到Kubernetes集群中。

## 前置要求

- Docker
- Kubernetes集群访问权限
- kubectl命令行工具
- 对目标K8s集群的访问配置

## 部署步骤

### 1. 准备环境

确保您已配置好对目标Kubernetes集群的访问：

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

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

### 2. 构建Docker镜像

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

### 3. 部署到Kubernetes

使用提供的部署脚本：

```bash
# 给脚本执行权限
chmod +x deploy.sh

# 执行部署
./deploy.sh
```

或者手动部署：

```bash
# 创建命名空间
kubectl create namespace tankwar

# 部署应用
kubectl apply -f k8s-deployment.yaml -n tankwar

# 等待部署完成
kubectl rollout status deployment/tankwar-server -n tankwar
```

### 4. 验证部署

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

# 查看服务信息
kubectl get svc -n tankwar

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

## 配置说明

### 环境变量

- `PORT`: 服务器端口（默认：3000）
- `HOST`: 绑定地址（默认：0.0.0.0）
- `NODE_ENV`: 运行环境（默认：production）

### 资源限制

- 内存请求：256Mi，限制：512Mi
- CPU请求：250m，限制：500m

### 健康检查

服务器提供健康检查端点：
- URL: `/health`
- 返回JSON格式的健康状态信息

## 网络配置

服务使用LoadBalancer类型暴露，可以通过外部IP访问。WebSocket连接地址格式：

```
ws://<external-ip>:3000
```

## 监控和日志

### 查看日志

```bash
# 查看所有Pod日志
kubectl logs -l app=tankwar-server -n tankwar

# 查看特定Pod日志
kubectl logs <pod-name> -n tankwar
```

### 扩展和伸缩

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

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

## 故障排除

### 常见问题

1. **镜像构建失败**
   - 检查Docker守护进程是否运行
   - 确认Dockerfile语法正确

2. **部署失败**
   - 检查kubectl集群连接
   - 验证k8s-deployment.yaml文件语法

3. **Pod无法启动**
   - 查看Pod事件：`kubectl describe pod <pod-name> -n tankwar`
   - 检查资源配额是否足够

4. **连接问题**
   - 确认服务已分配外部IP
   - 检查防火墙规则

### 调试命令

```bash
# 查看Pod详细信息
kubectl describe pod -l app=tankwar-server -n tankwar

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

# 查看服务端点
kubectl get endpoints tankwar-server-service -n tankwar
```

## 维护操作

### 更新部署

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

# 更新部署
kubectl rollout restart deployment/tankwar-server -n tankwar
```

### 清理部署

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

# 删除命名空间
kubectl delete namespace tankwar
```

## 安全考虑

- 在生产环境中考虑使用Ingress控制器
- 配置适当的网络策略
- 定期更新镜像以修复安全漏洞
- 监控资源使用情况防止资源耗尽