avatar

Wz Blog

运维学习・持续更新

  • 首页
  • 文章
  • 登录/注册
  • 管理后台
主页 Pod详解
文章

Pod详解

发表于 2026-10-11 更新于 2026-10- 11
作者 Administrator
14~18 分钟 阅读

▶ Pod资源清单


apiVersion: v1
kind: Pod
metadata:
name: string
namespace: string
labels:
- name: string
spec:
initContainers:
- name: test -mysql
image: busybox
command: ["/bin/sh","-c","until ping xx.xx.xx.x -c 1;do echo xxx;done"]
#检测MySQL启动了,才启动主容器
containers:
- name: string
image: string
imagePullPolicy: [Always|Never|IfNotPresent] #获取镜像策略
command: [string] #容器的的启动命令,如不指定,使用打包时的命令
args: [string] #容器的启动命令参数列表
workingDir: string #容器的工作目录
volumeMounts: #挂载到容器内部的存储卷配置
- name: string #存储卷名称
mountPath: string #存储卷在容器内mount的绝对路径
readOnly: boolean #是否为只读模式
ports: #需要暴露的端口库号列表
- name: string #端口的名称
containerPort: int #容器需要监听的端口号
hosotPort: int #容器所在主机需要监听的端口号
protocol: string #端口协议,支持TCP和UPD,默认TCP
env: #容器运行前需设置的环境变量列表
- name: string #环境变量名称
value: string #环境变量的值
resources: #资源限制和请求的设置
limits: #资源上限
cpu: string
memory: string
requests: #资源下限
cpu: string
memory: string
lifecycle: #生命周期钩子
postStart: #容器启动后立刻执行此钩子,如果失败,根据重启策略重启

exec #在容器内执行一次命令

tcpSocket #在容器内尝试访问指定的端口

httpGet #在容器内向某url发起http请求

preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止

livenessProbe: #对pod内各容器健康检查的设置,当探测无响应几次后重启

StartupProbe| ReadinessProbe| livenessProbe

---|---|---

启动探针| 就绪探针| 存活探针

commed httpget tcpsocket

**exec: #对pod容器内检查方式设置为exec方式**

command: [string] #exec方式需要制定的命令或脚本

**httpGet: #健康检查方法**

path: string

port: number

host: string

scheme: string

HttpHeaders:

- name: string

value: string

**tcpSocket: #健康检查方法**

port: number

initialDelaySeconds: 0 #首次探测的时间/s

timeoutSeconds: 0 #健康检查探测超时时间,默认1秒

periodSeconds: 0 #定期探测时间,默认10秒一次

![](/upload/Image-iMNe.png)

successThreshold: 0

failureThreshold: 0


securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] #Pod的重启策略
nodeName: <string> #设置该Pod将被调度到哪个node节点上
nodeSelector: object #设置将该Pod调度到包含这个label的节点上
imagePullSecrets: #pull镜像时使用的secret名称
- name: string
hostNetwork: false #是否使用主机网络模式,默认为false
volumes: #在该pod上定义共享存储卷列表
- name: string #卷名(columes类型有很多种)
emptyDir: {} #类型为emptyDir,与Pod同生命周期的一个临时目录。为空值
hostPath: string #类型为hostPath,表示挂载pod所在宿主机的目录
path: string
secret: #类型为secret,挂载集群与定义的secret对象到容器内部,存放密码、密钥、token这类敏感信息
secretname: string
items:
- key: string
path: string
configMap: #类型为configMap,挂载预定义的configMap对象到容器内部,存放配置文件、环境配置
name: string
items:
- key: string
path: string
### ▶ pod的创建过程

1.要创建的pod信息提交给apiServer

2.apiServer生成pod对象的信息,将信息存入etcd

3.其他组件使用list--watch机制来跟踪检查apiServer上的变动

4.scheduler发现有新的pod对象要创建,开始为pod分配主机并将结果信息更新至apiServer

5.node节点上的kubelet发现有pod调度过来,尝试调用docker启动容器,并将结果回送至apiServer

6.apiServer将接收到的pod状态信息存入etcd

▶ pod的生命周期过程

1.提交清单 准入校验

用户提交pod资源清单,交给apiServer做认证、鉴权、准入校验

• 校验失败------>直接准入失败

• 校验通过------>pod进入pending阶段,等待调度、拉镜像、挂载存储

2.调度+pause容器+初始化容器(Init Container)

调度器成功分配节点之后,判断有没有init容器

• 有init容器:顺序串行执行所有init容器。只要任意init容器启动失败/退出码非0,按重启策略重启,失败则状态置为Failed。全部Init容器执行成功,才会启动主容器。

• 无init容器:直接启动主容器

3.PostStart钩子 进入Running

主容器启动后,立刻执行PostStart生命周期钩子(容器启动后触发,钩子异常不会重试)。钩子成功执行后,Pod进入Running阶段,开始执行三类探针:

• StartupProbe启动探针:

判断容器是否成功启动,失败会触发容器重启

• ReadinessProbe就绪探针:

就绪失败时,会把Pod从Service的Endpoint擦除(不再接收流量,但Pod继续运行)

• LivenessProbe存活探针:

连续探测失败,判定容器卡死,触发容器重启。

探针全部正常,则容器对外正常提供业务服务

4.终止流程(Terminating阶段)

两种场景进入终止:

