k8s干什么的? jenkins pipline + docker engine调度? k8s为什么是一套巨型的运维体系?
1️⃣ 问题一:K8s 到底是干什么的?用在什么场景?
比喻:
Docker 就像一个 “单兵作战的士兵”。你命令他:“去,把这个战壕挖好。”他就去挖了。
K8s (Kubernetes) 就像一个 “指挥千军万马的将军”。
K8s 的核心作用: 如果你只有 5 个容器,你手动 docker run 没问题。 但如果你有 10,000 个容器,运行在 500 台服务器上,你会面临巨大的麻烦:
调度:这 10,000 个容器,哪个跑在服务器 A,哪个跑在服务器 B?谁还有内存?(K8s 自动帮你算)
自愈:半夜 3 点,服务器 C 炸了,上面的 200 个容器挂了。谁来把它们“复活”到服务器 D 上?(K8s 自动发现并迁移)
扩容:双十一来了,流量暴涨,需不需要自动把 1 万个容器变成 2 万个?(K8s 自动扩容)
总结场景:
用 Docker 的场景:单机部署、开发环境、小规模集群(几十个容器)、强硬件依赖(比如你的手机测试)。
用 K8s 的场景:微服务架构、大规模Web服务(抖音/淘宝后台)、无状态服务(随时可以死,随时可以在别处活)。
2️⃣ 问题二:Jenkins Pipeline + Docker Engine 具体指什么?
你的理解基本正确,我帮你把概念对齐到架构层级。
- Jenkins Pipeline (大脑 / 控制器)
实体:不仅是 Jenkinsfile。它是运行在 Jenkins Server 里的一套逻辑执行引擎。
动作:它解析你的 Git 代码,决定分几个叉(Parallel),决定先做 Clean 还是先做 Run,决定什么时候超时。
本质:它发号施令,但它自己不干脏活累活。
- Docker Engine (肌肉 / 执行器)
实体:是的,就是你宿主机(Mac/Linux)上安装的那个 Docker Desktop 或者 dockerd 守护进程。
动作:它接收 Jenkins 发来的指令(比如 docker run),然后向 Linux 内核申请资源,把隔离环境(容器)做出来。
本质:它负责真正地消耗 CPU 和内存去跑业务。
架构图解:
Jenkins (Brain) ---[发送 Shell 命令]---> Docker Engine (Muscle) ---[创建进程]---> Runner Container
面试话术: “我的架构是 Control Plane(Jenkins) 与 Data Plane(Docker) 分离的。Jenkins 负责编排逻辑,宿主机的 Docker Engine 负责提供运行时环境。”
3️⃣ 问题三:K8s 为什么是一套“巨型的运维体系”?
你说“用 K8s”,听起来就是三个字母。但在工业界,搭建和维护一套 K8s 集群,往往需要一个 3-5 人的全职 SRE 团队。
为什么这么重?因为它为了“抽象”,引入了太多中间层:
网络复杂 (Networking is Hell):
Docker:端口映射 -p 80:80,简单直观。
K8s:为了让几千台机器上的容器互通,它引入了 Overlay Network (覆盖网络),比如 Flannel/Calico。这相当于在物理网线上又虚拟了一层网线。出了问题(比如网络延迟),调试难度是 Docker 的 10 倍。
状态存储 (Etcd):
K8s 的大脑需要一个数据库存状态,叫 etcd。这个数据库非常娇贵,一挂全挂。维护 etcd 的高可用本身就是一门学问。
存储驱动 (CSI):
Docker:-v /logs:/logs,挂载物理路径,简单粗暴。
K8s:因为 Pod 会漂移(今天在机器 A,明天在机器 B),你不能挂载物理路径(机器 B 上没有机器 A 的硬盘)。你必须引入 NFS、Ceph、云硬盘等分布式存储。这又是一套复杂的系统。
硬件隔离 (Device Plugin):
这对你最致命。
Docker:--privileged -v /dev/bus/usb,直接拿到 USB。
K8s:它默认不让容器碰物理硬件。你想透传 USB?你需要写 Device Plugin,给节点打标签,配置亲和性调度... 极其麻烦。
总结:
Docker 就像 “搭帐篷”:找块地,支起来就能住。适合快速行动。
K8s 就像 “建城市”:你要规划下水道(网络)、电网(存储)、行政中心(Etcd)。虽然建好后能住几百万人,但如果你只是想住 50 个人,建个城市就是“大炮打蚊子”——ROI 极低。
💡 面试“必杀技”
如果面试官问:“你为什么觉得 K8s 运维成本高?”
你要这样回答:
“因为 K8s 为了实现大规模的自动调度,引入了极高的网络复杂度(Overlay Network)和存储复杂度(分布式存储)。
尤其是对于我的移动端测试业务,核心痛点是物理 USB 设备的稳定性,而不是服务的动态漂移。 引入 K8s 不仅需要解决复杂的 USB 透传(Device Plugin)问题,还需要维护 etcd 和 CNI 网络插件。 这里的运维成本(OpEx)远超其带来的自动化收益,所以对于目前的 50 台设备规模,Jenkins + Docker Engine 是最精益(Lean)的选择。”
听懂了吗?这就是架构师的思维——权衡(Trade-off)。

浙公网安备 33010602011771号