kubernetes - Kubernetes使用 “Need to kill pod”继续在Minikube中重启StatefulSet的容器

标签 kubernetes minikube

Minikube版本v0.24.1

kubernetes版本1.8.0

我面临的问题是,我在minikube中创建了几个statefulsets,每个都有一个pod。

有时,当我启动minikube时,我的Pod会首先启动,然后继续被kubernetes重新启动。它们将从创建容器状态到运行,再到终止。

现在,我已经看到kubernetes在kubernetes检测到磁盘压力,内存压力或类似情况时会杀死并重新启动事情,但是这里不是这种情况,因为这些标志未引发,并且pod的事件日志中唯一的消息是“需要杀死 pod ”。

最令人困惑的是,这个问题不会一直发生,而且我不确定如何触发它。我的minikube设置可以工作一周或更长时间,而不会发生这种情况,然后有一天,我将启动minikube,并且statefulsets的pod会继续重启。到目前为止,我发现的唯一解决方法是删除我的minikube实例,然后从头开始重新设置它,但是显然这并不理想。

此处显示的是statefulsets之一的示例,其pod不断重启。在日志中看到kubernetes正在删除pod并重新启动它。这种情况反复发生。我无法弄清楚为什么它会继续这样做以及为什么有时只会进入这种状态。

$ kubectl describe statefulsets mongo --namespace=storage
Name:               mongo
Namespace:          storage
CreationTimestamp:  Mon, 08 Jan 2018 16:11:39 -0600
Selector:           environment=test,role=mongo
Labels:             name=mongo
Annotations:        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1beta1","kind":"StatefulSet","metadata":{"annotations":{},"labels":{"name":"mongo"},"name":"mongo","namespace":"storage"},"...
Replicas:           1 desired | 1 total
Pods Status:        1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  environment=test
           role=mongo
  Containers:
   mongo:
    Image:  mongo:3.4.10-jessie
    Port:   27017/TCP
    Command:
      mongod
      --replSet
      rs0
      --smallfiles
      --noprealloc
    Environment:  <none>
    Mounts:
      /data/db from mongo-persistent-storage (rw)
   mongo-sidecar:
    Image:  cvallance/mongo-k8s-sidecar
    Port:   <none>
    Environment:
      MONGO_SIDECAR_POD_LABELS:       role=mongo,environment=test
      KUBERNETES_MONGO_SERVICE_NAME:  mongo
    Mounts:                           <none>
  Volumes:                            <none>
Volume Claims:
  Name:          mongo-persistent-storage
  StorageClass:  
  Labels:        <none>
  Annotations:   volume.alpha.kubernetes.io/storage-class=default
  Capacity:      5Gi
  Access Modes:  [ReadWriteOnce]
Events:
  Type    Reason            Age                From         Message
  ----    ------            ----               ----         -------
  Normal  SuccessfulDelete  23m (x46 over 1h)  statefulset  delete Pod mongo-0 in StatefulSet mongo successful
  Normal  SuccessfulCreate  3m (x62 over 1h)   statefulset  create Pod mongo-0 in StatefulSet mongo successful

最佳答案

经过更多的挖掘之后,似乎出现了一个会影响状态集的错误,该错误会为同一状态集创建多个 Controller :

https://github.com/kubernetes/kubernetes/issues/56355

该问题似乎已得到修复,并且该修复程序似乎已反向移植到kubernetes的1.8版中,并已包含在1.9版中,但是minikube尚无此固定版本。如果系统进入此状态,一种解决方法是列出 Controller 修订版,如下所示:

$ kubectl get controllerrevisions --namespace=storage
NAME                  CONTROLLER              REVISION   AGE
mongo-68bd5cbcc6      StatefulSet/mongo       1          19h
mongo-68bd5cbcc7      StatefulSet/mongo       1          7d

并删除每个有状态集的重复 Controller 。
$ kubectl delete controllerrevisions mongo-68bd5cbcc6  --namespace=storage

或仅使用包含此错误修复程序的kubernetes 1.9或更高版本。

关于kubernetes - Kubernetes使用 “Need to kill pod”继续在Minikube中重启StatefulSet的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48272953/

相关文章:

apache-kafka - 在Kubernetes中运行Kafka时如何管理页面缓存资源

Kubernetes:在没有资源限制的情况下调度 Pod

kubernetes - 连接拒绝 Kubernetes 服务

kubernetes - 如何在 kubernetes 中删除复制 Controller 及其 pod?

amazon-web-services - Terraform AWS EKS 安全组问题

postgresql - 如何通过 Spark 中的 jdbc 连接到 docker 托管的 postgresql 数据库?

kubernetes - 如何通过 Kubernetes pod 中的 sha256 哈希引用 docker 图像?

kubernetes - 当我运行 sudo minikube start --vm-driver=none 它给我错误

docker - 如何在minikube中将数据库连接到后端?

kubernetes - 如何在 Mac OS Catalina 上安装 minikube