当前位置: 首页 > 知识库问答 >
问题:

库伯内特斯在米尼库贝用“需要杀死吊舱”重新启动Statefolset吊舱

丁景山
2023-03-14

迷你库版本v0.24.1

kubernetes 1.8.0版

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

有时,当我启动minikube时,我的吊舱会先启动,然后由kubernetes重新启动。它们将一次又一次地从创建容器状态到运行状态,再到终止状态。

现在,我已经看到kubernetes杀死和重启的东西之前,如果kubernetes检测到磁盘压力,内存压力,或其他类似的情况,但这不是这里的情况,因为这些标志没有升起,在pod的事件日志中唯一的消息是"需要杀死pod"。

最让人困惑的是,这个问题并不是一直都在发生,我不知道如何触发它。我的minikube设置将运行一周或更长时间,但不会发生这种情况,然后有一天我会启动minikube,然后继续重新启动我的状态集的播客。到目前为止,我找到的唯一解决方法是删除我的minikube实例,然后从头开始重新设置,但显然这并不理想。

这里是一个statefulset示例,它的pod一直在重新启动。从日志中可以看到,库伯内特斯正在删除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

共有1个答案

李明贤
2023-03-14

在进一步挖掘之后,似乎出现了一个可能影响statefulset的错误,该错误为同一个statefulset创建了多个控制器:

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

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

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

并删除每个状态集的重复控制器。

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

或者简单地使用kubernetes的1.9或更高版本,其中包括此错误修复。

 类似资料:
  • 我正在尝试运行集成minikube与Jenkins。我得到以下异常: 配置如下Kubernetes url所示:192.168.99.101:8443 Kubernetes 1 希望你的协助。

  • 我有一个应用程序,通过部署类型部署,副本为1。调度器不断地将应用程序移动到不同的节点: I022008:28:44.884808 1 Event.go:218]事件(V1.ObjectReference{kind:“pod”,namespace:“production”,name:“app1-production-77C79BDC85-DDJFB”,uid:“109fa057-1618-11e8-

  • 我的kubernetes部署中有一个多容器吊舱: java redis nginx 对于每一个集装箱,普罗米修斯出口商也有一个集装箱。 问题是,如果annotations部分只支持每个pod一个端口,我如何向Prometheus公开这些端口? 但是我需要这样的东西: 也许还有其他方法可以从我的多容器pod中获取所有指标?提前感谢您的帮助。

  • 我有一个简单的容器,它由安装在阿尔卑斯山上的OpenLDAP组成。它被安装为以非root用户身份运行。我能够使用我的本地Docker引擎运行容器而没有任何问题。但是,当我将其部署到我们的库伯内特斯系统时,它几乎立即被OOMKill杀死。我尝试在没有任何更改的情况下增加内存。我还查看了pod的内存使用情况,没有发现任何异常。 服务器启动为slapd-d debug-hldap://0.0.0.0:1

  • 我正在VM中运行一个单节点Kubernetes集群,用于开发和测试。我使用Rancher Kubernetes引擎(RKE,Kubernetes版本1.18)部署它,并使用MetalLB启用LoadBalancer服务类型。Traefik是2.2版,通过官方掌舵图部署(https://github.com/containous/traefik-helm-chart)。我部署了几个虚拟容器来测试设置

  • 我是库伯内特斯的新手。我已经在Oracle虚拟盒管理器上设置了3个Ubuntu 20.04.2 LTS虚拟机。 根据以下文档,我已经在所有3个虚拟机中安装了docker、kubelet、kubeadm和kubectl https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 我使用以