k8s常见面试题1

server/2025/2/8 0:49:46/

k8s常见面试题1

  • Kubernetes 基础知识
    • 核心组件及作用
    • Pod、Deployment、Service的区别
    • 保证Pod高可用
    • ConfigMap vs Secret
    • 网络模型与Pod通信
    • Ingress 与 Service 的主要区别
      • 什么是 Ingress
      • k8s中为什么要做Service
      • Ingress 与 Service 的区别
    • 资源配额
  • Kubernetes 实践
    • 如何监控 Kubernetes 集群的健康状态?
    • 如何实现应用的自动扩缩容(HPA)?
    • 如何备份和恢复 etcd 数据?
    • 如何管理节点的调度和污点(Taint/Toleration)?
    • 集群升级
    • Pod无法启动排查
    • 滚动更新与回滚
  • 故障排查
    • 如何查看 Pod 的日志?
    • 如何诊断 Kubernetes 集群的网络问题?
    • 如何排查节点资源不足的问题?
    • 如何分析集群性能瓶颈?
    • Pod处于Pending状态
    • CrashLoopBackOff原因

Kubernetes 基础知识

核心组件及作用

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

  • API Server:集群的入口,处理REST请求,校验并更新资源到etcd。
  • etcd:分布式键值存储,保存集群状态和配置。
  • Controller Manager:运行控制器(如Deployment、Node控制器),确保集群状态符合预期。
  • Scheduler:将Pod调度到合适的节点。
  • kubelet:在节点上管理Pod生命周期,与API Server通信。
  • kube-proxy:维护节点网络规则,实现Service的负载均衡。

Pod、Deployment、Service的区别

Pod、Deployment、Service 的区别是什么?

  • Pod:最小调度单元,包含一个或多个容器,共享网络/存储。
  • Deployment:管理Pod的副本数和滚动更新。
  • Service:定义一组Pod的访问策略(固定IP/DNS),提供负载均衡。

保证Pod高可用

如何保证 Pod 的高可用性?

  • 使用Deployment设置replicas > 1
  • 配置Pod反亲和性(Anti-Affinity),分散Pod到不同节点。
  • 结合HPA(Horizontal Pod Autoscaler)自动扩缩容。

ConfigMap vs Secret

ConfigMap 和 Secret 的区别及使用场景?

  • ConfigMap:存储非敏感配置(如环境变量、配置文件)。
  • Secret:存储敏感信息(如密码、密钥),以Base64编码(非加密)。
  • 使用场景:ConfigMap用于应用配置,Secret用于安全凭证。

网络模型与Pod通信

Kubernetes 的网络模型是什么?如何实现 Pod 间通信?

  • 每个Pod有独立IP,可直接跨节点通信。
  • CNI插件(如Calico、Flannel)实现Pod网络。
  • Service通过kube-proxy的iptables/IPVS规则转发流量。

Ingress 与 Service 的主要区别

什么是 Ingress

  • Ingress 是 Kubernetes 中的一种 API 资源,用于管理外部 HTTP(S) 访问集群内部服务的流量。
  • 它通过定义一组路由规则,将来自外部的请求转发到 Kubernetes 集群中的相应 Service,并且通常依赖 Ingress Controller(如 Nginx Ingress Controller, Traefik, Istio)来实际处理流量。

k8s中为什么要做Service

  • Pod 漂移问题,可以理解成Pod IP是变化的
  • Kubernetes具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其他机器启动一个新的,还可以动态扩容等。通俗地说,这个Pod可能在任何时刻出现在任何节点上,也可能在任何时刻死在任何节点上;那么自然随着Pod的创建和销毁,Pod IP 肯定会动态变化;
  • 这里借助于Kubernetes的 Service 机制,Service可以以标签的形式选定一组带有指定标签的Pod,并监控和自动负载他们的Pod IP,那么我们向外暴露只暴露Service IP就行了;这就是NodePort模式:即在每个节点上开起一个端口,然后转发到内部Pod IP 上。
  • Service是一组Pod的逻辑集合,这一组Pod能够被Service访问到。可以通过Label Selector找到它所关联的Pod。但是属于四层代理,只能基于IP和端口代理。

Ingress 与 Service 的区别

Ingress 与 Service 的主要区别:

对比项IngressService
作用管理 HTTP/HTTPS 入口流量在集群内部或外部暴露 Pod
使用场景主要用于 Web 入口流量内部通信或直接暴露服务
协议支持主要支持 HTTP/HTTPS支持 TCP、UDP、HTTP、HTTPS
负载均衡依赖 Ingress Controller 进行 L7 负载均衡ClusterIP 仅限内部,LoadBalancer & NodePort 提供 L4 负载均衡
使用方式需要单独定义 Ingress 资源,并配置 Controller通过 kubectl expose 创建 Service 资源
扩展能力可以使用 TLS、Rewrite、Path-Based Routing仅提供基础的流量转发
  • Ingress 依赖 Service,但 Service 可以独立使用。
  • Ingress 适用于管理 HTTP/HTTPS 流量,而 Service 适用于各种网络通信需求。
  • 一般情况下,Service(如 ClusterIP 或 NodePort)为 Ingress 提供后端服务。

