Skip to content

云原生面试通关指南:Docker 与 Kubernetes (2026 版)

写在前面

2026 年,云原生已经成为后端开发的默认环境。不再有“我只管写代码,部署是运维的事”这种说法。面试官要求你深入理解 容器技术的底层原理,以及 K8S 的核心架构与调度机制。掌握这些,是你迈向架构师的必经之路。


🐳 第一部分:Docker 容器底层原理

1. 容器 vs 虚拟机

高频问法

  • “Docker 是轻量级虚拟机吗?”
  • “容器之间是如何隔离的?”

核心解析

  • 进程级隔离:Docker 容器本质上是宿主机上的一个进程,只是加上了隔离环境。它没有独立的内核,共享宿主机的 OS Kernel。
  • 三大基石
    1. Namespace (命名空间):实现资源隔离
      • PID:进程隔离。
      • NET:网络隔离(独立 IP、端口)。
      • MNT:文件系统隔离。
    2. Cgroups (Control Groups):实现资源限制
      • 限制容器能使用的 CPU 配额、内存大小。
    3. UnionFS (联合文件系统):实现镜像分层
      • Overlay2 是目前主流驱动。
      • Copy-on-Write (写时复制):启动容器时,不复制镜像,只在镜像层之上挂载一个“读写层”。只有修改文件时,才将文件从镜像层复制到读写层。

2. Dockerfile 最佳实践

高频问法

  • “如何优化镜像大小?”

技巧

  1. 多阶段构建 (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%。
  2. 减少层数:合并 RUN 指令(如 apt-get update && apt-get install)。
  3. 使用 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 包或二进制文件。

🚀 学习遇到瓶颈?想进大厂?

看完这篇技术文章,如果还是觉得不够系统,或者想在实战中快速提升?
王中阳的就业陪跑训练营,提供定制化学习路线 + 企业级实战项目 + 简历优化 + 模拟面试。

了解训练营详情