Kubernetes集群中Deployment YAML存储路径及kubectl get -o yaml数据来源问询
核心解答
1. Deployment创建后的实际存储位置
- 你在主节点执行
kubectl create deployment nginx --image=nginxD时,kubectl仅作为命令行客户端,不会在主节点本地文件系统生成、存储对应Deployment的YAML文件。 - 整个创建请求会被kubectl发送给集群的
kube-apiserver组件,由apiserver将Deployment的结构化状态写入集群配套的etcd分布式键值存储完成持久化,不存在传统主节点文件系统意义上的存储路径。 - 该Deployment在etcd内部的键路径遵循固定规则:
/registry/deployments/<目标命名空间>/<Deployment名称>。由于这次创建没有手动指定命名空间,资源默认归属default命名空间,对应的etcd内部键为/registry/deployments/default/nginx。注意这是etcd自身的键空间结构,不是主节点本地磁盘上的文件路径。
2. 查询命令的YAML内容读取来源
- 执行
kubectl get deployment nginx -o yaml时,kubectl依旧是作为客户端向kube-apiserver发起资源查询请求。 - 最终输出的YAML内容,是apiserver从关联的etcd存储中读取到的该Deployment全量状态,序列化为YAML格式后返回给客户端展示的,全程不会读取主节点本地磁盘上的任何YAML文件。
- 哪怕主节点本地完全没有保存这个Deployment的YAML副本,只要etcd中存有对应的资源状态,该查询命令就能正常输出完整内容。
误区澄清:不少初学者会误以为K8s资源是存储在主节点本地的固定文件目录下,实际上etcd是K8s集群唯一的权威状态持久化层,所有资源的增删改查操作,最终都要通过kube-apiserver完成对etcd的读写,和主节点本地磁盘上的静态文件没有任何绑定关系。
内容的提问来源于stack exchange,提问作者user3839347
相关产品推荐
相关产品推荐

