如何打patch使pod阶段进入Succeeded或Failed?
How to apply patch to make pod phase go to Succeeded or Failed?
这是我上一个问题的后续问题 - 之后我意识到,您只能从部署清单中修补容器规范,让控制器无缝地将补丁更改应用到 pods 通过它创建的 ReplicaSet。
现在我的问题是如何应用补丁使Pod阶段进入Succeeded
或Failed
。我知道例如要让 pod 阶段进入 Succeeded
,所有容器都需要成功终止并且不应重新启动。我的意图是不修改容器镜像中的原始命令和参数,而是应用补丁来引入自定义命令,该命令将覆盖容器镜像中的命令。
所以我尝试对 运行 exit 0
做如下
kubectl -n foo-ns patch deployment foo-manager -p '
{
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "container1",
"command": [
"exit",
"0"
]
},
{
"name": "container2",
"command": [
"exit",
"0"
]
}
]
}
}
}
}'
但是由于我的容器文件系统层是从 FROM scratch
构建的,因此除了应该 运行 即 exit
作为构建的原始可执行文件之外,没有任何可用的本机命令-in 甚至不可用。
最好的方法是什么?通过修补 pod 使其过渡到这些 Pod 阶段中的任何一个。
how to apply patch to make the Pod phase to go to Succeeded or Failed
Pods 旨在 不可变 - 不要尝试更改它们 - 相反,将它们替换为新的 Pods。您可以创建 ReplicaSet directly, but mostly, you want to work with Deployment 来替换 Pod 模板上的每个更改的当前 ReplicaSet。
Basically I'm testing one of my custom controllers can catch a pod's phase (and act on it) when it is stuck in a certain state e.g. Pending
所有 Pods 都会经历这些状态。为了进行测试,您可以使用不同的二进制文件或参数直接创建 Pods。
要测试 Pod 阶段 Pending
,您可以在观看 Pod 时在控制器中记录 阶段?或者您可以模拟 pod - 使其处于 Pending 阶段?
我不知道 kubernetes-python-client 但 client-go
确实有 Fake-clients 可以与 Pods, 包括 UpdateStatus
.
func (c *FakePods) UpdateStatus(ctx context.Context, pod *corev1.Pod, opts v1.UpdateOptions) (*corev1.Pod, error)
现在,查看 Python 客户端,它似乎缺少此功能:Issue #524 fake client for unit testing
这是我上一个问题的后续问题 -
现在我的问题是如何应用补丁使Pod阶段进入Succeeded
或Failed
。我知道例如要让 pod 阶段进入 Succeeded
,所有容器都需要成功终止并且不应重新启动。我的意图是不修改容器镜像中的原始命令和参数,而是应用补丁来引入自定义命令,该命令将覆盖容器镜像中的命令。
所以我尝试对 运行 exit 0
做如下
kubectl -n foo-ns patch deployment foo-manager -p '
{
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "container1",
"command": [
"exit",
"0"
]
},
{
"name": "container2",
"command": [
"exit",
"0"
]
}
]
}
}
}
}'
但是由于我的容器文件系统层是从 FROM scratch
构建的,因此除了应该 运行 即 exit
作为构建的原始可执行文件之外,没有任何可用的本机命令-in 甚至不可用。
最好的方法是什么?通过修补 pod 使其过渡到这些 Pod 阶段中的任何一个。
how to apply patch to make the Pod phase to go to Succeeded or Failed
Pods 旨在 不可变 - 不要尝试更改它们 - 相反,将它们替换为新的 Pods。您可以创建 ReplicaSet directly, but mostly, you want to work with Deployment 来替换 Pod 模板上的每个更改的当前 ReplicaSet。
Basically I'm testing one of my custom controllers can catch a pod's phase (and act on it) when it is stuck in a certain state e.g. Pending
所有 Pods 都会经历这些状态。为了进行测试,您可以使用不同的二进制文件或参数直接创建 Pods。
要测试 Pod 阶段 Pending
,您可以在观看 Pod 时在控制器中记录 阶段?或者您可以模拟 pod - 使其处于 Pending 阶段?
我不知道 kubernetes-python-client 但 client-go
确实有 Fake-clients 可以与 Pods, 包括 UpdateStatus
.
func (c *FakePods) UpdateStatus(ctx context.Context, pod *corev1.Pod, opts v1.UpdateOptions) (*corev1.Pod, error)
现在,查看 Python 客户端,它似乎缺少此功能:Issue #524 fake client for unit testing