kubernetes-notes
  • 目录
    • 序言
  • 云原生体系
    • 12-Factor
    • K8S知识体系
  • 安装与配置
    • 部署k8s集群
      • 使用kubeadm安装生产环境kubernetes
      • 使用kubespray安装kubernetes
      • 使用minikube安装kubernetes
      • 使用kind安装kubernetes
    • k8s证书及秘钥
    • k8s版本说明
  • 基本概念
    • kubernetes架构
      • Kubernetes总架构图
      • 基于Docker及Kubernetes技术构建容器云(PaaS)平台概述
    • kubernetes对象
      • 理解kubernetes对象
      • kubernetes常用对象说明
    • Pod
      • Pod介绍
      • Pod定义文件
      • Pod生命周期
      • Pod健康检查
      • Pod存储卷
      • Pod控制器
      • Pod伸缩与升级
    • 配置
      • ConfigMap
    • Workload
  • 核心原理
    • 核心组件
      • Api Server
      • Controller Manager
      • Scheduler
      • Kubelet
    • 流程图
      • Pod创建流程
      • PVC创建流程
  • 容器网络
    • Docker网络
    • K8S网络
    • 网络插件
      • Flannel介绍
    • CNI
      • CNI接口介绍
      • Macvlan介绍
  • 容器存储
    • 存储卷概念
      • Volume
      • Persistent Volume
      • Persistent Volume Claim
      • Storage Class
      • Dynamic Volume Provisioning
    • CSI
      • csi-cephfs-plugin
      • 部署csi-cephfs
      • 部署cephfs-provisioner
      • FlexVolume介绍
  • 资源隔离
    • 资源配额
    • Pod限额
    • 资源服务质量
    • Lxcfs资源视图隔离
  • 运维指南
    • kubectl工具
      • kubectl安装与配置
      • kubectl命令说明
      • kubectl命令别名
    • kubernetes集群问题排查
    • 节点调度
      • 安全迁移节点
      • 指定Node调度与隔离
    • 镜像仓库配置
      • 配置私有的镜像仓库
      • 拉取私有镜像
  • 开发指南
    • client-go的使用及源码分析
    • CSI插件开发
      • nfs-client-provisioner源码分析
      • csi-provisioner源码分析
    • operator开发
      • kubebuilder的使用
  • 问题排查
    • 节点相关问题
      • keycreate permission denied
      • Cgroup不支持pid资源
      • Cgroup子系统无法挂载
    • Pod驱逐
    • 镜像拉取失败问题
    • PVC Terminating
  • 源码分析
    • Kubernetes源码分析笔记
    • kubelet
      • NewKubeletCommand
      • NewMainKubelet
      • startKubelet
      • syncLoopIteration
      • syncPod
    • kube-controller-manager
      • NewControllerManagerCommand
      • DeploymentController
      • Informer机制
    • kube-scheduler
      • NewSchedulerCommand
      • registerAlgorithmProvider
      • scheduleOne
      • findNodesThatFit
      • PrioritizeNodes
      • preempt
    • kube-apiserver
      • NewAPIServerCommand
  • Runtime
    • Runtime
      • Runc和Containerd概述
    • Containerd
      • 安装Containerd
    • Docker
      • Docker学习笔记
    • Kata Container
      • kata容器简介
      • kata配置
    • GPU
      • nvidia-device-plugin介绍
  • Etcd
    • Etcd介绍
    • Raft算法
    • Etcd启动配置参数
    • Etcd访问控制
    • etcdctl命令工具
      • etcdctl命令工具-V3
      • etcdctl命令工具-V2
    • Etcd中的k8s数据
    • Etcd-Operator的使用
  • 多集群管理
    • k8s多集群管理的思考
    • Virtual Kubelet
      • Virtual Kubelet介绍
      • Virtual Kubelet 命令
    • Karmada
      • Karmada介绍
  • 边缘容器
    • KubeEdge介绍
    • KubeEdge源码分析
      • cloudcore
      • edgecore
    • OpenYurt部署
  • 虚拟化
    • 虚拟化相关概念
    • KubeVirt
      • KubeVirt的介绍
      • KubeVirt的使用
  • 监控体系
    • 监控体系介绍
    • cAdvisor介绍
    • Heapster介绍
    • Influxdb介绍
由 GitBook 提供支持

www.huweihuang.com

在本页
  • 1. Pod phase
  • 2. Pod 状态
  • 3. 重启策略
  • 4. Pod的生命
  • 5. Pod状态转换
  • 5.1. 容器运行时内存超出限制
  • 5.2. 磁盘故障
  • 5.3. 运行节点挂掉

这有帮助吗?

在GitHub上编辑
  1. 基本概念
  2. Pod

