【问题标题】:Kubernetes Keeps Restarting Pods of StatefulSet in Minikube With "Need to kill pod"Kubernetes 在 Minikube 中不断重启 StatefulSet 的 Pod,并显示“需要杀死 pod”
【发布时间】:2018-06-24 16:07:48
【问题描述】:

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

【问题讨论】:

    标签: kubernetes minikube


    【解决方案1】:

    经过更多的挖掘,似乎有一个错误会影响为同一个 statefulset 创建多个控制器的 statefulset:

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

    这个问题似乎已经修复,修复似乎已经被移植到 kubernetes 1.8 版并包含在 1.9 版中,但是 minikube 还没有修复版本。如果您的系统进入此状态,一种解决方法是列出控制器修订版,如下所示:

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

    并删除每个 statefulset 的重复控制器。

    $ kubectl delete controllerrevisions mongo-68bd5cbcc6  --namespace=storage
    

    或简单地使用包含此错误修复的 kubernetes 1.9 或更高版本。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 2020-03-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      相关资源
      最近更新 更多