# 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://:3000 ``` ## 监控和日志 ### 查看日志 ```bash # 查看所有Pod日志 kubectl logs -l app=tankwar-server -n tankwar # 查看特定Pod日志 kubectl logs -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 -n tankwar` - 检查资源配额是否足够 4. **连接问题** - 确认服务已分配外部IP - 检查防火墙规则 ### 调试命令 ```bash # 查看Pod详细信息 kubectl describe pod -l app=tankwar-server -n tankwar # 进入Pod调试 kubectl exec -it -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控制器 - 配置适当的网络策略 - 定期更新镜像以修复安全漏洞 - 监控资源使用情况防止资源耗尽