kubectl 删除部署不会删除 pod 和副本集

问题描述 投票:0回答:4

我们在k8s中运行以下命令

kubectl delete deployment ${our-deployment-name}

这似乎删除了名为 our-deployment-name 的部署。 但是,我们还想删除“我们的部署名称”下面的副本集和 Pod。

阅读文档并不清楚默认行为是否应该级联删除副本集和 Pod。 有谁知道如何删除部署以及所有相关的副本集和 Pod? 或者我是否也必须手动删除所有这些资源?

当我删除部署时,我有一个像这样的孤立副本集......

dev@jenkins:~$ kubectl describe replicaset.apps/wc-892-74697d58d9
Name:           wc-892-74697d58d9
Namespace:      default
Selector:       app=wc-892,pod-template-hash=74697d58d9
Labels:         app=wc-892
                pod-template-hash=74697d58d9
Annotations:    deployment.kubernetes.io/desired-replicas: 1
                deployment.kubernetes.io/max-replicas: 2
                deployment.kubernetes.io/revision: 1
Controlled By:  Deployment/wc-892
Replicas:       1 current / 1 desired
Pods Status:    1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=wc-892
           pod-template-hash=74697d58d9
  Containers:
   wc-892:
    Image:      registry.digitalocean.com/galatea/wastecoordinator-wc-892:1
    Port:       8080/TCP
    Host Port:  0/TCP
    Limits:
      memory:           800Mi
    Environment:        <none>
    Mounts:             <none>
  Volumes:              <none>
  Priority Class Name:  dev-lower-priority
Events:
  Type    Reason            Age   From                   Message
  ----    ------            ----  ----                   -------
  Normal  SuccessfulCreate  11m   replicaset-controller  Created pod: wc-892-74697d58d9-jtj9t
dev@jenkins:~$
kubernetes
4个回答
0
投票

正如您在副本集中看到的那样

Controlled By:  Deployment/wc-892
这意味着删除部署
wc-892
应删除副本集,而副本集又会删除带有标签
app=wc-892

的 Pod

0
投票

首先获取要删除的部署

kubectl get deployments

并删除所需的部署

kubectl delete deployment yourdeploymentname

这将删除与其关联的副本集和 Pod。


0
投票

答案就在文档中。也许 3 年前的文档不是那么最新。

https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

删除 ReplicaSet 及其 Pod

要删除 ReplicaSet 及其所有 Pod,请使用 kubectl delete。默认情况下,垃圾收集器会自动删除所有依赖的 Pod。

使用REST API或client-go库时,必须在-d选项中将propagationPolicy设置为Background或Foreground。例如:

kubectl代理--端口=8080 curl -X 删除 'localhost:8080/apis/apps/v1/namespaces/default/replicasets/frontend'
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"前景"}'
-H“内容类型:application/json”

仅删除ReplicaSet

您可以使用带有 --cascade=orphan 选项的 kubectl delete 删除 ReplicaSet,而不影响其任何 Pod。使用REST API或client-go库时,必须将propagationPolicy设置为Orphan。例如:

kubectl代理--端口=8080 curl -X 删除 'localhost:8080/apis/apps/v1/namespaces/default/replicasets/frontend'
-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}'
-H“内容类型:application/json”

一旦原始副本被删除,您可以创建一个新的ReplicaSet来替换它。只要新旧 .spec.selector 相同,那么新的 Pod 就会采用旧的 Pod。但是,它不会做出任何努力使现有 Pod 与新的、不同的 Pod 模板相匹配。要以受控方式将 Pod 更新到新规范,请使用 Deployment,因为 ReplicaSet 不支持直接滚动更新。


-1
投票

kubectl delete deployment <deployment>
将删除与部署关联的所有 ReplicaSet 以及与这些 ReplicaSet 关联的活动 Pod。

控制器管理器或 API 服务器可能在处理删除请求时遇到问题。所以我建议查看这些日志来验证。

注意,较旧的副本集可能附加到命名空间中的其他内容吗?尝试列出并查看元数据。使用

kubectl describe rs <rs>
kubectl get rs -o yaml

© www.soinside.com 2019 - 2024. All rights reserved.