Kubernetes 基础概念面试题详解

一、核心概念理解

1. 什么是Kubernetes?它解决了什么问题?

答案:

Kubernetes(K8S)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。

解决的核心问题:

  • 服务发现与负载均衡:自动分配IP地址和DNS名称,实现流量负载均衡
  • 自动化部署与回滚:声明式配置,支持滚动更新和快速回滚
  • 自动装箱:根据资源需求和约束自动调度容器到最优节点
  • 自我修复:自动重启失败容器,替换不健康节点上的容器
  • 配置管理:集中管理敏感信息和配置数据
  • 水平扩展:通过简单命令或UI实现应用的自动扩缩容

深入理解:

在微服务架构下,传统的部署方式面临诸多挑战:服务实例众多、部署复杂、资源利用率低、故障恢复困难。K8S通过容器编排技术,将基础设施抽象化,让开发者专注于业务逻辑而非底层运维。


2. 请详细解释K8S的架构组件

答案:

Kubernetes采用Master-Worker架构,分为控制平面和数据平面。

控制平面组件(Master Node):

API Server (kube-apiserver)

  • 集群的统一入口,所有操作都通过RESTful API进行
  • 负责认证、授权、准入控制
  • 是唯一直接操作etcd的组件
  • 支持水平扩展以提高可用性

etcd

  • 分布式键值存储,保存集群所有数据
  • 使用Raft协议保证数据一致性
  • 是集群状态的唯一数据源(Single Source of Truth)
  • 建议部署奇数个节点(3/5/7)保证高可用

Controller Manager (kube-controller-manager)

  • 运行控制器进程的守护进程
  • 包含多个控制器:Node Controller、Replication Controller、Endpoints Controller、Service Account Controller等
  • 通过控制循环监控集群状态,确保实际状态与期望状态一致

Scheduler (kube-scheduler)

  • 负责Pod调度决策
  • 根据资源需求、亲和性规则、污点容忍等因素选择最优节点
  • 调度过程分为预选(Predicates)和优选(Priorities)两个阶段
数据平面组件(Worker Node):

Kubelet

  • 运行在每个节点上的主要代理
  • 负责维护Pod生命周期,确保容器运行在Pod中
  • 向API Server报告节点和Pod状态
  • 执行容器健康检查

Kube-proxy

  • 维护节点上的网络规则
  • 实现Service的虚拟IP功能
  • 支持三种代理模式:userspace、iptables、IPVS

Container Runtime

  • 负责运行容器的软件
  • 支持CRI(Container Runtime Interface)标准
  • 常见实现:containerd、CRI-O、Docker(通过dockershim,已废弃)

3. Pod是什么?为什么需要Pod而不是直接使用容器?

答案:

Pod是Kubernetes中最小的可部署单元,是一个或多个容器的集合。

设计理念:

共享网络命名空间

  • Pod内所有容器共享同一个网络栈
  • 通过localhost相互通信,简化容器间通信
  • 共享相同的IP地址和端口空间

共享存储卷

  • Pod可以定义一组共享的Volume
  • 容器可以挂载这些Volume实现数据共享
  • 适合需要紧密协作的容器组合

生命周期管理单元

  • Pod作为调度、部署、扩缩容的原子单位
  • 简化了管理复杂度
  • 保证了容器组的一致性

典型使用场景:

# Sidecar模式示例apiVersion:v1kind:Podmetadata:name:web-appspec:containers:-name:web-serverimage:nginx:1.21ports:-containerPort:80-name:log-collectorimage:fluent/fluent-bit:1.8volumeMounts:-name:logsmountPath:/var/log/nginxvolumes:-name:logsemptyDir:{}

为什么不直接使用容器?

  • 容器是进程级别的隔离,Pod提供了更高层次的抽象
  • 多容器协作场景下,Pod确保它们始终调度到同一节点
  • Pod提供了统一的生命周期管理和资源配额
  • 符合云原生的最佳实践,支持微服务架构

4. Namespace的作用是什么?

答案:

Namespace是Kubernetes用于实现多租户资源隔离的机制。

核心功能:

