我们在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:~$
正如您在副本集中看到的那样
Controlled By: Deployment/wc-892
这意味着删除部署 wc-892
应删除副本集,而副本集又会删除带有标签 app=wc-892
的 Pod
首先获取要删除的部署
kubectl get deployments
并删除所需的部署
kubectl delete deployment yourdeploymentname
这将删除与其关联的副本集和 Pod。
答案就在文档中。也许 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 不支持直接滚动更新。
kubectl delete deployment <deployment>
将删除与部署关联的所有 ReplicaSet 以及与这些 ReplicaSet 关联的活动 Pod。
控制器管理器或 API 服务器可能在处理删除请求时遇到问题。所以我建议查看这些日志来验证。
注意,较旧的副本集可能附加到命名空间中的其他内容吗?尝试列出并查看元数据。使用
kubectl describe rs <rs>
或 kubectl get rs -o yaml