繁体   English   中英

以编程方式使用 Kubernetes pod 内存

[英]Kubernetes pod memory usage programatically

我有一个用例,在我的 jax-rs rest api 中暴露将执行内存密集型操作,例如生成 pdf 并将其作为响应发送。 我想在开始执行业务逻辑之前检查 pod 内存使用情况,如果当前内存使用率 > 50% ,我想向用户发送错误响应,要求他稍后再试。 我如何检查我的 rest api 中的 kubernetes pod 内存使用情况。 甚至有可能吗?

我当前的代码有点像下面。

@Path("/doSomeMemoryStuff")
@Produces("text/plain")
public Response doStuff(){

     int memoryUsage = getPodCurrentMemoryUsage();  //Get pod current memory usage
     if( memoryUsage <= 50 ) {

          //do Some memory intensive operation
      }
      else{
           //memory usage is more than 50 % , return error
           return Response.ok("Try again later.").build();
          }
  }         

如何从我的 rest api 中找出 pod 的当前内存使用情况。 提前致谢。

严格来说,我们可以将您的陈述解释为“自动使用 Kubernetes pod 内存” ,因为如果您的进程不时消耗大量需要释放的资源,您可以使用Vertical Pod Autoscaler

一些有趣的参考资料:

  1. https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
  2. https://docs.aws.amazon.com/eks/latest/userguide/vertical-pod-autoscaler.html
  3. https://cloud.google.com/kubernetes-engine/docs/concepts/verticalpodautoscaler

当一个进程或另一个进程的资源需求非常不同时,使用 VPA 是合适的。

如果不是这种情况(或多或少所有请求将使用已知数量的资源)或者即使您使用 VPA,建议您限制您的服务不接受请求,如果它们正在处理昂贵的操作,Kubernetes 将根据负载自动增加或减少 Pod 的数量,您的用户将收到 503 错误,这正是表明他们现在无法提供服务,应该稍后再试。

也就是说:

  1. 如果不是绝对必要,不要使用 VPA。
  2. 使用足够数量的 pod 配置您的部署。
  3. 将 pod 中的服务限制为单个并发请求(或适合您的资源配置的多个)。
  4. 不要做任何特别的事情,如果您的系统已达到您设置的限制,只需让用户收到 503(您的用户界面会将错误转换为“稍后再试” )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM