Kubernetes 阻止容器自动重启

mba*_*rov 3 docker kubernetes

我最近将 Docker for Mac 升级到 v18.06,并注意到它可以运行本地 k8s 集群。我很高兴尝试它并通过kubectl apply -f deployments/staging/tom.yml. yml 清单没有指定重启策略。然后我使用kubectl delete -f .... 从那时起,每次我启动 docker 时,该容器都会自动启动。这是 的输出docker ps,为简洁起见被截断

CONTAINER ID    IMAGE            COMMAND                  CREATED             NAMES
2794eae1f31e    b06778bfe205     "/bin/sh -c 'java -c…"   27 minutes ago      k8s_tom-joiner_tom-joiner-66fcfd84bc...
8dd19dd65486    b06778bfe205     "/bin/sh -c 'java -c…"   27 minutes ago      k8s_tom-loader_tom-loader-6cb9f7f4fb...
...
Run Code Online (Sandbox Code Playgroud)

但是,图像不是由 Kubernetes 管理的,所以我不能这样做 kubectl delete -f

kubectl get pods
No resources found.
Run Code Online (Sandbox Code Playgroud)

如何永久关闭图像并防止自动重新启动?我试过docker update --restart=no $(docker ps -a -q)没有运气

rat*_*ath 7

这取决于您的具体部署,但Kubernetes 规定

一个PodSpec有restartPolicy可能的值字段AlwaysOnFailureNever。默认值为Always。[...]

因此,如果您不希望 pod 因任何原因重启,则必须明确告诉它不要重启。您没有提供 YAML 文件的示例内容,因此我无法猜测最佳位置,但我认为这足以提供一般指导。


现在,对于您面临的问题:Docker 可能正在使用自定义命名空间。用

kubectl get namespaces
Run Code Online (Sandbox Code Playgroud)

看看你得到了什么,然后在这些命名空间中搜索 pods

kubectl -n <namespace> get pods
Run Code Online (Sandbox Code Playgroud)

或者,如果您不耐烦,请通过以下方式解决:

kubectl --all-namespaces get pods
Run Code Online (Sandbox Code Playgroud)

参考:kubectl 备忘单

  • Kubernetes 部署仅支持“restartPolicy: Always”,不支持“Never”或“OnFailure”等其他值。该文档不正确。有关更多信息,请参阅 https://github.com/kubernetes/kubernetes/issues/24725 (5认同)
  • 谢谢,就是这样。容器确实在不同的命名空间中运行,`kubectl get pods --all-namespaces` 帮助我弄清楚了这一点。我一知道,就用 `kubectl delete --all pods --namespace=whatever` 来解决我的问题 (3认同)