Kubernetes(K8s)是容器编排领域的事实标准,掌握其核心概念和实践对通过大厂面试至关重要。下面我为你梳理关键知识点和面试准备建议。

🧠 一、核心概念与架构

理解Kubernetes的核心概念和架构是基础。

  1. 基本概念:Kubernetes是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。其核心在于声明式API面向终态的管理理念,你只需描述应用最终应该是什么状态,K8s会负责确保实际状态与期望状态一致。
  2. 核心组件:一个K8s集群由控制平面(Master Node)工作节点(Worker Node) 组成。
    • 控制平面:集群的大脑,包含:
      • API Server:集群的网关,所有内外部请求都通过它。
      • etcd:分布式键值存储,保存整个集群的状态和数据。
      • Scheduler:负责将Pod调度到合适的Node上。
      • Controller Manager:运行控制器进程,确保集群处于预期状态。
    • 工作节点:运行容器的机器,包含:
      • Kubelet:与API Server通信,管理Pod的生命周期。
      • Kube-proxy:维护节点上的网络规则,实现服务负载均衡。
      • 容器运行时:如Docker、containerd,负责运行容器。
  3. 关键资源对象
    • Pod:K8s的最小调度单元,包含一个或多个共享网络和存储的容器。
    • Deployment:声明式地管理无状态应用,支持滚动更新和回滚。
    • Service:为一组Pod提供稳定的网络访问入口和负载均衡。类型包括:
      • ClusterIP(默认,集群内部访问)
      • NodePort(通过节点端口暴露服务)
      • LoadBalancer(通常由云厂商提供外部负载均衡器)
    • Ingress:管理外部访问集群内部服务的HTTP/HTTPS路由,提供更复杂的路由规则和SSL/TLS终止等功能。
    • ConfigMap & Secret:分别用于存储非敏感配置和敏感数据(如密码、API密钥)。
    • PersistentVolume (PV) & PersistentVolumeClaim (PVC):PV是集群中的存储资源,PVC是用户对存储的请求。Pod通过PVC使用PV实现数据持久化。
    • Namespace:在物理集群中提供虚拟的隔离环境,实现多租户管理。

⚙️ 二、集群部署与配置

了解集群搭建和配置是面试常见话题。

  1. 部署工具:熟悉 kubeadm(快速搭建标准集群)、kops(更适合在AWS上部署)、二进制部署(灵活性高)以及托管服务(如EKS, GKE, AKS)的优劣和适用场景。
  2. 高可用(HA):生产环境需考虑控制平面高可用,例如通过部署多个Master节点和外部etcd集群等方式实现。
  3. 网络与存储
    • CNI插件:了解Calico(提供网络策略)、Flannel(简单的 overlay 网络)、Cilium(基于eBPF)等常见插件。
    • 存储方案:了解CSI(容器存储接口)机制,以及如何对接NFS、Ceph RBD、云厂商块存储(如AWS EBS)等。

🔍 三、日常运维与监控

日常运维操作和监控是考察重点。

  1. 核心命令:熟练掌握kubectl的常用命令,如getdescribeapplydeletelogsexecrollout(用于管理部署的更新和回滚)等。
  2. 资源管理:为Pod设置合理的Requests和Limits,避免资源竞争或浪费。了解ResourceQuota(限制命名空间总资源)和LimitRange(限制命名空间内单个对象的资源)。
  3. 监控与日志
    • 监控:通常使用Prometheus收集指标,Grafana进行可视化展示。
    • 日志:常用EFK/ELK栈(Fluentd/Filebeat + Elasticsearch + Kibana)进行日志收集、存储和查询。

🐞 四、故障排查与性能优化

排查和优化能力能显著提升你的面试表现。

  1. 排查思路:Pod出现问题时,可遵循以下排查路径:
    graph TD
        A[Pod状态异常] --> B[kubectl describe pod <pod-name>]
        B --> C[查看Events字段寻找线索]
        C --> D{常见事件类型}
        D --> E[ImagePullBackOff]
        D --> F[CrashLoopBackOff]
        D --> G[Pending]
        E --> H[检查镜像名称/权限/网络]
        F --> I[kubectl logs --previous]
        G --> J[检查资源配额/调度规则]
    
    结合使用kubectl logskubectl exec命令进一步排查。
  2. 性能优化
    • 调度优化:使用节点亲和性(nodeAffinity)Pod亲和性与反亲和性(podAffinity/podAntiAffinity)污点与容忍(Taints and Tolerations) 精细控制Pod调度。
    • 自动扩缩容
      • HPA(Horizontal Pod Autoscaler):根据CPU、内存或自定义指标自动扩缩Pod副本数。
      • VPA(Vertical Pod Autoscaler):自动调整Pod的CPU和内存请求与限制。
      • Cluster Autoscaler:根据负载情况自动调整集群节点数量。
    • 镜像优化:使用多阶段构建等方式减小镜像体积,加快拉取速度。

🔒 五、安全与网络策略

安全和网络是面试高级话题。

  1. 安全
    • RBAC(基于角色的访问控制):为ServiceAccount分配最小必要权限。
    • Pod安全:了解Pod Security Standards,并可借助OPA(Open Policy Agent)Kyverno等工具实施安全策略(PodSecurityPolicy已被弃用)。
    • 网络策略(NetworkPolicy):定义Pod间及Pod与外部的网络通信规则,实现网络隔离。例如,以下策略拒绝所有进出默认命名空间下Pod的流量:
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: deny-all
        namespace: default
      spec:
        podSelector: {} # 选择所有Pod
        policyTypes:
        - Ingress
        - Egress
      
  2. 生态工具
    • Helm:K8s的包管理工具,通过Chart模板化应用部署。
    • Operator:用于自动化复杂有状态应用的管理。

💡 六、面试准备建议

  1. 理解原理而非死记命令:面试官更关心你为什么这么做,而不是背出了命令。能清晰阐述组件交互(如Pod创建流程)、网络模型(每个Pod都有独立IP)、服务发现(CoreDNS)和存储供给原理。
  2. 熟练使用核心命令kubectl get/describe/logs/exec等命令需熟练掌握。
  3. 准备实战案例:结合项目经验,准备1-2个你如何解决棘手故障设计高可用架构通过优化降低成本/提升性能的故事。使用STAR法则(Situation, Task, Action, Result)组织你的回答。
  4. 关注社区与趋势:了解Service Mesh(Istio/Linkerd)GitOps(ArgoCD/Flux)Serverless(Knative/KEDA) 等云原生新趋势,能体现你的学习能力。
  5. 保持冷静,逻辑清晰:遇到复杂问题时可先复述确认,再拆解问题,分步骤解答,展现排查思路。

📝 七、常见面试题举例

  1. 基础概念:Pod和Deployment的区别?Service和Ingress的区别?
  2. 网络:K8s网络模型?Pod如何通信?Calico和Flannel区别?
  3. 存储:PV、PVC、StorageClass的关系?
  4. 运维:如何排查Pod一直处于Pending状态?
  5. 设计:如何保证部署的应用高可用?
  • Docker和Kubernetes的区别是什么?
  • 简述Pod的生命周期。
  • Deployment和StatefulSet有何不同?
  • Service有哪些类型?它们分别适用于什么场景?
  • 如何排查一个Pod一直处于Pending状态的问题?
  • 简述Kubernetes的认证和授权流程。
  • 什么是Ingress?它与Service有什么关系?
  • 如何实现Kubernetes集群的高可用?
  • 简述HPA的工作原理。
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