无法在 Kubernetes 中删除 pods
Can not delete pods in Kubernetes
我尝试使用 Kubernetes 安装 dgraph(单服务器)。
我使用以下方法创建了 pod:
kubectl create -f https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml
现在我需要做的就是删除创建的pods。
我尝试使用以下方法删除广告连播:
kubectl delete pod pod-name
结果显示 pod deleted
,但 pod 不断重新创建自己。
我需要从我的 Kubernetes 中删除那些 pods。我现在该怎么办?
您可以使用以下命令执行优雅的 pod 删除:
kubectl delete pods <pod>
如果要使用>=1.5版本的kubectl强制删除Pod,请执行以下操作:
kubectl delete pods <pod> --grace-period=0 --force
如果您使用任何版本的 kubectl <= 1.4,您应该省略 --force 选项并使用:
kubectl delete pods <pod> --grace-period=0
如果即使在这些命令之后 pod 仍停留在未知状态,请使用以下命令从集群中删除 pod:
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
The link provided by the op may be unavailable. See the update
section
正如您指定的那样,您使用这个 https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml 创建了 dgraph
服务器,因此只需使用这个来删除您创建的资源:
$ kubectl delete -f https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml
更新
基本上,这是对原因的解释。
Kubernetes 有一些工作负载(它们的清单中包含 PodTemplate)。它们是:
- Pods
- 控制器(基本上是 Pod 控制器)
看,谁控制谁:
- ReplicationController -> Pod
- 副本集 -> Pod
- 部署 -> ReplicaSet(s) -> Pod(s)
- StatefulSet -> Pod
- DaemonSet -> Pod
- 作业 -> Pod
- CronJob -> 作业 -> Pod
a -> b
means a
creates and controls b
and the value of field
.metadata.ownerReference
in b
's manifest is the reference of a
. For
example,
apiVersion: v1
kind: Pod
metadata:
...
ownerReferences:
- apiVersion: apps/v1
controller: true
blockOwnerDeletion: true
kind: ReplicaSet
name: my-repset
uid: d9607e19-f88f-11e6-a518-42010a800195
...
This way, deletion of the parent object will also delete the child object via garbase collection.
So, a
's controller ensures that a
's current status
matches with
a
's spec
. Say, if one deletes b
, then b
will be deleted. But
a
is still alive and a
's controller sees that there is a
difference between a
's current status
and a
's spec
. So a
's
controller recreates a new b
obj to match with the a
's spec.
操作人员创建了一个部署,该部署创建了进一步创建 Pod 的 ReplicaSet。所以这里的解决方案是删除作为 Deployment 的根对象。
$ kubectl get deploy -n {namespace}
$ kubectl delete deploy {deployment name} -n {namespace}
笔记本
Another problem may arise during deletion is as follows:
If there is any finalizer in the .metadata.finalizers[]
section, then only after completing the task(s) performed by the associated controller, the deletion will be performed. If one wants to delete the object without performing the finalizer(s)' action(s), then he/she has to delete those finalizer(s) first. For example,
$ kubectl patch -n {namespace} deploy {deployment name} --patch '{"metadata":{"finalizers":[]}}'
$ kubectl delete -n {namespace} deploy {deployment name}
@Shudipta Sharma 的回答显然是关于如何删除 pods 的正确方法。我只想确保作者能理解为什么会这样。
原因是 Kubernetes 的 "mindset",其中 Pods 被认为是短暂的、一次性的实体。随着 Pods 来来去去,StatefulSets 是确保给定数量的具有唯一身份的 pods 在任何给定时间 运行ning 的一种方法。到达您用于部署的 yaml 文件:
# This StatefulSet runs 1 pod with one Zero, one Alpha & one Ratel containers.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dgraph
spec:
serviceName: "dgraph"
replicas: 1
通过部署这个,你基本上是在说你希望 Kubernetes 在任何时候总是 运行 该 Pod 的 1 个副本。当您删除 Pod 时,该条件不再成立,因此在删除后,会生成另一个 Pod 以确保上述条件有效。
@Shudipta Sharma 提供的方法只是删除那个 StatefulSet,这样你就不再有一个需要的状态来关注 运行ning Pods 的数量。
您可以在 Kubernetes 文档中找到更多相关信息:
More about Kubernetes objects and difference between each of them
我确实遇到了同样的问题。 运行 命令:
kubectl get deployment
您将获得相应的部署到您的 pod。复制它然后 运行 命令:
kubectl delete deployment xyz
然后检查。不会创建新的 pods。
Pods 在 kubernetes 中也取决于它的类型。
喜欢
- 复制控制器
- 副本集
- 状态集
- 部署
- 守护程序集
- 连播
执行 kubectl describe pod <podname>
并检查
apiVersion: apps/v1
kind: StatefulSet
metadata:
现在kubectl get <pod-kind>
最后删除一样,pod也会被删除
删除部署,而不是 pods。部署正在制作另一个吊舱。删除pods.
后可以看到不同的pod名称
kubectl get all
kubectl delete deployment DEPLOYMENTNAME
我尝试使用 Kubernetes 安装 dgraph(单服务器)。
我使用以下方法创建了 pod:
kubectl create -f https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml
现在我需要做的就是删除创建的pods。
我尝试使用以下方法删除广告连播:
kubectl delete pod pod-name
结果显示 pod deleted
,但 pod 不断重新创建自己。
我需要从我的 Kubernetes 中删除那些 pods。我现在该怎么办?
您可以使用以下命令执行优雅的 pod 删除:
kubectl delete pods <pod>
如果要使用>=1.5版本的kubectl强制删除Pod,请执行以下操作:
kubectl delete pods <pod> --grace-period=0 --force
如果您使用任何版本的 kubectl <= 1.4,您应该省略 --force 选项并使用:
kubectl delete pods <pod> --grace-period=0
如果即使在这些命令之后 pod 仍停留在未知状态,请使用以下命令从集群中删除 pod:
kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'
The link provided by the op may be unavailable. See the
update
section
正如您指定的那样,您使用这个 https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml 创建了 dgraph
服务器,因此只需使用这个来删除您创建的资源:
$ kubectl delete -f https://raw.githubusercontent.com/dgraph-io/dgraph/master/contrib/config/kubernetes/dgraph-single.yaml
更新
基本上,这是对原因的解释。
Kubernetes 有一些工作负载(它们的清单中包含 PodTemplate)。它们是:
- Pods
- 控制器(基本上是 Pod 控制器)
看,谁控制谁:
- ReplicationController -> Pod
- 副本集 -> Pod
- 部署 -> ReplicaSet(s) -> Pod(s)
- StatefulSet -> Pod
- DaemonSet -> Pod
- 作业 -> Pod
- CronJob -> 作业 -> Pod
a -> b
meansa
creates and controlsb
and the value of field.metadata.ownerReference
inb
's manifest is the reference ofa
. For example,apiVersion: v1 kind: Pod metadata: ... ownerReferences: - apiVersion: apps/v1 controller: true blockOwnerDeletion: true kind: ReplicaSet name: my-repset uid: d9607e19-f88f-11e6-a518-42010a800195 ...
This way, deletion of the parent object will also delete the child object via garbase collection.
So,
a
's controller ensures thata
's currentstatus
matches witha
'sspec
. Say, if one deletesb
, thenb
will be deleted. Buta
is still alive anda
's controller sees that there is a difference betweena
's currentstatus
anda
'sspec
. Soa
's controller recreates a newb
obj to match with thea
's spec.
操作人员创建了一个部署,该部署创建了进一步创建 Pod 的 ReplicaSet。所以这里的解决方案是删除作为 Deployment 的根对象。
$ kubectl get deploy -n {namespace}
$ kubectl delete deploy {deployment name} -n {namespace}
笔记本
Another problem may arise during deletion is as follows: If there is any finalizer in the
.metadata.finalizers[]
section, then only after completing the task(s) performed by the associated controller, the deletion will be performed. If one wants to delete the object without performing the finalizer(s)' action(s), then he/she has to delete those finalizer(s) first. For example,$ kubectl patch -n {namespace} deploy {deployment name} --patch '{"metadata":{"finalizers":[]}}' $ kubectl delete -n {namespace} deploy {deployment name}
@Shudipta Sharma 的回答显然是关于如何删除 pods 的正确方法。我只想确保作者能理解为什么会这样。 原因是 Kubernetes 的 "mindset",其中 Pods 被认为是短暂的、一次性的实体。随着 Pods 来来去去,StatefulSets 是确保给定数量的具有唯一身份的 pods 在任何给定时间 运行ning 的一种方法。到达您用于部署的 yaml 文件:
# This StatefulSet runs 1 pod with one Zero, one Alpha & one Ratel containers.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dgraph
spec:
serviceName: "dgraph"
replicas: 1
通过部署这个,你基本上是在说你希望 Kubernetes 在任何时候总是 运行 该 Pod 的 1 个副本。当您删除 Pod 时,该条件不再成立,因此在删除后,会生成另一个 Pod 以确保上述条件有效。 @Shudipta Sharma 提供的方法只是删除那个 StatefulSet,这样你就不再有一个需要的状态来关注 运行ning Pods 的数量。
您可以在 Kubernetes 文档中找到更多相关信息:
More about Kubernetes objects and difference between each of them
我确实遇到了同样的问题。 运行 命令:
kubectl get deployment
您将获得相应的部署到您的 pod。复制它然后 运行 命令:
kubectl delete deployment xyz
然后检查。不会创建新的 pods。
Pods 在 kubernetes 中也取决于它的类型。 喜欢
- 复制控制器
- 副本集
- 状态集
- 部署
- 守护程序集
- 连播
执行 kubectl describe pod <podname>
并检查
apiVersion: apps/v1
kind: StatefulSet
metadata:
现在kubectl get <pod-kind>
最后删除一样,pod也会被删除
删除部署,而不是 pods。部署正在制作另一个吊舱。删除pods.
后可以看到不同的pod名称kubectl get all
kubectl delete deployment DEPLOYMENTNAME