1. Kubernetes面试全攻略:从核心概念到实战技巧
作为云原生时代的容器编排标准,Kubernetes已经成为技术面试中的必考内容。我整理了这份全面的Kubernetes面试指南,涵盖从基础概念到高级实战的完整知识体系。这些内容不仅来自官方文档,更融合了我多年在容器化项目中的实战经验,希望能帮助你在面试中脱颖而出。
2. 基础概念篇:深入理解Kubernetes架构
2.1 核心组件与工作原理
Kubernetes集群由控制平面(Control Plane)和工作节点(Worker Node)组成。控制平面是集群的大脑,包含以下关键组件:
kube-apiserver:集群的"前门",所有通信都通过REST API进行。它负责认证、授权、准入控制和API版本管理。在实际部署中,通常会部署多个apiserver实例并通过负载均衡器对外提供服务,确保高可用性。
etcd:集群的"记忆中枢",采用Raft一致性算法保证数据一致性。生产环境中建议至少部署3个节点,并定期备份数据。我曾遇到过etcd性能问题导致整个集群响应缓慢的情况,后来通过优化etcd的磁盘IO和调整心跳间隔解决了问题。
kube-scheduler:负责将Pod调度到合适的节点。调度过程分为两个阶段:
- 预选(Predicates):过滤不符合要求的节点
- 优选(Priorities):对符合要求的节点打分
kube-controller-manager:运行各种控制器,确保集群状态与期望状态一致。常见的控制器包括:
- Deployment控制器
- ReplicaSet控制器
- StatefulSet控制器
- Node控制器
注意:生产环境中,控制平面的所有组件都应该以高可用方式部署,避免单点故障。
2.2 工作节点组件
工作节点是实际运行容器负载的机器,包含以下核心组件:
kubelet:节点上的"代理",负责与控制平面通信,管理Pod生命周期。它会定期向apiserver报告节点状态。
kube-proxy:维护节点上的网络规则,实现Service的抽象。支持三种代理模式:
- userspace(已淘汰)
- iptables(默认)
- IPVS(高性能场景推荐)
容器运行时:负责运行容器,如Docker、containerd或CRI-O。Kubernetes通过CRI(Container Runtime Interface)与运行时交互。
3. 调度与资源管理篇
3.1 资源请求与限制
在Kubernetes中,Pod可以指定资源请求(request)和限制(limit):
resources: requests: cpu: "500m" # 0.5个CPU核心 memory: "256Mi" # 256兆字节内存 limits: cpu: "1" memory: "512Mi"- requests:调度器根据requests决定将Pod调度到哪个节点
- limits:kubelet使用limits来限制容器资源使用上限
经验分享:我曾遇到一个生产事故,由于没有设置内存limits,一个应用内存泄漏导致节点OOM(Out Of Memory),最终影响了该节点上所有Pod。从那以后,我坚持为所有Pod设置合理的limits。
3.2 高级调度策略
除了基本的资源调度,Kubernetes还提供多种高级调度策略:
- 节点亲和性(nodeAffinity):将Pod调度到特定节点
- Pod亲和性/反亲和性(podAffinity/podAntiAffinity):控制Pod之间的共存关系
- 污点和容忍度(Taints and Tolerations):阻止或允许Pod调度到特定节点
示例:确保两个Nginx实例不在同一个节点上
affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: "kubernetes.io/hostname"4. 网络篇:深入理解Kubernetes网络模型
4.1 网络基础原则
Kubernetes网络模型遵循以下基本原则:
- 每个Pod拥有唯一的IP地址
- Pod之间可以直接通信,无需NAT
- 节点可以与所有Pod通信,反之亦然
4.2 Service与Ingress
Service是Kubernetes中抽象访问Pod的方式,主要类型有:
- ClusterIP(默认):集群内部IP
- NodePort:通过节点端口暴露服务
- LoadBalancer:使用云提供商的负载均衡器
- ExternalName:通过CNAME记录映射到外部服务
Ingress是管理外部访问的API对象,通常与Ingress控制器(如Nginx Ingress Controller)配合使用,提供:
- 基于主机名和路径的路由
- TLS终止
- 负载均衡
5. 存储与持久化篇
5.1 存储卷类型
Kubernetes支持多种存储卷类型,常见的有:
- emptyDir:临时存储,随Pod删除而消失
- hostPath:挂载节点文件系统(谨慎使用)
- PersistentVolume(PV):集群级别的存储资源
- PersistentVolumeClaim(PVC):用户对存储的请求
5.2 StatefulSet与有状态应用
对于有状态应用(如数据库),推荐使用StatefulSet,它提供:
- 稳定的网络标识(主机名)
- 有序的部署和扩展
- 稳定的持久化存储
示例:部署一个3节点的Redis集群
apiVersion: apps/v1 kind: StatefulSet metadata: name: redis spec: serviceName: redis replicas: 3 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis:5.0 ports: - containerPort: 6379 volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi6. 安全篇:保护你的Kubernetes集群
6.1 认证与授权
Kubernetes提供多种认证机制:
- X509客户端证书
- 静态令牌文件
- 服务账号令牌
- OpenID Connect(OIDC)
授权通过RBAC(Role-Based Access Control)实现,核心概念包括:
- Role/ClusterRole:定义权限集合
- RoleBinding/ClusterRoleBinding:将角色绑定到用户或组
6.2 安全上下文与Pod安全策略
可以为Pod或容器设置安全上下文,限制其权限:
securityContext: runAsNonRoot: true runAsUser: 1000 capabilities: drop: - ALLPodSecurityPolicy(PSP)可以集群级别强制实施安全策略,但注意PSP在Kubernetes 1.21后已被弃用,将被Pod Security Admission取代。
7. CI/CD与部署策略
7.1 部署策略
Kubernetes支持多种部署策略:
- 滚动更新(rolling update):逐步替换旧Pod(默认策略)
- 蓝绿部署(blue/green):同时运行新旧版本,通过Service切换流量
- 金丝雀发布(canary):先向小部分用户发布新版本
7.2 使用Helm管理应用
Helm是Kubernetes的包管理工具,主要概念:
- Chart:预配置的Kubernetes资源包
- Release:Chart的运行实例
- Repository:Chart的存储库
示例:使用Helm安装Nginx
helm repo add bitnami https://charts.bitnami.com/bitnami helm install my-nginx bitnami/nginx8. 实战与故障排查
8.1 常用排查命令
- 查看Pod详情:
kubectl describe pod <pod-name> - 查看Pod日志:
kubectl logs <pod-name> [-c <container-name>] - 进入Pod调试:
kubectl exec -it <pod-name> -- /bin/sh - 查看节点资源:
kubectl top node - 查看Pod资源:
kubectl top pod
8.2 常见问题与解决方案
Pod一直处于Pending状态
- 原因:通常是没有满足调度条件的节点
- 排查:
kubectl describe pod查看事件 - 解决:检查资源请求、节点亲和性、污点等
Pod崩溃(CrashLoopBackOff)
- 原因:容器启动后立即退出
- 排查:
kubectl logs查看应用日志 - 解决:检查应用配置、依赖服务等
Service无法访问
- 原因:网络策略、标签选择器不匹配等
- 排查:检查Service的Endpoints(
kubectl get endpoints) - 解决:确保Pod标签与Service选择器匹配
9. 监控与优化
9.1 监控方案
常见的Kubernetes监控方案包括:
- Prometheus:开源监控系统,适合Kubernetes
- Grafana:可视化监控数据
- EFK(Elasticsearch+Fluentd+Kibana):日志收集与分析
9.2 性能优化建议
合理设置资源请求和限制
- 避免资源浪费和节点过载
- 使用Vertical Pod Autoscaler(VPA)自动调整
使用Horizontal Pod Autoscaler(HPA)
- 根据CPU/内存或自定义指标自动扩缩容
优化镜像大小
- 使用多阶段构建
- 选择精简的基础镜像(如Alpine)
配置合理的存活和就绪探针
- 确保流量只被路由到健康的Pod
- 避免过短的检查间隔增加系统负载
10. 面试策略与技巧
10.1 面试准备要点
理解概念背后的原理
- 不要死记硬背,理解为什么这样设计
- 例如:为什么需要Pod这个概念而不仅仅是容器
准备实战经验
- 描述你解决过的实际问题
- 分享你从失败中学到的教训
了解最新动态
- 关注Kubernetes新版本特性
- 了解生态系统中流行的工具(如Istio, ArgoCD等)
10.2 常见面试问题示例
基础概念
- 解释Pod和容器的区别
- 描述Kubernetes架构和主要组件
网络
- 解释Service和Ingress的区别
- 描述Pod之间如何通信
存储
- 什么时候应该使用StatefulSet而不是Deployment
- 解释PV和PVC的关系
安全
- 如何限制Pod的权限
- 解释RBAC的工作原理
故障排查
- 如果Pod无法启动,你会如何排查
- 如何调试网络连接问题
在面试中,除了回答问题,更重要的是展示你的思考过程。当遇到不确定的问题时,可以坦诚地说明,并尝试基于已有知识进行合理的推理。