逻辑隔离

  • 将集群资源划分为多个逻辑组
  • 不同团队或项目使用独立的命名空间
  • 避免资源命名冲突

资源配额管理

  • 通过ResourceQuota限制命名空间的资源使用
  • 防止某个团队占用过多集群资源
  • 实现资源的公平分配

访问控制

  • 结合RBAC实现细粒度权限控制
  • 用户只能访问授权的命名空间
  • 提高集群安全性

默认命名空间:

  • default:默认命名空间,未指定时使用
  • kube-system:K8S系统组件使用
  • kube-public:所有用户可读,通常用于集群信息
  • kube-node-lease:节点心跳信息,提高性能

实践示例:

# 创建命名空间并设置资源配额apiVersion:v1kind:Namespacemetadata:name:dev-team---apiVersion:v1kind:ResourceQuotametadata:name:dev-quotanamespace:dev-teamspec:hard:requests.cpu:"10"requests.memory:20Gipods:"50"

最佳实践:

  • 按环境划分:dev、staging、production
  • 按团队划分:team-a、team-b、team-c
  • 按应用划分:app1、app2、app3
  • 避免过度细分,增加管理复杂度

5. Label和Selector的作用机制是什么?

答案:

Label是附加到Kubernetes对象上的键值对,Selector用于筛选具有特定Label的对象。

Label设计原则:

灵活性

  • 键值对形式,支持多维度标记
  • 可以随时添加、修改、删除
  • 不影响对象的核心功能

标识信息

  • 环境标识:env=production、env=dev
  • 版本标识:version=v1.2.3
  • 层级标识:tier=frontend、tier=backend
  • 团队标识:team=platform、team=business

Selector类型:

基于等值的Selector

selector:env:productiontier:frontend

基于集合的Selector

selector:matchLabels:app:nginxmatchExpressions:-key:envoperator:Invalues:-production-staging-key:tieroperator:NotInvalues:-cache

实际应用场景:

# Service通过Selector选择PodapiVersion:v1kind:Servicemetadata:name:web-servicespec:selector:app:webtier:frontendports:-protocol:TCPport:80targetPort:8080---# Deployment管理具有特定Label的PodapiVersion:apps/v1kind:Deploymentmetadata:name:web-deploymentspec:replicas:3selector:matchLabels:app:webtier:frontendtemplate:metadata:labels:app:webtier:frontendversion:v2.0spec:containers:-name:nginximage:nginx:1.21

最佳实践:

  • 使用有意义的标签键名,遵循命名规范
  • 关键标签应该稳定,避免频繁变更
  • 组合使用多个标签实现精确筛选
  • 预留扩展标签,支持未来需求变化

二、对象与资源管理

6. Deployment、ReplicaSet、Pod之间的关系是什么?

答案:

三者形成层级管理关系,Deployment管理ReplicaSet,ReplicaSet管理Pod。

关系图解:

Deployment ├── ReplicaSet (version 1) │ ├── Pod 1 │ ├── Pod 2 │ └── Pod 3 └── ReplicaSet (version 2) - 滚动更新时创建 ├── Pod 4 ├── Pod 5 └── Pod 6

各自职责:

Pod

  • 最小部署单元
  • 封装容器、存储、网络配置
  • 短暂的,可替换的

ReplicaSet

  • 确保指定数量的Pod副本运行
  • 通过Label Selector识别管理的Pod
  • 自动替换失败的Pod
  • 支持Pod模板定义

Deployment

  • 声明式更新ReplicaSet和Pod
  • 支持滚动更新和回滚
  • 管理多个ReplicaSet版本
  • 提供发布策略控制

滚动更新过程:

apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentspec:replicas:3strategy:type:RollingUpdaterollingUpdate:maxSurge:1# 超出期望Pod数的最大值maxUnavailable:1# 不可用Pod的最大数量selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.21ports:-containerPort:80

版本管理示例:

# 查看滚动更新状态kubectl rollout status deployment/nginx-deployment# 查看历史版本kubectl rollouthistorydeployment/nginx-deployment# 回滚到上一版本kubectl rollout undo deployment/nginx-deployment# 回滚到指定版本kubectl rollout undo deployment/nginx-deployment --to-revision=2