Pod生命周期

上一页Pod定义文件下一页Pod健康检查

最后更新于2年前

这有帮助吗?

1. Pod phase

Pod的phase是Pod生命周期中的简单宏观描述,定义在Pod的PodStatus对象的phase 字段中。

phase有以下几种值:

状态值
说明

挂起(Pending)

Pod 已被 Kubernetes 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包括调度 Pod 的时间和通过网络下载镜像的时间。

运行中(Running)

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

成功(Succeeded)

Pod 中的所有容器都被成功终止,并且不会再重启。

失败(Failed)

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

未知(Unknown)

因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。

2. Pod 状态

Pod 有一个 PodStatus 对象,其中包含一个 数组。 PodCondition包含以下以下字段:

  • lastProbeTime:Pod condition最后一次被探测到的时间戳。

  • lastTransitionTime:Pod最后一次状态转变的时间戳。

  • message:状态转化的信息,一般为报错信息,例如:containers with unready status: [c-1]。

  • reason:最后一次状态形成的原因,一般为报错原因,例如:ContainersNotReady。

  • status:包含的值有 True、False 和 Unknown。

  • type:Pod状态的几种类型。

其中type字段包含以下几个值:

  • PodScheduled:Pod已经被调度到运行节点。

  • Ready:Pod已经可以接收请求提供服务。

  • Initialized:所有的init container已经成功启动。

  • Unschedulable:无法调度该Pod,例如节点资源不够。

  • ContainersReady:Pod中的所有容器已准备就绪。

3. 重启策略

Pod通过restartPolicy字段指定重启策略,重启策略类型为:Always、OnFailure 和 Never,默认为 Always。

restartPolicy 仅指通过同一节点上的 kubelet 重新启动容器。

重启策略
说明

Always

当容器失效时,由kubelet自动重启该容器

OnFailure

当容器终止运行且退出码不为0时,由kubelet自动重启该容器

Never

不论容器运行状态如何,kubelet都不会重启该容器

说明:

可以管理Pod的控制器有Replication Controller,Job,DaemonSet,及kubelet(静态Pod)。

  1. RC和DaemonSet:必须设置为Always,需要保证该容器持续运行。

  2. Job:OnFailure或Never,确保容器执行完后不再重启。

  3. kubelet:在Pod失效的时候重启它,不论RestartPolicy设置为什么值,并且不会对Pod进行健康检查。

4. Pod的生命

Pod的生命周期一般通过Controler 的方式管理,每种Controller都会包含PodTemplate来指明Pod的相关属性,Controller可以自动对pod的异常状态进行重新调度和恢复,除非通过Controller的方式删除其管理的Pod,不然kubernetes始终运行用户预期状态的Pod。

控制器的分类

  • 使用 Job运行预期会终止的 Pod,例如批量计算。Job 仅适用于重启策略为 OnFailure 或 Never 的 Pod。

  • 对预期不会终止的 Pod 使用 ReplicationController、ReplicaSet和 Deployment,例如 Web 服务器。 ReplicationController 仅适用于具有 restartPolicy 为 Always 的 Pod。

  • 提供特定于机器的系统服务,使用 DaemonSet为每台机器运行一个 Pod 。

如果节点死亡或与集群的其余部分断开连接,则 Kubernetes 将应用一个策略将丢失节点上的所有 Pod 的 phase 设置为 Failed。

5. Pod状态转换

常见的状态转换

Pod的容器数
Pod当前状态
发生的事件
Pod结果状态

RestartPolicy=Always

RestartPolicy=OnFailure

RestartPolicy=Never

包含一个容器

Running

容器成功退出

Running

Succeeded

Succeeded

包含一个容器

Running

容器失败退出

Running

Running

Failure

包含两个容器

Running

1个容器失败退出

Running

Running

Running

包含两个容器

Running

容器被OOM杀掉

Running

Running

Failure

5.1. 容器运行时内存超出限制

  • 容器以失败状态终止。

  • 记录 OOM 事件。

  • 如果restartPolicy为:

    • Always:重启容器;Pod phase 仍为 Running。

    • OnFailure:重启容器;Pod phase 仍为 Running。

    • Never: 记录失败事件;Pod phase 仍为 Failed。

5.2. 磁盘故障

  • 杀掉所有容器。

  • 记录适当事件。

  • Pod phase 变成 Failed。

  • 如果使用控制器来运行,Pod 将在别处重建。

5.3. 运行节点挂掉

  • 节点控制器等待直到超时。

  • 节点控制器将 Pod phase 设置为 Failed。

  • 如果是用控制器来运行,Pod 将在别处重建。

参考文章:

  • https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/

PodCondition