kubernetes的pod因为同名Sandbox的存在,一直无法删除

Tags: kubernetes_problem 

目录

现象

kubernetes版本为1.7.6,用kubectl删除pod后,pod一直处于Terminating的状态。

$ kubectl -n XXXXXXXX get pod -o wide dev-decv-0
NAME         READY     STATUS        RESTARTS   AGE	  IP        NODE
dev-decv-0   0/1       Terminating   1          3d        <none>    paas-slave-20-45

该问题已经查明,是cni插件的导致的:

cni插件使pod被重复删除,导致通过statefulset创建的pod被重新调度到同一个node上后,静态arp丢失,无法联通

分析

查看kubelet的日志发现:

Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: INFO:1208 16:41:26.682756   31640 kubelet.go:1894] SyncLoop (DELETE, "api"): "dev-decv-0_XXXXXXXX(9d764474-d8d5-11e7-8e57-5254171bf8db)"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Releasing address using workloadID" Workload=XXXXXXXX.dev-decv-0
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Releasing all IPs with handle 'XXXXXXXX.dev-decv-0'"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Get Key: /calico/ipam/v2/handle/XXXXXXXX.dev-decv-0"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Get Key: /calico/ipam/v2/assignment/ipv4/block/192.168.21.192-26"
...
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Released address using workloadID" Workload=XXXXXXXX.dev-decv-0
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Configured environment: [LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin CNI_COMMAND=DEL CNI_CONTAINERID=788c8f3c216b6449265e15c6bebdd17b81af0be6b8878724959b744d9f139c6f CNI_NETNS=/proc/2557/ns/net CNI_ARGS=IgnoreUnknown=1;IgnoreUnknown=1;K8S_POD_NAMESPACE=XXXXXXXX;K8S_POD_NAME=dev-decv-0;K8S_POD_INFRA_CONTAINER_ID=788c8f3c216b6449265e15c6bebdd17b81af0be6b8878724959b744d9f139c6f CNI_IFNAME=eth0 CNI_PATH=/opt/calico/bin:/opt/cni/bin ETCD_AUTHORITY=kubernetes.default.svc.cluster.local:2379 ETCD_SCHEME=https ETCD_KEY_FILE=/etc/kubernetes/pki/client-key.pem ETCD_CERT_FILE=/etc/kubernetes/pki/client.pem ETCD_CA_CERT_FILE=/etc/kubernetes/pki/ca.pem KUBECONFIG=/etc/kubernetes/kubelet.conf]"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="No config file specified, loading config from environment"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Datastore type: etcdv2"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Delete Key: /calico/v1/host/paas-slave-20-45/workload/k8s/XXXXXXXX.dev-decv-0/endpoint/eth0"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Delete empty Key: /calico/v1/host/paas-slave-20-45/workload/k8s/XXXXXXXX.dev-decv-0/endpoint"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: WARNING
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Delete empty Key: /calico/v1/host/paas-slave-20-45/workload/k8s/XXXXXXXX.dev-decv-0"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: time="2017-12-08T16:41:26+08:00" level=info msg="Delete empty Key: /calico/v1/host/paas-slave-20-45/workload/k8s/XXXXXXXX.dev-decv-0"
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: Calico CNI deleting device in netns /proc/2557/ns/net

问题分析到一半,被其它事情打断,其他组的同事反馈:

使用node上存在同名的且已经是Exist或者Dead状态的sandbox容器(pause)。 kubelet在删除pod的时候,获取到的是错误的sandbox容器,所有迟迟无法成功删除。

...
Dec 08 16:41:26 paas-slave-20-45 kubelet[31640]: ERROR:1208 16:41:26.791039   31640 docker_sandbox.go:239] Failed to stop sandbox "d3d4d751f47ab02e8616efc2bdc6ae2d0be7ee20c2c51841298cf2c46d773549": Error response from daemon: {"message":"No such container: d3d4d751f47ab02e8616efc2bdc6ae2d0be7ee20c2c51841298cf2c46d773549"}
...

这可能是kubelet的bug,应当获取running状态的sandbox容器。

参考

  1. cni插件使pod被重复删除,导致通过statefulset创建的pod被重新调度到同一个node上后,静态arp丢失,无法联通

kubernetes_problem

  1. kubernetes ingress-nginx 启用 upstream 长连接,需要注意,否则容易 502
  2. kubernetes ingress-nginx 的 canary 影响指向同一个 service 的所有 ingress
  3. ingress-nginx 启用 tls 加密,配置了不存在的证书,导致 unable to get local issuer certificate
  4. https 协议访问,误用 http 端口,CONNECT_CR_SRVR_HELLO: wrong version number
  5. Kubernetes ingress-nginx 4 层 tcp 代理,无限重试不存在的地址,高达百万次
  6. Kubernetes 集群中个别 Pod 的 CPU 使用率异常高的问题调查
  7. Kubernetes 集群 Node 间歇性变为 NotReady 状态: IO 负载高,延迟严重
  8. Kubernetes的nginx-ingress-controller刷新nginx的配置滞后十分钟导致504
  9. Kubernetes的Nginx Ingress 0.20之前的版本,upstream的keep-alive不生效
  10. Kubernetes node 的 xfs文件系统损坏,kubelet主动退出且重启失败,恢复后无法创建pod
  11. Kubernetes的Pod无法删除,glusterfs导致docker无响应,集群雪崩
  12. Kubernetes集群node无法访问service: kube-proxy没有正确设置cluster-cidr
  13. Kubernetes集群node上的容器无法ping通外网: iptables snat规则缺失导致
  14. Kubernetes问题调查: failed to get cgroup stats for /systemd/system.slice
  15. Kubelet1.7.16使用kubeconfig时,没有设置--require-kubeconfig,导致node不能注册
  16. Kubelet从1.7.16升级到1.9.11,Sandbox以外的容器都被重建的问题调查
  17. Kubernetes: 内核参数rp_filter设置为Strict RPF,导致Service不通
  18. Kubernetes使用过程中遇到的一些问题与解决方法
  19. Kubernetes集群节点被入侵挖矿,CPU被占满
  20. kubernetes的node上的重启linux网络服务后,pod无法联通
  21. kubernetes的pod因为同名Sandbox的存在,一直无法删除
  22. kubelet升级,导致calico中存在多余的workloadendpoint,node上存在多余的veth设备
  23. 使用petset创建的etcd集群在kubernetes中运行失败
  24. Kubernetes 容器启动失败: unable to create nf_conn slab cache
  25. 未在calico中创建hostendpoint,导致开启隔离后,在kubernetes的node上无法访问pod
  26. calico分配的ip冲突,pod内部arp记录丢失,pod无法访问外部服务
  27. kubernetes的dnsmasq缓存查询结果,导致pod偶尔无法访问域名
  28. k8s: rbd image is locked by other nodes
  29. kuberntes的node无法通过物理机网卡访问Service

推荐阅读

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作

友情链接:  系统软件  程序语言  运营经验  水库文集  网络课程  微信网文  发现知识星球