首页 > 解决方案 > 删除部署会留下尾随的副本集和 pod

问题描述

我在 GCP 中运行 Kubernetes,自从几个月前更新(现在我正在运行1.17.13-gke.2600)以来,我正在观察部署删除后的尾随副本集和 pod。考虑删除前的状态:

$ k get deployment | grep parser
parser-devel                              1/1     1       1        38d
$ k get replicaset | grep parser
parser-devel-66bfc86ddb                   0       0       0        27m
parser-devel-77898d9b9d                   1       1       1      5m49s
$ k get pod | grep parser
parser-devel-77898d9b9d-4w48w             1/1     Running 0       6m2s

然后我删除部署:

$ k delete deployment parser-devel
deployment.apps "parser-devel" deleted
$ k get replicaset | grep parser
parser-devel-66bfc86ddb                   0       0       0        28m
parser-devel-77898d9b9d                   1       1       1       7m1s
$ k get pod | grep parser
parser-devel-77898d9b9d-4w48w             1/1     Running 0       7m6s

然后我尝试删除副本集:

$ k delete replicaset parser-devel-66bfc86ddb parser-devel-77898d9b9d
replicaset.apps "parser-devel-66bfc86ddb" deleted
replicaset.apps "parser-devel-77898d9b9d" deleted
$ k get pod | grep parser
parser-devel-77898d9b9d-4w48w             1/1     Running 0      8m14s

据我了解 Kubernetes,这不是一个正确的行为,那么为什么会这样呢?

标签: kubernetesgoogle-cloud-platformgoogle-kubernetes-engine

解决方案


检查您的 Deployment 创建的 ReplicaSet 的 ownerReference 怎么样?有关详细信息,请参阅所有者和家属。例如,为了删除 Deployment 的依赖关系,Deployment 名称和 uid 应该在 ownerReference 中完全匹配。或者,如果 Kuerbetenes API 出了点问题,我也遇到过类似的问题。所以 API 服务重启可能有助于解决它。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  ...
  ownerReferences:
  - apiVersion: apps/v1
    controller: true
    blockOwnerDeletion: true
    kind: Deployment
    name: your-deployment
    uid: xxx

推荐阅读