Kubernetes作为容器编排领域的"操作系统",掌握其核心概念是通过面试的第一道门槛。让我们从面试官最常考察的5个基础问题入手,深入理解设计哲学。
Pod是Kubernetes的最小调度单元,但它的设计理念常常让初学者困惑。想象Pod就像一个"逻辑主机",其中运行的容器如同这个主机上的进程:
典型面试问题:"为什么需要Pod而不是直接管理容器?" 考察的是对"亲密性"概念的理解——紧密协作的容器(如日志收集器与主应用)应该放在同一Pod中。
Pod生命周期状态转换是排查问题的关键:
code复制Pending → Running → Succeeded/Failed
↘
Unknown
我曾遇到一个案例:Pod卡在Pending状态超过10分钟。通过kubectl describe发现是节点资源不足,调整requests配置后立即恢复正常。
Service解决的核心问题是Pod动态IP带来的连接问题。其实现原理常被问及:
面试高频题:"ClusterIP如何访问外部服务?" 正确答案是创建没有selector的Service,手动维护Endpoint。生产环境中常用这种方式对接旧系统数据库。
Deployment、StatefulSet等控制器体现了Kubernetes的声明式API设计:
yaml复制# Deployment的reconcile循环伪代码
for {
实际状态 := 获取当前Pod列表
期望状态 := 获取Deployment配置
if 实际状态 != 期望状态 {
调整ReplicaSet数量
}
}
常见陷阱问题:"修改Deployment的镜像版本会发生什么?" 完整流程包括:
Master节点的四大组件协作如同一支交响乐团:
| 组件 | 作用 | 高可用实现 |
|---|---|---|
| kube-apiserver | 统一入口,REST API网关 | 多实例+负载均衡 |
| etcd | 分布式键值存储 | 奇数节点Raft协议 |
| kube-controller-mgr | 各种资源控制器 | Leader选举 |
| kube-scheduler | 资源调度 | 多实例竞争调度权 |
经典面试题:"etcd为什么推荐奇数节点?" 这涉及到CAP理论——3节点集群可容忍1节点故障,而4节点同样只能容忍1节点故障,却增加了网络开销。
Node组件中kubelet是最复杂的部分,其核心职责包括:
故障排查案例:某节点频繁出现Pod被驱逐。经查是kubelet的--eviction-hard参数配置过于敏感,调整内存阈值后解决。
"Pod一直处于Pending状态"的排查路径:
kubectl describe pod kubectl get pod -o wide --show-labels网络问题排查工具链:
bash复制# 检查DNS解析
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup service-name
# 检查网络连通性
kubectl run -it --rm debug --image=nicolaka/netshoot --restart=Never -- curl http://service:port
API Server优化参数示例:
yaml复制# /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
containers:
- command:
- kube-apiserver
- --max-requests-inflight=1500
- --max-mutating-requests-inflight=500
- --watch-cache=true
- --watch-cache-sizes=1000
kubelet资源预留配置(防止系统进程OOM):
yaml复制# /var/lib/kubelet/config.yaml
systemReserved:
cpu: "500m"
memory: "1Gi"
kubeReserved:
cpu: "500m"
memory: "1Gi"
Istio与Kubernetes的协作模式:
面试常问:"Service Mesh是否取代Kubernetes Service?" 实际上二者是互补关系——Service提供基础LB,Service Mesh实现高级流量管理。
多层防御体系构建:
关键安全配置示例:
yaml复制# Pod安全上下文
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
capabilities:
drop: ["ALL"]
在面试中展示对Kubernetes的深入理解,不仅要记住概念,更要结合实际问题解决经验。建议候选人准备自己的"战争故事",比如如何解决某个诡异的内存泄漏问题,这比单纯背诵概念更能打动面试官。