当前位置: 首页 > news >正文

K8s介绍(2)POD架构

K8s 中 Pod 的底层架构和容器组成:

整体架构分层(先看大结构)

这张图分为2 大区域

  • 左侧:Master Node(控制平面)​ —— 负责“发号施令”

  • 右侧:Worker Node(工作节点)​ —— 负责“干活执行”


二、 左侧:Master Node(控制平面)组件

控制平面的核心是“让集群按期望运行”,所有指令都经过API Server

组件

作用

图中位置

API Server

K8s 的唯一入口,所有操作(kubectl、控制器、调度器)都找它

中间矩形

Controller-Manager

运行各种控制器(Deployment、RS、Node 等),保证“期望状态”=“实际状态”

左下

Scheduler

调度 Pod,根据资源、亲和性等,选一个合适的 Worker Node

右下

etcd

分布式存储,保存集群所有资源的状态(Pod、Service、RS 等)

下方圆柱

📌控制流逻辑(箭头方向)

  1. 你用kubectl发请求 → 打到API Server

  2. API Server → 存到etcd(记录状态)

  3. Controller-Manager​ 监听 API Server,发现“实际状态≠期望状态” → 调谐(比如重建 Pod)

  4. Scheduler​ 监听 API Server,发现新 Pod 没调度 → 选一个 Worker Node → 通知 API Server


三、 右侧:Worker Node(工作节点)组件

工作节点的核心是“运行 Pod”,所有容器都在这里跑。

组件

作用

图中位置

kubelet

每个 Worker Node 一个,监听 API Server,根据 PodSpec 拉镜像、启容器、汇报状态

上方矩形

kube-proxy

维护iptables/IPVS 规则,实现 Service → Pod 流量转发

上方矩形(和 kubelet 并列)

pod

K8s 最小调度单位,里面跑container(容器)

红色框内

docker(或 containerd)

真正跑容器的容器运行时

红色框内(pod 旁边)

📌运行流逻辑(箭头方向)

  1. API Server 收到 Scheduler 的调度结果 → 通知对应 Worker Node 的kubelet

  2. kubelet​ → 调用docker​ → 拉镜像、启容器 → 形成pod(里面包含 container)

  3. kube-proxy​ → 监听 API Server 的 Service 变化 → 写 iptables/IPVS 规则 → 让外部流量能访问到 Pod


四、 图的“细节亮点”(容易被忽略的点)

1. 红色框:poddocker的关系

  • 图中红色框内,pod逻辑概念(K8s 的调度单位),docker实际运行环境(容器运行时)。

  • 一个pod里可以有多个 container(比如 pause + 业务容器 + init 容器),这些 container 都由docker启动。

2. 箭头双向性

  • API Serveretcd之间是双向箭头

    • API Server → etcd:写状态(比如创建 Pod)

    • etcd → API Server:读状态(比如查询 Pod)

  • API Serverkubelet之间也是双向箭头

    • API Server → kubelet:下发 Pod 配置

    • kubelet → API Server:汇报容器状态(Running、Failed 等)

3. 两个 Worker Node 的重复结构

  • 图中画了两个 Worker Node,说明 K8s 是多节点集群,每个节点都有kubelet+kube-proxy+pod+docker


五、 结合“创建 Pod”的流程(串联整张图)

我们拿“kubectl create -f pod.yaml”​ 来串一遍:

  1. kubectl​ → 调用API Server(Master 节点)

  2. API Server​ → 把 Pod 对象写入etcd(存状态)

  3. Scheduler​ 监听 API Server → 发现新 Pod 没调度 → 选一个 Worker Node(比如 Worker 1) → 通知 API Server

  4. API Server​ → 通知 Worker 1 的kubelet

  5. kubelet​ → 调用docker​ → 拉镜像、启容器 → 形成pod(里面有 container)

  6. kubelet​ → 向 API Server 汇报:“Pod 已 Running”

  7. kube-proxy​ → 监听 API Server,如果 Pod 被 Service 关联 → 写 iptables 规则 → 让外部能访问

一、Pod 内容器的类型(必须掌握)

Pod = 一组共享 Network / IPC / Volume 的容器集合

