一、为什么选择容器化部署?
传统部署依赖物理机或虚拟机,存在资源浪费、扩展性差、维护复杂等问题。通过 Docker容器化 和 Kubernetes集群管理,可实现:
秒级部署:一键启动服务,无需手动配置环境。
弹性伸缩:根据玩家数量自动扩容/缩容服务器。
跨平台兼容:在Windows/Linux/macOS上无缝迁移。
二、核心工具与架构设计
技术栈
Docker:容器化封装服务端、数据库、登录服务器。
Kubernetes(k8s):集群编排,实现负载均衡和故障自愈。
Helm:Kubernetes的包管理工具,简化部署流程。
架构图解
玩家 → Ingress控制器(Nginx) → Kubernetes集群
┌── 登录服务Pod(3副本) ───┐
└── Service │
├── 游戏服务Pod(自动伸缩) ──┘
└── Service │
└── 数据库StatefulSet(主从)
三、实战:从零部署容器化
环境准备
服务器:至少3台云主机(推荐4核8G,带宽200M)。
工具:Docker Desktop、Minikube(本地测试)或云平台Kubernetes服务(如阿里云ACK)。
编写Docker镜像
游戏服务端镜像(mir-server):
创建 Dockerfile,将服务端文件打包:
FROM windows/servercore:ltsc2019
COPY MirServer /MirServer
CMD ["GameSrv.exe"]
数据库镜像(mysql-mir):
使用官方MySQL镜像,预导入SQL文件:
FROM mysql:5.7
COPY MirDB.sql /docker-entrypoint-initdb.d/
Kubernetes部署
编写Deployment配置文件(mir-deployment.yaml):
apiVersion: apps/v1
kind: Deployment
metadata:
name: game-server
spec:
replicas: 3
selector:
matchLabels:
app: game-server
template:
metadata:
labels:
app: game-server
spec:
containers:
name: game-server
image: mir-server:latest
ports:
containerPort: 7000
resources:
limits:
memory: "4Gi"
cpu: "2"
部署到集群:
kubectl apply -f mir-deployment.yaml
服务暴露与负载均衡
创建 Service 和 Ingress:
apiVersion: v1
kind: Service
metadata:
name: game-service
spec:
selector:
app: game-server
ports:
protocol: TCP
port: 80
targetPort: 7000
type: LoadBalancer
四、进阶运维:自动化与监控
自动扩缩容(HPA)
根据CPU/内存使用率自动调整Pod数量:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: game-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: game-server
minReplicas: 2
maxReplicas: 10
metrics:
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
日志与监控
EFK日志系统:Elasticsearch + Fluentd + Kibana,集中分析游戏日志。
Prometheus监控:实时跟踪服务器性能指标(如帧率、延迟)。
一键回滚与备份
版本回退:
kubectl rollout undo deployment/game-server
数据库备份:
使用 kubectl exec 进入MySQL Pod,执行 mysqldump。
五、跨平台兼容:从本地到云端
本地开发测试
使用 Minikube 在Windows/macOS上模拟集群:
minikube start --driver=docker-desktop
kubectl apply -f mir-deployment.yaml
minikube service game-service # 获取访问IP
云平台部署
阿里云ACK:上传镜像至容器镜像服务,直接部署到Kubernetes集群。
AWS EKS:通过 kubectl 连接集群,配置IAM权限。
六、法律与安全再强调
合规边界:
仅限技术研究,禁止公开运营或盈利。
使用自行编译的客户端,避免侵权。
安全加固:
通过Kubernetes网络策略屏蔽非必要端口。
定期扫描容器镜像漏洞(如Trivy工具)。
