2025年K8s最新高频面试题,看看你能答对几个?

云计算 云原生
本篇总结了关于2025年K8s最新高频面试题,看看你能答对几个?

Kubernetes的核心组件有哪些,各自作用是什么?

  • Master节点组件:

a.kube-apiserver:集群的控制入口,提供REST API接口。

b.kube-scheduler:负责Pod调度,决定Pod运行在哪个节点上。

c.kube-controller-manager:运行各种控制器,确保集群状态与期望状态一致。

d.etcd:分布式键值存储,保存集群所有配置信息。

  • Node节点组件:
  • kubelet:负责节点上的Pod生命周期管理。
  • kube-proxy:负责实现服务(Service)负载均衡和网络代理。
  • 容器运行时(如Docker、containerd):运行容器镜像的环境。

 Pod和Deployment的区别?

  • Pod:是Kubernetes最小的资源单位,一组容器的集合,生命周期短暂,可能随时被重建。
  • Deployment:控制Pod副本的部署和管理,提供滚动升级、回滚等功能,确保应用的高可用性。

Service有哪些类型,分别适用于什么场景?

  • ClusterIP(默认):在集群内访问服务,不对外暴露。
  • NodePort:通过节点IP和静态端口对外暴露服务(适合测试或临时访问)。
  • LoadBalancer:结合云服务提供商的负载均衡器,直接对外提供服务。
  • ExternalName:通过DNS别名映射到外部服务。

ConfigMap和Secret有什么区别?

  • ConfigMap:存储明文非敏感配置,如环境变量、配置文件等。
  • Secret:存储加密的敏感信息,如密码、Token和证书。

 StatefulSet 和 Deployment 的主要区别是什么?

  • StatefulSet:用于有状态的服务,Pod具有稳定的标识(网络、存储),Pod启动和销毁严格按照顺序进行(如数据库)。
  • Deployment:用于无状态应用,Pod可任意扩展、缩减,无严格顺序要求。

 什么是 Ingress,有哪些常用实现方式?

  • Ingress:提供集群外部到服务的HTTP/HTTPS访问的规则集合。
  • 常用实现方式:

a.NGINX Ingress Controller

b.Traefik

c.HAProxy

如何限制 Kubernetes 中 Pod 资源使用?

  • 通过在Pod中定义resources字段的requests(申请)和limits(限制),如CPU、内存等,防止资源争用或失控。
yaml


复制编辑
resources:
  requests:
    cpu: "500m"
    memory: "256Mi"
  limits:
    cpu: "1"
    memory: "512Mi"

Pod如何实现亲和性与反亲和性?

亲和性与反亲和性通过节点亲和性(NodeAffinity)和Pod亲和性(PodAffinity/PodAntiAffinity)实现。

  • 亲和性(Affinity):允许Pod根据节点或其他Pod的特征调度在特定节点。
  • 反亲和性(Anti-affinity):防止Pod被调度到具有特定特征的节点或与其他Pod位于同一节点。

使用nodeAffinity指定Pod倾向于部署到特定节点,而PodAntiAffinity则避免多个相似Pod集中在同一节点上,增强容灾能力。

Kubernetes如何实现健康检查?

通过两种探针:

  • Liveness Probe:检测容器是否存活,如失败则重启。
  • Readiness Probe:检测容器是否准备好接收流量,如失败则不转发请求。

DaemonSet的典型应用场景是什么?

答案:

  • 日志收集代理(如Fluentd)
  • 节点监控Agent(如Node Exporter)
  • 网络组件(如CNI插件)

DaemonSet确保每个节点运行一个Pod,通常用于基础设施服务。

Kubernetes的存储卷(Volume)有哪些常见类型?

答案:

  • emptyDir:生命周期跟随Pod,仅适合临时存储。
  • hostPath:挂载节点文件系统,可能有安全风险。
  • PersistentVolumeClaim (PVC):与PersistentVolume关联的持久化存储卷。
  • configMap与secret:挂载配置或敏感数据。

Kubernetes Pod驱逐(Eviction)原因有哪些?

