【阅读原文】戳:ACK One GitOps:让全球化游戏服务持续交付更简单
传统软件交付,耗时且易出错;而在现代软件交付领域,Argo CD 作为一款基于 GitOps 的 Kubernetes 原生的持续交付工具,声明式等特点,让其更加契合云原生时代。使用 Argo CD 持续部署应用,可降低部署复杂性、实现快速回滚、简化审计、减少服务中断。这样的持续交付能力和效果,对于全球化的游戏服务的统一部署,正是所需的。
ACK One GitOps
分布式云容器平台 ACK One [1]是阿里云面向混合云、多集群、分布式计算、容灾等场景推出的企业级分布式云容器平台,提供多集群统一管理能力。通过 ACK One 注册集群 [2]将您的其他公共云厂商和IDC K8s集群接入到阿里云容器服务ACK控制台,并由舰队对这些注册集群以及云上的ACK、ACK Edge集群进行多集群统一的应用分发、流量管理、可观测运维管理、安全管理等。
ACK One GitOps [3]提供了面向多云、多集群、混合云的多集群应用 GitOps 持续交付能力。通过全托管开源的 Argo CD 项目,集成 ACK One 的多集群、阿里云的 RAM SSO 等能力,为您提供开箱即用的 Argo CD 能力,和完整、安全的多集群应用 GitOps CD 体验,快速、一致、安全地实现混合云、多集群下的应用持续部署。
ACK One GitOps 优势如下:
- 开箱即用、免运维。
- 简化多集群应用部署。
a. 支持控制台管理 ApplicationSet、原生 Argo CD UI 体验、阿里云 RAM SSO Argo CD UI。
b. 关联集群自动创建 Argo CD cluster secret。
c. 支持使用客户自定义域名访问 Argo CD UI。
- 提升高可用性:高可用 ArgoCD,支持 5000+ 应用。
- 基于阿里云 RAM 的多租权限管理。
- 完整的可观测性能力。
a. Argo CD 的监控和告警配置,可以查看 ArgoCD 的 metrics 和 Application Controller 等资源使用,及时了解情况。
b. 支持 Argo CD 日志采集和控制台查看:提升可审计能力,便于应用状态异常定位;且避免 kubectl 误操作导致 pod 重启,影响应用状态和应用部署。
- 支持阿里云 Codeup(webhook)。一站式 GitOps 体验。
ACK One GitOps 在游戏行业的应用
在当今全球一体化经济环境下,数字娱乐产业正日益成为文化和商业交流的有力代表。在此背景下大量游戏厂商尝试游戏出海并取得了令人瞩目的成绩,许多游戏以全球同服架构吸引着世界各地广泛的玩家群体。
近年来,有越来越多的游戏行业客户选择 ACK One GitOps(Argo CD)来作为多集群 CD 系统。其主要原因在于:传统的 CI/CD 工具,在多集群多环境部署较为麻烦;且 Argo CD UI 可更好地展示应用及资源的状态,快速回滚等。ACK One GitOps 也尽可能为客户提供更好的体验,更简单的操作。
在游戏行业,ACK One GitOps 通常有 2 种使用场景:
- 一种是通用的场景,多团队协作的多集群多地域应用持续部署(如 dev、staging、production 环境);
- 另一种是,与 OpenKruiseGame 结合使用,来实现游戏服务部署/开服。
对于场景 2,为了游戏用户更好的体验,ACK One GitOps 不仅默认支持OpenKruiseGame 资源的权限,还实现和内置了 GameServerSet 的 Health Check,简化用户体验的同时,让用户掌握准确的游戏服务状态,让游戏服状态一目了然。
多团队协作的多集群应用持续部署
用户可基于阿里云 RAM 账号 SSO 后,进行应用的多租户权限管理,也支持配置自定义的 OIDC。聚焦于个人负责的应用。
通过 GitOps 将应用持续部署到多个环境,实现开发、生产环境隔离的情况下,还能统一管理,并在部署到生产环境时,可以结合 Argo Rollouts 来实现灰度/蓝绿发布。
- IDC 集群可以通过注册集群 [4]关联到 ACK One Fleet。
与 OpenKruiseGame 实现游戏服务多地域一致性交付
OpenKruiseGame [5](OKG)是一个面向多云的开源游戏服 Kubernetes 工作负载,是 CNCF 工作负载开源项目 OpenKruise 在游戏领域的子项目,让游戏服的云原生化变得更加简单、快速、稳定。OpenKruiseGame(OKG)是简化游戏服云原生化的自定义 Kubernetes 工作负载,相比 Kubernetes 内置的无状态(Deployment)、有状态(StatefulSet)等工作负载而言,OpenKruiseGame(OKG)提供了热更新、原地升级、定向管理等常用的游戏服管理功能,是完全面向游戏服场景而设计的 Kubernetes 工作负载。
GameServer 是定向管理运维动作的抽象,主要用于更新顺序控制、游戏服状态控制、游戏服网络变更等定向运维管理动作。GameServerSet 是对一组 GameServer 的抽象,主要用于副本数目管理、游戏服发布等生命周期控制,与原生的 Deployment 和 StatefulSet 工作负载相比,GameServerSet 具备游戏语意,更贴近游戏场景,使得对游戏服务器的运维管理更加方便和高效。
- 在每个 ACK 或 IDC 集群中安装 OpenKruiseGame。
- 使用 application/applicaitonset 通过 ACK One GitOps 发布 GameServerSet 到每个集群,来实现 PvE 和 PvP 类型游戏的发布。
详细内容可参见:
《ACK One x OpenKruiseGame 全球游戏服多地域一致性交付最佳实践》
ACK One GitOps 为多地域游戏服务提供一致性持续交付能力的同时,也尽可能简化用户体验:
- 实现和内置了 GameServerSet 的 Health Check,开箱即用,简化用户体验的同时,让用户掌握准确的游戏服务状态,让游戏服状态一目了然。
- 提供 ApplicationSet UI,快速管理多地域游戏服务部署。
- 在安全管理 [6]的前提下,预置 OpenKruiseGame 资源的权限,无需用户手动添加。
ACK One GitOps 支持 GameServer(Set)的 Health Check
默认情况下,Argo CD 无法理解 GameServerSet (GSS) 和 GameServer (GS) 这类自定义资源的内部状态。而 GameServerSet 是一个 WorkLoad 型资源,这意味着,即使 GSS 所管理的 Pod 未能成功运行,ArgoCD 界面上的应用状态可能依然显示为 Healthy,这会掩盖潜在的问题,误导用户。
所以,ACK One GitOps 基于 Argo CD 的Custom Health Check [7]机制,扩展了 OpenKruiseGame 的 GameServerSet 和 GameServer 的 Health Check,与其管理的真实 Pod 运行情况关联了起来,帮助用户或者运维人员掌握游戏服务的准确的健康状态。并内置到产品中,开箱即用。
原生 Argo CD 无法准确反映 GameServerSet 状态
- 在支持之前,当游戏服 Pod 没有就绪时,GameServerSet 便已经显示为 Healthy,因此整个应用资源的健康状态已经被显示为 Healthy。这样的状态并不准确。
ACK One GitOps 可查看 GameServerSet 准确状态
- 游戏服 Pod 没有就绪,GameServerSet 和整个应用资源的健康状态会被显示为 Progressing:
- 当 Pod 就绪后,GameServerSet 和整体应用的健康状态才会被转为 Healthy:
总结
ACK One GitOps [1]致力于为您提供简单、快速、安全的多集群 GitOps 持续交付能力,让您更加专注于业务开发。欢迎加入 ACK One 客户交流钉钉与我们一同交流。(钉钉群号:35688562)
相关链接:
[1] 分布式云容器平台 ACK One
[2] ACK One 注册集群
[3] ACK One GitOps
[4] 注册集群
[5] OpenKruiseGame
https://openkruise.io/zh/kruisegame/introduction
[6] 安全管理
[7] Custom Health Check
https://argo-cd.readthedocs.io/en/latest/operator-manual/health/#custom-health-checks
我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。
获取关于我们的更多信息~