菜单

客户端接口

相关源文件

目的和概述

本文档描述了客户端与 etcd 交互的各种方式。客户端接口是应用程序与 etcd 分布式键值存储之间的桥梁。本页概述了可用的客户端接口及其与 etcd 服务器的交互方式。

有关服务器实现细节的信息,请参阅 核心服务器。有关客户端使用的身份验证和安全功能,请参阅 身份验证与授权

客户端接口架构

etcd 提供多种客户端交互接口

  1. 命令行接口 (CLI)etcdctl 提供对 etcd 功能的命令行访问
  2. 客户端库:应用程序可以使用的特定语言的库
  3. HTTP/gRPC API:用于与 etcd 直接通信的低级 API

来源

gRPC API:客户端接口的基础

gRPC API 是所有现代 etcd 客户端接口的基础。此 API 以一种与语言无关的方式公开了 etcd 的核心功能。

来源

etcdctl 命令行接口

etcdctl 是 etcd 的官方命令行客户端。它提供了一种从终端或脚本与 etcd 交互的直接方式。

API 版本

etcdctl 支持 v2 和 v3 API

  • v3 API:主分支上默认使用
  • v2 API:通过设置 ETCDCTL_API=2 环境变量可用

主要功能

  1. 键值操作putgetdelete
  2. Watch 操作:监控键的变化
  3. Lease 管理:创建和管理租约
  4. 集群管理:添加、删除、更新成员
  5. Auth 操作:管理用户、角色和权限
  6. 维护操作:备份、恢复、碎片整理

示例命令

# 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 客户端 v3 (clientv3)

Go 客户端是 etcd 的主要且功能最完善的客户端库。

clientv3 的主要特性

  1. 并发访问:线程安全,支持并发使用
  2. 连接池:高效的连接管理
  3. 自动重连:处理连接故障
  4. 负载均衡:在集群中分发请求
  5. 事务支持:多键原子操作
  6. Context 集成:支持超时和取消

其他语言客户端

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

来源

HTTP API vs gRPC API

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 的通用配置选项

  1. 端点:etcd 服务器 URL 列表
  2. 身份验证:用户名/密码或 TLS 证书
  3. TLS 设置:证书颁发机构、证书和密钥
  4. 超时设置:拨号超时、操作超时
  5. Keepalive:连接保持活动设置

来源

环境变量和配置

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

客户端库通常提供编程配置,但也可能遵循环境变量以获取默认设置。

来源