腾讯云云原生ETCD完全对接指南:从集群创建到生产级应用实践
1. 云原生ETCD产品概述
etcd作为一个分布式、高可靠的键值存储系统,在云原生生态中占据着至关重要的地位。它由CoreOS团队于2013年使用Go语言创建,采用Raft一致性算法来保证数据的强一致性。etcd可以容忍集群中部分节点故障,只要有一半以上节点存活即可对外提供服务。在云原生架构中,etcd主要用于元数据存储、服务发现、分布式选举等核心场景,Kubernetes、CoreDNS等云原生基础设施都深度依赖etcd。
腾讯云云原生ETCD(Cloud Service for etcd)是基于开源etcd针对云原生服务场景进行优化的托管解决方案,由腾讯云容器团队提供,完全兼容开源的etcd分布式存储能力。该服务已于2022年6月8日结束内测,正式对外开放并开始商业化计费。腾讯云容器团队目前线上运维了上万套Kubernetes集群,后端使用了上千套etcd集群作为支撑存储,在保障etcd稳定运行的同时积累了大量的实践经验。
与自建etcd相比,腾讯云云原生ETCD提供了显著的优势。用户对etcd了解程度不够时难以快速上手,自建etcd往往还需要维护一套监控告警系统和备份恢复机制,这些都增加了运维负担。而云原生ETCD服务提供了一键部署集群的能力,支持高可用部署、HTTPS访问和数据自动压缩等功能。同时集成云原生监控能力,提供完善的监控告警机制。在日常运维方面,支持备份恢复、节点扩缩容和版本升级等全流程管理。
云原生ETCD的应用场景非常广泛。它主要用于元数据存储、服务发现、分布式选举等场景。基于etcd提供的Watch机制,可以更便捷地实现发布订阅等功能。在微服务架构中,etcd可以作为服务注册与发现的协调中心。在Kubernetes集群中,etcd保存着整个集群的状态数据。
需要先登录腾讯云控制台,点击:腾讯云控制台,还没有账号,点击:注册后再关联,已有账号点击:登录后再关联
2. 创建云原生ETCD集群
2.1 前提条件
首次使用云原生ETCD服务需要为该服务授权名为TKE_QCSLinkedRoleInEtcdService的服务相关角色。云原生ETCD服务中使用了云硬盘、对象存储等多种云资源,首次使用之前需确保已经获取相关云资源使用权限。此外,集群创建过程中也会用到私有网络、子网、安全组等资源。
2.2 集群信息配置
登录云原生ETCD控制台,进入etcd集群列表页面,在页面上方选择需创建etcd集群的地域,单击新建。创建etcd集群需要配置以下核心信息:
集群名称:创建的etcd集群名称,不超过60个字符。etcd版本:选择所需的etcd版本。所在地域:选择希望部署该实例的地域。当前仅支持部署在北京、上海、广州等地域。集群创建后地域无法修改,建议根据所在地理位置选择靠近业务的地域,可降低访问延迟。集群网络:选择当前地域下已有的私有网络。
2.3 高可用部署配置
为了确保集群的高可用性,支持将集群节点随机部署在不同可用区。开启高可用部署要求至少有3个可选可用区的子网数量。高可用部署要求至少有3个etcd集群节点,若开启了高可用部署,请确保可用子网至少分布在3个不同的可用区。在3个不同的可用区场景下,单可用区故障不影响集群正常服务,同时支持故障节点快速自愈。
节点子网:选择为etcd节点分配所选子网地址范围内的IP地址,请尽量选择IP数量充足且与其他产品使用无冲突的子网。内网访问:etcd集群的对外访问地址默认分配在该所选子网中。
2.4 安全组与HTTPS配置
安全组具有防火墙的功能,用于设置节点的网络访问控制。支持以下设置:新建并绑定默认安全组,出/入站规则默认放通0.0.0.0/0和::/0的所有端口。如需使用已有安全组,请确认所选安全组放通所选子网的2379、2380端口,否则可能造成etcd实例创建失败。安全组配置是保障ETCD集群网络安全的第一道防线。
启用HTTPS:支持开启HTTPS双向认证及鉴权,集群创建后该功能项不支持修改。为保障集群数据的安全传输,建议开启。客户端证书认证:启用HTTPS的情况下,支持开启客户端证书认证。自动压缩:为防止集群性能下降或空间耗尽,可开启自动压缩功能实现对历史数据的定时清理。目前支持周期性压缩和根据revision压缩两种压缩模式。
2.5 数据备份策略
设置备份可有效保护集群数据安全,支持设置备份间隔和最大备份数目。集群创建成功后将自动为您创建对象存储COS存储桶并按照实际资源使用情况计费。备份间隔支持以小时为单位设置。最大备份个数支持设置上限为1000,超过该数目后最新备份信息将无法上传至对象存储COS存储桶。
2.6 监控告警配置
云原生ETCD默认提供监控、告警功能,也支持用户额外集成云原生监控服务实现集群的监控、分析和告警。支持选择已有Prometheus实例,要求该实例与etcd集群位于相同VPC下。
3. 连接与访问云原生ETCD
3.1 使用etcdctl命令行工具
etcdctl是etcd官方提供的命令行客户端工具,是运维人员管理ETCD集群最常用的方式。使用前需要配置etcdctl以连接到etcd集群。首先需要设置环境变量ETCDCTL_API为3以使用etcd v3 API。
如果集群开启了HTTPS访问,需要下载CA证书、客户端证书和客户端私钥。连接命令示例如下:
# 设置API版本
export ETCDCTL_API=3
# HTTP方式连接
etcdctl --endpoints=http://172.16.180.44:2379 put /test/key 'hello world'
etcdctl --endpoints=http://172.16.180.44:2379 get /test/key
# HTTPS方式连接(需要证书)
etcdctl --endpoints=https://172.16.180.44:2379 \
--cacert=/path/to/ca.crt \
--cert=/path/to/client.crt \
--key=/path/to/client.key \
put /test/key 'hello world'
# 创建快照备份
etcdctl --command-timeout=30s snapshot save /backup/etcd-snapshot.db \
--endpoints=https://172.16.180.44:2379 \
--cacert=/path/to/ca.crt \
--cert=/path/to/client.crt \
--key=/path/to/client.key
在删除数据之前,建议使用etcdctl工具创建etcd集群的快照并保存为文件,以便备份和恢复集群状态。--command-timeout=30s是一个可选参数,它设置了命令的超时时间为30秒。
3.2 使用Python客户端访问
云原生ETCD默认的版本都是3.x以上,支持HTTP和HTTPS两种访问方式。使用Python连接访问云原生ETCD需要安装etcd3这个Python模块。
# 安装etcd3模块
pip install etcd3
获取etcd的访问地址后,如果是HTTPS方式需要获取证书。获取连接地址和CA证书、客户端证书以及客户端私钥,保存到本地文件。
import etcd3
# HTTP方式连接(无需证书)
etcd = etcd3.client(host='172.16.180.44', port=2379)
# HTTPS方式连接(需要证书)
etcd = etcd3.client(
host='172.16.180.44',
port=2379,
ca_cert='/path/to/etcd-CA.crt',
cert_cert='/path/to/etcd-Cert.crt',
cert_key='/path/to/etcd-Key.key'
)
# 写入数据
etcd.put('name', 'etcd-user')
print(etcd.get('name')) # 输出:(b'etcd-user', <etcd3.client.KVMetadata object>)
etcd.put('/config/app/timeout', '30')
print(etcd.get('/config/app/timeout')) # 输出:(b'30', <etcd3.client.KVMetadata object>)
# 删除数据
etcd.delete('/config/app/timeout')
# 监听Key变化
watch_client = etcd.watch('/config/app')
for event in watch_client:
print(f'Key变化: {event.key} -> {event.value}')
如果是HTTP方式提供的访问,就不需要配置证书。etcd3客户端的更多API使用可以参考官方文档。etcd v3的通信基于gRPC,proto文件是定义服务端和客户端通讯接口的标准。
3.3 使用腾讯云API管理ETCD
腾讯云为云原生ETCD提供了完整的API接口,支持通过编程方式进行自动化管理。API接口的请求域名为cetcd.tencentcloudapi.com。主要接口包括:创建etcd实例、创建etcd快照、创建etcd快照策略、查看etcd可用版本、查看etcd集群创建进度、查询etcd访问凭证、查看etcd集群配额、查看etcd支持地域、查看etcd快照列表、关闭/启用etcd实例删除保护、修改etcd实例属性、修改etcd实例配置、修改etcd快照策略、扩容etcd实例、升级etcd实例、查询etcd实例列表、获取gRPC方法列表等。
以上接口的频率限制维度为API加接入地域加子账号,每个接口的频率限制为20次/秒。用户可以使用API Explorer工具在线调用API,该工具提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。使用API Explorer调用创建etcd快照接口的步骤如下:进入API Explorer工具页面,调用创建etcd快照接口完成etcd快照备份。
4. 监控与告警配置
4.1 监控指标维度
云原生ETCD默认为用户提供四个维度的监控指标数据:节点资源使用率、集群业务指标、实例级别指标、实例接口指标。所有监控指标均支持设置告警。
节点资源维度包括:CPU用量占request百分比、文件系统读取速率、文件系统写入速率、内存使用量占request百分比、内存使用总量、网络接收速率、网络发送速率。
业务指标维度包括:数据库key数量(计算公式:etcd_debugging_mvcc_keys_total)、数据库MVCC写入次数(计算公式:etcd_mvcc_put_total)、数据库大小(计算公式:etcd_debugging_mvcc_db_total_size_in_bytes)、共识提议apply速率、共识提议commit速率、排队等待共识提议总量、失败共识提议增长速率。
共识提议apply速率通常应该很小,即使在高负载下也只有几千个。如果指标差异持续上升,则表明etcd服务器过载,可能是高耗查询导致的。共识提议commit速率通常会随着时间的推移而增加,单个member与leader之间持续较大的延迟表明该成员运行缓慢或不健康。排队等待共识提议总量上升表示存在高客户端负载或成员无法提交提议。失败共识提议增长速率通常与两个问题有关:与leader选举相关的临时故障或由于集群中的仲裁损失而导致的较长时间故障。
实例级别指标包括:集群是否有Leader(计算公式:max(etcd_server_has_leader))、Leader切换总次数(计算公式:max(etcd_server_leader_changes_seen_total))。如果没有leader则实例不可用。频繁的leader变动会显著影响etcd的性能,可能是由于网络连接问题或etcd集群的负载过大。
4.2 查看监控指标
查看监控指标可从实例列表页单击对应集群图标,进入实例详情页的实例监控页面。监控图表支持以下聚合方式:时长指监控图表中展示的数据所属时间范围;粒度指图表中每个数据点的聚合方式,原始数据默认为15秒采集一次,控制台可选择按1分钟、5分钟聚合展示平均值;自动刷新支持按30秒、5分钟、30分钟、1小时自动刷新图表。
4.3 配置告警策略
在实例详情页的实例监控中单击配置告警,进入新建告警策略页。用户可以根据业务需求为各项监控指标设置告警阈值和通知方式。此外,如果有自定义监控指标展示的需求,也支持使用Prometheus监控作为额外的监控服务,配置自定义的监控指标。
5. 运维管理
5.1 快照备份与恢复
云原生ETCD支持自动备份和手动备份两种操作,每次备份的结果将以快照的方式展示在快照列表中。用户可以通过快照将集群恢复到之前的某个状态。在创建etcd集群时,系统默认开启数据备份功能,并根据备份参数生成相应的定期快照策略。
如果已经开启了快照策略,但快照备份文件没有按照预期生成,可能是由于修改了etcd密码引起的。此时可以通过提交工单的方式咨询并解决快照失败问题。
使用etcdctl命令行工具也可以手动创建快照:
# 创建快照
etcdctl --command-timeout=30s snapshot save /backup/etcd-snapshot-$(date +%Y%m%d).db \
--endpoints=https://172.16.180.44:2379 \
--cacert=/path/to/ca.crt \
--cert=/path/to/client.crt \
--key=/path/to/client.key
# 查看快照状态
etcdctl snapshot status /backup/etcd-snapshot-20260101.db
5.2 节点扩缩容
进入etcd集群列表页面,在页面上方选择相关地域,在下方集群列表中找到需要操作的etcd集群。在需要进行节点扩容的集群右侧操作栏中,单击调整规格。扩容etcd实例也可以通过调用腾讯云API接口完成。
5.3 版本升级
云原生ETCD支持版本升级功能。版本上线前将经过完善的内部测试和大规模验证,通过混沌工程进行故障演练来保证新版本的稳定性。升级etcd实例可以通过控制台操作或调用API接口完成。
5.4 数据自动压缩
为防止集群性能下降或空间耗尽,可开启自动压缩功能实现对历史数据的定时清理。压缩是指删除etcd中旧版本的历史数据,释放存储空间。目前支持周期性压缩和根据revision压缩两种压缩模式。
6. 安全配置
6.1 HTTPS加密传输
安全的数据访问功能支持开启HTTPS双向认证及鉴权,数据访问更加安全。支持通过安全组来限制访问来源。启用HTTPS需要在集群创建时开启,集群创建后该功能项不支持修改。为保障集群数据的安全传输,建议开启HTTPS。
6.2 客户端证书认证
启用HTTPS的情况下,支持开启客户端证书认证。客户端证书认证要求客户端在连接时必须提供有效的证书,从而实现双向认证。
6.3 安全组访问控制
安全组具有防火墙的功能,用于设置节点的网络访问控制。安全组需要放通所选子网的2379、2380端口。配置安全组时应按照腾讯云推荐配置进行,避免因安全组配置不当导致master节点无法使用。
6.4 认证与授权
etcd通过用户-角色-权限的方式来控制访问,用户关联角色,角色拥有权限,从而用户也就拥有了相应的权限。etcd默认没有启用认证机制,只要能连接etcd服务就拥有所有的权限,这是非常危险的。另一种安全的访问方式是开启SSL,只有使用受信任的证书才能访问数据。
etcd v2以上的版本才支持权限认证,且仅支持Basic Auth。配置认证的基本步骤包括:添加root用户、创建root账号后root默认有root角色、开启auth认证、添加非root账号。
7. 最佳实践
7.1 集群规格选型
etcd是云原生架构中重要的基础组件,由CNCF孵化托管。在生产环境中,建议至少部署3个节点的etcd集群以实现高可用。在3个可用区场景下,单可用区故障不影响集群正常服务。节点挂掉之后可以快速自愈,最大程度降低不可用时间。
7.2 性能优化
etcd在稳定性、可靠性和可伸缩性表现极佳。在生产环境中,建议开启自动压缩功能避免历史数据无限增长。调整raft消息最大字节数和etcd最大容量等参数可以提升集群性能。在集群创建前应使用benchmark和FIO进行性能压测。
7.3 监控告警体系
完成集群部署、了解成员管理、构建好监控及告警体系并添加好定时备份策略后,这时终于可以放心给业务使用了。监控etcd成员节点的状态可以帮助了解集群中节点的健康状况,发现掉线或者异常节点。面对监控数据庞大、告警泛滥的问题,应基于高可用的监控数据,结合运营场景建立标准化的数据运营体系,大幅减少无效告警,提高告警准确性。
7.4 数据备份策略
在Kubernetes中使用etcd时,需要对etcd做备份,保证高可用。建议定期创建etcd快照并保存到安全的位置。腾讯云提供了基于云原生技术的容器服务,其中包含了etcd备份和恢复功能,可以为Kubernetes集群提供可靠的数据保护和恢复机制。
7.5 常见问题排查
在etcd集群中出现数据量异常时,可能是Key的数量或Lease的数量与预期不符。处理步骤包括进入etcd集群列表页面选择相关地域,在下方集群列表中找到需要操作的etcd集群。如果遇到etcd集群不可用或配置错误的情况,需要检查网络连接、防火墙配置、配置文件正确性等方面。DNS配置错误也可能导致etcd节点通信失败。
如果快照备份文件没有按照预期生成,可能是由于修改了etcd密码引起的。这种情况下可以通过提交工单的方式咨询并解决。
8. 总结
腾讯云云原生ETCD为用户提供了开箱即用的分布式键值存储服务,极大地降低了etcd的运维门槛。通过本文的介绍,读者可以系统地了解从集群创建、连接访问、监控告警到运维管理的完整流程。云原生ETCD的一键部署能力让用户在几分钟内即可启动一个可投入生产的etcd集群。完善的监控告警机制和自动备份恢复功能保障了集群的稳定运行。HTTPS双向认证和安全组访问控制确保了数据的安全性。
在实际生产环境中,建议用户充分利用云原生ETCD的托管优势,将精力集中在业务开发上而非基础组件运维。通过合理配置高可用部署、开启自动压缩、设置定期备份、构建完善的监控告警体系,可以确保ETCD集群长期稳定运行,为云原生应用提供可靠的基础设施支撑。
常见问题问答
问1:腾讯云云原生ETCD与开源etcd有什么区别?
答:腾讯云云原生ETCD是基于开源etcd的托管解决方案,完全兼容开源etcd的分布式存储能力。区别在于云原生ETCD提供了一键部署、自动监控告警、自动备份恢复、节点扩缩容等全托管运维能力,用户无需关心安装、部署、版本更新及故障处理。而自建etcd需要用户自己维护监控告警系统和备份恢复机制。
问2:如何连接腾讯云云原生ETCD集群?
答:连接云原生ETCD集群有三种主流方式:使用etcdctl命令行工具、使用编程语言客户端(如Python的etcd3库)、调用腾讯云API。如果集群开启了HTTPS,连接时需要提供CA证书、客户端证书和客户端私钥。HTTP方式则无需证书。
问3:云原生ETCD的监控指标有哪些重要维度?
答:云原生ETCD提供四个维度的监控指标:节点资源使用率(CPU、内存、网络、磁盘)、集群业务指标(key数量、写入次数、数据库大小、共识提议速率等)、实例级别指标(集群是否有Leader、Leader切换次数)、实例接口指标。所有指标均支持设置告警。
问4:如何保障云原生ETCD的数据安全?
答:保障ETCD数据安全可以从多个层面入手:开启HTTPS双向认证实现加密传输;通过安全组限制访问来源IP;开启客户端证书认证实现双向认证;配置基于用户-角色-权限的认证授权体系;定期创建快照备份。
问5:云原生ETCD集群创建后可以修改配置吗?
答:部分配置在集群创建后可以修改,如节点规格(扩缩容)、快照策略、集群属性等。但也有一些配置创建后不支持修改,如所在地域、是否启用HTTPS。因此在创建集群时应仔细规划这些不可修改的配置项。
问6:云原生ETCD如何实现高可用?
答:云原生ETCD通过多种机制保障高可用:支持将集群节点部署到不同可用区,在3个可用区场景下单可用区故障不影响服务;支持故障节点快速自愈;通过Raft一致性算法保证数据强一致性;只要有一半以上节点存活即可对外提供服务。建议生产环境至少部署3个节点。