1️⃣ pause 容器(基础设施容器)

  • 第一个启动

  • 作用:

    • 创建Linux namespace(network / ipc / pid)

    • 为业务容器提供:

      • 共享网络栈(同一个 IP / localhost)

      • 共享存储卷

  • 特点:

    • 不跑业务

    • 生命周期 = Pod 生命周期

📌一句话

pause 容器是 Pod 的“地基”,所有容器都站在它上面。


2️⃣ init 容器(InitContainer)

  • 在业务容器之前串行执行

  • 作用:

    • 初始化环境

    • 等待依赖服务就绪

    • 拉配置、改权限、预检查

  • 特点:

    • 必须全部成功退出(exit 0)

    • 任何一个失败 → Pod 重启 / 卡住

📌 常见场景:

  • 等数据库 ready

  • 下载配置文件

  • 初始化数据库表


3️⃣ 业务容器(Container)

  • 真正跑服务的

  • 并行启动

  • 受探针 & 重启策略管理

启动顺序总结(必考)

纯文本

纯文本

pause 容器 ↓ init 容器(串行) ↓ 业务容器(并行)

二、Pod 的三种类型(重点区分)

类型

是否受控制器管理

是否自动重建

典型场景

自主式 Pod

临时测试

控制器 Pod

99% 生产

静态 Pod

✅(kubelet)

Master 组件


1️⃣ 自主式 Pod

  • 直接kubectl run或 YAML 创建

  • 挂了就挂了

  • 不会被重建

📌面试坑

自主式 Pod 不是“不能恢复”,而是没有控制器帮你恢复


2️⃣ 控制器管理的 Pod(最常用)

  • Deployment / StatefulSet / DaemonSet / Job

  • 保证副本数、版本、滚动更新


3️⃣ 静态 Pod

  • kubelet 直接管理

  • 文件路径:/etc/kubernetes/manifests

  • 特点:

    • 不走 apiserver

    • 不调度

    • 常用于:

      • kube-apiserver

      • kube-controller-manager

      • kube-scheduler

📌面试高频

静态 Pod 在kubectl get pods能看到,但删不掉(删了 kubelet 又拉起来)


三、ImagePullPolicy(镜像拉取策略)

策略

行为

IfNotPresent

本地有就用,没有就拉

Always

每次都拉(默认用于 latest)

Never

只用本地,不拉

📌生产规范

  • 非 latest 镜像 →IfNotPresent

  • latest 镜像 →Always

  • 离线环境 →Never


四、RestartPolicy(容器重启策略)

策略

说明

Always

只要退出就重启(默认)

OnFailure

非 0 才重启

Never

永不重启

📌联系 Pod 类型

  • Deployment → 几乎都是Always

  • Job / CronJob →OnFailure / Never


五、Harbor 镜像推送

bash

bash

docker tag nginx:latest 192.168.110.141/ruoyi/nginx:ruoyi-vue docker login -u admin -pHarbor12345 192.168.110.141 docker push 192.168.110.141/ruoyi/nginx:ruoyi-vue

📌K8s 使用

yaml

yaml

image: 192.168.110.141/ruoyi/nginx:ruoyi-vue imagePullSecrets: - name: harbor-secret

六、Pod 资源限制(Requests / Limits)

yaml

yaml

resources: requests: cpu: 200m memory: 300Mi limits: cpu: 500m memory: 500Mi

📌核心概念

  • requests:调度依据(Node 是否有资源)

  • limits:最大可用上限(OOM 杀手依据)

📌面试必说

requests 决定能不能调度,limits 决定会不会被 kill


七、K8s 驱逐机制(Eviction)

1️⃣ 驱逐触发条件

  • Node 资源不足:

    • memory.available

    • nodefs.available

    • imagefs.available

    • pid.available

📌硬阈值示例

yaml

yaml

eviction-hard: memory.available < 100Mi

2️⃣ QoS 等级(决定谁先死)

QoS

说明

Guaranteed

requests = limits(最后被杀)

Burstable

有 requests / limits(中间)

BestEffort

无限制(最先被杀)

驱逐优先级

纯文本

纯文本

BestEffort → Burstable → Guaranteed

八、容器健康检查(三大探针)

1️⃣ 三种探针的区别(必背)

探针

作用

失败后果

startupProbe

判断“是否启动完成”

Pod 启动失败

livenessProbe

判断是否活着

重启容器

readinessProbe

是否可接流量

从 Service 摘除

