K8s ETCD 详解|备份恢复+静态Pod原理+kubectl查询底层流程(面试必考)

一、前言

很多新手学 K8s 只会敲 kubectl 命令,但完全不知道:数据从哪来、etcd 到底是什么、控制平面组件为什么不能用 systemctl 启停

面试高频考点:

  • kubectl get pod 数据到底从哪里查的?

  • apiserver、etcd、controller、scheduler 为什么叫静态 Pod?

  • 为什么 systemctl stop etcd 停不掉 etcd?

  • etcd 正确停机方式、备份恢复完整流程

这篇文章一次性讲透底层原理,彻底搞定控制平面核心机制!

二、ETCD 核心作用(集群唯一真相)

etcd 是 K8s 集群唯一的真实数据源(Single Source Of Truth)

它是一个分布式键值数据库,专门存储集群所有持久化数据:

  • 所有 Pod、Deployment、Service、ConfigMap、Secret

  • 节点状态、权限、网络策略、资源状态

  • 集群所有配置、所有资源的最终状态

整个 K8s 集群,所有数据最终全部存在 etcd 里。

三、kubectl 查数据的完整底层流程(必考)

很多人以为 kubectl get pod 直接查容器,大错特错!

真实流程:

kubectl → 发送请求给 apiserver → apiserver 去 etcd 查询数据 → 返回结果

关键点:

  1. kubectl 永远不直接操作 etcd

  2. kubectl 无权直连 etcd,所有读写必须经过 apiserver 做认证、鉴权、校验

  3. etcd 只被 apiserver 访问,是集群后端私密数据库

所以:你看到的所有 K8s 数据,全部是 etcd 里存的快照!

四、控制平面四大核心组件(全部是静态Pod)

K8s Master 四大核心组件:

  • kube-apiserver

  • kube-controller-manager

  • kube-scheduler

  • etcd

重点:这四个全部是【静态 Pod】

1. 静态 Pod 存放固定路径

所有静态 Pod 的 YAML 清单统一存放:

/etc/kubernetes/manifests/

kubelet 会实时监听这个目录

  • 目录有 YAML → 自动创建 Pod

  • YAML 删除/改名 → 自动销毁 Pod

五、超级高频面试坑:为什么 systemctl stop etcd 无效?

标准答案:

etcd、apiserver 属于 静态 Pod,不是系统服务!

  • systemctl管理的是 系统守护进程

  • etcd 是 kubelet 管理的 容器 Pod

所以:

systemctl stop kubelet 有效(kubelet 是系统服务)

systemctl stop etcd 完全无效(根本没有这个系统服务)

静态 Pod 正确启停原理(核心)

想要停止 etcd / apiserver:

只能修改 manifests 目录!

  1. 进入目录:/etc/kubernetes/manifests/

  2. etcd.yaml改名/移走

  3. kubelet 检测不到清单 → 自动删除 etcd Pod

  4. 组件彻底停止,2379、6443 端口关闭

恢复同理:把 YAML 挪回来,kubelet 自动重建组件。

六、ETCD 完整备份与恢复流程(面试满分答案)

1. ETCD 备份(必须用 etcdctl)

因为 kubectl 无法直连 etcd,必须使用 etcdctl 客户端,携带集群证书认证,连接 2379 端口生成快照。

bash 复制代码
export ETCDCTL_API=3
etcdctl snapshot save /data/etcd-backup.db \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key

备份得到完整集群数据快照。

2. ETCD 恢复流程(生产标准流程)

恢复必须先停掉 etcd 静态 Pod,不能用 systemctl

  1. 停止控制平面组件 :移走 /etc/kubernetes/manifests/ 下所有 yaml,kubelet 自动销毁 apiserver、etcd 等 Pod

  2. 备份旧故障数据 :备份旧 etcd 数据目录 /var/lib/etcd

  3. 执行快照恢复:使用 etcdctl snapshot restore 还原备份数据

  4. 授权目录权限:保证 etcd 用户正常读取数据

  5. 恢复静态 Pod:把 yaml 放回 manifests 目录

  6. 重启 kubelet,自动重建所有控制平面组件

  7. 验证集群数据恢复正常

七、全文终极总结(背诵版)

  1. etcd 是 K8s 集群唯一真实数据源,存储所有集群核心数据。

  2. kubectl 不直接查 etcd,必须经过 apiserver 中转查询。

  3. apiserver、etcd、controller、scheduler 都是静态 Pod

  4. 静态 Pod 统一路径:/etc/kubernetes/manifests/

  5. systemctl 无法停止 etcd,因为它是容器不是系统服务。

  6. 启停静态 Pod 的唯一方式:修改 manifests 目录清单文件。

  7. etcd 备份依赖 etcdctl 工具+证书认证,恢复必须停机快照还原。

八、学习感悟

很多人只会敲 K8s 命令,却不懂底层运行逻辑。搞懂静态 Pod、etcd 数据存储、apiserver 访问链路,才算真正入门云原生底层原理,不仅能应对面试,更能排查集群故障、操作生产数据恢复。

相关推荐
kyriewen5 小时前
我扒了最近的前端面经——2026年面试不背八股文了,考这5样
前端·面试·ai编程
heimeiyingwang8 小时前
【架构实战】可观测性三支柱:日志、指标、链路的融合
elasticsearch·架构·kubernetes
不简说14 小时前
# JS 代码技巧 vol.7 — 20 个浏览器 API 实战,自带 API 能干的事别自己封装
前端·javascript·面试
CodexDave14 小时前
数据库连接池耗尽:排查顺序与三层兜底
服务器·前端·数据库·git·云原生·容器·kubernetes
程序员清风14 小时前
推荐几个我常听的AI播客!
java·后端·面试
小陈工15 小时前
第7篇:Django框架核心原理与实战深度解析(下)
后端·python·面试
sun༒16 小时前
Java 并发编程精讲,入门
java·开发语言·面试
weedsfly16 小时前
一个电商价格计算案例,带你学会前端开发中的责任链模式
前端·javascript·面试
名字还没想好☜16 小时前
Kubernetes Ingress 实战:域名路由、TLS 证书与 502/404 排查
运维·云原生·容器·kubernetes·ingress