作为容器编排领域的实际标准,Kubernetes的面试考察点往往集中在集群管理、故障排查和架构设计等实战能力上。最近在帮团队筛选候选人时,我系统整理了近两年高频出现的面试题型,发现超过70%的问题都围绕着5个核心场景展开。下面就以工程师实际工作流为线索,拆解这些必考题背后的深层逻辑和应答策略。
生产环境最少需要3个master节点组成etcd集群,这里有个容易踩的坑:很多人以为只要配置--control-plane-endpoint就够了,实际上还需要关注:
yaml复制apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
controllerManager:
extraArgs:
node-monitor-grace-period: "40s"
pod-eviction-timeout: "5m0s"
这两个参数直接影响节点故障判定时效,默认值在云环境可能触发误驱逐。去年我们在AWS上就遇到过因网络抖动导致的大规模Pod重建事件。
当被问到"如何限制开发团队只能查看特定命名空间",除了标准的RBAC配置,更建议展示精细化的权限设计:
bash复制kubectl create rolebinding dev-team-view \
--clusterrole=view \
--group=dev-team \
--namespace=app-production
这种方案比直接分配SA更易审计,也是CNCF官方推荐的多租户实践。
面试常问"如何实现零停机部署",关键要理解maxSurge和maxUnavailable的配合机制。我们线上服务的黄金配置是:
yaml复制strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 0
type: RollingUpdate
配合readinessProbe可实现真正的无缝更新。曾有个经典案例:某金融应用因未设置maxUnavailable导致更新期间服务降级,引发连锁故障。
当讨论有状态服务时,需要区分动态 provisioning 和静态绑定的适用场景。对于数据库类应用,建议展示拓扑约束配置:
yaml复制volumeClaimTemplates:
- metadata:
name: data
spec:
storageClassName: local-ssd
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 500Gi
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: [mysql]
topologyKey: kubernetes.io/hostname
这种配置能保证每个Pod独占物理节点,避免存储性能争抢。
被问到"ClusterIP和NodePort有什么区别"时,应该延伸到kube-proxy的iptables/ipvs模式选择。我们在压测中发现:
bash复制kube-proxy --proxy-mode=ipvs --ipvs-scheduler=rr
对比Nginx Ingress与Traefik时,除了功能差异,要特别强调enable-ssl-passthrough对金融场景的重要性。某次升级中我们遇到TLS握手性能问题,最终通过调整以下参数解决:
yaml复制controller:
config:
upstream-keepalive-connections: "200"
upstream-keepalive-timeout: "300s"
分享一个真实排障checklist:
kubectl describe pod查Eventskubectl logs --previous看前次容器日志kubectl exec -it -- dmesg查内核日志PLEG not healthy错误当Service无法访问时,我的标准诊断命令组合:
bash复制# 检查Endpoint是否正常
kubectl get endpoints my-service
# 进入Pod测试DNS解析
kubectl exec -it test-pod -- nslookup my-service
# 测试基础连通性
kubectl exec -it test-pod -- curl -v http://my-service:8080/api
# 检查NetworkPolicy限制
kubectl get networkpolicy --all-namespaces
随着PSP的弃用,需要掌握替代方案:
yaml复制apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
runAsUser:
rule: MustRunAsNonRoot
seLinux:
rule: RunAsAny
volumes:
- configMap
- emptyDir
建议展示CI/CD流水线中的多层防护:
内存限制设置不当会导致OOM Killer误杀,我们的经验公式:
code复制JVM堆内存 = 容器内存限制 * 0.75
同时必须配置:
yaml复制resources:
requests:
memory: "1Gi"
limits:
memory: "1.5Gi"
livenessProbe:
failureThreshold: 3
periodSeconds: 10
对于延迟敏感型应用,需要关注:
yaml复制topologySpreadConstraints:
- maxSkew: 1
topologyKey: zone
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: frontend
这个配置能保证应用均匀分布在多个可用区,去年双十一大促时帮我们避免了区域故障导致的雪崩。
当被问到"如何实现跨集群服务发现"时,建议从这几个维度展开:
yaml复制apiVersion: multicluster.x-k8s.io/v1alpha1
kind: ServiceImport
metadata:
name: cross-cluster-service
spec:
type: ClusterSetIP
ports:
- port: 80
protocol: TCP
解释Operator工作原理时,建议用伪代码展示核心逻辑:
go复制for {
observed := GetActualState()
desired := CalculateDesiredState()
if observed != desired {
Reconcile(observed, desired)
}
time.Sleep(resyncPeriod)
}
这是Kubernetes声明式API的核心思想,也是面试官常考察的架构理解深度。
"如何设计一个千万级PV的电商平台K8s架构?"的应答框架:
当遇到"节点NotReady但Pod未迁移"的情况时,需要检查:
--node-monitor-period参数保持竞争力的三个关键动作:
markdown复制## [功能名称]
- 适用版本:v1.xx+
- 核心参数:
- --feature-gates=XXX=true
- 典型场景:
- 案例1...
- 案例2...
- 已知限制: