后端/运维面试终极宝典:Nginx + Docker + K8s 高频面试题
目录
2. 容器(Container)和虚拟机(VM)的区别(面试必问)
7. Docker 数据卷(Volume)是什么?作用是什么?
11. CMD 和 ENTRYPOINT 的区别(面试必问)
13. 镜像(Image)和容器(Container)的核心区别
2. K8s 核心架构(Master + Node 节点,必背)
4. Pod、Deployment、StatefulSet、DaemonSet 的区别(面试必问)
5. Service 是什么?核心作用是什么?常用类型有哪些?
9. PV、PVC、StorageClass 的区别与关系(必背)
12. K8s 自愈机制(Self-healing,核心优势)
15. 探针:livenessProbe(存活探针)和 readinessProbe(就绪探针)(必背)
一、Nginx 高频面试题(必背)
1. Nginx 是什么?有什么核心特点?
Nginx 是一款高性能、轻量级的 HTTP Web 服务器,同时也是优秀的反向代理服务器、邮件代理服务器和负载均衡器,广泛应用于高并发场景的服务部署。
核心特点:
-
内存占用极低,并发处理能力极强,支持万级并发连接;
-
采用异步非阻塞、事件驱动模型(基于 epoll/kqueue 机制),无请求阻塞瓶颈;
-
功能强大,可实现反向代理、负载均衡、动静分离,适配多种业务场景;
-
稳定性高,扩展性强,支持自定义模块开发,部署维护便捷。
2. Nginx 为什么能实现高并发、高性能?
核心原因在于其高效的架构设计,具体如下:
-
采用「多进程 + 异步非阻塞事件驱动模型」,避免进程/线程频繁创建销毁的资源开销;
-
一个 master 主进程管理多个 worker 工作进程,master 负责配置加载、进程管理,worker 负责处理具体请求;
-
每个 worker 进程为单线程,可高效处理大量并发请求,无需等待某个请求完成再处理下一个;
-
连接复用机制完善,内存占用极低,资源利用率拉满。
3. 什么是反向代理?Nginx 如何实现反向代理?
先区分正向代理与反向代理:
-
正向代理:代理客户端,替客户端访问外部服务(如 VPN),客户端明确知道目标服务器地址,代理仅作为“中间人”转发请求;
-
反向代理:代理服务端,客户端仅访问 Nginx 代理服务器,不知道后端真实服务节点,由 Nginx 根据配置转发请求到后端服务器集群,再将响应结果返回给客户端。
反向代理流程:客户端 → Nginx(反向代理) → 后端服务节点 → Nginx → 客户端
Nginx 实现反向代理:通过配置 upstream 模块定义后端服务集群,再在 server 模块中使用 proxy_pass 指令,将客户端请求转发到 upstream 定义的集群地址,核心配置示例如下:
upstream backend_server {
server 127.0.0.1:8080; # 后端服务1
server 127.0.0.1:8081; # 后端服务2
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://backend_server; # 转发请求到后端集群
}
}
4. Nginx 负载均衡有哪些常用策略?(附配置)
Nginx 内置多种负载均衡策略,可根据后端服务器性能、业务需求灵活选择,核心策略如下:
-
轮询(默认):请求按顺序依次分配到后端每个服务器,适用于后端服务器性能一致的场景,无需额外配置,默认启用。
-
权重轮询(weight):根据服务器性能设置权重值,权重越高,分配到的请求越多,适用于后端服务器性能不均衡的场景,配置示例:
upstream backend { server 127.0.0.1:8080 weight=1; # 权重1,接收1份请求 server 127.0.0.1:8081 weight=2; # 权重2,接收2份请求 } -
ip_hash:根据客户端 IP 地址进行哈希计算,将同一个客户端的请求固定分配到同一台后端服务器,实现会话保持,配置示例:
upstream backend { ip_hash; # 启用ip_hash策略 server 127.0.0.1:8080; server 127.0.0.1:8081; }注意:不推荐优先使用 ip_hash,性能较低,实际场景更建议用 token 实现会话跟踪。
-
最少连接数(least_conn):实时统计后端服务器的连接数,将请求转发到当前连接数最少的节点,适用于请求处理时间差异较大的场景,配置示例:
upstream backend { least_conn; # 启用最少连接数策略 server 127.0.0.1:8080; server 127.0.0.1:8081; } -
fair(第三方):根据后端服务器的请求响应时间分配请求,响应时间越短,优先分配,需额外安装第三方模块,配置示例:
upstream backend { fair; # 启用fair策略 server 127.0.0.1:8080; server 127.0.0.1:8081; }
5. Nginx 常用优化配置(实战重点)
通过简单配置优化,可进一步提升 Nginx 性能、安全性和稳定性,核心优化项:
-
调整 worker_processes:设置为 CPU 核心数(如 4 核 CPU 设为 4),充分利用 CPU 资源;
-
增大 worker_connections:设置单 worker 进程最大连接数(如 10240),提升并发能力;
-
开启 keepalive 长连接:减少 TCP 连接建立/关闭的开销,配置 keepalive_timeout 60s;
-
开启 gzip 压缩:压缩响应数据,减少网络传输量,提升访问速度;
-
设置 expires 缓存:对静态资源(图片、CSS、JS)设置缓存时间,减少重复请求;
-
隐藏 Nginx 版本号:避免版本漏洞被利用,配置 server_tokens off;
-
限制请求速率、并发连接:防止恶意攻击,配置 limit_req、limit_conn 模块。
6. Nginx 常用命令(必背)
nginx # 启动Nginx服务
nginx -s stop # 强制停止Nginx(立即终止,可能丢失请求)
nginx -s quit # 优雅停止Nginx(处理完当前请求后终止)
nginx -s reload # 热加载配置文件(无需停止服务,不影响业务)
nginx -t # 检查配置文件语法是否正确
nginx -v # 查看Nginx版本号
7. Nginx 和 Apache 的核心区别(面试必问)
| 对比维度 | Nginx | Apache |
|---|---|---|
| 处理模型 | 异步非阻塞,事件驱动 | 同步多进程/多线程 |
| 并发能力 | 极强,支持万级并发 | 较弱,适合中低并发 |
| 资源占用 | 轻量,内存占用低 | 较重,内存占用高 |
| 适用场景 | 静态资源、反向代理、高并发场景 | 动态请求、模块丰富,适合传统应用 |
核心结论:高并发场景下,Nginx 性能远优于 Apache,是当前主流的 Web 服务器和反向代理选择。
8. Nginx 惊群问题及解决方案
惊群现象:多个 worker 进程同时争抢同一个客户端连接,导致 CPU 资源浪费、请求处理效率下降。
解决方案:开启 Nginx 的 accept_mutex 互斥锁,配置 accept_mutex on,确保同一时间只有一个 worker 进程去 accept 客户端连接,避免争抢。
二、Docker 高频面试题(必背)
1. Docker 是什么?核心价值是什么?
Docker 是一款开源的应用容器引擎,基于 Go 语言开发,遵循 Apache2.0 开源协议,核心是“打包应用及依赖,实现一次封装,到处运行”。
核心价值:解决应用“环境不一致”问题,简化部署流程,实现应用与环境的解耦,同时轻量、可移植、可隔离,提升开发、测试、部署效率。
2. 容器(Container)和虚拟机(VM)的区别(面试必问)
两者都是实现隔离的技术,但架构差异极大,核心区别如下:
-
虚拟机:虚拟出完整的硬件(CPU、内存、磁盘),在硬件上运行完整的操作系统,再在系统上安装应用,重量级,启动慢(分钟级),资源占用高,隔离性强。
-
容器:不虚拟硬件,共享宿主机的内核,仅隔离应用的运行环境(文件系统、网络),是“进程级”隔离,轻量级,启动快(秒级/毫秒级),资源占用低,隔离性略弱于虚拟机。
核心结论:容器更适合微服务、高可用、快速部署场景,虚拟机更适合需要强隔离、运行不同内核系统的场景。
3. Docker 三大核心概念(基础必背)
Docker 的所有操作都围绕三大核心概念展开,必须熟记:
-
镜像(Image):只读的模板,包含应用及运行所需的所有依赖(系统环境、库、配置),是创建容器的基础,可理解为“容器的模板”。
-
容器(Container):镜像的运行实例,是可读写的,一个镜像可以启动多个相互隔离的容器,容器停止后,其内部数据(未挂载数据卷)会丢失。
-
仓库(Repository):用于存储和分发镜像的地方,分为公开仓库(如 Docker Hub)和私有仓库,类似“代码仓库”,用于管理镜像版本。
4. Docker 为什么启动速度快?
核心原因在于其轻量化的架构设计,具体有三点:
-
容器共享宿主机内核,无需启动完整的操作系统,省去了系统启动的耗时;
-
容器是进程级启动,仅启动应用进程,而非整个系统,启动耗时极短(秒级);
-
采用 UnionFS(联合文件系统),分层存储,不同镜像可复用相同的层,减少存储占用,同时启动时无需加载完整镜像,提升启动速度。
5. Docker 常用命令(必背,分镜像/容器操作)
# 一、镜像操作
docker search 镜像名 # 搜索镜像(如 docker search nginx)
docker pull 镜像名:版本 # 拉取镜像(如 docker pull nginx:latest)
docker images # 查看本地所有镜像
docker rmi 镜像ID/镜像名 # 删除本地镜像(需先删除依赖该镜像的容器)
# 二、容器操作
docker run [参数] 镜像名 # 创建并启动容器(核心命令)
docker ps # 查看当前运行中的容器
docker ps -a # 查看所有容器(包括已停止的)
docker start/stop/restart 容器ID # 启动/停止/重启容器
docker rm 容器ID # 删除容器(已停止的容器,强制删除加 -f)
docker exec -it 容器ID /bin/bash # 进入容器内部(交互模式)
docker logs 容器ID # 查看容器运行日志(加 -f 实时查看)
6. docker run 常用参数(实战高频)
docker run 是最常用的命令,核心参数必须掌握,可灵活组合使用:
-
-d:后台运行容器(守护进程模式),避免终端关闭后容器停止;
-
-p:端口映射,格式为「宿主机端口:容器端口」(如 -p 80:80,将宿主机80端口映射到容器80端口);
-
-P:随机端口映射,Docker 自动分配宿主机端口映射到容器暴露的端口;
-
--name:指定容器名称,便于后续操作(如 --name mynginx);
-
-v:挂载数据卷,格式为「宿主机目录:容器目录」,实现数据持久化;
-
--restart=always:设置容器开机自启,避免服务器重启后容器未启动;
-
-e:设置环境变量(如 -e MYSQL_ROOT_PASSWORD=123456,设置MySQLroot密码)。
7. Docker 数据卷(Volume)是什么?作用是什么?
数据卷是宿主机上的目录或文件,通过 -v 参数挂载到容器内部,本质是“宿主机与容器之间的文件共享通道”。
核心作用:
-
数据持久化:容器删除后,挂载在数据卷中的数据不会丢失(容器本身的可写层数据会丢失);
-
数据共享:宿主机与容器之间、多个容器之间,可通过数据卷共享数据;
-
简化操作:直接在宿主机修改文件,无需进入容器,提升运维效率。
8. Docker 四种常用网络模式
Docker 内置四种网络模式,可根据业务需求选择,核心区别如下:
-
bridge(默认):为每个容器分配独立的网络地址,容器之间、容器与宿主机之间可通过网络通信,需通过端口映射实现外部访问;
-
host:容器与宿主机共享网络命名空间,容器不拥有独立IP,直接使用宿主机的IP和端口,无需端口映射;
-
none:容器无网络配置,完全隔离,无法与外部通信,仅用于内部测试场景;
-
container:容器与另一个指定容器共享网络命名空间,两个容器拥有相同的IP和端口,可直接通信,无需额外配置。
9. Dockerfile 是什么?作用是什么?
Dockerfile 是用于构建 Docker 镜像的脚本文件,包含一系列有序的构建指令,每一条指令对应镜像的一层,通过 docker build 命令可自动执行指令,构建出自定义镜像。
核心作用:标准化镜像构建流程,实现镜像的可复用、可版本控制,避免手动构建镜像的繁琐操作,同时确保镜像环境的一致性。
10. Dockerfile 常用指令(必背)
FROM # 指定基础镜像(必须是Dockerfile的第一条指令,如 FROM nginx:latest)
MAINTAINER # 指定镜像作者信息(可选,如 MAINTAINER xxx <xxx@163.com>)
RUN # 构建镜像时执行的命令(如 RUN apt-get update,安装依赖)
CMD # 容器启动时执行的默认命令(可被命令行参数覆盖)
ENTRYPOINT # 容器启动时执行的固定命令(不会被覆盖,必执行)
EXPOSE # 声明容器暴露的端口(仅声明,不实际映射,需配合 -p 参数)
ENV # 设置环境变量(如 ENV JAVA_HOME /usr/local/jdk)
ADD/COPY # 拷贝文件到镜像中(ADD支持解压,COPY仅拷贝,推荐用COPY)
VOLUME # 声明数据卷(指定容器内需要挂载的目录)
WORKDIR # 指定容器启动后的工作目录(进入容器后默认所在目录)
11. CMD 和 ENTRYPOINT 的区别(面试必问)
两者都用于指定容器启动时执行的命令,核心区别在于“是否可被覆盖”:
-
CMD:容器启动时的默认命令,可被 docker run 命令后追加的参数覆盖(如 docker run nginx echo "hello",会覆盖CMD的默认命令);
-
ENTRYPOINT:容器启动时的固定命令,不会被 docker run 追加的参数覆盖,只会将追加的参数作为ENTRYPOINT命令的参数;
-
实际场景常用搭配:ENTRYPOINT + CMD,ENTRYPOINT 定义核心命令,CMD 定义默认参数,示例:
ENTRYPOINT ["echo"]CMD ["hello world"] # 容器启动默认执行 echo "hello world",追加参数后执行 echo "xxx"
12. 如何优化 Docker 镜像体积?(实战重点)
镜像体积越小,拉取速度越快、存储占用越低,核心优化方法如下:
-
选择轻量化基础镜像:优先使用 alpine 版本(如 nginx:alpine),体积远小于 latest 版本;
-
合并 RUN 指令:将多个 RUN 命令用 && 合并,减少镜像层数(每一条 RUN 指令对应一层);
-
删除无用缓存:构建完成后,删除安装依赖的缓存(如 RUN apt-get update && apt-get install -y xxx && apt-get clean);
-
使用 .dockerignore 文件:忽略与镜像构建无关的文件(如 .git、node_modules),避免不必要的文件被拷贝到镜像中;
-
采用多阶段构建:将构建过程分为多个阶段,仅将最终运行所需的文件拷贝到最终镜像中,丢弃构建过程中的临时文件和依赖。
13. 镜像(Image)和容器(Container)的核心区别
-
镜像:静态只读模板,不可修改,可复用、可分发,是容器的“模板”;
-
容器:镜像的运行实例,可读写,有自己的运行状态,容器停止后,可重启、删除,多个容器可共享同一个镜像;
-
核心关系:镜像 → 容器(一个镜像可启动多个容器,容器是镜像的“实例化”)。
三、K8s(Kubernetes)高频面试题(必背)
1. Kubernetes 是什么?核心功能是什么?
K8s(Kubernetes)是 Google 开源的容器集群管理平台,基于 Go 语言开发,核心是“自动化部署、扩缩容、管理容器化应用”,是容器编排的主流工具。
核心功能:
-
容器编排与调度:自动将容器调度到合适的节点,实现负载均衡;
-
自动扩缩容:根据业务流量自动增加或减少容器副本数,应对流量波动;
-
自愈能力:容器崩溃、节点故障时,自动重启容器、迁移 Pod 到健康节点;
-
服务发现与负载均衡:通过 Service 为 Pod 提供固定访问入口,实现内部负载均衡;
-
滚动更新与回滚:支持应用的无缝更新,更新失败可快速回滚到上一版本;
-
配置与密钥管理:通过 ConfigMap、Secret 管理应用配置和敏感信息,无需修改镜像。
2. K8s 核心架构(Master + Node 节点,必背)
K8s 集群由控制平面(Master 节点)和工作节点(Node 节点)组成,各组件分工明确,协同工作:
(1)Master 节点(控制平面,集群大脑)
负责集群的管理和调度,核心组件:
-
etcd:分布式键值存储,保存集群的所有配置数据、状态数据,是集群的“数据中心”;
-
kube-apiserver:集群的统一入口,提供 REST API 接口,所有组件的通信都通过 apiserver;
-
kube-scheduler:调度器,根据节点资源情况、Pod 需求,决定将 Pod 调度到哪个 Node 节点;
-
kube-controller-manager:控制器管理器,包含多种控制器(如副本控制器、节点控制器),负责维护集群的期望状态(如副本数、节点健康)。
(2)Node 节点(工作节点,集群手脚)
负责运行容器化应用,核心组件:
-
kubelet:运行在每个 Node 节点上,与 Master 节点通信,负责管理当前节点上的 Pod(启动、停止、监控);
-
kube-proxy:网络代理,运行在每个 Node 节点上,维护 Service 的网络规则,实现 Pod 与 Service、外部的通信;
-
容器运行时:负责运行容器,如 Docker、containerd 等,是 K8s 与容器之间的桥梁。
3. Pod 是什么?核心特点是什么?(必背)
Pod 是 K8s 集群中最小的调度单元,不是容器,而是容器的“集合”,核心特点:
-
一个 Pod 可以包含一个或多个容器(通常是一个主容器 + 多个辅助容器);
-
同一个 Pod 内的所有容器共享网络命名空间、存储卷,可直接通过 localhost 通信;
-
Pod 是短暂的、一次性的,生命周期短暂,一旦 Pod 被删除,其内部容器也会被销毁,数据(未挂载存储)会丢失;
-
Pod 本身不具备自愈能力,需通过 Deployment、StatefulSet 等控制器管理。
4. Pod、Deployment、StatefulSet、DaemonSet 的区别(面试必问)
四者都是 K8s 的核心资源对象,用途不同,核心区别如下:
-
Pod:最小调度单元,无自愈、无扩缩容能力,通常不直接创建,由控制器管理;
-
Deployment:最常用的控制器,用于管理无状态应用(如 Nginx、Tomcat),支持滚动更新、回滚、多副本,不保证 Pod 名称、IP 固定;
-
StatefulSet:用于管理有状态应用(如 MySQL、Redis、ZooKeeper),Pod 名称有序、IP 固定,提供稳定的网络标识和存储,支持有序部署、有序删除;
-
DaemonSet:用于在每一个 Node 节点上只运行一个 Pod,适用于日志采集(如 Fluentd)、监控(如 Prometheus)、网络插件(如 Calico)等场景。
5. Service 是什么?核心作用是什么?常用类型有哪些?
Service 是 K8s 中用于暴露 Pod 访问入口的资源对象,核心作用是“为一组 Pod 提供固定的访问地址,实现服务发现和负载均衡”,解决 Pod 动态变化(IP、数量)导致的访问问题。
常用 Service 类型:
-
ClusterIP(默认):仅集群内部可访问,分配一个集群内部的虚拟 IP,用于集群内 Pod 之间的通信;
-
NodePort:在每个 Node 节点上开放一个固定端口,外部可通过「节点 IP:NodePort」访问 Pod,适用于测试、小型应用;
-
LoadBalancer:结合云厂商的负载均衡器(如阿里云 SLB、AWS ELB),自动分配公网 IP,外部可直接通过该 IP 访问,适用于生产环境;
-
ExternalName:将 Service 映射到外部服务(如百度、数据库),无需部署 Pod,直接转发请求到外部服务。
6. ConfigMap 和 Secret 的区别(必背)
两者都是用于管理配置的资源对象,核心区别在于“存储内容的敏感性”:
-
ConfigMap:用于存储普通配置信息,如应用的配置文件、环境变量(如数据库地址、端口),明文存储,不加密;
-
Secret:用于存储敏感信息,如密码、密钥、证书等,采用 Base64 编码存储(注意:Base64 是编码,不是加密,需配合加密插件实现真正加密);
-
两者均可通过环境变量或存储卷的方式挂载到 Pod 中,实现配置与镜像的解耦。
7. Namespace 的作用是什么?
Namespace 是 K8s 中用于实现“资源逻辑隔离”的资源对象,核心作用:
-
环境隔离:区分开发、测试、生产环境(如 dev、test、prod 三个 Namespace),不同环境的资源相互独立,避免冲突;
-
资源配额:为每个 Namespace 设置资源配额(CPU、内存),限制该环境的资源使用,避免某一环境占用过多资源;
-
权限控制:基于 Namespace 分配权限,实现不同团队对不同环境的权限管理(如开发团队仅能操作 dev 环境)。
8. K8s 网络模型(三大核心问题,必背)
K8s 网络模型的核心要求是:所有 Pod 之间可以直接通信,无需 NAT 转换;Pod 与 Service 之间、外部与 Service 之间可正常通信,核心解决三大问题:
-
Pod 与 Pod 之间的通信:同一节点、不同节点的 Pod 可直接通过 IP 通信;
-
Pod 与 Service 之间的通信:Pod 可通过 Service 的 ClusterIP 访问 Service,Service 会将请求转发到后端 Pod;
-
外部与 Service 之间的通信:通过 NodePort、LoadBalancer 等 Service 类型,实现外部请求访问集群内的 Pod。
常见 K8s 网络插件:Calico(主流,性能好、隔离性强)、Flannel(简单易用)、Canal(结合 Calico 和 Flannel 优势)。
9. PV、PVC、StorageClass 的区别与关系(必背)
三者都是 K8s 中用于实现“持久化存储”的资源对象,分工不同,协同工作:
-
PV(PersistentVolume,持久化存储卷):由集群管理员创建,是集群中的“存储资源”,包含存储类型、容量、访问模式等信息,可理解为“存储池”;
-
PVC(PersistentVolumeClaim,存储卷申请):由用户创建,是用户对存储资源的“申请”,指定需要的存储容量、访问模式,无需关心 PV 的具体实现;
-
StorageClass(存储类):用于实现 PV 的“动态供给”,管理员创建 StorageClass 定义存储类型(如阿里云 EBS、本地存储),用户创建 PVC 时指定 StorageClass,K8s 会自动创建对应的 PV,无需管理员手动创建。
核心关系:StorageClass → 动态创建 PV → PVC 绑定 PV → Pod 挂载 PVC 实现数据持久化。
10. Label 和 Selector 的作用是什么?
Label 和 Selector 是 K8s 中用于“资源关联”的核心机制:
-
Label:键值对形式的标签(如 app=nginx、env=dev),可给 Pod、Service、Deployment 等资源添加标签,用于标记资源的属性;
-
Selector:标签选择器,用于筛选带有指定 Label 的资源,实现资源之间的关联;
-
示例:Deployment 通过 Selector 匹配带有 app=nginx 标签的 Pod,实现对这些 Pod 的管理(扩缩容、滚动更新);Service 通过 Selector 匹配 Pod,实现请求转发。
11. K8s 调度流程(简单易懂,必背)
K8s 调度的核心是“将 Pod 分配到合适的 Node 节点”,流程如下:
-
用户通过 kubectl 或 API 创建 Deployment(或 Pod);
-
Deployment 的控制器根据配置,创建对应的 Pod 实例,提交到 apiserver;
-
kube-scheduler 监听 apiserver,发现未被调度的 Pod,开始调度;
-
scheduler 筛选出符合条件的 Node 节点(如资源充足、节点健康),再根据调度策略(如优先级、亲和性)选择最优 Node;
-
scheduler 将调度结果(Pod 分配到哪个 Node)提交到 apiserver;
-
目标 Node 上的 kubelet 监听 apiserver,发现分配给自己的 Pod,启动 Pod 内的容器,完成服务上线。
12. K8s 自愈机制(Self-healing,核心优势)
K8s 的自愈机制是其核心优势之一,无需人工干预,自动恢复集群的正常状态,主要体现在:
-
Pod 自愈:Pod 崩溃、健康检查失败时,控制器(如 Deployment)会自动重启 Pod;若重启失败,会重新调度到其他健康节点;
-
节点自愈:Node 节点故障(宕机、失联)时,该节点上的 Pod 会被自动迁移到其他健康节点,确保服务不中断;
-
副本自愈:若 Pod 副本数少于期望数(如配置 3 个副本,实际只有 2 个),控制器会自动创建新的 Pod,补充副本数;
-
服务自愈:Service 会自动检测后端 Pod 的健康状态,将请求转发到健康的 Pod,避免请求发送到故障 Pod。
13. K8s 常用命令(必背,面试高频)
# 一、查看资源
kubectl get nodes # 查看集群所有节点
kubectl get pods # 查看当前 Namespace 下的 Pod
kubectl get pods -n 命名空间 # 查看指定 Namespace 下的 Pod
kubectl get svc # 查看 Service
kubectl get deployments # 查看 Deployment
kubectl get pv/pvc # 查看 PV、PVC
# 二、查看详细信息
kubectl describe pod Pod名称 # 查看 Pod 详细信息(排查故障常用)
kubectl describe deployment 名称 # 查看 Deployment 详细信息
kubectl logs Pod名称 # 查看 Pod 运行日志(加 -f 实时查看)
# 三、容器操作
kubectl exec -it Pod名称 -- /bin/bash # 进入 Pod 内部(交互模式)
kubectl cp 本地文件 Pod名称:容器路径 # 本地文件拷贝到 Pod 内部
# 四、扩缩容与更新
kubectl scale deployment 名称 --replicas=3 # 扩缩容(设置副本数为3)
kubectl set image deployment 名称 容器名=镜像名:版本 # 滚动更新
kubectl rollout undo deployment 名称 # 回滚到上一版本
kubectl rollout history deployment 名称 # 查看更新历史
# 五、其他常用
kubectl create namespace 名称 # 创建命名空间
kubectl delete pod Pod名称 # 删除 Pod
kubectl apply -f 配置文件.yaml # 通过配置文件创建资源
kubectl delete -f 配置文件.yaml # 通过配置文件删除资源
14. Deployment 滚动更新原理(面试必问)
滚动更新是 Deployment 的核心功能,实现“应用无缝更新,服务不中断”,原理如下:
-
用户触发滚动更新(如修改镜像版本);
-
Deployment 控制器根据配置,逐步创建新版本的 Pod(默认每次创建 1 个,可配置);
-
当新版本 Pod 启动并通过就绪探针(readinessProbe)检测,确认服务就绪后,再逐步销毁旧版本的 Pod;
-
重复步骤 2-3,直到所有旧版本 Pod 被销毁,新版本 Pod 全部启动,更新完成;
-
若更新过程中出现问题,可通过 kubectl rollout undo 快速回滚到上一版本,避免服务中断。
15. 探针:livenessProbe(存活探针)和 readinessProbe(就绪探针)(必背)
探针是 K8s 用于检测 Pod 健康状态的机制,核心有两种探针,用途不同:
-
livenessProbe(存活探针):用于判断 Pod 内的容器是否“活着”,若探针检测失败,kubelet 会自动重启该容器; 常用检测方式:HTTP 请求(如访问 /health)、命令执行(如 ps -ef | grep 进程)、TCP 端口检测。
-
readinessProbe(就绪探针):用于判断 Pod 内的服务是否“就绪”,若探针检测失败,Service 会停止将请求转发到该 Pod,直到检测成功; 核心作用:避免将请求发送到未启动完成、服务异常的 Pod,保证服务可用性。
16. K8s 如何保证高可用?(面试高频,实战重点)
K8s 高可用的核心是“避免单点故障”,通过多节点部署、自愈机制、负载均衡实现,具体措施:
-
Master 节点多副本部署:部署 3 个 Master 节点(避免单点故障),etcd 集群部署(至少 3 个节点),确保控制平面高可用;
-
Node 节点多副本部署:部署多个 Node 节点,Pod 可在节点故障时自动迁移,避免服务中断;
-
控制器保证副本数:通过 Deployment、StatefulSet 配置足够的 Pod 副本,确保即使部分 Pod 故障,仍有可用实例;
-
Service 负载均衡:通过 Service 实现 Pod 的负载均衡,避免单个 Pod 过载,同时自动剔除故障 Pod;
-
数据持久化:通过 PV、PVC 实现数据持久化,避免 Pod 销毁导致数据丢失;
-
监控与告警:部署监控工具(如 Prometheus + Grafana),实时监控集群状态,异常时及时告警,便于快速排查。
17. 为什么要用 K8s?(面试必问,体现理解深度)
在容器化普及的今天,K8s 成为主流容器编排工具,核心原因的如下:
-
统一管理容器集群:解决多容器、多节点的管理难题,实现集群的统一调度、监控、运维;
-
自动化运维:减少人工操作,实现容器的自动部署、扩缩容、自愈、滚动更新,提升运维效率;
-
弹性伸缩:根据业务流量自动调整 Pod 副本数,高峰期扩容、低峰期缩容,节省服务器资源;
-
高可用性:通过多节点、自愈机制,确保服务不中断,提升应用的可用性;
-
适配微服务架构:微服务架构下,服务数量多、部署复杂,K8s 可实现微服务的快速部署、服务发现、负载均衡,简化微服务管理;
-
可扩展性强:支持自定义资源、自定义控制器,可根据业务需求扩展集群功能,适配不同行业场景。
四、面试复习建议(必看)
结合 Nginx、Docker、K8s 三大技术的面试重点,建议按以下顺序复习,高效突击:
-
先掌握基础概念:明确每个技术的核心定义、核心组件,建立知识框架;
-
再吃透核心原理:如 Nginx 异步非阻塞模型、Docker 隔离机制、K8s 调度与自愈机制,这是面试加分项;
-
熟练常用命令与配置:背诵高频命令、核心配置,确保面试时能快速回答,体现实操能力;
-
结合实战场景:思考每个技术的实际应用场景(如 Nginx 做动静分离、Docker 打包应用、K8s 部署微服务),面试时能结合项目说明,提升竞争力;
-
查漏补缺:重点记忆易混淆知识点(如 CMD vs ENTRYPOINT、Deployment vs StatefulSet),避免面试出错。
本文所有内容均为面试高频考点,排版简洁、答案精准,可直接打印背诵或发布博客,助力快速通过后端/运维面试!
更多推荐

所有评论(0)