【问题解决】kubectl delete pod ***后又创建
2018-09-30 本文已影响626人
王小奕
文章标签:kubectl create
kubectl delete
场景表述:
基于yaml创建了一个resource,yaml文件内容如下:
helloworld.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: go-admin
labels:
name: go-admin
spec:
replicas: 1
selector:
name: go-admin
template:
metadata:
labels:
name: go-admin
spec:
containers:
- name: master
image: docker.io/golangpkg/go-admin:latest
ports:
- containerPort: 8080
注意:在这个文件中指定了kind为ReplicationController,即会创建一个rc用以监控并恢复此次create操作
基于此yaml文件创建resource:
# kubectl create -f helloworld.yaml
replicationcontroller "go-admin" created
#
查看创建的pod:
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
go-admin-kt6fs 1/1 Running 0 39m 10.244.3.7 kube-node-2
#
删除创建的这个pod:
# kubectl delete pod go-admin-kt6fs
pod "go-admin-kt6fs" deleted
#
注意:此处提示已被删除
再次查看当前的pod情况:
# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
go-admin-xfmxr 1/1 Running 0 1m 10.244.2.7 kube-node-1
#
发现仍然存在一个go-admin前缀的pod,只是名字发生了变化。
明明我们已经删除了这个pod,为什么又出现了一个pod呢,就好像是某个维护机制检测到之前的pod被删除后,又创建了一个新的pod,实际上,确实如此,回想我们的helloworld.yaml文件,前面提到了kind为ReplicationController,且指定了replicas为1:
# kubectl get rc
NAME DESIRED CURRENT READY AGE
go-admin 1 1 1 2h
这可以理解为:当创建此pod时,kubernetes会同时创建一个副本控制器,用以监控此yaml文件创建对象的状态,当检测到异常时,会自动创建一个,故,不管我们怎么删都删不掉。
至此,我们可以总结出,当kubectl delete操作无效时可以尝试下面几个步骤来排查原因:
- 检查是否创建了deployments任务:
kubectl get deployments
- 检查是否创建了副本控制器ReplicationController:
kubectl get rc
- 检查死否创建了副本集replicasets:
kubectl get rs
如果有,先执行kubectl delete deployment|rc|rs $name
后在执行kubectl delete pod $pod_name
方可真正实现删除目的。