跳到主要内容
约 6 分钟4 张卡

Kubernetes 架构

Kubernetes 通过控制循环协调容器工作负载。本文负责组件分工、创建链路、调度和 etcd。

1. 面试核心​

先记住这几条,再读正文

2. 组件​

位置组件职责
控制平面kube-apiserver提供对象 API,执行认证、授权与准入
控制平面etcd持久保存 API 对象
控制平面kube-scheduler给未绑定的 Pod 选择节点
控制平面kube-controller-manager运行副本、节点等控制循环
云集成cloud-controller-manager对接云节点、路由和负载均衡器
节点kubelet管理本机 Pod,执行探针并上报状态
节点容器运行时通过 CRI 接收镜像和容器操作
节点kube-proxy 或替代组件实现 Service 数据转发
插件CNI、CoreDNS、CSI提供网络、域名解析和存储接入

核心控制组件通过 apiserver 协调对象状态。其他通信仍有直接调用。例如 kubelet 调用运行时,apiserver 访问 kubelet。日志、exec 和端口转发都涉及节点通信。

ReplicaSet 控制器观察到副本不足后,会创建 Pod。它持续校正差异,重试失败操作。控制器应按当前状态执行幂等协调。

静态 Pod 由 kubelet 读取节点清单并管理。kubeadm 的清单目录默认是 /etc/kubernetes/manifests。本地 etcd 拓扑的控制平面可用静态 Pod 启动。API 中的镜像 Pod 用于展示状态。调度器无需参与这些 Pod 的创建。

3. Pod 创建链路​

以提交 Deployment 为例:

  1. kubectl 将清单发给 apiserver。
  2. API 请求通过认证、授权、准入和校验。
  3. apiserver 将对象持久保存到 etcd。
  4. Deployment 控制器创建或调整 ReplicaSet。
  5. ReplicaSet 控制器补足 Pod 对象。
  6. scheduler 为未绑定的 Pod 选择节点。
  7. kubelet 观察到分配结果,准备卷和容器环境。
  8. 运行时通过 CRI 接收操作,配置沙箱与网络。
  9. 容器启动后,kubelet 执行探针并上报状态。

Linux CRI 运行时可调用 CNI 配置网络。pause 容器是保留沙箱 Namespace 的一种实现。卷准备、镜像拉取等步骤存在各自的重试流程。

EndpointSlice 保存端点地址和就绪条件。未就绪端点也能出现在对象中。流量是否进入还取决于就绪状态和 Service 配置。数据路径见 工作负载、Service 与集群网络。

4. 调度​

阶段主要依据
过滤requests、节点选择、污点、卷与拓扑约束
打分资源分布、首选亲和、拓扑和镜像位置
绑定将选择的节点写入 Pod 绑定结果

资源过滤使用 requests 和节点可分配量。实时 CPU 用量不直接替代 requests。调度还包括亲和性、污点、卷等条件。

没有可行节点时,Pod 保持 Pending。kubectl describe pod 的事件会列出过滤原因。资源不足与硬约束冲突需要分别处理。

Pod 绑定后会留在所选节点。扩容节点不会自动重新分配旧 Pod。拓扑分布约束可改善新 Pod 的分布。重新平衡需要额外策略,并考虑驱逐代价。

5. etcd 存储​

etcd 保存 Pod、Service、Secret 等 API 对象。应用数据库内容、容器文件和业务日志由各自系统保存。

Raft 写入需多数成员确认。3 个成员可容忍 1 个失效,5 个可容忍 2 个。增加为偶数成员会提高多数派门槛。因此,成员规划常选择奇数规模。

磁盘持久化和成员间网络都会影响提交延迟。排查应关注成员健康、Leader 变化和磁盘延迟。Raft 机制详见 Raft。

etcd 不可用会阻塞对象持久更新。已有容器和已安装的转发规则可继续工作。后端变化、节点故障和控制循环却无法正常协调。因此,业务可用性还取决于故障期间的变化。

