面试题

云原生面试题

·9 分钟阅读·3445 字

云原生技术体系面试题,涵盖容器、微服务、DevOps、声明式 API 等核心概念

📋 目录

云原生面试题

1. Docker 与虚拟机的区别

【题目】

Docker 是什么?它与虚拟机的区别是什么?

【参考答案】

Docker 是一种开源的容器化平台,通过容器打包和运行应用。

特性Docker 容器虚拟机
内核共享宿主机内核独立内核(每个 VM 有自己的 OS)
启动时间秒级分钟级
资源占用轻量(MB 级)重量(GB 级)
隔离级别进程级隔离(namespace)硬件级隔离
性能损耗几乎无有一定损耗(硬件虚拟化)

本质区别:容器是进程隔离,虚拟机是操作系统隔离。

【延伸追问】

  • 容器安全隔离性是否足够?(Docker 的 namespace 隔离与 VM 的硬件隔离差距)
  • 什么是 Kata Containers / gVisor?它们如何提升容器安全性? 【易错坑点】
  • 容器不是轻量级虚拟机,两者架构完全不同
  • 由于共享内核,Linux 容器不能运行 Windows 应用(反之亦然)

2. Dockerfile 与镜像分层

【题目】

什么是 Dockerfile?镜像和容器的区别是什么?

【参考答案】

Dockerfile 是定义 Docker 镜像构建过程的文本文件,包含一系列指令。

镜像 vs 容器:

概念类比说明
Docker 镜像类/模板应用 + 依赖的只读静态快照
Docker 容器实例/对象镜像运行后的可写实例

镜像分层原理:


基础镜像(Ubuntu/CentOS)

  → 安装依赖层(apt install)

  → 应用代码层(COPY . /app)

  → 启动命令层(CMD/ENTRYPOINT)

  → 容器运行时在最上层添加**可写层**

分层优势:

  • 复用:相同层可缓存共享,节省空间
  • 增量:只需传输变更层,加速部署 【延伸追问】
  • 如何通过多阶段构建减小镜像体积?
  • 镜像层的缓存失效机制是怎样的? 【易错坑点】
  • Dockerfile 每条指令创建一个层,过多层会导致镜像臃肿
  • COPY 和 ADD 指令会检查文件变化,文件变化导致后续所有缓存失效

3. Kubernetes 核心组件

【题目】

Kubernetes 的核心组件和作用?

【参考答案】

控制平面(Control Plane):

组件作用面试价值
kube-apiserver所有组件通信入口,提供 REST API⭐⭐⭐⭐⭐
kube-controller-manager运行控制器(Deployment、Node 等控制器)⭐⭐⭐⭐
kube-scheduler将 Pod 调度到合适的 Node⭐⭐⭐⭐
etcd分布式键值存储,保存集群所有状态⭐⭐⭐⭐⭐

工作节点(Worker Node):

组件作用
kubelet节点代理,管理 Pod 和容器生命周期
kube-proxy网络代理,维护 Service 负载均衡规则
容器运行时containerd / CRI-O

关键面试点:

  • API Server 是 stateless 的,所有状态存 etcd
  • 控制平面组件通常以静态 Pod 方式运行 【延伸追问】
  • 如果 etcd 挂了,K8s 集群还能正常工作吗?
  • kube-scheduler 的调度流程是怎样的? 【易错坑点】
  • API Server 是唯一与 etcd 通信的组件,其他组件都通过 API Server
  • kubelet 不是 K8s 原生组件,它是节点的 agent

4. Pod 与 Deployment

【题目】

什么是 Pod?什么是 Deployment?

【参考答案】

Pod:Kubernetes 中最小的部署单元,封装一个或多个容器。

  • 同 Pod 容器共享网络命名空间(同一 IP)
  • Pod 是临时的,重建后 IP 会变化 Deployment:声明式管理 Pod 副本数、滚动更新和回滚。
  • ReplicaSet 确保指定数量的 Pod 运行
  • 滚动更新策略:maxSurge(超量数)、maxUnavailable(不可用数)
  • 支持回滚到历史版本 Deployment vs StatefulSet: | 特性 | Deployment | StatefulSet | |------|-----------|-------------| | Pod 名称 | 随机后缀 | 有序编号(0, 1, 2…) | | 网络标识 | 随机 IP | 稳定 DNS 名称 | | 存储 | 共享卷 | 每个 Pod 独立 PVC | | 启动顺序 | 并行 | 顺序启动 | 【延伸追问】
  • Deployment 的滚动更新策略如何影响发布过程?
  • 什么场景下必须使用 StatefulSet 而不是 Deployment? 【易错坑点】
  • Deployment 直接管理的是 ReplicaSet,不是直接管理 Pod
  • StatefulSet 删除后 Pod 不会自动清理,需要手动操作

5. Service 类型

【题目】

Kubernetes Service 有哪些类型?各有什么作用?

【参考答案】

类型访问范围原理适用场景
ClusterIP集群内部虚拟 IP + kube-proxy DNAT内部服务互调
NodePort集群外部每节点开端口 → ClusterIP → Pod测试/简单暴露
LoadBalancer公网云厂商 LB → NodePort → ClusterIP → Pod对外服务
ExternalNameDNS 别名CoreDNS 返回 CNAME,无流量转发对接外部服务

包含关系:LoadBalancer 包含 NodePort 包含 ClusterIP

【延伸追问】

  • ClusterIP 是虚拟 IP,ping 不通是正常现象还是异常?
  • Headless Service(ClusterIP: None)的作用是什么? 【易错坑点】
  • Service 没有进程,不处理流量,它只是 kube-proxy 生成规则的描述
  • NodePort 端口范围固定 30000-32767,不能自定义

6. Ingress

【题目】

什么是 Ingress?

【参考答案】

Ingress 是 Kubernetes 的 七层 HTTP/HTTPS 路由资源,将外部流量按域名/路径分发到不同的 Service。

与 Service 的区别:

特性ServiceIngress
层级四层(TCP/UDP)七层(HTTP/HTTPS)
路由依据IP + 端口域名 + 路径
TLS 终止❌ 不支持✅ 支持
会话保持源 IPCookie(生产首选)

典型配置:


apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

  name: example-ingress

spec:

  rules:

  - host: app.example.com

    http:

      paths:

      - path: /

        pathType: Prefix

        backend:

          service:

            name: my-service

            port: number: 80

【延伸追问】

  • Ingress Controller 和 Ingress 资源的关系是什么?
  • Gateway API 相比 Ingress 的优势是什么? 【易错坑点】
  • Ingress 资源本身不做流量转发,需要 Ingress Controller(如 Nginx Ingress)
  • 没有部署 Ingress Controller 的情况下创建 Ingress 资源不会生效

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro