我管理一个由terraform管理的K8s集群:
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:17:39Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.3", GitCommit:"2bba0127d85d5a46ab4b778548be28623b32d0b0", GitTreeState:"clean", BuildDate:"2018-05-21T09:05:37Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
我要删除堆栈;所以我删除了代码并申请了。由于超时,它引发了一个错误。我重试了,我成功了。
但是现在,我仍然有2个复制控制器(为空):
portal-api 0 0 0 2h
portal-app 0 0 0 2h
不再提供服务,不再提供horizontal_pod_scheduler;但仍然是我的复制控制器。
我试图删除它们:
$ kubectl delete rc portal-api
error: timed out waiting for "portal-api" to be synced
与我要强制删除相同:
$ kubectl delete rc portal-api --cascade=false --force=true
$
$ kubectl get rc
[...]
portal-api 0 0 0 2h
portal-app 0 0 0 2h
[...]
我仍然可以看到它的配置(用deletionTimestamp
填充):
$ kubectl edit rc portal-api
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: ReplicationController
metadata:
creationTimestamp: 2018-12-05T14:00:15Z
deletionGracePeriodSeconds: 0
deletionTimestamp: 2018-12-05T15:22:00Z
finalizers:
- orphan
generation: 3
labels:
App: portal-api
name: portal-api
namespace: default
resourceVersion: "32590661"
selfLink: /api/v1/namespaces/default/replicationcontrollers/portal-api
uid: 171f605e-f896-11e8-b761-02d4b8553a0e
spec:
replicas: 0
selector:
App: portal-api
template:
metadata:
creationTimestamp: null
labels:
App: portal-api
spec:
automountServiceAccountToken: false
containers:
- env:
- name: AUTHORITY_MGR
value: http://system-authority-manager-service
image: gitlab.********************:4567/apps/portal/api:prd
imagePullPolicy: Always
name: portal-api
ports:
- containerPort: 3300
protocol: TCP
resources:
limits:
cpu: "1"
memory: 512Mi
requests:
cpu: 500m
memory: 256Mi
terminationGracePeriodSeconds: 30
status:
replicas: 0
有人可以帮我吗?任何想法 ?
谢谢
答案 0 :(得分:1)
使用kubectl edit rc portal-api
从资源中删除finalizer
部分:
finalizers:
- orphan
答案 1 :(得分:1)
这与Garbage Collection有关,以及如何删除曾经拥有所有者但不再拥有的某些对象。
删除对象时,可以指定是否也自动删除对象的从属。自动删除依赖项称为级联删除。 级联删除有两种模式:背景和前景。
如果删除一个对象而不自动删除其依赖项,则这些依赖项被称为孤立的。
您可以阅读有关Controlling how the garbage collector deletes dependents的文档,有关前景级联删除和背景级联删除的工作方式。
设置级联删除策略
要控制级联删除策略,请在删除对象时在
propagationPolicy
参数上设置deleteOptions
字段。可能的值包括“孤立”,“前景”或“背景”。在Kubernetes 1.9之前,许多控制器资源的默认垃圾回收策略是
orphan
。其中包括ReplicationController,ReplicaSet,StatefulSet,DaemonSet和Deployment。对于extensions/v1beta1
,apps/v1beta1
和apps/v1beta2
组版本中的种类,除非另行指定,否则默认情况下将孤立依赖对象。在Kubernetes 1.9中,对于apps/v1
组版本中的所有种类,默认情况下都会删除依赖对象kubectl还支持级联删除。要使用kubectl自动删除依赖项,请将
--cascade
设置为true。对于孤立的家属,请将--cascade
设置为false。--cascade
的默认值为true。下面是一个使ReplicaSet的依赖对象孤立的示例:
kubectl delete replicaset my-repset --cascade=false