本文档描述了客户端与 etcd 交互的各种方式。客户端接口是应用程序与 etcd 分布式键值存储之间的桥梁。本页概述了可用的客户端接口及其与 etcd 服务器的交互方式。
有关服务器实现细节的信息,请参阅 核心服务器。有关客户端使用的身份验证和安全功能,请参阅 身份验证与授权。
etcd 提供多种客户端交互接口
etcdctl 提供对 etcd 功能的命令行访问来源
gRPC API 是所有现代 etcd 客户端接口的基础。此 API 以一种与语言无关的方式公开了 etcd 的核心功能。
来源
etcdctl 是 etcd 的官方命令行客户端。它提供了一种从终端或脚本与 etcd 交互的直接方式。
etcdctl 支持 v2 和 v3 API
ETCDCTL_API=2 环境变量可用put、get、delete# Put a key
etcdctl put key value
# Get a key
etcdctl get key
# Watch a key
etcdctl watch key
# Take a snapshot
etcdctl snapshot save snapshot.db
来源
etcd 为不同编程语言提供了官方客户端库和许多社区维护的库。
Go 客户端是 etcd 的主要且功能最完善的客户端库。
etcd 为各种语言提供了官方和社区客户端
| 语言 | 客户端类型 | 仓库/包 |
|---|---|---|
| Go | 官方 | go.etcd.io/etcd/client/v3 |
| Java | 官方 | io.etcd:jetcd-core |
| Python | 社区 | python-etcd, etcd3 |
| Node.js | 社区 | node-etcd, etcd3 |
| Ruby | 社区 | etcd-rb |
| C++ | 社区 | etcd-cpp-apiv3 |
来源
etcd 最初提供了一个 HTTP/JSON API (v2),但已过渡到基于 gRPC 的 API (v3) 以获得更好的性能和功能。
| 功能 | HTTP API (v2) | gRPC API (v3) |
|---|---|---|
| 状态 | 已弃用 | 推荐要求 |
| 性能 | 较低 | 较高 |
| 语言支持 | 任何支持 HTTP 的设备 | 任何支持 gRPC 的设备 |
| 流式传输 | 有限 | 完全支持(Watch) |
| 事务 | 有限 | 完全的 ACID 事务 |
| 身份验证 | 基础 | 基于角色的 SSL/TLS |
| 接口 | 最佳用途 | 注意事项 |
|---|---|---|
| etcdctl | 系统管理、脚本、手动操作 | 需要 CLI 访问 |
| Go 客户端 (clientv3) | 需要完整 etcd 功能的 Go 应用程序 | 功能最完善的客户端 |
| 其他语言客户端 | 特定语言的应用程序 | 功能对等性因语言而异 |
| 直接 gRPC API | 自定义客户端、特殊需求 | 需要 gRPC 知识 |
| 功能 | etcdctl 命令行工具 | Go 客户端 (clientv3) | gRPC API |
|---|---|---|---|
| 键值操作 | ✓ | ✓ | ✓ |
| Watch | ✓ | ✓ | ✓ |
| 租约 | ✓ | ✓ | ✓ |
| 事务 | ✓ | ✓ | ✓ |
| 身份验证 | ✓ | ✓ | ✓ |
| 集群管理 | ✓ | ✓ | ✓ |
| 维护操作 | ✓ | ✓ | ✓ |
| 用户友好的输出 | ✓ | - | - |
| 程序化访问 | - | ✓ | ✓ |
| 语言无关 | - | - | ✓ |
来源
所有客户端接口都共享连接 etcd 的通用配置选项
来源
etcdctl 和客户端库都遵循某些用于配置的环境变量
# etcdctl environment variables
ETCDCTL_ENDPOINTS=localhost:2379
ETCDCTL_DIAL_TIMEOUT=3s
ETCDCTL_CACERT=/path/to/CA.pem
ETCDCTL_CERT=/path/to/cert.pem
ETCDCTL_KEY=/path/to/key.pem
ETCDCTL_API=3
客户端库通常提供编程配置,但也可能遵循环境变量以获取默认设置。
来源