• 执行kubectl delete收到SIGTERM信号

• 节点宕机/网络失联(节点失联时Pod标记为Unknown)

5.进入优雅终止宽限期,执行PreStop钩子(容器关闭前的清理逻辑)

6.钩子执行完,向容器进程发送SIGTERM信号

7.等待容器进程退出

• 进程退出码=0:正常完成任务----->Pod状态Succedded

• 进程退出码!=0:异常退出,进入重启策略判断

8.重启策略RestartPolicy分支

• Always/OnFailure:

触发重启,多次失败后进入CrashLoopBackOff(指数退避等待重试)

• Never:

不重启,Pod直接标记为Failed

▶ Pod调度

1.自动调度:运行在哪个节点上完全由Scheduler经过一系列的算法计算得出

2.定向调度:NodeName、NodeSelector

3.亲和性调度:NodeAffinity、PodAffinity、PodAntiAffinity

4.污点/容忍调度:Taints(节点上设置)、Toleration(Pod上设置)

• 定向调度

▪ NodeName

优先级最高,NodeName强制约束调度(忽略污点),因为是直接跳过Scheduler的调度逻辑,直接将Pod调度到指定名称的节点

**即使要调度的目标Node不存在,也会向上面进行调度,只不过pod运行失败而已**

yaml文件:


apiVersion: v1
kind: Pod
metadata:
name: pod-nodename
namespace: demo
spec:
containers:
- name: nginx
image: nginx:1.17.1
nodeName: node1 #指定调度到node1节点上
### ▪ NodeSelector

用于将pod调度到添加了指定标签的node节点上

1.为node节点添加标签:


kubectl label nodes node1 tag=test

2.创建yaml文件:


apiVersion: v1
kind: Pod
metadata:
name: nodeselector
namespace: demo
spec:
containers:
- name: nginx
image: nginx:1.17.1
nodeSelector:
tag: test #指定调度到具有tag=test标签的节点上
####  • 亲和性调度(节点亲和性、pod亲和性、pod反亲和性)
### ▪ NodeAffinity(node亲和性)
yaml文件:
……
……
containers:
……
affinity: #亲和性设置
nodeAffinity: #设置node亲和性
requiredDuringSchedulingIgnoredDuringExecution:
#硬限制
nodeSelectorTerms:
- matchExpressions: #匹配env的值
- key: env
operator: In
values: ["xxx","yyy"]
### ▪ PodAffinity(pod亲和性)

yaml文件

……

containers:

……


affinity:
podAffinity: #pod亲和性
require…………
- labelSelector:
matchExpressions: #匹配值
- key: tag
operator: In
values: ["xxx","yyy"]
topologyKey: kubernetes.io/hostname
### ▪ PodAntiAffinity(pod反亲和性)

yaml文件


affinity:
podAntiAffinity:
………………
………………
####  • 污点和容忍
### 污点(Taints):只有工作节点可以配置污点

▪ PreferNoSchedule:尽量不来,除非没办法

▪ NoSchedule:新的不要来,在这里的就别动了

▪ NoExecute:新的不要来,在这里的赶紧走

**命令操作:**

设置污点:


kubectl taint nodes node1 key=value:effect

去除污点:


kubectl taint nodes node1 key:effect-

去除所有污点:


kubectl taint nodes node1 key-

查看节点污点:


kubectl describe pods | grep -i taint

容忍(Toleration):pod上配置容忍

配置yaml文件:

……

……


containers:
……
……
tolerations:
- key: "tag" #要容忍的污点
operator: "Equal" #操作符
value: "hello" #容忍的污点的value
effect: "NoExecute" #添加容忍的规则,必须和污点相同
容器与云原生
笔记 Kubernetes
许可协议:  CC BY 4.0
分享

相关文章

10月 17, 2026

Kubernetes v1.28.2 双Master堆叠etcd + Haproxy/Keepalived 高可用部署 SOP(Docker + cri-dockerd)

架构一句话:3 台阿里云 ECS,2 台跑 kube-apiserver + etcd 堆叠控制平面,同时在这 2 台上混部 Haproxy + Keepalived 提供 VIP 172.26.127.62:6443;第 3 台做 Worker。所有 kubelet / kubectl 一律连 V

10月 11, 2026

使用Docker方式部署Harbor镜像仓库

1.下载离线安装包 wget https://github.com/goharbor/harbor/releases/download/v2.13.1/harbor-offline-installer-v2.13.1.tgz 2.解压到/opt目录下 tar xvzf harbor-offli

10月 11, 2026

kubernetes概念

▶ k8s简介以及主要功能(优势) • k8s简介 k8s的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理。目的是实现资源管理的自动化。 • 主要功能 ▪ 自我修复:RS deployment 一旦某一个容器崩溃,能够在1秒左右迅速启动新的容器 ▪ 弹性伸缩:

下一篇

Prometheus

上一篇

Pod控制器

最近更新

  • Kubernetes v1.28.2 双Master堆叠etcd + Haproxy/Keepalived 高可用部署 SOP(Docker + cri-dockerd)
  • 名词解释
  • ECS 实例反复冻结 —— 故障根因分析报告
  • 运维六大工作内容
  • 磁盘相关命令

热门标签

监控 Linux 数据库 Docker 笔记 CI/CD Kubernetes Nginx

目录

©2026 Wz Blog. 保留部分权利。

使用 Halo 主题 Chirpy