答案:

  • 节点资源不足(CPU/内存压力)
  • 节点维护(kubectl drain操作)
  • Pod违反QoS策略(超出内存limits)
  • 节点NotReady、宕机等异常状态

如何实现节点隔离(Pod不调度到某节点)?

答案:

  • 使用kubectl cordon标记节点为不可调度。
  • 使用tainttoleration实现节点级别Pod调度控制。
bash


复制编辑
kubectl taint nodes node01 key=value:NoSchedule

Kubernetes的调度算法主要考虑哪些因素?

答案:

  • 节点资源充足性(CPU/内存)
  • 节点亲和性与反亲和性
  • 污点(taint)和容忍度(toleration)
  • 自定义调度策略(调度扩展器)

什么是Sidecar模式,举一个典型例子?

答案:

Sidecar是指在Pod中使用辅助容器,增强主容器功能。典型例子:Istio中Envoy代理作为Sidecar,实现流量管理、安全策略、监控等功能。

Kubernetes如何保证Secret的安全性?

答案:

  • Secret以Base64编码存储在etcd中。
  • 生产环境中应启用etcd加密。
  • RBAC限制访问Secret的权限。
  • 使用第三方密钥管理系统(如Vault)更安全。

Kubernetes中QoS的三种类型有哪些?

答案:

  • Guaranteed:设置相同的requests和limits,保证资源。
  • Burstable:requests < limits,可能资源被限制或驱逐。
  • BestEffort:没有设置requests和limits,资源最低保证。

Kubernetes如何实现扩容缩容(弹性伸缩)?

答案:

  • Pod级:Horizontal Pod Autoscaler (HPA),根据CPU、内存等指标自动扩缩容。
  • 节点级:Cluster Autoscaler,根据资源不足自动增加或减少节点。

为什么要设置PodDisruptionBudget?

答案:

PodDisruptionBudget定义允许同时不可用Pod的数量,用于保护应用高可用,避免维护或升级时服务中断。

kube-proxy有哪些实现模式,各自优缺点?

答案:

  • userspace模式(已弃用):性能低,转发开销大。
  • iptables模式(常用):性能中等,规则复杂,容易扩展。
  • ipvs模式(推荐):性能高,负载均衡功能更强。

Kubernetes资源配额(ResourceQuota)如何工作?

答案:

通过ResourceQuota限制namespace内可申请资源的总量(CPU、内存、Pod数量),确保多租户环境的公平资源分配。

什么是Admission Controller,常用的有哪些?

答案:

Admission Controller在API Server接收请求时对资源进行准入检查,决定是否允许操作。

常用的有:

  • NamespaceLifecycle
  • LimitRanger
  • ResourceQuota
  • PodSecurityPolicy(已弃用,推荐OPA或Kyverno)
  • ValidatingAdmissionWebhook与MutatingAdmissionWebhook

什么是Vertical Pod Autoscaler (VPA),如何工作?

答案:

VPA根据Pod历史资源使用情况自动调整Pod资源请求(CPU/内存)。当Pod重建时,以更合适的资源配置重启。

如何排查Pod无法启动的问题?

答案:

  • 查看Pod事件:
bash


复制编辑
kubectl describe pod <pod-name>
  • 检查容器日志:
bash


复制编辑
kubectl logs <pod-name> -c <container-name>
  • 节点资源检查:
bash


复制编辑
kubectl top nodes
  • 节点状态检查:
bash


复制编辑
kubectl get nodes

Kubernetes网络策略(NetworkPolicy)如何实现Pod间通信控制?

答案:

NetworkPolicy通过label选择Pod,基于Ingress/Egress规则定义允许或拒绝Pod间网络访问,配合网络插件(如Calico)实现网络隔离策略。

示例:

yaml


复制编辑
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

以上规则将禁止namespace内所有Pod的进出流量。

如何查看 Kubernetes 集群中的资源使用情况?

答案:
可使用 kubectl top 命令:

bash


复制编辑
kubectl top nodes   # 节点资源
kubectl top pods    # Pod资源

需提前安装 Metrics Server 组件。

Kubernetes PVC 与 PV 的关系是什么?

