当前位置: 首页 > 知识库问答 >
问题:

Kubernetes的请求真的有保证吗?

宓跃
2023-03-14

我在一个EKS节点上运行一个pod,有2500万个请求,没有限制——它通常使用3000万个左右。我想测试请求是否真的得到了保证,所以我在同一个节点上运行了一个CPU压力测试盒,有3000万个请求,并且再次没有限制。

这导致原来的pod无法使用超过1500m的CPU,远远低于它的要求。然后,当我关掉压力吊舱时,它又恢复使用3000米。

有很多Kubernetes的网页都说,请求是pod“保证”的内容,但这仅仅意味着对调度的保证,还是应该是一种保证。如果有保证,为什么我的pod CPU使用会受到限制(请注意,pod没有限制)。

共有1个答案

公孙辰龙
2023-03-14

请求不能保证资源(尤其是CPU)在运行时可用。如果您将请求和限制设置得非常接近,您会有更好的期望,但您需要系统中的每个pod都进行合作,以获得真正的保证。

资源请求仅影响pod的初始调度。在您的示例中,有一个pod请求2.5 CPU,另一个pod请求3 CPU。如果您的节点有8个CPU,则可以在同一个节点上调度这两个节点,但如果该节点只有4个CPU,则它们需要在单独的节点上运行(如果您有群集自动缩放器,它可以创建一个新节点)。

为了继续这个例子,假设pod被调度在具有8个CPU的同一节点上。现在它们已经被调度,资源请求不再重要。两个pod都没有资源限制,但假设较小的pod实际上尝试使用3个CPU,而较大的pod(多线程压力测试)使用13个CPU。这超过了系统的物理容量,因此内核将为这两个进程分配处理器周期。

对于CPU使用率,如果节点过度使用,您只会看到所有进程都会变慢。内存或磁盘(“临时存储”)都可能导致POD被逐出并在不同节点上重新调度;被逐出的吊舱是超出其资源请求最多的吊舱。内存还可能导致节点耗尽物理内存,而pod可能会被OOMKilled。

如果每个pod都将资源请求和限制设置为相同的值,那么您确实可以大致保证资源可用,因为没有什么比pod调度器分配的资源能够使用更多的资源。对于单个pod和非CPU资源,如果资源请求和限制相同,那么如果节点过度提交,您的pod不会被逐出(因为它不能超过其请求)。另一方面,大多数进程通常不会完全使用它们的资源请求,因此,将请求设置得足够高,以保证不会被逐出也意味着会导致节点拥有未使用的资源,而集群作为一个整体的效率会较低(需要更多的节点来完成相同的工作,而且成本较高)(但由于POD不会经常被杀死,因此更可靠)。

 类似资料:
  • 我有一个设置为接收来自WooCommerce的网络钩子的Rails应用程序。具体来说,我正在寻找创建订单的时间。我已经测试并验证了它在我protect_from_forgery时是否有效,除了创建。现在我正在尝试通过验证网络钩子来保护我的应用程序。WooCommerce的留档声明在请求标头中传递以下秘密: 秘密:一个可选的密钥,用于生成请求正文的HMAC-SHA256哈希,以便接收者可以验证Web

  • Making authenticated requests(请求身份验证) 通过 access tokens 进行身份验证 在REST URL中使用当前用户ID 删除 access token 应用中,创建和验证用户的基础流程过程是: 注册用户通过 User.register(), 继承 PersistedModel 对象 使用 User.login(), 让用户在客户端获得 access tok

  • 我想用c#登录我学校的网站。使用软件Fiddler,我设法捕获了我的浏览器发出的帖子请求和我在c#中重新创建的帖子请求。它们似乎完全相同,但我得到的回应是不同的。如果发布请求相同,至少使用相同的状态代码,服务器理论上不应该以相同的方式响应吗?当我使用我自己的客户端时,我得到响应代码200,但是用我的浏览器我得到303(应该是)。 我注意到,浏览器中的WebForm内容要大得多,但客户端请求中使用的

  • 问题内容: 我正在尝试将API查询输入python。命令行 提供一些json输出。myToken是一个十六进制变量,始终保持不变。我想从python进行此调用,以便我可以遍历不同的id并分析输出。有任何想法吗?在需要身份验证之前,我已经使用urllib2进行了此操作。我也查看了请求模块,但无法弄清楚该怎么做。 非常感谢。 问题答案: 该请求包有一个用于HTTP请求的一个非常好的API,加入了自定义

  • 我有以下关于“放心代码”的帖子请求: 我想把它参数化。请建议。 参数 ID,电子邮件。 当我声明字符串变量id、email并尝试传入body()时,它不起作用。 非工作代码:

  • 问题内容: 我尝试了python 请求库文档中提供的示例。 使用,我得到了响应代码,但是我想获得所请求的每个页面的内容。例如,这不起作用: 问题答案: 注意 下面的答案是不适用于请求v0.13.0 +。编写此问题后,异步功能已移至。但是,你可以将其替换为下面的内容,它应该可以工作。 我已经留下了这个答案,以反映原始问题,即有关使用请求的问题。 要异步执行多个任务,你必须: 为每个对象定义一个函数(