资源配额

如何管理 Kubernetes 的资源配额(Resource Quota)?

  • 在 Kubernetes 中,资源配额(Resource Quota)用于限制命名空间中的资源使用,确保资源分配的公平性和可控性。
  • 我们可以通过创建 ResourceQuota 对象来定义配额,限制 CPU、内存、存储等资源的使用量,以及 Pod、Service 等对象的数量。
  • 例如,在一个多团队共享的集群中,可以为每个团队创建独立的命名空间,并配置 ResourceQuota 来限制每个团队的资源使用。这样可以防止某个团队占用过多资源,影响其他团队的应用。

在命名空间中创建 ResourceQuota 对象,定义资源限制。

apiVersion: v1
kind: ResourceQuota
metadata:name: example-quotanamespace: my-namespace
spec:hard:requests.cpu: "10"requests.memory: "20Gi"limits.cpu: "20"limits.memory: "40Gi"pods: "10"services: "5"persistentvolumeclaims: "4"

Kubernetes 实践

如何监控 Kubernetes 集群的健康状态?

集群级监控

  • 检查控制平面组件状态(如 etcd、scheduler)
kubectl get componentstatuses

监测节点状态。

kubectl get nodes

资源监控

  • 监控 CPU、内存使用情况(需 Metrics Server)
  • Prometheus + Grafana 采集和可视化集群指标。
kubectl top nodes/pods

日志监控

  • 查看 Pod 日志
  • ELK(Elasticsearch + Logstash + Kibana)或 Loki + Grafana 进行集中日志管理
kubectl logs <pod>

告警机制

  • Alertmanager 结合 Prometheus 进行自动告警
  • 监测集群异常事件。
kubectl get events

如何实现应用的自动扩缩容(HPA)?

HPA(Horizontal Pod Autoscaler)作用: 根据 CPU、内存 或 自定义指标 自动调整 Pod 数量

  • HPA 通过 Metrics Server 监测 CPU/内存等指标,动态调整 Pod 副本数。
  • 例如,可以设置 kubectl autoscale deployment my-app --cpu-percent=50 --min=2 --max=10,当 CPU 使用率超过 50% 时,HPA 会自动扩展 Pod 数量。

如何备份和恢复 etcd 数据?

etcd 作用: Kubernetes 存储所有集群状态,如 Pod、Service、ConfigMap、Secrets 等。

  • etcd 存储 Kubernetes 的所有数据,备份可以使用 etcdctl snapshot save 生成快照,恢复时用 etcdctl snapshot restore。在生产环境,建议定期备份 etcd,并存储到安全的远程存储。

如何管理节点的调度和污点(Taint/Toleration)?

Taint(污点)作用: 防止特定 Pod 被调度到某个节点,适用于 专用节点(如 GPU、高优先级应用)。

  • Taint 用于限制 Pod 调度,例如 kubectl taint nodes node1 key=value:NoSchedule,防止 Pod 被调度到该节点。Pod 需要 tolerations 才能匹配该节点。另外,可以使用 Node Affinity 进一步控制 Pod 运行在哪些节点上。

集群升级

如何升级 Kubernetes 集群?

  • 使用kubeadm upgrade逐步升级控制平面和节点。
  • 先升级Master节点,再逐个升级Worker节点。
  • 通过kubectl drain排空节点,升级后uncordon

Pod无法启动排查

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

  • 检查事件:kubectl describe pod <pod-name>
  • 常见原因:
    • 镜像拉取失败(镜像不存在或权限问题)。
    • 资源不足(CPU/内存请求过高)。
    • 配置错误(如错误的挂载卷、环境变量)。
  • 查看日志:kubectl logs <pod-name> --previous(若容器已崩溃)。

滚动更新与回滚

如何实现滚动更新和回滚?

  • 滚动更新:Deployment通过逐步替换旧Pod实现无宕机更新。
  strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%
  • 回滚
kubectl rollout undo deployment/<name> --to-revision=<number>

故障排查

如何查看 Pod 的日志?

使用 kubectl logs 查看 Pod 日志

  • 可以使用 kubectl logs 查看 Pod 日志,-f 选项用于实时监控。
  • 对于多容器 Pod,使用 -c 指定容器
  • 生产环境推荐 ELK 或 Loki + Grafana 进行集中式日志管理。
kubectl logs <pod-name>
kubectl logs --previous <pod-name>   #查看历史日志(适用于崩溃的容器
kubectl logs -f <pod-name>   #实时监控日志

如何诊断 Kubernetes 集群的网络问题?

  • 首先检查 Pod 是否能 ping 通,kubectl exec 进行 DNS 解析测试;
  • 然后查看 kubectl describe pod 是否有网络错误;
  • 如果问题仍未解决,可检查 CNI 插件、kube-proxy 规则或使用 tcpdump 抓包分析。
