【问题标题】:how to modify pod memory limit of a running pod如何修改正在运行的 Pod 的 Pod 内存限制
【发布时间】:2019-01-23 16:31:38
【问题描述】:

我正在使用 YML 创建 pod 并指定了资源请求和限制。现在我不知道如何修改正在运行的 pod 的资源限制。例如

memory-demo.yml

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      limits:
        memory: "200Mi"
      requests:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

然后我运行命令 oc create -f memory-demo.yml 并创建一个 pod 名称 memory-demo。

我的问题是我应该怎么做才能从200Mi --> 600 Mi 修改内存限制,我是否需要删除现有的 pod 并使用修改后的 YML 文件重新创建 pod?

我是个新手。需要帮助。

【问题讨论】:

  • 是否有可能在正在运行的 pod 上进行这样的更改?我可以同时访问 web console 和 CLI。
  • Pod 是不可变的,因此您通过 Pods API 应用的任何更改都将在创建 pod 后被忽略。当您对 Pod 的需求发生变化时,请参阅有关使用 Deployment 管理 Pod 重新创建的答案。
  • 谢谢ctt。此信息很有帮助。我不知道 pod 的不变性概念。

标签: docker kubernetes openshift


【解决方案1】:

首先,对于大多数人来说,您不太可能真的想直接(重新)创建 Pod。深入了解Deployment 是什么以及它是如何工作的。然后,您只需将更改应用到部署中的规范模板,kubernetes 将升级该部署中的所有 pod,以在免提滚动更新中匹配新规范。

实时更改正在运行的容器的内存限制当然是可能的,但不能通过 kubernetes 进行(如果这样做,不会反映在 kube 状态中)。看docker update

【讨论】:

  • 感谢 Radek 'Goblin' Pieczonka。我将尝试使用部署创建 pod。但就我而言,我只是想知道,如果一个 pod 是直接使用 oc create -f <file.yml> 创建的,那么可以做些什么来更新内存限制规范。正如 aove ctt 回复的那样,pod 是不可变的,我们通过 Pods API 应用的任何 chage 在创建 pod 后都将被忽略。我只是想知道这些更改将如何使用 Deployment 推出,这意味着部署是否会使规范更改为实时运行的 Pod,或者它还会使用新规范重新创建 Pod?
  • 它将删除旧的 pod 并创建新的符合新规范的 pod。
【解决方案2】:

您可以使用replace命令根据指定配置文件的内容修改现有对象(documentation

oc replace -f memory-demo.yml

编辑:但是,某些规范无法更新。唯一的方法是删除并重新创建 pod。

【讨论】:

  • 嗨,谢谢 hgiasac,我尝试使用 oc replace -f <yml.file> 命令,但出现错误 The Pod "memory-consumer" is invalid: spec: Forbidden: pod updates may not change fields other than containers[*].image` 或 spec.activeDeadlineSeconds
  • 对不起,我的错误。某些规格无法更新。唯一的方法是删除并重新创建 pod。
猜你喜欢
  • 2019-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2021-09-12
  • 2018-08-06
  • 1970-01-01
  • 2020-11-27
  • 2023-03-14
相关资源
最近更新 更多