生命周期管理

pod 的完整生命周期

1698103652643

pod 生命周期管理 Pod phase

1698103827449

Pod 状态详解

k8s Pod状态详解
在 Kubernetes 中,Pod 是最小的可部署的计算单元,它是一组容器的集合,共享同一个网络命名空间、存储卷等资源。

Kubernetes 中的 Pod 有以下几种状态:

  • Pending(挂起):Pod 已经被 Kubernetes API 接受,但它的容器镜像还没有被拉取,或者 Pod 所需的节点资源(CPU、内存等)还没有满足。在这个状态中,Pod 是不可调度的。
  • Running(运行):Pod 已经调度到了节点上并且所有容器都已经创建,至少有一个容器仍在运行中或者在启动过程中。
  • Succeeded(成功):Pod 中的所有容器都已经正常终止,并且不会再重启。
  • Failed(失败):Pod 中至少有一个容器已经以非零状态退出。
  • Unknown(未知):无法获取 Pod 的状态。这种状态通常是由于与 Pod 相关的 API 调用失败或者 Pod 控制器处于错误状态导致的。

除了上述状态之外,Pod还有一些特殊的条件状态,它们记录了 Pod 的一些细节信息,例如 Pod 是否处于调度中、容器镜像是否拉取成功等。这些状态和条件状态可以通过 kubectl describe pod 命令获取,这些条件状态:

  • PodScheduled:表示 Pod 是否已经被调度到了节点上。
  • ContainersReady:表示 Pod 中的所有容器是否已经准备就绪。
  • Initialized:表示 Pod 中的所有容器是否已经初始化。
  • Ready:表示 Pod 是否已经准备就绪,即所有容器都已经启动并且可以接收流量。
  • 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: 网络插件还没有完全启动
  • Evicte: pod被驱赶

如何确保Pod的高可用

1698104642352

合理设置Qos

Pod 的QoS分类

[Qos & Quota] Guaranteed, Burstable and BestEffort

当reousrces 的limits 和requests 设置的不一致时, 在资源紧张的时候可能会造成资源抢占

1698104939873

当计算节点检测到内存压力时,Kubernetes 会按照 BestEffort -> Burstable -> Guarantted 的顺序一次驱逐Pod

1698104848928

获取pod qosClass

1
kubectl get pod test-vfgg6 -oyaml | grep qosClass

质量保证-通过Qos

1698105129872

延长Pod 的Toleration

1698105391197

健康探针

1698105425924

探针属性

1698106187373

ReadinessGates

通过外部控制器控制让Pod容器进入ready状态

1698152804111

Post-start & Pre-Stop Hook

1698107741819

terminationGracePeriodSeconds: 是 Pre-Stop 执行多久后 发送 kill -SIGKILL 信号

Termination Pod 的经验

1698108683280

数据的保存方式

1698109162276

高可用部署

更新策略

  • maxSurge: 滚动更新新版本的时候, 每次新起多少个Pod
  • maxUnabaliable: 多少个Pod失败会终止滚动升级

微服务架构下的高可用

集中式负载均衡 服务发现

1698193738437

1698193764782

进程内LB服务发现

1698193841147

独立进程服务发现

1698193958856

1698194013593

DNS负载均衡

1698194224360

1698194292209

负载均衡相关技术

1698194432703

网络地址转换(NAT)

NAT

1698194546751

新建TCP连接

1698194710158

链路层负载均衡

必须在同一个子网内

1698194737712

隧道技术

1698194763192

刘小恺(Kyle) wechat
如有疑问可联系博主