探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存

在本系列的第 1 部分中,我们讨论了如何使用专用游戏服务器,将其与 Docker 打包,然后在Kubernetes 上托管和管理它,这是一个很好的开始。然而,由于我们的 Kubernetes 集群通常是固定大小的,我们可能会耗尽所有可用容量来运行我们需要的所有游戏服务器容器,以匹配所有想玩我们的游戏的玩家——这将是一件非常糟糕的事情。


Kubernetes 集群有很多伸缩选项,我们将在以后的文章中深入介绍一个定制的 Kubernetes 节点伸缩器。首先,我们必须解决一个非常重要的事情:我的游戏服务器实际上占用了多少 CPU 和内存?


没有这些知识,就无法将游戏服务器的 CPU 和/或内存利用率与 Kubernetes 集群中的可用资源进行匹配,因此无法知道在给定大小的集群中可以运行多少个游戏服务器。当我们的游戏人数增加时,我们也将无法计算要添加的节点数(因为它自然会是😉),并且我们要确保集群足够大以容纳所有节点。如果流量开始下降,我们还希望缩小集群规模,以便通过删除不使用的集群节点来节省成本。


Kubernetes Dashboard


很棒的是,CPU 和内存使用率的可视化是 Kubernetes 开箱即用提供的另一个功能。 Kubernetes 捆绑有一个仪表板,该仪表板使我们可以很好地直观了解集群内部发生的事情,例如列出PodServices,为我们提供 CPU,内存使用情况等图表。


微信图片_20220611154433.png


为了安全地连接到 Kubernetes 仪表板,Kubernetes 的命令行工具具有以下命令:


kubectl proxy


运行时将返回以下内容:


Starting to serve on 127.0.0.1:8001


这将创建到 Kubernetes 主服务器的代理连接(假设您有权访问该集群),该主机托管 Kubernetes 集群的 API 和上面显示的仪表板。


如果现在将浏览器指向 http://localhost:8001/ui ,我们将看到仪表板。


确定 CPU 和内存使用率


您可能已经注意到,仪表板为我们提供了整个集群的 CPU 和内存的汇总统计信息,但它也可以在 Pod 级别为我们提供相同的信息!因此,我们需要确定游戏服务器正在使用多少 CPU 和内存的所有工作,就是部署一个包含游戏服务器的 Pod(我们在上一篇文章中进行了设置),并通过在其上运行多个游戏会话来进行一些负载测试 ,并查看提供的图表。


我是在 Paddle Soccer 游戏中这样做的,您可以看到以下结果之一:


微信图片_20220611154453.png


在上面的测试中,这个简单的专用游戏服务器的使用峰值是 0.08CPU 核和略高于 34M 内存。这是我们在专用游戏服务器上进行负载测试时看到的最大使用量,所以我们会在这里画一条线,说明这是我们的服务器使用的上限,添加一些缓冲区,并据此制定计划。


限制CPU和内存的使用


诸如 Docker 之类的软件容器的非常有用的功能之一是,它能够对正在运行的容器的 CPU 和内存使用情况以及其中的进程施加约束。Kubernetes 通过其 Pod 配置向我们展示了这一点,这意味着我们可以明确确保 CPU 和内存使用率不会超过某个阈值,并且不会对在同一节点上运行的其他游戏服务器产生不利影响。考虑到游戏服务器对 CPU 波动的敏感程度,这是非常有用的!


因此,如果我们想限制包含游戏服务器的 PodCPU 使用率,可以通过更新以前的 Pod 定义来做到这一点:


apiVersion: v1
kind: Pod
metadata:
  generateName: "game-"
spec:
  hostNetwork: true
  restartPolicy: Never
  containers:
    - name: soccer-server
      image: gcr.io/soccer/soccer-server:0.1
      env:
        - name: SESSION_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
  resources: # This section limits the cpu usage
    limits:
      cpu: "0.1"


值得注意的是,在示例代码中,我使用 Kubernetes API 提供了与上述配置相同的配置,但是 yaml 版本更易于理解,这是在本系列文章中一直使用的格式。


在上面的示例中,我们将限制设置为 “0.1”,以确保我们的游戏服务器只能访问其所运行的节点上的 CPU 的十分之一。为此,我们在 yaml 中为游戏服务器容器定义添加了带有相应限制的资源部分和cpu 部分。


我选择将最大 CPU 使用率设置为 0.1,以为我们在上面看到的 0.08 内核游戏服务器使用率提供一些填充,同时仍然让我在每个 Kubernetes 集群节点上每个核容纳 10 个游戏服务器,这应该可以很好地满足我们的需求。


我们还可以对内存使用量进行类似的限制,但为简单起见,我们将仅限制 CPU 使用量,最终也仅将 CPU 用于我们的扩展指标。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
15天前
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
8天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:
|
17天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
191 2
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
456 1
|
1月前
|
缓存 监控 负载均衡
提高服务器CPU使用率
提高服务器CPU使用率
97 7
|
1月前
|
存储 缓存 监控
如何提高服务器CPU性能?
如何提高服务器CPU性能?
141 3
|
2月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
128 5
|
3月前
|
Prometheus Kubernetes 监控
在K8S中,Pod占用内存和cpu较高,该如何解决?
在K8S中,Pod占用内存和cpu较高,该如何解决?
|
3月前
|
缓存 Linux 调度
Linux服务器如何查看CPU占用率、内存占用、带宽占用
Linux服务器如何查看CPU占用率、内存占用、带宽占用
977 0
|
3月前
|
Kubernetes 监控 测试技术
在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?
在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?