KubernetesKubernetesk8s

【问题解决】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操作无效时可以尝试下面几个步骤来排查原因:

如果有,先执行kubectl delete deployment|rc|rs $name后在执行kubectl delete pod $pod_name方可真正实现删除目的。

上一篇下一篇

猜你喜欢

热点阅读