K8s Pod / Deployment / Service 高频面试问答
K8s Pod / Deployment / Service 高频面试问答
精简口述版,面试直接说
Pod
Q1:什么是 Pod?
A:Pod 是 K8s最小调度单元,不是容器。一个 Pod 可以包含 1 个或多个紧密耦合容器,共享网络命名空间、共享存储卷,调度和启停是原子的。同一 Pod 内容器localhost互通。
Q2:Pod 里多容器一般是什么场景?
A:主业务容器 + sidecar 边车容器。比如日志采集、流量代理、监控、证书更新。
Q3:Pod 有哪些生命周期阶段?
A:Pending(调度中)→ Running(运行)→ Failed(异常退出)→ Succeeded(正常一次性任务完成)→ Unknown(节点失联,状态无法采集)
Q4:Pod 的重启策略 restartPolicy?适用场景
A:
- Always:默认,容器退出就重启(Deployment 用)
- OnFailure:异常退出才重启,正常退出不重启(Job)
- Never:退出绝不重启(一次性任务)
Q5:什么是探针(Probe),三种探针区别?
A:健康检查,kubelet 执行。
- livenessProbe 存活探针:容器死了就重启容器
- readinessProbe 就绪探针:没就绪就把 Pod 从 Service 后端 Endpoint 摘除,不接收流量,就绪后再加回
- startupProbe 启动探针:给慢启动应用,启动阶段跳过存活检查,启动完成后再启用 liveness
Q6:Pod 为什么不建议直接创建,要用 Deployment?
A:直接创建 Pod 没有自愈、扩缩容、滚动更新能力。节点宕机 Pod 不会重建。Deployment 管理 Pod 模板。
Deployment
Q1:Deployment 作用?底层依赖什么资源?
A:无状态应用管理,支持滚动更新、回滚、扩缩容。底层创建 ReplicaSet,ReplicaSet 负责维持 Pod 副本数量。
Q2:Deployment 更新策略两种?
A:
- RollingUpdate(默认滚动更新):逐步创建新 Pod,销毁旧 Pod,保证业务不断。可以配置 maxSurge 最大超量副本、maxUnavailable 最大不可用副本。
- Recreate:先删掉全部旧 Pod,再创建新 Pod,会中断业务,少用。
Q3:Deployment 回滚机制?
A:每次更新会保存 Revision 版本。回滚时找到历史 revision,用旧版本模板重新创建 ReplicaSet 和 Pod。kubectl rollout操作。
Q4:ReplicaSet 作用?
A:保证指定数量 Pod 副本持续运行。Deployment 一般不直接操作 RS,由 Deployment 控制器管理 RS。
Q5:扩缩容原理?
A:修改 Deployment 副本数,控制器对比期望和实际 Pod 数量,新增或删除 Pod 达到目标副本。
Q6:Deployment 和 StatefulSet 区别一句话?
A:Deployment 面向无状态服务,Pod 名字随机,网络标识不固定;StatefulSet 面向有状态服务,Pod 有序、稳定网络标识与持久存储。
Service
Q1:Service 是什么?
A:一组 Pod 的抽象访问入口,提供固定 ClusterIP,实现 Pod 负载均衡。Pod 会漂移 IP 变化,Service 地址不变。由 kube-proxy 维护转发规则。
Q2:Service 四种类型?
A:
- ClusterIP(默认):集群内部可访问,Pod 之间调用
- NodePort:宿主机开端口,<节点 IP:NodePort> 访问集群内服务
- LoadBalancer:云厂商提供外部负载均衡,底层基于 NodePort
- ExternalName:映射外部域名,集群内访问别名
Q3:Endpoint 是什么?和 Service 关系?
A:Endpoint 是 Service 后端就绪 Pod 的 IP + 端口列表。Service 控制器监听 Pod,自动维护 Endpoint。如果 Endpoint 为空,说明没有就绪 Pod,Service 访问不通。
Q4:kube-proxy 三种模式对比?
A:
- userspace(老版本淘汰):内核态到用户态转发,性能差
- iptables:默认,用 iptables 规则,无独立进程,大规模集群性能下降
- ipvs:内核 ipvs 模块,支持更多调度算法,大规模集群推荐
Q5:Service 调度策略(sessionAffinity)
A:会话亲和,同一个客户端 IP 流量固定转发到同一个后端 Pod,默认关闭。适合需要会话保持场景。
Q6:ClusterIP 只能集群内部访问吗?
A:是的,ClusterIP 仅集群内可达,外部访问需要 NodePort、LoadBalancer 或 Ingress。
综合高频题
Q:滚动更新过程简述?
A:Deployment 创建新 RS,按 maxSurge 先拉起新 Pod;新 Pod 就绪通过 readiness 探针后,再逐步销毁旧 RS 上旧 Pod;全部完成,旧 RS 保留用于回滚。
Q:readiness 探针失败有什么影响?
A:Pod 不会被重启,只是从 Service 的 Endpoint 移除,不再接收流量,直到就绪探针成功。
Q:liveness 探针失败会发生什么?
A:kubelet 直接重启容器。
Q:Ingress 和 Service 区别?
A:Service 四层;Ingress 七层(http/https),提供域名、路径路由,外部流量入口,后端绑定 Service。
浙公网安备 33010602011771号