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 访问链路,才算真正入门云原生底层原理,不仅能应对面试,更能排查集群故障、操作生产数据恢复。

相关推荐
Ruihong5 小时前
Vue withDefaults 转 React:VuReact 怎么处理?
vue.js·react.js·面试
kyriewen6 小时前
别再这样写 async/await 了:我在 Code Review 中见过最多的 8 个错误
前端·javascript·面试
烬羽11 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
云技纵横11 小时前
一个 @Async,把 @Transactional 的事务边界打穿了
后端·面试
想要成为糕糕手11 小时前
Harness Engineering:大模型时代的“马鞍”——从记忆层开始,让AI真正为你所用
面试·ai编程·claude
kyriewen1 天前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
她的男孩1 天前
后台接口加密别只会 HTTPS,ForgeAdmin 的 RSA + SM4/AES 源码拆解
后端·面试·开源
Randyliu1 天前
20260508-Agent搭建记录以及对ReAct框架的理解
面试·agent
ZzT1 天前
公司用 AI 筛简历,他写了个 AI 帮你挑公司
面试·aigc·ai编程
PBitW1 天前
GPT训练我的第四天,被打惨了!!!😭😭😭
前端·javascript·面试