答案:

  • PV(PersistentVolume):管理员提供的持久化存储资源。
  • PVC(PersistentVolumeClaim):用户对存储资源的申请,PVC绑定到合适的PV上供Pod使用。

为什么不建议在生产环境中使用 latest 镜像标签?

答案:

  • latest标签不明确,难以跟踪版本。
  • latest镜像变化频繁,可能出现不可控的行为。
  • 影响滚动升级和回滚机制。

Horizontal Pod Autoscaler (HPA) 基于什么指标扩缩容?

答案:
默认基于CPU或内存,也可自定义指标(Custom Metrics)或外部指标(External Metrics)进行扩缩容,如队列长度或HTTP请求数。

什么是 CSI(容器存储接口),有什么作用?

答案:
CSI(Container Storage Interface)是一种标准接口,用于将各种存储系统连接到Kubernetes。通过CSI插件,用户可以使用任意外部存储系统,如Ceph、NFS、AWS EBS、阿里云盘等。

Kubernetes中,Pod资源限制超出时会发生什么?

答案:

  • 超过内存(limits):Pod会被OOMKilled,容器自动重启。
  • 超过CPU(limits):Pod被CPU限流(CPU被throttle),性能受限,但不会被驱逐或杀掉。

Pod的状态(Pod Phase)有哪些?

答案:

  • Pod的状态(Pod Phase)通常包括以下几种:

Pending(等待中)

a.Pod已被创建,但尚未调度到节点上,或正在拉取镜像。

Running(运行中)

  • Pod已经成功调度到节点上,且所有容器都已创建并至少有一个容器处于运行状态。

Succeeded(成功)

  • Pod中的所有容器都已成功执行并退出(容器状态为0),常见于一次性任务型Pod。

Failed(失败)

  • Pod中的至少一个容器异常退出(非0退出码),或者启动过程中发生了严重错误。

Unknown(未知)

  • Pod状态无法被Kubernetes节点准确报告,可能节点故障、网络中断或其他通讯异常所致。

Kubernetes中,imagePullPolicy有哪些可选值,意义是什么?

答案:

  • 在 Kubernetes 中,imagePullPolicy 有以下三个可选值:

Always

a.latest 标签镜像(默认策略)。

b.镜像频繁更新,确保总能拉到最新版本。

  • 含义:每次启动容器时,总是尝试重新拉取镜像,即使本地已存在该镜像。
  • 适用场景

IfNotPresent

  • 使用固定版本号(例如:myapp:v1.0.1)的镜像。
  • 降低镜像拉取频率,加速 Pod 启动。
  • 含义:只有当本地不存在指定镜像时才会去远程仓库拉取镜像。
  • 适用场景

Never

  • 离线环境或镜像提前加载到节点本地的情况。
  • 确保严格控制镜像来源,不允许从远程仓库获取。
  • 含义:永远不会主动去拉取镜像,必须使用本地已存在的镜像。
  • 适用场景

默认规则:

  • 当镜像标签为 latest 时,默认值为:Always
  • 当镜像标签不是 latest 时,默认值为:IfNotPresent

为什么生产环境中建议给Pod定义readinessProbe和livenessProbe?

答案:

  • readinessProbe:避免流量被转发到未就绪Pod。
  • livenessProbe:自动重启异常Pod,提高服务可用性。

Kubernetes Pod 重启策略有哪些?

答案:

  • Always(默认):容器异常退出后自动重启。
  • OnFailure:容器异常退出时才重启,成功完成则不重启。
  • Never:无论成功失败,容器退出后都不重启。

Kubernetes容器探针(Probe)的三种探测方式是什么?

答案:

  • Exec:执行命令,成功返回0则探测成功。
  • HTTPGet:通过HTTP请求健康检查。
  • TCPSocket:通过TCP端口检查容器是否正常运行。

Kubernetes PersistentVolume的生命周期如何管理?

答案:

Provisioning(创建)

  • 静态创建(Static Provisioning)
  • 管理员预先创建 PV,定义存储容量、访问模式和存储介质。
  • 动态创建(Dynamic Provisioning)
  • 用户提交 PVC (PersistentVolumeClaim) 时,动态创建 PV。
  • 需要使用 StorageClass 来定义存储配置和创建规则。

