如何以编程方式修改 运行 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:
部分。
我正在尝试修改我的 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:
部分。