使用建议:

  • 生产环境优先使用Deployment,不直接创建ReplicaSet
  • Deployment提供了完整的版本控制和发布管理
  • ReplicaSet主要由Deployment自动管理
  • 直接操作Pod仅用于调试和临时任务

7. StatefulSet和Deployment的区别是什么?

答案:

StatefulSet用于管理有状态应用,Deployment用于管理无状态应用。

核心差异对比:

特性StatefulSetDeployment
Pod命名有序且稳定(pod-0, pod-1)随机生成
网络标识稳定的网络ID动态分配
存储稳定的持久化存储通常使用临时存储
启动顺序有序创建和删除并行创建和删除
更新策略支持分区更新支持滚动更新
使用场景数据库、消息队列Web应用、API服务

StatefulSet关键特性:

稳定的网络标识符

# 每个Pod获得稳定的DNS名称<pod-name>.<service-name>.<namespace>.svc.cluster.local# 示例:mysql-0.mysql-service.default.svc.cluster.local

有序部署和扩缩容

  • Pod按顺序创建:0, 1, 2, …
  • 必须等待前一个Pod Ready才创建下一个
  • 删除时逆序进行:…, 2, 1, 0

持久化存储绑定

apiVersion:apps/v1kind:StatefulSetmetadata:name:mysqlspec:serviceName:mysql-servicereplicas:3selector:matchLabels:app:mysqltemplate:metadata:labels:app:mysqlspec:containers:-name:mysqlimage:mysql:8.0ports:-containerPort:3306volumeMounts:-name:datamountPath:/var/lib/mysqlvolumeClaimTemplates:# 每个Pod独立的PVC-metadata:name:dataspec:accessModes:["ReadWriteOnce"]resources:requests:storage:10Gi

典型应用场景:

StatefulSet适用于:

  • 数据库:MySQL、PostgreSQL、MongoDB
  • 分布式系统:ZooKeeper、Kafka、Elasticsearch
  • 需要稳定网络标识的应用

Deployment适用于:

  • 无状态Web应用
  • 微服务API
  • 批处理任务
  • 可以随时替换的服务

最佳实践:

  • 为StatefulSet创建Headless Service实现稳定网络
  • 使用volumeClaimTemplates自动创建PVC
  • 设置合理的更新策略(RollingUpdate或OnDelete)
  • 谨慎处理StatefulSet的删除,避免数据丢失

8. DaemonSet的使用场景有哪些?

答案:

DaemonSet确保所有(或某些)节点上运行一个Pod副本,主要用于集群级别的系统服务。

典型使用场景:

日志收集

apiVersion:apps/v1kind:DaemonSetmetadata:name:fluentdnamespace:kube-systemspec:selector:matchLabels:name:fluentdtemplate:metadata:labels:name:fluentdspec:tolerations:-key:node-role.kubernetes.io/mastereffect:NoSchedulecontainers:-name:fluentdimage:fluent/fluentd-kubernetes-daemonset:v1volumeMounts:-name:varlogmountPath:/var/log-name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:truevolumes:-name:varloghostPath:path:/var/log-name:varlibdockercontainershostPath:path:/var/lib/docker/containers

监控代理

  • Prometheus Node Exporter:采集节点指标
  • Datadog Agent:性能监控
  • 每个节点运行监控Agent收集本地数据

网络插件

  • Calico、Flannel、Weave Net
  • 为每个节点配置网络策略
  • 实现跨节点Pod通信

存储插件

  • Ceph、GlusterFS客户端
  • 在每个节点上挂载分布式存储
  • 为Pod提供持久化存储能力

节点选择与调度:

apiVersion:apps/v1kind:DaemonSetmetadata:name:monitoring-agentspec:selector:matchLabels:app:monitoringtemplate:metadata:labels:app:monitoringspec:nodeSelector:monitoring:"true"# 仅在标记的节点运行containers:-name:agentimage:monitoring-agent:latestresources:limits:memory:200Mirequests:cpu:100mmemory:100Mi

更新策略:

