云原生面试通关指南:Docker 与 Kubernetes (2026 版)
写在前面:
2026 年,云原生已经成为后端开发的默认环境。不再有“我只管写代码,部署是运维的事”这种说法。面试官要求你深入理解 容器技术的底层原理,以及 K8S 的核心架构与调度机制。掌握这些,是你迈向架构师的必经之路。
🐳 第一部分:Docker 容器底层原理
1. 容器 vs 虚拟机
高频问法:
- “Docker 是轻量级虚拟机吗?”
- “容器之间是如何隔离的?”
核心解析:
- 进程级隔离:Docker 容器本质上是宿主机上的一个进程,只是加上了隔离环境。它没有独立的内核,共享宿主机的 OS Kernel。
- 三大基石:
- Namespace (命名空间):实现资源隔离。
PID:进程隔离。NET:网络隔离(独立 IP、端口)。MNT:文件系统隔离。
- Cgroups (Control Groups):实现资源限制。
- 限制容器能使用的 CPU 配额、内存大小。
- UnionFS (联合文件系统):实现镜像分层。
- Overlay2 是目前主流驱动。
- Copy-on-Write (写时复制):启动容器时,不复制镜像,只在镜像层之上挂载一个“读写层”。只有修改文件时,才将文件从镜像层复制到读写层。
- Namespace (命名空间):实现资源隔离。
2. Dockerfile 最佳实践
高频问法:
- “如何优化镜像大小?”
技巧:
- 多阶段构建 (Multi-stage Build):dockerfile
# Build 阶段 FROM golang:1.24 AS builder WORKDIR /app COPY . . RUN go build -o myapp # Run 阶段 FROM alpine:latest WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]- 最终镜像只包含二进制文件,不包含 Go 编译器和源代码,体积缩小 90%。
- 减少层数:合并
RUN指令(如apt-get update && apt-get install)。 - 使用 Distroless 镜像:Google 提供的极简镜像,不包含 Shell,安全性更高。
☸️ 第二部分:Kubernetes (K8S) 核心架构
1. K8S 架构全景图
高频问法:
- “kubectl apply 之后发生了什么?”
- “Etcd 的作用是什么?”
核心组件:
- Control Plane (控制面/Master):
- API Server:唯一入口,处理 REST 请求,认证授权。
- Etcd:分布式键值存储,保存集群所有状态(Source of Truth)。只有 API Server 能读写它。
- Controller Manager:控制器。维持期望状态(如 ReplicaSet 保证 Pod 数量)。
- Scheduler:调度器。决定 Pod 跑在哪个 Node 上(打分机制)。
- Worker Node (工作节点):
- Kubelet:节点代理。接收 API Server 指令,管理 Pod 生命周期。
- Kube-proxy:网络代理。维护 iptables/IPVS 规则,实现 Service 负载均衡。
- Container Runtime:容器运行时(Containerd/CRI-O)。
2. Pod:K8S 的最小原子
- 概念:Pod 是一组容器(Sidecar 模式)。它们共享 Network Namespace(同一个 IP)和 Volume。
- Pause 容器:Pod 的根容器,负责持有 Namespace。
- 生命周期钩子:
PreStop:在容器销毁前执行。常用于优雅停机(通知注册中心下线,等待请求处理完)。
3. Service 与网络模型
高频问法:
- “ClusterIP, NodePort, LoadBalancer 的区别?”
- “Pod 之间怎么通信的?”
核心解析:
- Service:逻辑抽象,屏蔽 Pod IP 变化。
- ClusterIP:默认。集群内访问。
- NodePort:在每个节点开放端口,供外部访问。
- Ingress:七层负载均衡(HTTP/HTTPS),通常基于 Nginx 或 Envoy。
- CNI (容器网络接口):
- Flannel (Overlay 网络,封装 UDP/VXLAN,性能略损耗)。
- Calico (BGP 路由,性能接近物理网络,支持网络策略)。
⚙️ 第三部分:故障排查与调度策略
1. Pod 状态排查
- Pending:调度失败。原因:资源不足 (CPU/Mem)、Taint/Toleration (污点) 不匹配、PVC 未绑定。
- CrashLoopBackOff:容器启动后立即退出。原因:应用 Panic、配置错误、健康检查 (Liveness Probe) 失败。
- ImagePullBackOff:镜像拉取失败。
2. 探针 (Probes)
- Liveness Probe (存活探针):检测“活没活着”。失败 -> 重启容器。
- Readiness Probe (就绪探针):检测“能不能接客”。失败 -> 切断流量 (从 Service Endpoints 移除)。
- Startup Probe:启动探针。保护启动慢的应用,避免被 Liveness 误杀。
总结:云原生时代,代码只是基础设施的一部分。掌握 Docker 和 K8S,意味着你拥有了交付整个系统的能力,而不仅仅是交付一个 jar 包或二进制文件。
