kubelet Pod 的状态分析

pod从创建到最后的创建成功会分别处于不同的阶段,在源码中用PodPhase来表示不同的阶段:

运行中(PodRunning):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。

等待中(PodPending): Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间,这可能需要花点时间。

创建pod的请求已经被k8s接受,但是容器并没有启动成功,可能处在:写数据到etcd,调度,pull镜像,启动容器这四个阶段中的任何一个阶段,pending伴随的事件通常会有:ADDED, Modified这两个事件的产生。

正常终止(PodSucceeded):pod中的所有的容器已经正常的自行退出,并且k8s永远不会自动重启这些容器,一般会是在部署job的时候会出现。

异常停止(PodEailed):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止。也就是说,容器以非0状态退出或者被系统终止。

未知状态(PodUnkonwn):出于某种原因,无法获得Pod的状态,通常是由于与Pod主机通信时出错。

api/core/v1

一个pod的完整创建,通常会伴随着各种事件的产生,k8s种事件的种类总共只有4种:

Added EventType = "ADDED"

Modified EventType = "MODIFIED"

Deleted EventType = "DELETED"

Error EventType = "ERROR"

PodStatus 有一组PodConditions。 PodCondition中的ConditionStatus,它代表了当前pod是否处于某一个阶段(PodScheduled,Ready,Initialized,Unschedulable),“true” 表示处于,“false”表示不处于。

PodCondition数组的每个元素都有一个类型字段和一个状态字段。

类型字段 PodConditionType  是一个字符串,可能的值是

PodScheduled:pod正处于调度中,刚开始调度的时候,hostip还没绑定上,持续调度之后,有合适的节点就会绑定hostip,然后更新etcd数据

Ready: pod 已经可以开始服务,譬如被加到负载均衡里面

Initialized:所有pod 中的初始化容器已经完成了

Unschedulable:限制不能被调度,譬如现在资源不足


状态字段 ConditionStatus  是一个字符串,可能的值为True,False和Unknown


容器的状态:

    ContainerStateCreated ContainerState = "created"

    ContainerStateRunning ContainerState = "running"

    ContainerStateExited  ContainerState = "exited"

    // This unknown encompasses all the states that we currently don't care.

    ContainerStateUnknown ContainerState = "unknown"

举一个例子来说明一下情况

kubectl apply -f busybox.yaml

1. 写入数据到etcd

event type: ADDED event object:

{

    "phase": "Pending",

    "qosClass": "BestEffort"

}

2. 开始被调度,但是还未调度到具体node上,请注意:PodScheduled的status=“true”

event type: MODIFIED

{

    "phase": "Pending",

    "conditions": [

    {

        "type": "PodScheduled",

        "status": "True",

        "lastProbeTime": null,

        "lastTransitionTime": "2017-06-06T07:57:06Z"

   } ],

    "qosClass": "BestEffort"

}

3.  被调度到了具体的node上hostip绑定了,并且被所有初始化容器已经启动完毕(注意busybox.yaml中pod没有指定init container,所以这里很快就被设置成true),被调度到的节点watch到并开始创建容器(此阶段是在拉去镜像)然后创建容器 ,而此时Ready的status是false,仔细看会发现,containerStatus的状态为waiting

event type:MODIFIED{

  "phase": "Pending",

  "conditions": [

    {

      "type": "Initialized",

      "status": "True",

      "lastProbeTime": null,

      "lastTransitionTime": "2017-06-06T07:57:06Z"    },

    {

      "type": "Ready",

      "status": "False",

      "lastProbeTime": null,

      "lastTransitionTime": "2017-06-06T07:57:06Z",

      "reason": "ContainersNotReady",

      "message": "containers with unready status: [busybox]"    },

    {

      "type": "PodScheduled",

      "status": "True",

      "lastProbeTime": null,

      "lastTransitionTime": "2017-06-06T07:57:06Z"    }

  ],

  "hostIP": "10.39.1.35",

  "startTime": "2017-06-06T07:57:06Z",

  "containerStatuses": [

    {

      "name": "busybox",

      "state": {

        "waiting": {

          "reason": "ContainerCreating"        }

      },

      "lastState": {},

      "ready": false,

      "restartCount": 0,

      "image": "busybox",

      "imageID": ""    }

  ],

  "qosClass": "BestEffort"

}

4. 容器创建成功,Ready的status=“true”,此时容器的status也为running,这个时候,对应的pod的PodPhase也应该为running

event type:MODIFIED{

  "phase": "Running",

  "conditions": [

    {

      "type": "Initialized",

      "status": "True",

      "lastProbeTime": null,

      "lastTransitionTime": "2017-06-06T07:57:06Z"    },

    {

      "type": "Ready",

      "status": "True",

      "lastProbeTime": null,

      "lastTransitionTime": "2017-06-06T07:57:08Z"    },

    {

      "type": "PodScheduled",

      "status": "True",

      "lastProbeTime": null,

      "lastTransitionTime": "2017-06-06T07:57:06Z"    }

  ],

  "hostIP": "10.39.1.35",

  "podIP": "192.168.107.204",

  "startTime": "2017-06-06T07:57:06Z",

  "containerStatuses": [

    {

      "name": "busybox",

      "state": {

        "running": {

          "startedAt": "2017-06-06T07:57:08Z"        }

      },

      "lastState": {},

      "ready": true,

      "restartCount": 0,

      "image": "busybox:latest",

      "imageID": "docker-pullable://busybox@sha256:c79345819a6882c31b41bc771d9a94fc52872fa651b36771fbe0c8461d7ee558",

      "containerID": "docker://a6af9d58c7dabf55fdfe8d4222b2c16349e3b49b3d0eca4bc761fdb571f3cf44"    }

  ],

  "qosClass": "BestEffort"

}


CrashLoopBackOff: 容器退出,kubelet正在将它重启

InvalidImageName: 无法解析镜像名称

ImageInspectError: 无法校验镜像

ErrImageNeverPull: 策略禁止拉取镜像

ImagePullBackOff: 正在重试拉取

RegistryUnavailable: 连接不到镜像中心

ErrImagePull: 通用的拉取镜像出错

CreateContainerConfigError: 不能创建kubelet使用的容器配置

CreateContainerError: 创建容器失败

m.internalLifecycle.PreStartContainer  执行hook报错

RunContainerError: 启动容器失败

PostStartHookError: 执行hook报错


ContainersNotInitialized: 容器没有初始化完毕

ContainersNotReady: 容器没有准备完毕


ContainerCreating:容器创建中

PodInitializing:pod 初始化中


DockerDaemonNotReady:docker还没有完全启动

NetworkPluginNotReady: 网络插件还没有完全启动

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,646评论 18 139
  • 1.Pod Pod是k8s的最基本的操作单元,包含一个或多个紧密相关的容器,类似于豌豆荚的概念。一个Pod可以被一...
    jony456123阅读 7,405评论 0 5
  • 1.1 Kubernetes是什么 首先,它是一个全新的基于容器技术的分布式架构领先方案; 其次,Kubernet...
    c84f3109853b阅读 80,578评论 1 117
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,372评论 1 92
  • 星期二,正在忙着开会的王宁,手机突然响了起来,他吓了一跳,赶紧接起一听,是妻子方圆打来的,“老公,下午我们单位有事...
    安静写字的女子阅读 547评论 18 75