pod相关知识总结

51 阅读3分钟

pod

pod是k8s集群最小的调度管理单元,用于来封装容器,实际使用很少创建单个pod,

创建方法

使用命令行创建

kubectl run nginxpod1 --image=harbor.wego.red/library/nginx:1.9.0 --image-pull-policy=IfNotPresent

使用资源清单创建

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: c1
    image: harbar.wego.red/library/nginx:1.9.0

pod几个状态

  • 挂起(Pending):API Server 已创建 Pod 资源并存入 etcd,但尚未完成调度或仍在从仓库下载镜像。
  • 运行中(Running):Pod 已被调度至节点,且所有容器已被 kubelet 创建完成。
  • 成功(Succeeded):Pod 中所有容器已成功终止且不会重启。
  • 失败(Failed):Pod 中所有容器已终止,且至少有一个容器因失败终止(如非 0 状态退出或被系统禁止)。
  • 未知(Unknown):API Server 无法正常获取 Pod 状态信息,通常因无法与所在节点的 kubelet 通信所致。

镜像下载的策略类型

  • Always 每次运行pod都需要下载镜像

  • Never 每次运行pod只使用本地镜像

  • IfNotPresent 每次运行pod,本地有镜像就使用本地镜像,如果本地没有镜像,就去下载

资源限制

  • resources

    • requests 请求资源

    • limits 限制资源


    apiVersion: v1 kind: Namespace metadata: name: mem-test


    apiVersion: v1 kind: Pod metadata: name: pod5 namespace: mem-test spec: containers:

    • name: c1 image: harbro.wego.red/library/stress:latest imagePullPolicy: IfNotPresent resources: requests: memory: "100Mi" limits: memory: "200Mi" command: ["stress"] args: ["--vm","1","--vm-bytes","150M","--vm-hang","1"]

pod的创建流程(简)

  • 首先是请求,用户通过kubectl等客户端向api server 提交 pod 配置
  • api server 将 pod 信息存入etcd 并向客户端返回确认
  • kubernetes 组件通过watch 机制跟踪api server 状态变化
  • kube-scheduler 为pod 选择工作节点,将结果更新api server,再api server 同步到 etcd
  • 目标节点的kubelet 调用docker 启动容器,将状态返回api server ,api server 存入etcd 告知 kubelet

Pod 生命周期

一、核心流程:启动与终止

1. 启动流程

  1. 先执行初始化容器(init container),完成环境准备。
  2. 初始化完成后,主容器(main container)启动。
  3. 主容器启动后触发 post start 钩子(启动后操作)。
  4. 进入健康检查阶段,执行存活探测和就绪探测。

2. 终止流程

  1. 容器终止前可触发 pre stop 钩子(终止前操作)。
  2. 按重启策略判断是否终止容器,特殊情况 30 秒后强制终止。

二、健康检查(Health Check)

1. 探测类型与作用

  • 存活探测(liveness probe):检测主容器是否存活,不健康则重启 Pod。
  • 就绪探测(readiness probe):检测主容器是否就绪,不健康则标记为 Notready,不转发 Service 流量。

2. 探测实现方式

  • Exec:通过执行指定命令判断状态。
  • HTTPGet:发送 HTTP 请求访问指定 URL 路径。
  • TCP:尝试建立 TCP 连接到指定端口。

三、容器重启策略(restartPolicy)

  • Always(默认):容器挂掉后总是重启,重复重启延迟时长从 10 秒、20 秒、40 秒逐步递增,最大 300 秒。
  • OnFailure:仅当容器以错误状态终止时重启,正常终止不重启。
  • Never:容器挂掉后不重启。