spec:updateStrategy:type:RollingUpdaterollingUpdate:maxUnavailable:1# 逐个更新节点上的Pod

关键特性:

  • 自动在新节点上部署Pod
  • 节点删除时自动清理Pod
  • 可通过nodeSelector或nodeAffinity控制部署范围
  • 支持滚动更新策略

三、总结

本文档涵盖了Kubernetes基础概念的核心面试问题,包括:

  • K8S的本质、架构和组件
  • Pod、Namespace、Label等基础对象
  • Deployment、StatefulSet、DaemonSet等控制器

掌握这些基础概念是深入学习K8S的前提,建议结合实际操作加深理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1205913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI设计:用技术提升创意效率的实战指南

AI设计的本质&#xff0c;是通过机器学习与计算机视觉技术&#xff0c;将设计中的重复性劳动技能门槛环节转化为自动化流程&#xff0c;从而让创意从业者从工具操作中解放&#xff0c;聚焦于更具价值的策略性创意——这不是替代人类&#xff0c;而是放大人类创意的价值。 从技术…

Kubernetes 网络与服务发现面试题详解

一、网络模型基础 1. Kubernetes的网络模型有哪些基本要求&#xff1f; 答案&#xff1a; Kubernetes网络模型基于以下核心原则&#xff1a; 所有Pod可以相互通信 不使用NAT&#xff0c;Pod之间可以直接通过IP通信跨节点的Pod也能直接访问简化了网络拓扑&#xff0c;避免端…

解耦指导+保持先验:北邮团队实现大模型“零标注“域内高保真生成

北京邮电大学团队提出"指导解耦先验保持机制"&#xff0c;将扩散模型的条件指导解耦为领域指导和控制指导两部分&#xff0c;通过预训练模型保持控制指导能力&#xff0c;用无文本UNet学习领域知识。该方法仅需领域图像数据&#xff0c;在人脸、动物和瓷器三个领域测…

什么是大模型微调(Fine-Tuning)?大模型微调技术详解:提升模型性能的关键方法

大模型微调是在预训练模型基础上&#xff0c;利用少量特定领域数据继续训练&#xff0c;使其适应特定任务。优势包括提升任务表现、防止过拟合、降低成本和增强领域适应性。技术路线分为参数规模划分的全参微调(FPFT)和参数高效微调(PEFT)&#xff0c;以及训练流程划分的监督微…

大模型智能体化推理:LLM如何成为自主智能体的全面解析

本文系统综述了智能体化推理(Agentic Reasoning)范式&#xff0c;探讨大语言模型如何从静态推理转变为与环境持续交互的自主智能体。文章从三个维度分析&#xff1a;基础智能体推理(规划、工具使用)、自我演进智能体推理(通过反馈自适应)和集体多智能体推理(多智能体协作)&…

编译器选项-(工作总结)

1.编译器选项 本文总结在编译器中使用的变量: 2.编译器 2.1 Mingw 和 GUN 相关部分 含义 说明-W 警告(Warning)选项前缀 所有控制警告的编译器选项都以 -W 开头。dangling-else 特定的警告名称 指代代码中可能引起歧…

HORIBA MEXA-324M:双组分汽车尾气测量仪技术说明 - 教程

HORIBA MEXA-324M:双组分汽车尾气测量仪技术说明 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

2026年四川夜景照明工程哪家好?众奇光彩的亮化工程为何脱颖而出?

在城市更新与夜间经济蓬勃发展的双重驱动下,夜景照明工程已从单纯的“照亮”功能,跃升为塑造城市形象、激活文旅消费、提升商业价值的重要载体。尤其在四川,随着成渝地区双城经济圈建设提速,市政亮化、文旅夜游、商…

强烈安利10个AI论文平台,自考学生轻松搞定毕业论文!

强烈安利10个AI论文平台&#xff0c;自考学生轻松搞定毕业论文&#xff01; 自考论文写作的救星&#xff0c;AI工具如何改变你的学习节奏 对于自考学生来说&#xff0c;毕业论文不仅是学业的终点&#xff0c;更是能力与毅力的考验。然而&#xff0c;面对繁重的写作任务、复杂的…

