当前位置: 首页 > 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.rkmt.cn/news/1477427.html

相关文章:

  • 告别开机弹窗!Vivado 18.3安装后必做的几项优化设置(附License配置避坑)
  • 告别单调点图条图:用clusterProfiler+ggplot2打造高颜值可发表的富集分析图
  • 从玻尔兹曼机到AlexNet:跟着Hinton的论文,一步步看懂深度学习的诞生史
  • VMware macOS解锁工具:打破硬件限制的虚拟化魔法
  • 从激光雷达回波到论文复现:深入解读Rclonte-M算法中的波形参数奥秘
  • 2026年口碑好的螺旋地桩/地桩优质厂家推荐榜 - 行业平台推荐
  • 2026年美国留学中介推荐,机构排名对比与选机构建议全流程指南 - 环球新视野
  • PCIe 6.0的FLIT模式详解:如何把传输延迟从毫秒级降到纳秒级?
  • Simple Runtime Window Editor:释放窗口控制的无限可能,打造个性化数字工作空间
  • 2025-2026年具身智能机器人自动化程度综合评测:五大品牌自研大模型与操作系统全对比
  • CSDN AI数字营销服务站内广告投放功能详解,从开通流程到ROI监测的6步闭环落地指南
  • 保姆级教程:在Vue/React项目中集成C-Lodop,实现静默打印远程PDF报表
  • 从ResNet到Vision Transformer:深入理解nn.AdaptiveAvgPool2d在CV模型中的关键作用
  • 不上传、不偷窥,这款开源 YouTube 神器有点东西...
  • TensorRT模型转换踩坑实录:trtexec处理动态Batch、Caffe/ONNX格式的避坑指南
  • 别再死记公式了!用LC谐振电路实测,带你搞懂品质因数Q的物理意义
  • 手把手教你搞定RK3568的百兆以太网:RMII模式DTS配置详解(附避坑点)
  • 前端打印PDF避坑指南:C-Lodop加载远端PDF链接的完整流程与常见问题
  • NMEA0183协议避坑指南:GPS、北斗模块数据解析最常见的5个错误
  • Cadence Virtuoso ADE保姆级教程:手把手教你用gm/Id方法绘制MOS管性能曲线
  • 2026年聚焦天津:实力玻璃隔断生产厂商河北钰东装饰工程有限公司的核心优势解析 - 2026年企业资讯
  • 告别有线束缚:用USR-VCOM和旧WiFi模块搭建ESP32无线MicroPython开发环境(附转接板设计)
  • 2026年南充环球风尚装饰联系信息及服务实力详解 - 优质品牌商家
  • 2026年河北C型钢厂家评测:YXB65-254-762/z型二次檩条/z型钢衬檩/z型附檩/免交注楼承板/免水泥楼承板/选择指南 - 优质品牌商家
  • FramePack:如何在普通显卡上实现超长视频生成?AI视频扩散革命性技术揭秘
  • 2026宜宾全屋定制厂家评测:硬核维度对比选品推荐 - 优质品牌商家
  • 从《现代大学英语精读》课文到实战:用Python爬虫+GPT-4o高效整理个人英语学习笔记库
  • 高通QCM6490平台DDR测试避坑指南:从QDUTT 2.0.2安装到读写死机问题解决
  • 徐州单招培训哪家好,橙子升学助力学子圆梦 - myqiye
  • 电力仿真新手必看:PSCAD 4.6.2从零搭建第一个电路模型(附避坑指南)