如何以编程方式修改 运行 k8s pod 状态条件?

How to programmatically modify a running k8s pod status conditions?

我正在尝试修改我的 pod 的 运行 状态,它由部署控制器从命令行 kubectl patch 和 k8s python 客户端管理 API.它们似乎都不起作用

在命令行中,我尝试了策略合并匹配和 JSON 合并补丁,但都不起作用。例如我正在尝试修补 pod 条件以使 status 字段变为 False

kubectl -n foo-ns patch pod foo-pod-18112 -p '{
  "status": {
    "conditions": [
      {
        "type": "PodScheduled",
        "status": "False"
      },
      {
        "type": "Ready",
        "status": "False"
      },
      {
        "type": "ContainersReady",
        "status": "False"
      },
      {
        "type": "Initialized",
        "status": "False"
      }
    ],
    "phase": "Running"
  }
}' --type merge

来自pythonAPI

# definition of various pod states
ready_true        = { "type": "Ready", "status": "True" }
ready_false       = { "type": "Ready", "status": "False" }
scheduled_true    = { "type": "PodScheduled", "status": "True" }
cont_ready_true   = { "type": "ContainersReady", "status": "True" }
cont_ready_false  = { "type": "ContainersReady", "status": "False" }
initialized_true  = { "type": "Initialized", "status": "True" }
initialized_false = { "type": "Initialized", "status": "False" }

patch = {"status": { "conditions": [ready_false, initialized_false, cont_ready_false, scheduled_true ], "phase" : "Running" }}

p_status = v1.patch_namespaced_pod_status(podname, "default",  body=patch)

虽然 运行 上面的代码片段,但我没有看到任何错误,并且响应 p_status 已修改所有 pod 条件,如 patch 中应用的那样,但我没有未看到来自 API 服务器的任何与此 pod 状态更改相关的事件。

可能是部署控制器正在将更改回滚到工作配置?我正在寻找修补 pod 条件的方法并测试我的自定义控制器(与问题无关)是否能够看到这些新的 pod 条件。

你不应该。

客户端在 spec: 中写入 所需状态 ,控制器写入 status: 部分。