Skip to main content

Etcd

Etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。

要了解 Etcd 更深层次的信息,请参考 Etcd 文档

保持 Etcd 集群的稳定对 Kubernetes 集群的稳定性至关重要。 因此,请在专用机器或隔离环境上运行 Etcd 集群,以满足 所需资源需求

使用 etcdctl 直接修改/查看 kubernetes 数据

官方文档:Interacting with Etcd

以容器方式部署的 Etcd ,可以直接通过 kubectl exec 进入 Etcd 容器执行命令:

$ kubectl -n kube-system exec -it etcd-<node-name> -- sh

然后使用容器中自带的 etcdctl 操作 etcd 数据:

$ export ETCDCTL_API=3

# 列出所有数据
$ etcdctl get / --prefix --keys-only \
--cacert ca.crt \
--cert peer.crt \
--key peer.key
# 列出所有名字空间
$ etcdctl get /registry/namespaces --prefix --keys-only \
--cacert ca.crt \
--cert peer.crt \
--key peer.key
# 列出所有 deployments
$ etcdctl get /registry/deployments --prefix --keys-only \
--cacert ca.crt \
--cert peer.crt \
--key peer.key
# 查看 kube-system 空间的详细信息
$ etcdctl get /registry/namespaces/kube-system \
--write-out="json"
--cacert ca.crt \
--cert peer.crt \
--key peer.key

# (谨慎操作!!!)强制删除名字空间 `monitoring`,有可能导致某些资源无法被 GC。
$ etcdctl del /registry/namespaces/monitoring \
--cacert ca.crt \
--cert peer.crt \
--key peer.key

Etcd 集群运维需知

  1. Etcd 集群的节点数量越多,写入速度越慢。因为 raft 协议要求超过 1/2 的节点写入成功,才算是一次成功的写操作。
    1. 为了避免网络分区故障,通常使用 3/5/7 奇数个 etcd 节点。
  2. 如果超过 (N-1)/2 个成员节点断开连接,则etcd 集群因为无法进行仲裁而无法继续正常运行,这个时候所有的etcd 实例都将变成只读状态

推荐阅读