kubectl exec -it <pod-name> -- ping <target-ip>  #检查 Pod 网络连通性
kubectl exec -it <pod-name> -- nslookup <service-name>  #检查 Service 是否正常解析
kubectl describe pod <pod-name>   # 查看 Pod 事件是否有网络错误
kubectl get pods -n kube-system | grep calico  # 检查 CNI 网络插件 适用于 Calico
kubectl port-forward svc/my-service 8080:80   #使用 kubectl port-forward 进行测试
kubectl exec -it <pod> -- tcpdump -i eth0  #抓包分析(tcpdump)
iptables -L -t nat | grep KUBE  #检查 kube-proxy 和 iptables 规则

如何排查节点资源不足的问题?

  • 首先使用 kubectl top nodes/pods 检查 CPU/内存占用情况
  • 然后 kubectl describe node 查看资源限制。
  • 若有 OOM 现象,可 dmesg | grep -i oom 检查是否发生内存溢出。
  • 此外,还需检查磁盘空间是否不足,以及节点是否有 Taint 影响调度。
kubectl top nodes  #查看节点资源使用情况
kubectl top pods --all-namespaces  #查看 Pod 资源占用
kubectl describe node <node-name>  #描述节点,检查资源限制
dmesg | grep -i "oom"  #查看 OOM 相关事件
df -h   #检查节点磁盘使用
kubectl describe node <node-name> | grep Taint   #检查节点是否有污点(Taint)导致调度失败
kubectl describe pod <pod-name>   #查看调度失败的事件

如何分析集群性能瓶颈?

  • 首先 kubectl top nodes/pods 查看资源瓶颈
  • 结合 Prometheus + Grafana 监控 CPU、内存、网络等指标;
  • 其次,检查 Service 和 Ingress 的延迟,tcpdump 抓包分析网络流量;
  • 如果是存储问题,可以使用 iostat 分析磁盘 IO;
  • 对于应用层,可结合 pprof 进行代码级性能优化。
iostat -xm 1  #检查 PV/PVC 读写速率
go tool pprof http://localhost:6060/debug/pprof/profile  #适用于 Golang / Java / Python 业务代码的性能分析

Pod处于Pending状态

Pod 处于 Pending 状态的可能原因?

  • 资源不足(节点CPU/内存不足)。
  • 无匹配节点(节点Selector/Taint未匹配)。
  • 持久卷声明(PVC)未绑定PV。

CrashLoopBackOff原因

Pod 处于 CrashLoopBackOff 状态的可能原因?

  • 应用启动失败(如配置错误、依赖服务不可用)。
  • 容器启动后立即退出(检查日志)。
  • 资源限制过小(如内存不足导致OOMKilled)。

http://www.ppmy.cn/server/165810.html

相关文章

安卓pad仿写element-ui表单验证

安卓pad仿写element-ui表单验证 背景&#xff1a;仿写对象&#xff1a;showcase&#xff1a; 布局总览&#xff1a;核心代码总览&#xff1a;代码仓&#xff1a; 背景&#xff1a; 最近半年开始接触安卓开发&#xff0c;平时开发接触的点比较零碎&#xff0c;计划闲暇时做一些…

离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码

大规模旅行商问题&#xff08;Large-Scale Traveling Salesman Problem&#xff0c;LTSP&#xff09;是经典旅行商问题&#xff08;TSP&#xff09;在规模上的扩展&#xff0c;是一个具有重要理论和实际意义的组合优化问题&#xff1a; 一、问题定义 给定一组城市和它们之间的…

低代码系统-插件功能分析( 某道云)

本文主要把其的插件进行了简单分析&#xff0c;不做业务上的梳理&#xff0c;不做推荐。 可大致分为&#xff1a; 群机器人 信息查询 智能识别 实名验证类 数据库类 通知类 通知类 aPaas增强 考勤同步 财务类 类别 插件名称 功能简介 群机器人类 某钉机器人 即在表单处完…

软件设计模式

目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

ubuntu20.04+RTX4060Ti大模型环境安装

装显卡驱动 这里是重点&#xff0c;因为我是跑深度学习的&#xff0c;要用CUDA&#xff0c;所以必须得装官方的驱动&#xff0c;Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/&#xff0c;选择类型&#xff0c;最新版本下载。 挨个运行&#…

如何使用Webpack构建前端应用?

在现代前端开发中&#xff0c;Webpack已成为构建工具的主流选择&#xff0c;它能够帮助开发者打包和优化应用程序的资源。通过Webpack&#xff0c;前端应用的构建流程变得更加高效和灵活&#xff0c;无论是模块化开发&#xff0c;还是性能优化&#xff0c;都能够轻松实现。本文…

DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力

论文链接&#xff1a; [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 实在太长&#xff0c;自行扔到 Model 里&#xff0c;去翻译去提问吧。 工作原理&#xff1a; 主要技术&#xff0c;就是训练出一些专有用途小模型&…