etcd 指标端口是什么
etcd 是 Kubernetes 的键值存储与集群状态底座:客户端读写走 2379,节点间 Raft 同步走 2380。为了让监控系统在不接触业务客户端口的前提下取到运行指标,较新的 kubeadm 会为 etcd 静态 Pod 追加 --listen-metrics-urls=http://127.0.0.1:2381,2381 由此成为控制面上独立的指标端口。它与 2379 是同一份数据的两个面:2379 能读写键值,2381 只吐指标。
基本信息
| 服务 | etcd metrics(--listen-metrics-urls) |
|---|---|
| 协议 | HTTP(默认明文,未走 TLS) |
| kubeadm 默认绑定 | 127.0.0.1:2381 |
| 相邻端口 | 2379 客户端 / 2380 peer / 2381 指标 |
| 权限范围 | 控制面节点本地 |
典型使用场景
- Prometheus 通过 ServiceMonitor 或静态配置抓取控制面 etcd 指标
- 巡检控制面健康:leader 变更次数、WAL fsync 延迟、DB 体积增长
- 排查 API Server 变慢:先看 etcd 的提交与磁盘延迟,再看上层组件
- 安全评估:确认 2381 是否被改绑到 0.0.0.0 并暴露到集群外
- 版本升级前后对比指标,确认 quorum 稳定与健康检查通过
确认指标端口与参数
确认指标端口与参数
ss -lntp | grep -E ':(2379|2380|2381)'
kubectl -n kube-system get pod etcd-$(hostname) -o yaml | grep -i -A2 metrics
curl -s http://127.0.0.1:2381/health # 健康检查端点
curl -s http://127.0.0.1:2381/metrics | grep -E 'has_leader|leader_changes'常用指标速查
| 指标 | 含义 | 异常信号 |
|---|---|---|
| etcd_server_has_leader | 节点是否认为已有 leader | 为 0 说明选举异常 |
| etcd_server_leader_changes_seen_total | leader 变更累计次数 | 持续增长说明选主抖动 |
| etcd_disk_wal_fsync_duration_seconds | WAL 落盘延迟直方图 | P99 抬高多为磁盘瓶颈 |
| etcd_disk_backend_commit_duration_seconds | 后端提交耗时 | 高延迟拖慢所有写入 |
| etcd_debugging_mvcc_db_total_size_in_bytes | 键值库体积 | 触顶需压缩与碎片整理 |
2381 与 2379 的权限差别很大:前者只读指标,后者能读写整个键值库(含集群密钥)。安全策略里应把两者分开,抓指标只放行指标端口。
指标端口默认是明文 HTTP;一旦改绑到节点外网地址,集群规模、租约、请求延迟等信息对任何可达主机都是公开的,且无认证。
日常巡检要点
- 先确认指标端口的监听地址再决定是否改绑,默认只绑 127.0.0.1 是最安全的姿态
- 抓取失败按三步定位:curl /health 是否返回、抓取配置里的命名空间与端口名是否匹配、抓取用的证书与令牌是否有效
- leader 频繁变更时先看节点间网络与磁盘延迟,再核对 2380 端口连通性
- 节点扩容或证书轮换后,重新核对 2379/2380/2381 的绑定地址与对外暴露面