K8s高频面试题及详细答案(实战版)_第1页
K8s高频面试题及详细答案(实战版)_第2页
K8s高频面试题及详细答案(实战版)_第3页
K8s高频面试题及详细答案(实战版)_第4页
K8s高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

K8s高频面试题及详细答案(实战版)一、基础核心概念(必问)1、简单介绍下Kubernetes是什么,核心作用是什么?K8s是一款开源的容器编排管理平台,核心是用来自动化部署、扩容、运维容器化应用。在没用到K8s之前,我们部署容器都是手动启停、扩缩容、迁移,服务挂了也不会自动恢复,机器故障需要人工迁移服务。引入K8s后,可以实现服务的自动自愈、弹性扩缩容、滚动更新、资源调度、环境统一管理,屏蔽底层服务器差异,让应用部署和运维完全标准化、自动化,适配微服务架构的大规模落地。2、K8s的核心组件有哪些?分别作用是什么?K8s整体分为控制面(Master)和数据面(Node)两部分,核心组件各司其职:控制面组件(集群管理)kube-apiserver:集群唯一入口,所有操作指令(kubectl、其他组件交互)都经过它,负责认证、鉴权、接口转发、数据落地etcd,是整个集群的网关。etcd:集群的分布式数据库,只存储集群所有资源的状态数据,保证数据高可用、一致性。kube-scheduler:调度器,监控新创建的未绑定节点的Pod,根据节点资源、亲和性、污点容忍等策略,选择最优节点部署Pod。kube-controller-manager:控制器合集,维护集群资源状态,比如节点控制器、副本控制器、命名空间控制器,确保集群实际状态和用户期望状态一致。cloud-controller-manager:对接云厂商资源,云上集群必备,实现负载均衡、节点管理、存储挂载等云资源联动。数据面组件(业务运行)kubelet:每个节点的代理,接收apiserver指令,负责节点上Pod的创建、启停、监控、健康检查,上报节点和Pod状态。kube-proxy:节点网络代理,维护集群网络规则,实现Pod之间、Pod和外部的访问、负载均衡。容器运行时:比如containerd、docker,负责真正拉取镜像、启动容器、运行业务程序。3、什么是Pod?为什么K8s最小单元是Pod而不是容器?Pod是K8s集群中最小的调度、部署、管理单元,一个Pod可以包含一个或多个紧密耦合的容器。之所以不用容器作为最小单元,核心原因是:业务中很多服务需要辅助容器协同工作,比如日志收集、监控上报、网络代理,这些辅助程序必须和业务容器同生命周期、同网络、同存储。同一个Pod内的所有容器共享网络命名空间、存储卷、资源配额,生命周期完全一致,统一调度、统一启停,完美适配业务的伴生服务场景,单独容器无法实现这种绑定关系。4、Pod的几种状态分别代表什么?Pending:Pod已经创建,资源已经提交,但还没调度到节点,或者镜像正在拉取、节点资源不足、权限不足都会处于该状态。Running:Pod已经调度成功,所有容器正常启动,至少有一个容器正在运行。Succeeded:一次性任务Pod,所有容器执行完成并正常退出,不会重启。Failed:Pod中容器异常退出、报错,任务执行失败。Unknown:apiserver无法获取Pod状态,大概率是节点宕机、kubelet挂掉、节点网络不通。二、核心资源对象(高频实操)1、Deployment、StatefulSet、DaemonSet的区别和使用场景?这三种都是Pod的控制器,核心区别是适配的业务类型不同:Deployment:最常用,用于无状态服务,比如web服务、网关、接口服务。特点是Pod随机名称、随机IP,副本之间无依赖,可随意扩缩容、滚动更新,宕机重建后完全一致,无数据留存需求。StatefulSet:用于有状态服务,比如MySQL、Redis、ES、Zookeeper。特点是Pod有序稳定,名称、IP、存储卷固定,重建后不会改变,支持有序启动、有序销毁,适配主从架构、集群节点固定的业务,保证数据持久化和节点唯一性。DaemonSet:确保集群每个节点(或指定节点)只运行一个Pod,适合节点级全局服务,比如日志收集、节点监控、网络插件,新加入集群的节点会自动部署该Pod,节点下线自动回收。2、Service是什么?有哪几种类型?各自场景?Service是K8s的服务发现和负载均衡资源,解决PodIP动态变化、Pod集群内访问、外部访问的问题,通过固定域名和端口代理后端Pod。四种核心类型:ClusterIP(默认):仅集群内部可访问,分配集群内网固定IP,用于微服务之间内部调用,最安全、最常用。NodePort:对外开放端口,所有节点开启同一个端口,外部通过「节点IP+端口」访问服务,适合测试、小规模对外服务。LoadBalancer:云集群专用,对接云厂商负载均衡器,分配独立公网IP,生产环境对外提供服务首选,支持高可用、流量分发。ExternalName:将集群内服务映射到外部域名,用于访问集群外第三方服务,不做流量转发,只做域名解析重定向。3、Ingress和Service的区别?为什么有Service还要Ingress?Service主要负责四层负载均衡(TCP/UDP),可以实现服务发现和基础流量转发,但不支持域名、路径、证书、限流等七层规则。如果多个服务需要对外暴露,用NodePort会占用大量端口,管理混乱、不安全。Ingress是七层HTTP/HTTPS负载均衡,工作在应用层,核心作用是统一入口、统一管理外网流量。可以通过域名、URL路径区分不同服务,配置SSL证书、权重、限流、黑白名单,只暴露一个统一入口,完美适配多服务对外访问的场景。简单总结:Service负责集群内流量转发,Ingress负责集群外七层流量统一接入,两者配合使用。4、ConfigMap和Secret的区别?使用注意事项?ConfigMap:用于存储非敏感配置,比如配置文件、环境变量、启动参数,明文存储,适合普通业务配置。Secret:用于存储敏感数据,比如密码、密钥、token、证书,数据会做base64编码(注意不是加密,只是脱敏),权限管控更严格。使用注意:两者更新后不会自动同步到运行中的Pod,需要滚动更新Pod才能生效;生产环境Secret必须严格控制RBAC权限,禁止随意访问。三、调度与扩缩容1、K8sPod调度流程是什么?1、用户创建Pod资源,请求发送到kube-apiserver,apiserver校验权限和参数后,将Pod信息存入etcd;2、kube-scheduler实时监听未绑定节点的Pod;3、调度器经过预选、优选两个阶段筛选节点:预选过滤掉资源不足、污点不匹配、亲和性不满足的节点;优选对剩余节点打分,选择分值最高的节点;4、将Pod绑定到目标节点,更新etcd数据;5、目标节点kubelet监听到新Pod,拉取镜像、启动容器、初始化挂载,完成部署并上报状态。2、污点和容忍的作用?和节点亲和性的区别?污点(Taint):作用于节点,用来排斥Pod,让特定Pod不能调度到该节点,实现节点隔离。一般用于专属节点、核心服务节点、资源隔离节点。容忍(Toleration):作用于Pod,让Pod可以容忍节点的污点,允许调度到带污点的节点,配合污点实现专属服务部署。节点亲和性:是主动偏好,用来指定Pod优先调度到哪些节点、必须调度到哪些节点,是正向调度规则;而污点是反向排斥规则,一个正向、一个反向,搭配使用精准控制Pod调度。3、HPA是什么?如何实现自动扩缩容?HPA是Pod水平自动扩缩容控制器,专门用于动态调整Deployment、StatefulSet的Pod副本数,根据业务负载自动扩容缩容,替代人工手动改副本数。核心原理:定期监控Pod的CPU、内存使用率,也支持自定义指标(QPS、延迟),当负载超过阈值自动增加副本,负载长期低于阈值自动减少副本,适配业务流量波动场景。生产会配置冷却时间,避免流量抖动导致频繁扩缩容,保证服务稳定性。四、网络与存储1、K8s集群网络模型核心规则?K8s网络四大准则,所有网络插件都必须满足:1、所有Pod之间可以直接互通,无需NAT;2、所有节点可以和所有Pod直接互通;3、Pod访问集群外流量可以做NAT;4、集群内访问Service通过固定ClusterIP转发。2、常见的K8s网络插件有哪些?区别?Flannel:简单轻量、部署简单、稳定性高,适合中小集群,性能一般,不支持复杂网络策略。Calico:生产最常用,支持网络策略、ACL访问控制、IPIP/BGP模式,网络隔离性好、性能优异,适合大规模生产集群。Weave:部署简单,无需配置,适合测试环境,大规模集群性能较差。3、PV、PVC、StorageClass的关系?PV(持久化卷):集群级存储资源,由管理员创建,代表底层真实存储(云盘、本地盘、NFS)。PVC(持久化卷声明):用户级存储申请,Pod通过PVC申请存储资源,不用关心底层存储细节。StorageClass(存储类):实现动态存储供给,不用管理员手动创建PV,用户创建PVC后,系统自动根据StorageClass配置创建对应PV并绑定,大幅提升运维效率,生产环境必备。简单流程:Pod挂载PVC→PVC通过StorageClass自动创建PV→PV绑定底层存储。五、镜像与生命周期1、Pod的启动生命周期是什么?1、调度绑定节点→2、拉取镜像→3、初始化init容器启动执行→4、业务容器启动前执行preStart钩子→5、业务容器启动→6、就绪探针检测通过,纳入服务流量→7、运行中持续存活探针检测。Pod销毁时:先执行preStop钩子→停止接收新流量→等待优雅退出超时→强制销毁容器。2、就绪探针和存活探针的区别?生产如何配置?存活探针(livenessProbe):检测容器是否存活,容器卡死、假死、无响应时,自动重启容器,保证服务存活。就绪探针(readinessProbe):检测容器是否就绪,可以接收业务流量。未就绪时,Service会将该Pod踢出负载均衡列表,不转发流量,避免启动过程中流量报错。生产配置原则:就绪探针初始化等待时间稍长,避免启动未完成接入流量;存活探针检测间隔稍短,及时发现异常容器。六、运维与故障排查(面试重点)1、Pod一直处于Pending状态,排查思路?1、查看Pod事件:kubectldescribepod名称,优先看报错信息;2、检查节点资源:节点CPU、内存是否不足,是否达到节点资源上限;3、检查调度规则:节点污点、Pod容忍、节点亲和性是否匹配;4、检查镜像:镜像地址是否正确、私有镜像密钥是否配置、拉取镜像是否超时;5、检查PVC:存储是否挂载失败、PV是否绑定、存储权限是否不足。2、Pod启动后反复重启(CrashLoopBackOff)排查思路?1、查看容器日志:kubectllogsPod名称,查看业务启动报错;2、查看启动命令和参数:启动脚本错误、参数缺失、配置文件错误;3、权限问题:容器运行用户权限不足、目录无读写权限;4、资源限制:CPU内存配额过低,启动直接OOM杀死;5、健康探针配置不合理:启动时间过长,探针提前判定异常杀死容器;6、依赖服务未就绪:数据库、注册中心未连通,业务启动失败。3、节点NotReady状态排查思路?1、检查节点网络、服务器是否宕机、磁盘是否满、服务器负载过高;2、查看kubelet、kube-proxy服务是否正常运行,是否挂掉重启失败;3、检查节点磁盘压力、内存压力,系统资源不足会被节点控制器标记为NotReady;4、检查节点时间、证书是否过期,集群证书异常会导致节点脱离集群。4、K8s滚动更新原理?如何实现不中断服务更新?滚动更新核心是先启动新Pod、再销毁旧Pod。更新时,Deployment会先创建新版本Pod,等待新Pod就绪探针通过、成功接入流量后,再逐步销毁旧版本Pod,分批更新,保证始终有可用Pod承接流量。同时支持配置最大不可用副本数、最大峰值副本数,控制更新节奏,避免更新过程中流量抖动、服务不可用。如果更新出现异常,支持一键回滚到上一个版本。七、安全与权限1、RBAC是什么?核心作用?RBAC是K8s的权限控制机制,基于角色的权限管理,核心是精细化控制用户、服务账号对集群资源的操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论