概述
etcd 是一个基于 Raft 协议实现。开源的、分布式的键值存储系统。主要用于在分布式系统中提供强一致性和高可用性的数据存储。
etcd 在 Kubernetes 中的作用如下:
- 集群状态数据存储:集群配置,集群状态信息等
- 保证集群一致性和高可用:多实例的数据同步
- 服务发现和配置共享
- 集群数据备份和恢复
作为 Kubernetes 的核心组件,etcd 为集群的稳定性、可靠性和一致性提供了支撑。
安装
命令行启动
安装参考官方文档 etcd install 指引即可,安装后验证:
输出:
在终端启动 etcd:
输出:
容器启动
在容器中启动 etcd 实例:
进入 etcd 容器:
使用
etcd 的使用较为简单,主要通过 etcdctl 来执行日常操作
查看集群
查看 etcd 集群中的所有成员:
输出:
存储键值对
通过 put 命令用于将指定的值存储在指定的键下。使用方法如下:
例如,要存储键为 mykey 和值为 myvalue 的键值对,你可以运行:
输出:
这会在 etcd 中创建或更新键 mykey 的值为 myvalue。
获取键值对
get 命令用于检索存储在指定键下的值。使用方法如下:
继续上面的例子,要获取 mykey 的值,你可以运行:
输出:
观察键值变化
通过 watch 命令可以观察键的变化。当指定的键发生变化(例如更新或删除)时,会输出通知。使用方法如下:
例如,要观察 mykey 的变化,你可以运行:
然后,在另一个终端更新 mykey 操作:
然后执行 watch 命令的终端输出:
租约机制
租约(Lease)是一种允许将键值对与一个有时间限制的租约关联的机制。租约到期后,与其关联的键值对会自动删除。
这个特性主要用于:保存临时配置,实现分布式锁,心跳机制,集群成员管理等场景。
创建租约
使用 lease grant 命令可以创建一个租约:
输出:
这个命令会创建一个持续 60 秒的租约,并且返回一个租约 ID,用于后续的操作。
列出所有租约
使用 lease list 可以查看所有活跃的租约:
输出:
这里列出当前所有活跃的租约
将键绑定到租约
使用 --lease=<LEASE_ID> 选项参数可以把键绑定在租约上:
输出:
这个键将在租约到期时自动删除。
保持活跃
使用 lease keep-alive 可以对租约进行续租:
输出:
这条命令将保持租约活跃,防止其到期。
撤销租约
使用 lease revoke 可以提前结束租约:
输出:
这将撤销租约并删除所有与之相关联的键。
备份和恢复
在 etcd 中,snapshot 功能是一种重要的数据保护和恢复机制。它允许你保存 etcd 数据库的当前状态,并在需要时从这些快照中恢复数据。
创建快照
使用 etcdctl snapshot save 命令可以创建当前的数据快照:
输出:
这会将当前 etcd 数据库的状态保存到名为 snapshot.db 的文件中。
恢复数据
使用 etcdctl snapshot restore 命令可以从快照文件中恢复数据:
输出:
这会从 snapshot.db 中恢复数据,并且配置新的 etcd 实例。
在 K8S 中创建 etcd
安装 Helm
首先,安装 Helm 包管理工具,它主要用于简化 Kubernetes 应用程序的部署和管理。
添加 bitnami 仓库
然后将 Bitnami 仓库添加到你的 Helm 包中:
Bitnami 提供了许多预打包的 K8S 应用和服务,添加它你可以方便的搜索、配置和安装各种安全可靠的应用。
下载 chart
从 Bitnami 仓库下载解压编辑 etcd 的 Helm chart:
在本地环境为了避免产生不必要的数据文件,将数据持久化设置为 false:
这意味着 etcd 数据不会被持久化存储,当 Pod 重启时数据会丢失。
安装 chart
将 chart 部署到 Kubernetes 集群中:
执行这个命令,Helm 会根据位于 /etcd 目录中的 values.yaml 文件和其他 chart 文件,创建一组 Kubernetes 资源来部署 etcd 应用。
启动 etcd 客户端
启动 etcd 客户端:
此命令创建一个 etcd 客户端 Pod,用于和 etcd 服务进行交互。
验证
首先查看 Pod:
输出:
进入容器:
存储键:
获取键:
输出:
到这里在 K8S 中创建 etcd,从设置环境、安装 etcd,到通过客户端验证的基本使用到这里就完成了。