一、前言
很多新手学 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 查询数据 → 返回结果
关键点:
-
kubectl 永远不直接操作 etcd
-
kubectl 无权直连 etcd,所有读写必须经过 apiserver 做认证、鉴权、校验
-
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 目录!
-
进入目录:
/etc/kubernetes/manifests/ -
把
etcd.yaml改名/移走 -
kubelet 检测不到清单 → 自动删除 etcd Pod
-
组件彻底停止,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:
-
停止控制平面组件 :移走
/etc/kubernetes/manifests/下所有 yaml,kubelet 自动销毁 apiserver、etcd 等 Pod -
备份旧故障数据 :备份旧 etcd 数据目录
/var/lib/etcd -
执行快照恢复:使用 etcdctl snapshot restore 还原备份数据
-
授权目录权限:保证 etcd 用户正常读取数据
-
恢复静态 Pod:把 yaml 放回 manifests 目录
-
重启 kubelet,自动重建所有控制平面组件
-
验证集群数据恢复正常
七、全文终极总结(背诵版)
-
etcd 是 K8s 集群唯一真实数据源,存储所有集群核心数据。
-
kubectl 不直接查 etcd,必须经过 apiserver 中转查询。
-
apiserver、etcd、controller、scheduler 都是静态 Pod。
-
静态 Pod 统一路径:
/etc/kubernetes/manifests/。 -
systemctl 无法停止 etcd,因为它是容器不是系统服务。
-
启停静态 Pod 的唯一方式:修改 manifests 目录清单文件。
-
etcd 备份依赖 etcdctl 工具+证书认证,恢复必须停机快照还原。
八、学习感悟
很多人只会敲 K8s 命令,却不懂底层运行逻辑。搞懂静态 Pod、etcd 数据存储、apiserver 访问链路,才算真正入门云原生底层原理,不仅能应对面试,更能排查集群故障、操作生产数据恢复。