etcd 3.6 用 etcdctl snapshot save 保存在线快照。恢复使用 etcdutl snapshot restore。Kubernetes 恢复还需处理 revision 回退与 watch 缓存。快照演练应包含 revision bump 和 mark-compacted。恢复方案应保留数据,并避免新旧集群同时提供服务。

6. API 访问与 Secret 加密​

认证确认请求者身份。授权判断该身份是否能执行目标操作。准入再修改或检查对象内容。

RBAC 的 Role 约束命名空间内的权限。ClusterRole 定义集群级或可复用的权限集合。RoleBinding 在命名空间内绑定权限。ClusterRoleBinding 将权限绑定到集群范围。

Secret 的 base64 是编码。默认存储行为仍需配置静态加密来保护内容。读取 Secret 的 API 权限也要最小化。备份应按同等敏感程度管理。加密密钥的保存与恢复需和数据备份配套。

7 · 面试题卡片​

本页题目与参考回答

7.1 Kubernetes 的控制平面和节点上分别有哪些组件?各自的作用是什么?​

考察重点

  • 控制平面与节点组件的职责。
  • 组件通过 apiserver 和 watch 协作的控制循环模式。

相关内容:组件。

参考回答

控制平面负责 API、状态存储、调度和协调。

apiserver 是对象访问入口,etcd 保存对象。scheduler 选择节点,各控制器持续调整实际状态。

节点的 kubelet 管理 Pod,运行时执行容器操作。Service 转发由 kube-proxy 或替代组件承担。CNI、CoreDNS 和 CSI 分别提供网络、解析与存储接入。

对象协调主要通过 apiserver。kubelet 到运行时等路径仍使用直接调用。

7.2 从 kubectl apply 一个 Deployment 到 Pod 运行起来,中间经历了哪些步骤?调度器怎样选择节点?​

考察重点

  • apiserver、控制器、调度器、kubelet、CNI 在链路中的先后顺序。
  • 调度的过滤与打分;调度依据 requests;分布不均的原因和处理。

相关内容:Pod 创建链路、调度。

参考回答

Deployment 经 API 保存后,由控制器逐步创建 Pod。

Deployment 控制器管理 ReplicaSet。ReplicaSet 控制器补足 Pod。scheduler 过滤并评分,然后提交节点绑定。

目标 kubelet 准备卷并调用 CRI。运行时准备沙箱、网络、镜像与容器。kubelet 持续上报状态和探针结果。Service 数据面再根据端点条件选择后端。

资源过滤使用 requests。污点、亲和性、卷和拓扑也参与选择。节点扩容后,已有 Pod 仍留在原节点。

7.3 etcd 在 Kubernetes 中起什么作用?它怎样保证多节点数据一致?etcd 出问题会有什么影响?​

考察重点

  • etcd 保存集群状态、提供 watch。
  • Raft 的多数派写入;奇数节点;故障影响与备份恢复;静态 Pod。

相关内容:etcd 存储、Raft。

参考回答

etcd 持久保存 Kubernetes 的 API 对象。

Raft 通过多数派提交维持一致性。3 个成员可容忍 1 个失效,5 个可容忍 2 个。

etcd 故障会阻塞持久更新和相关控制循环。已有容器与转发规则可继续运行。故障期间发生的节点和后端变化会增加业务风险。

处理时先确认成员、网络和磁盘状态。灾难恢复使用已验证的快照方案。etcd 3.6 恢复工具是 etcdutl。Kubernetes 场景还需处理 revision 和 watch 缓存。

7.4 认证、RBAC 和准入分别检查什么?Secret 为什么还要加密?​

考察重点:身份、操作权限、对象约束和落盘保护。

相关内容:API 访问与 Secret 加密。

参考回答

认证确认身份,RBAC 授权检查操作权限。

准入检查或修改对象内容。Secret 的 base64 只改变表示方式。静态加密保护持久存储中的内容。API 读取权限与备份访问仍需分别约束。

8. 参考资料​