📌启动顺序

纯文本

纯文本

startupProbe → livenessProbe + readinessProbe

2️⃣ 探测方式

方式

说明

HTTPGet

/health返回 200

TCPSocket

端口能连

Exec

执行命令返回 0

📌MySQL 示例

bash

bash

mysql -uroot -pabc123 -e "show slave status\G" | grep -c "Yes"

九、一句话总结(面试收尾)

Pod 由一个 pause 容器提供基础环境,init 容器做初始化,业务容器跑服务;

Pod 由控制器管理可实现自愈,通过 requests / limits 限制资源,

依靠 startup / liveness / readiness 探针判断容器状态,

在资源不足时,K8s 根据 QoS 等级进行驱逐,保障集群稳定性。

http://www.jsqmd.com/news/965690/

相关文章:

  • 从文件系统到网络库:聊聊Linux内核与开源项目中那些‘树’的实战应用
  • 告别单调点图条图:用clusterProfiler+ggplot2打造高颜值可发表的富集分析图
  • 从激光雷达回波到论文复现:深入解读Rclonte-M算法中的波形参数奥秘
  • 用Python+PyModbus模拟一个Modbus RTU从站:从功能码到数据帧的完整实战
  • MinIO Admin 命令实战:从用户权限到集群修复,这10个高频操作你都会了吗?
  • VMware macOS解锁工具:打破硬件限制的虚拟化魔法
  • 别再混淆了!5分钟搞懂SAP ABAP中程序锁(ENQUEUE_ES_PROG)与对象锁的区别及_SCOPE实战
  • 从玻尔兹曼机到AlexNet:跟着Hinton的论文,一步步看懂深度学习的诞生史
  • 教资科三体育必背考点|初中高中体育简答题和教案模板
  • ai辅助优化unet:让快马平台的智能助手帮你解决图像分割中的边界模糊与漏检难题
  • 2026年口碑好的立式非标罐体/碳钢非标罐体/食品级非标罐体/卫生级非标罐体长期合作厂家推荐 - 品牌宣传支持者
  • 实战踩坑:用Java SDK对接农行开放平台H5开户,我遇到的5个坑和填坑方法
  • 2026年口碑好的螺旋地桩/地桩优质厂家推荐榜 - 行业平台推荐
  • 2026年5月市场上毛胚新房装修采暖辅材品牌选哪家,采暖/暖气片/全屋采暖/居家采暖/全屋地暖,采暖品牌哪家靠谱 - 品牌推荐师
  • Roblox Studio资源管理全解析:如何高效上传、组织素材并规避审核风险
  • 从Gym到PTA:盘点ICPC/CCPC历年赛题都藏在哪里(2018-2022平台变迁史)
  • 用 CausalML 的 DragonNet 和 SHAP 解释你的营销活动效果:一个实战案例
  • 5G基站开发实战:手把手解析FAPI P7接口的Slot消息调度流程
  • ubuntu装python,用glade设计GUI界面,pygtk这操作绝了
  • 2026年美国留学中介推荐,机构排名对比与选机构建议全流程指南 - 环球新视野
  • OpenClaw v2026.5.28-beta.1 预发布解读:运行时恢复、会话身份、移动端体验与热路径优化
  • 智能升级:利用快马平台AI模型为航点飞行注入智能规划能力
  • CSDN AI营销流量拆解(GEO vs 普通搜索):2024年Q2千万级曝光日志分析报告首次公开
  • Vivado 18.3 安装避坑全记录:从下载到关闭烦人更新,手把手搞定Zynq开发环境
  • 你的第一个C语言小项目:从零实现带文件存储的通讯录(静态/动态双版本对比)
  • 2026年质量好的光伏地桩/灌注地桩/螺旋地桩/地桩厂家精选合集 - 品牌宣传支持者
  • 别再手动处理数据了!用ArcGIS 10.7的‘模型构建器’批量自动化你的工作流
  • 别再让下载速度拖后腿!实测对比Xilinx JTAG-HS3、SMT2与Platform Cable USB,教你榨干硬件极限
  • PCIe 6.0的FLIT模式详解:如何把传输延迟从毫秒级降到纳秒级?
  • ZCU106开发板实战:用PetaLinux 2019.2为Vitis AI编译系统镜像,我踩过的那些网络和版本坑