当情绪成为“中断指令”:抑郁态语言如何系统性压缩 LLM 的因果推理——一种面向医疗场景的执行态越权风险与“逻辑锚点保持率(LAR)”指标

摘要 随着大语言模型&#xff08;LLM&#xff09;被广泛引入医疗问答、问诊辅助与临床决策支持系统&#xff0c;一个被严重低估的风险正在浮现&#xff1a;当用户语言呈现心理困境或抑郁态分布时&#xff0c;模型往往会系统性地从“问题导向的推理模式”切换到“主体导向的情绪…

Java毕设选题推荐:基于JavaWeb的网上购物下定系统的设计与实现基于Web的商品预购平台的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机Java毕设实战-基于JavaWeb的商品预购平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

DevOps实战系列 - 使用Arbess+GitLab+SonarQube实现Java项目自动化构建并主机部署

Arbess 是一款国产开源免费的 CI/CD 工具&#xff0c;包含流水线管理、流水线设计、流水线执行、测试报告、统计分析等模块。本文将详细介绍如何安装配置使用GitLab、SonarQube、Arbess系统&#xff0c;使用流水线拉取GitLab源码、使用SonarQube进行代码扫描&#xff0c;构建安…

DevOps实战系列 - 使用Arbess+GitPuk实现Java项目自动化构建并Docker部署

Arbess 是一款国产开源免费的 CI/CD 工具&#xff0c;包含流水线管理、流水线设计、流水线执行、测试报告、统计分析等模块。本文将详细介绍如何安装配置使用GitPuk、Docker、Arbess系统&#xff0c;使用流水线拉取GitPuk源码实现前后端项目自动化构建和Docker容器部署。 1、G…

DevOps实战系列 - 使用Arbess+GitLab+Hadess实现Java项目自动化构建并主机部署

Arbess 是一款开源免费的 CI/CD 工具&#xff0c;包含流水线管理、流水线设计、流水线执行、测试报告、统计分析等模块。本文将详细介绍如何安装配置使用GitLab、Hadess、Arbess系统&#xff0c;使用Arbess流水线拉取GitLab源码、构建、部署并上传Hadess制品库。 1、Gitlab 安…

郑州恒达感应加热技术有限公司:20年深耕感应加热设备,铸就中原智造标杆

郑州恒达感应加热技术有限公司:20 年深耕感应加热设备,铸就中原智造标杆在郑州市荥阳市装备制造产业园的核心腹地(厂址:郑州市荥阳市科技二路 1 号荥阳装备制造产业园 23A 号楼),郑州恒达感应加热技术有限公司已…

RAG项目Redis应用

用户所属组织标签缓存用户所属的标签是高频访问字段,所以在Redis中进行缓存 使用List结构存储而不使用set,List底层是压缩列表+双向链表,内存紧凑读写快,set天然去重是要依赖哈希表的,计算哈希值解决哈希冲突效率…

Redis 的演进之路:从缓存到 AI 数据库(V1.0至8.4)

Redis 的演进之路:从缓存到 AI 数据库(V1.0至8.4)2026-01-23 17:19 abce 阅读(0) 评论(0) 收藏 举报最近闲来无事,在重新翻看 redis 书籍和笔记。被这个标题吸引了,所以翻译看看。 原文:The Evolution of Re…

深耕二十载智造加热芯!郑州恒达感应加热设备引领华中产业升级

深耕二十载・智造加热芯!郑州恒达感应加热设备引领华中产业升级一、二十载深耕郑州 恒达感应加热设备筑牢产业根基(一)2007 年启程 科技服务型企业扎根荥阳产业园在华中地区规模超 27 亿元的感应加热市场中,郑州恒…

深耕二十载,领跑感应加热新时代——郑州恒达感应加热设备赋能制造业升级

深耕二十载,领跑感应加热新时代 —— 郑州恒达感应加热设备赋能制造业升级一、企业初心:二十载深耕,铸就感应加热领域标杆在 “双碳” 战略深入推进的今天,感应加热设备凭借高效节能的核心优势,正成为制造业绿色转…