如何在kubernetes中停止/暂停Pod

AAT*_*RAN 24 docker kubernetes kubernetes-pod

我的集群中运行着一个MySQL Pod。
我需要暂时暂停pod的工作而不删除它,这类似于docker,其中docker stop container-idcmd将停止容器而不删除容器。
Kubernetes中是否有任何命令可以暂停/停止Pod?

sul*_*edi 52

因此,就像其他人指出的那样,Kubernetes不支持Pod当前状态的停止/暂停以及在需要时恢复。但是,您仍然可以通过没有有效的部署(将副本数设置为0)来实现。

kubectl scale --replicas=0 deployment/<your-pod>
Run Code Online (Sandbox Code Playgroud)

看到帮助

# Set a new size for a Deployment, ReplicaSet, Replication Controller, or StatefulSet.
kubectl scale --help

Run Code Online (Sandbox Code Playgroud)

缩放还允许用户为缩放操作指定一个或多个前提条件。

如果指定--current-replicas--resource-version,则在尝试进行缩放之前先对其进行验证,并且可以确保在将缩放发送到服务器时前提条件成立。

例子:

  # Scale a replicaset named 'foo' to 3.
  kubectl scale --replicas=3 rs/foo

  # Scale a resource identified by type and name specified in "foo.yaml" to 3.
  kubectl scale --replicas=3 -f foo.yaml

  # If the deployment named mysql's current size is 2, scale mysql to 3.
  kubectl scale --current-replicas=2 --replicas=3 deployment/mysql

  # Scale multiple replication controllers.
  kubectl scale --replicas=5 rc/foo rc/bar rc/baz

  # Scale statefulset named 'web' to 3.
  kubectl scale --replicas=3 statefulset/web
Run Code Online (Sandbox Code Playgroud)

  • 拯救了我的一天!谢谢! (2认同)

P E*_*ram 13

不可以。无法停止 Pod 并在需要时稍后恢复。但是,您可以考虑以下方法。

在 k8s 中,pod 是使用服务抽象出来的。我能想到的隔离 pod 的一种方法是更新服务定义中的 pod 选择器。这样你就可以使用服务定义来控制到 pod(s) 的流量。每当您想要恢复流量时,请将 pod 选择器值更新回服务定义中的值。

  • 太糟糕了,它对来源为 kafka/eventhub 的 pod 没有帮助(我希望暂停它们,启动新的 pod,如果失败则恢复旧的 pod) (4认同)

Anj*_*lva 7

对于 Kubernetes,无法停止/暂停 Pod。但是,您可以删除 Pod,因为您有清单可以再次将其恢复。

但是,如果您想删除某个 POD,并且知道集群将立即再次启动该 POD,请运行以下kubectl命令。

kubectl delete -n default pod <your-pod-name>
Run Code Online (Sandbox Code Playgroud)

  • Pod 将立即再次返回,因为副本集将重新创建它——这就是它的工作。所以这实际上并不能回答问题。 (26认同)
  • 我认为这是一个有效的回应。没有什么比“停止” Pod 更好的了。 (9认同)
  • 问题不在于删除 Pod。 (6认同)
  • 有时你希望它立即回来。如果一个 pod 损坏(无限循环运行或出现一些无意义的情况),有时需要杀死它并启动另一个 pod。 (2认同)