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

相关推荐
松岩1 小时前
dcgm-exporter部分指标
kubernetes
程序员二叉2 小时前
【JVM】OOM详解+JVM参数+FullGC排查+CPU飙高+死锁+内存泄漏+命令大全
java·开发语言·jvm·面试
柒和远方2 小时前
后端认证、鉴权、高并发:从 Session 到 JWT 再到 Redis
前端·后端·面试
JieE2122 小时前
JS 到底有多少种数据类型?从ECMA规范到内存本质,一文彻底搞懂
javascript·数据结构·面试
Patrick_Wilson4 小时前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js
Plastic garden5 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
Plastic garden5 小时前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
Tenaryo6 小时前
「底层系统基石 · 缓存篇」V —— 写策略、Store Buffer 与内存屏障
后端·面试