在 kubernetes 中的 pod 上设置最大生命周期条件

Setting a max lifetime condition on a pod in kuberenetes

我们的容器存在一些奇怪的内存泄漏问题,它们存在的时间越长,占用的资源就越多。我们目前没有资源来调查这些问题(因为它们在一个多月内不会成为问题),但希望避免对 "clean up" 臃肿的容器进行手动操作。

我想做的是以 "time alive" 作为 pod 状态参数的方式配置我们的部署,如果它超过某个值(比如几天),则 pod被杀死并创建一个新的。我更愿意完全在 kubernetes 中执行此操作,因为虽然我们最终会向我们的服务添加一个 "health check" 端点,但暂时无法完成。

实现这种 "max age" 参数的最佳方式是什么?或者,我想我们可以根据资源使用情况触发,但如果使用是临时的,这不是问题,只要资源在短时间内没有释放。

最简单的方法是对内存设置一个硬性资源限制,该限制高于您在临时峰值中看到的资源:达到您预计会在几周内看到的水平。

无论如何这样做可能是个好主意,因为 k8s 将根据请求的资源而不是它们的限制来安排工作负载,因此随着内存使用量的增加,您最终可能会在节点中遇到内存压力。

一个问题是,如果您有显着的内存峰值,那么 k8s 杀死您的 pod 的 pod 重启可能会发生在某些工作负载的中间,因此您需要能够吸收这种影响。

所以,从 the documentation 开始,它看起来像这样(显然 Deployment 比原始的 Pod 更可取,如下所示,这个例子可以转移到PodTemplateSpec):

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec:
  containers:
  - name: ccccc
    image: theimage
    resources:
      requests:
        memory: "64Mi"
      limits:
        memory: "128Mi"