【K8s笔记】etcd
etcd
etcd
是 Kubernetes 集群中最核心的分布式键值数据库,仅运行在master node上面。它的主要作用是存储和管理整个集群的所有配置信息和状态数据。你可以把它理解为 Kubernetes 的“大脑”或“账本”。
¶etcd 的主要作用
-
保存集群状态
- 所有 Kubernetes 对象(如 Pod、Service、Deployment、ConfigMap、Secret 等)的数据,都会被存储在 etcd 里。
- 任何对集群资源的变更(比如创建、删除 Pod),最终都会同步到 etcd 中。
-
分布式一致性存储
- etcd 采用 Raft 算法,保证数据的高可用和一致性。
- 即使有部分节点宕机,只要大多数 etcd 节点存活,数据就不会丢失。
-
为 kube-apiserver 提供后端存储
- kube-apiserver 作为 API 网关,所有的读写操作最终都要落到 etcd 上。
- 没有 etcd,apiserver 就无法存储或获取集群状态。
¶etcd 在 Kubernetes 架构中的位置
1 |
|
¶你可以这样理解
- etcd = 集群数据库
- 保存了所有 Kubernetes 资源对象的“源数据”。
- etcd 挂了,集群不可用
- 如果 etcd 挂了,Kubernetes 控制面就无法工作,集群会失去管理能力。
¶总结一句话
etcd 是 Kubernetes 的分布式数据库,负责存储整个集群的所有状态和配置信息,是集群的“单一真相源”。
etcdctl
etcdctl
是 etcd 的官方命令行客户端工具,用于与 etcd 集群进行交互和管理。
¶详细解释
¶1. etcd 是什么?
- etcd 是一个分布式的、强一致性的 key-value 存储系统。
- 在 Kubernetes 中,etcd 作为集群的“数据库”,存储所有集群状态和对象(如 Pod、Service、ConfigMap 等)。
¶2. etcdctl 的作用
- etcdctl 是 etcd 提供的命令行工具,可以用来:
- 读写 key-value 数据
- 查询、修改、删除数据
- 检查 etcd 集群健康状态
- 备份与恢复 etcd 数据
- 管理 etcd 集群成员
¶3. 常用命令示例
1 |
|
¶4. 注意事项
- 使用
etcdctl
需要有 etcd 集群的访问地址和认证信息(如证书)。 - 生产环境操作 etcd 要非常小心,因为误操作可能导致整个集群不可用。
¶总结
etcdctl 是 etcd 的官方命令行管理工具,主要用于管理、查询、备份 etcd 存储的数据。
etcd集群和k8s集群的关系是什么
etcd集群和Kubernetes集群之间的关系是 Kubernetes 架构中的一个核心点。下面用通俗易懂的方式详细说明:
¶1. etcd集群是什么?
- etcd 是一个分布式的、强一致性的键值(key-value)数据库。
- 它可以组成集群(多个 etcd 节点),以保证高可用和数据一致性。
¶2. k8s集群是什么?
- Kubernetes(k8s)集群是由一组节点(master 节点和 worker 节点)组成的容器编排系统。
- 它负责自动化应用的部署、扩展和管理。
¶3. 二者的关系
¶etcd 是 Kubernetes 的“数据库”
- Kubernetes 所有的集群状态、对象数据(如 Pod、Deployment、Service、ConfigMap 等)都存储在 etcd 集群中。
- Kubernetes 的各个组件(如 kube-apiserver、controller-manager、scheduler 等)都通过 kube-apiserver 访问 etcd,读写集群的所有数据。
¶关系图解
1 |
|
- kube-apiserver 负责所有与 etcd 的交互,其他组件都通过 apiserver 进行间接访问。
¶举例说明
- 你用
kubectl create pod
创建一个 Pod,apiserver 会把 Pod 对象写入 etcd。 - 你用
kubectl get pods
查询 Pod,apiserver 会从 etcd 读取数据返回给你。
¶4. 一句话总结
etcd集群是Kubernetes集群的数据存储后端,Kubernetes集群的所有状态和对象都依赖etcd集群来保存和同步。
¶5. 拓展补充
- etcd 挂了,Kubernetes 就会丢失“记忆”,无法管理现有和新建的对象。(已经运行的 Pod 短时间内不受影响,但无法做任何更改)
- 生产环境一般都部署高可用的 etcd 集群(3/5/7 个节点),以防单点故障。
etcd和k8s是分开来部署的吗
**etcd 和 Kubernetes(k8s)到底是分开部署,还是一起部署?**下面详细解答:
¶1. etcd 和 Kubernetes 是两个独立的软件
- etcd 是一个分布式的键值数据库,专门用来存储 Kubernetes 的所有配置信息和状态数据。
- Kubernetes 是一个容器编排平台,负责管理、调度和运行容器。
¶2. 部署关系有两种常见方式
¶方式一:分开部署(推荐生产环境)
- etcd 作为独立进程(或独立容器)运行。
- Kubernetes 控制面组件(如 kube-apiserver、controller-manager、scheduler)通过网络访问 etcd。
- etcd 可以和 k8s 控制面组件在同一台服务器(master node)上,也可以在独立服务器上。
优点:
- 灵活,易于维护和升级。
- etcd 可以独立扩容、备份和恢复。
生产环境推荐这样做!
¶方式二:随 Kubernetes 一起部署(常见于测试或小型集群)
- 有些安装工具(如 kubeadm、minikube、k3s)会自动在 master 节点上把 etcd 部署好,用户不用手动操作。
- etcd 进程和 k8s 控制面组件通常在同一台机器上。
优点:
- 部署简单,适合学习和开发环境。
- 但不利于大规模扩展和高可用。
¶3. 实际部署示意图
假设有三台 master 节点:
1 |
|
etcd 虽然和 k8s 控制面组件在同一台机器,但它们是独立进程,配置和管理是分开的。
¶4. 总结一句话
etcd 和 Kubernetes 是两个独立的软件,可以部署在一起(同一台服务器上),也可以分开(不同服务器),但它们始终是各自独立的进程和服务。
k8s是怎么访问etcd的
¶1. 访问 etcd 的主体是谁?
Kubernetes 并不是所有组件都直接访问 etcd,只有 kube-apiserver
会直接与 etcd 通信。
kube-apiserver
是 Kubernetes 控制面的核心组件,所有集群状态的读写都要经过它。- 其他组件(如 controller-manager、scheduler、kubectl、kubelet 等)都不会直接访问 etcd,而是通过和
kube-apiserver
交互来间接操作集群状态。
¶2. 通信方式
kube-apiserver
通过 gRPC(HTTP/2)协议,使用 etcd 的官方客户端库,直接访问 etcd。- 访问方式是本地 socket或网络地址(通常是
https://<etcd-endpoint>:2379
,2379 是 etcd 默认监听端口)。 - 通信过程通常是加密的(使用 TLS 证书)。
¶3. 访问流程简图
1 |
|
- 用户用
kubectl
或其他方式调用 Kubernetes API。 kube-apiserver
处理 API 请求,并将相关数据存储到 etcd,或从 etcd 读取数据。
¶4. 访问示例(配置片段)
在 kube-apiserver 的启动参数里,指定 etcd 的访问地址和证书:
1 |
|
¶5. 总结一句话
Kubernetes 只有 kube-apiserver 直接通过 gRPC 协议访问 etcd,其它组件都间接通过 kube-apiserver 读写集群状态。
除了k8s以及其衍生产品,还有什么产品使用etcd?
虽然 etcd 因为 Kubernetes 而广为人知,但其实 etcd 作为一个高可用、分布式、一致性强的键值存储系统,在云原生、分布式系统、微服务等场景下有着广泛应用。下面列举一些除了 Kubernetes 及其生态之外,常见的使用 etcd 的场景和项目:
¶1. 服务发现与配置中心
- CoreOS Fleet
早期 CoreOS 推出的分布式 init 系统,用 etcd 存储和协调服务的状态。 - SkyDNS
用 etcd 存储服务信息,实现服务发现,后来成为 kube-dns 的基础。 - Confd
一个通用的配置管理工具,支持 etcd 作为后端,将 etcd 的数据渲染到本地配置文件。 - Vulcand
一个基于 etcd 的现代 HTTP 反向代理和负载均衡器。
¶2. 微服务注册与发现
- Traefik
现代反向代理,支持 etcd 作为后端存储,用于动态服务发现和路由。 - go-micro
Go 语言微服务框架,支持 etcd 作为服务注册与发现的后端。
¶3. 分布式锁、协调与选举
- etcd 自身提供的分布式锁/leader election
很多分布式应用直接用 etcd 的原子操作和租约机制实现分布式锁和主节点选举。 - OpenShift
Red Hat 的容器平台,底层也是用 etcd 做一致性存储和协调。
¶4. 云原生基础设施
- Cloud Foundry Diego
Cloud Foundry 的调度系统 Diego 用 etcd 存储元数据和协调任务。 - Rancher
虽然现在主推 K8s,但早期 Rancher 也用 etcd 作为元数据存储。
¶5. 数据库与存储系统
- TiKV
分布式事务性 Key-Value 数据库,内部元数据管理部分用 etcd。 - Rook
云原生存储编排器,使用 etcd 作为元数据一致性存储。
¶6. 其他分布式系统
- Calico
云原生网络方案,早期版本用 etcd 存储网络策略和状态(现在也支持 K8s CRD 作为后端)。 - cilium
也是云原生网络方案,可以用 etcd 作为存储后端。
¶7. 自研系统与定制化场景
- 很多企业自研的微服务平台、分布式任务调度、配置中心、分布式锁服务等,都会用 etcd 作为底层一致性存储和协调工具。
¶总结
etcd 不只是 Kubernetes 的“数据库”,它是分布式系统领域通用的高可用一致性存储与协调组件。
只要你的系统需要:
- 分布式一致性存储
- 配置中心、服务发现
- 分布式锁、主从选举
等场景,都可以考虑用 etcd!