Binding(绑定)

  • 当用户创建 PersistentVolumeClaim (PVC) 时,Kubernetes 会根据 PVC 指定的要求(容量、访问模式、存储类别)寻找合适的 PV 并绑定。
  • PV 与 PVC 一旦绑定,进入 Bound 状态,两者形成一对一绑定关系。

Using(使用)

  • PV 绑定到 PVC 后,Pod 可通过 PVC 挂载并使用存储。
  • PV 在 Bound 状态期间持续提供存储服务。

Releasing(释放)

  • 用户删除 PVC 后,对应的 PV 状态会变成 Released
  • 此时数据依旧存在,但无法再被其他 PVC 使用,等待管理员处理。

Reclaiming(回收策略)

PV 的回收策略(Reclaim Policy)决定 PV 被释放后的行为。可选的策略包括:

策略

说明

场景举例

Retain

保留 PV 和其上的数据,管理员手动清理

数据保护场景

Recycle(已废弃)

删除数据,清空 PV,回收再利用(K8s 1.23起已移除)

已废弃,不再使用

Delete

删除 PV 和后端存储的数据

临时数据或非关键场景

  • 推荐策略

a.对于关键数据或生产环境:使用 Retain,数据由管理员人工处理。

b.对于临时数据:使用 Delete,PV 和数据会自动清理。

解释一下Kubernetes中的ResourceQuota和LimitRange的区别?

ResourceQuota限制的是Namespace整体资源申请总量,LimitRange则限制单个Pod容器可申请的资源范围(如CPU、内存),以保证多租户环境下的资源公平分配。

描述Kubernetes的RBAC授权原理?

RBAC通过Role定义资源操作权限,通过RoleBinding将权限绑定给用户或ServiceAccount。ClusterRole与ClusterRoleBinding用于跨Namespace的权限定义。

Ingress Controller如何实现请求路由与流量管理?

Ingress Controller接收Ingress资源定义的HTTP(S)规则,根据Host、路径(path)等将外部请求路由到不同的Service上。常用的Ingress Controller有NGINX、Traefik、HAProxy、Envoy等。

Service Mesh与Ingress有什么区别?

Ingress仅实现外部到集群服务的HTTP(s)流量入口路由,Service Mesh则覆盖服务间通信,包括流量管理、服务发现、负载均衡、熔断、监控、认证等更全面的能力。

什么是容器探针,分别解释Liveness、Readiness、Startup探针?

  • Liveness探针:确定容器是否存活,失败时重启容器。
  • Readiness探针:容器是否准备好接受流量,未就绪时不会接收请求。
  • Startup探针:用于慢启动应用,确保启动完成前不触发其他探针,以防止误判重启。
责任编辑:姜华 来源: 运维开发故事
相关推荐

2015-09-25 10:44:02

大数据Hadoop

2021-03-04 09:35:54

thisJavaScript开发

2018-11-09 14:00:59

Python编程语言面试题

2022-03-31 09:50:45

JS面试题

2021-01-22 11:58:30

MySQL数据库开发

2021-03-01 09:39:34

闭包JavaScript开发

2023-08-18 08:13:11

k8s容器

2021-02-23 12:43:39

Redis面试题缓存

2022-10-27 21:01:03

JavaScrip面试题开发

2019-12-26 09:52:33

Redis集群线程

2021-08-05 05:04:50

热部署模型字节

2018-05-30 10:47:15

Python 百度编程语言

2015-07-23 14:13:43

前端开发面试题

2018-05-01 08:24:40

Python面试题开发

2022-04-22 13:32:01

K8s容器引擎架构

2022-08-22 18:57:29

React前端面试

2019-11-26 10:30:11

CSS前端面试题

2020-08-31 12:20:07

Python面试题代码

2020-03-03 17:47:07

UDP TCP面试题

2021-12-08 11:18:21

Spring Bean面试题生命周期
点赞
收藏

51CTO技术栈公众号