OKG技术方案详解
核心架构
GameServerSet
(游戏服组管理)
GameServer
(单服务器抽象)
Pod
(容器组实例)
Load Balancer
(TCP/UDP独立IP:Port)
与K8s原生工作负载对比
| 特性 |
Deployment |
StatefulSet |
OKG GameServerSet |
| 固定身份标识 |
✗ |
✓ |
✓ |
| 原地更新 |
✗ |
✗ |
✓ |
| 热更新支持 |
✗ |
✗ |
✓ |
| 游戏服务器语义 |
✗ |
✗ |
✓ |
| 独立IP端口分配 |
✗ |
✗ |
✓ |
| 定向服务器管理 |
✗ |
部分支持 |
✓ |
关键特性详解
1. 独立IP端口解决方案
# 腾讯云CLB网络配置
network:
networkType: TencentCloud-CLB
networkConf:
- name: ClbIds
value: "lb-primary,lb-secondary" # 支持多CLB冗余
- name: PortProtocols
value: "8080/TCP,8081/UDP" # TCP/UDP端口映射
- name: Fixed
value: "true" # 固定IP地址
原理:OKG架构:客户端 -> CLB/LB -> Pod (4层转发),CLB自动为每个GameServer分配唯一的外网端口(如10001、10002),映射到Pod内部端口,实现玩家直连,避免多次协议解析与Ingress转发开销。
2. 热更新与原地升级
# 原地更新配置
updateStrategy:
rollingUpdate:
podUpdatePolicy: InPlaceIfPossible # 原地更新
maxUnavailable: 25% # 滚动更新比例
type: RollingUpdate
# 多容器架构支持热更新
containers:
- name: game-server # 主游戏容器
image: game:v1.0
- name: sidecar # 辅助容器用于热更新
image: updater:latest
3. 游戏服务器生命周期管理
None
(空闲)
Allocated
(已分配)
Maintaining
(维护中)
WaitToBeDeleted
(待删除)
4. 自定义服务质量
详细实施步骤
前置准备
重要:腾讯云普通节点无法满足独立IP需求,需要创建原生节点或超级节点。
步骤1:集群准备
创建新的K8s集群节点(原生节点或超级节点),确保网络插件支持
步骤2:安装依赖
安装OpenKruise基础组件和TKE扩展网络控制器
步骤3:部署OKG
通过Helm安装OpenKruise GameServer组件
步骤5:部署游戏
创建GameServerSet并验证服务
核心安装命令
# 1. 添加Helm仓库
helm repo add openkruise https://openkruise.github.io/charts/
helm repo update
# 2. 安装OpenKruise基础组件(必需)
helm install kruise openkruise/kruise --version 1.7.0
# 3. 安装OpenKruise GameServer
helm install kruise-game openkruise/kruise-game --version 0.10.0
# 4. 安装TKE扩展网络控制器(腾讯云必需)
kubectl apply -f https://raw.githubusercontent.com/tkestack/tke-extend-network-controller/main/deploy/install.yaml
# 5. 验证安装状态
kubectl get pods -n kruise-system
kubectl get pods -n kruise-game-system
游戏服务器部署示例
apiVersion: game.kruise.io/v1alpha1
kind: GameServerSet
metadata:
name: my-game-server
namespace: game-production
spec:
replicas: 10 # 初始10个游戏服务器
# 更新策略配置
updateStrategy:
rollingUpdate:
podUpdatePolicy: InPlaceIfPossible # 原地更新
maxUnavailable: 30% # 最多30%不可用
# 网络配置 - 腾讯云CLB
network:
networkType: TencentCloud-CLB
networkConf:
- name: ClbIds
value: "lb-xxxxxxxx,lb-yyyyyyyy" # 多CLB高可用
- name: PortProtocols
value: "8080/TCP,8081/UDP" # 游戏端口
- name: Fixed
value: "true" # 固定分配
# 游戏服务器模板
gameServerTemplate:
spec:
containers:
- name: game-server
image: my-registry/game-server:v1.0.0
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 2000m
memory: 4Gi
env:
- name: SERVER_PORT
value: "8080"
- name: GAME_MODE
value: "production"
海外部署方案
支持的云平台
🌏 国内云厂商
- 腾讯云 - TencentCloud-CLB
- 阿里云 - AlibabaCloud-SLB
- 火山引擎 - VolcanoEngine-CLB
- 华为云和京东云 - 网络插件也支持
🌍 海外云厂商
- AWS - Kubernetes-HostPort/NLB
海外部署配置示例
# AWS部署配置
network:
networkType: Kubernetes-HostPort # AWS使用HostPort模式
networkConf:
- name: PortRange
value: "30000-32000" # 端口范围
# 或使用AWS ALB/NLB
network:
networkType: AWS-NLB
networkConf:
- name: LoadBalancerName
value: "game-nlb"
- name: TargetType
value: "instance"
多区域部署架构
最佳实践:采用主区域活跃集群 + 次区域温备集群 + 第三区域冷备集群的三级灾备架构,确保全球服务连续性。
总结与建议
核心价值总结
OKG为游戏行业提供了专业的云原生解决方案,解决了K8s原生工作负载在游戏场景下的不足。通过独立IP端口、热更新、原地升级等特性,显著提升游戏服务质量和运维效率。
实施建议
第一阶段
验证:在alpha4测试环境部署OKG,验证核心功能和性能指标
第二阶段
灰度上线:所有alpha和beta环境部署进行试点,先上H5小程序环境收集反馈优化
第三阶段
迁移实施:逐步迁移所有游戏服务,建立运维规范,最终上线到买量服
第四阶段(持续)
持续优化:关闭alpha4环境,基于监控数据优化配置,探索高级特性
尽快验证技术可行性和业务价值。通过分阶段实施,可以在控制风险的同时,快速获得技术红利,提升竞争优势。