Previous change logs can be found at CHANGELOG-3.1.
The minimum recommended etcd versions to run in production are 3.1.11+, 3.2.26+, and 3.3.11+.
etcd --experimental-peer-skip-client-san-verification
to skip verification of peer client address.etcdctl endpoint health --write-out
support.
etcdctl endpoint health --write-out json
did not work.etcdctl snapshot status
to not modify snapshot file.
v3.3.10
v3.3.10
to save snapshotv3.2.24
v3.2.24
snapshot status
against the snapshot file saved from v3.3.10
serverv3.2.24
snapshot restore
fails with "expected sha256 [12..."
See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_debugging_mvcc_current_revision
Prometheus metric.etcd_debugging_mvcc_compact_revision
Prometheus metric.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
etcd --debug
flag to see per-request debug information.snapshot status
returns "snapshot file integrity check failed..."
error.See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_network_peer_round_trip_time_seconds
Prometheus metric to track leader heartbeats.
etcd_snap_db_fsync_duration_seconds_count
Prometheus metric.etcd_snap_db_save_total_duration_seconds_bucket
Prometheus metric.etcd_network_snapshot_send_success
Prometheus metric.etcd_network_snapshot_send_failures
Prometheus metric.etcd_network_snapshot_send_total_duration_seconds
Prometheus metric.etcd_network_snapshot_receive_success
Prometheus metric.etcd_network_snapshot_receive_failures
Prometheus metric.etcd_network_snapshot_receive_total_duration_seconds
Prometheus metric.etcd_server_id
Prometheus metric.etcd_server_health_success
Prometheus metric.etcd_server_health_failures
Prometheus metric.etcd_server_read_indexes_failed_total
Prometheus metric.clientv3/concurrency
package.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_server_go_version
Prometheus metric.etcd_server_heartbeat_send_failures_total
Prometheus metric.etcd_server_slow_apply_total
Prometheus metric.etcd_disk_backend_defrag_duration_seconds
Prometheus metric.etcd_mvcc_hash_duration_seconds
Prometheus metric.etcd_server_slow_read_indexes_total
Prometheus metric.etcd_server_quota_backend_bytes
Prometheus metric.
etcd_mvcc_db_total_size_in_bytes
and etcd_mvcc_db_total_size_in_use_in_bytes
.etcd_server_quota_backend_bytes 2.147483648e+09
means current quota size is 2 GB.etcd_mvcc_db_total_size_in_bytes 20480
means current physically allocated DB size is 20 KB.etcd_mvcc_db_total_size_in_use_in_bytes 16384
means future DB size if defragment operation is complete.etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes
is the number of bytes that can be saved on disk with defragment operation.etcd_mvcc_db_total_size_in_bytes
Prometheus metric.
etcd_debugging_mvcc_db_total_size_in_bytes
.etcd_mvcc_db_total_size_in_use_in_bytes
Prometheus metric.
etcd_mvcc_db_total_size_in_bytes
and etcd_server_quota_backend_bytes
.etcd_server_quota_backend_bytes 2.147483648e+09
means current quota size is 2 GB.etcd_mvcc_db_total_size_in_bytes 20480
means current physically allocated DB size is 20 KB.etcd_mvcc_db_total_size_in_use_in_bytes 16384
means future DB size if defragment operation is complete.etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes
is the number of bytes that can be saved on disk with defragment operation.grpc-proxy start --cert-file
, grpc-proxy start --key-file
and grpc-proxy start --trusted-ca-file
flags.grpc-proxy start --metrics-addr
flag for specifying a separate metrics listen address.<-chan *clientv3LeaseKeepAliveResponse
from clientv3.Lease.KeepAlive
was never consumed or channel is full, client was sending keepalive request every 500ms instead of expected rate of every "TTL / 3" duration.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
read-only range request "key:\"/a\" range_end:\"/b\" " with result "range_response_count:3 size:96" took too long (97.966µs) to execute
.See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_server_version
Prometheus metric.
etcd-version-monitor
.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
etcd --cipher-suites
flag.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
mvcc
server panic from restore operation.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
*.snap.db
snapshot files.
--max-snapshots
flag to purge old *.snap.db
files.*.snap.db
files to keep maximum --max-snapshots
number of files on disk.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_debugging_server_lease_expired_total
Prometheus metric.etcd_server_is_leader
Prometheus metric.(*tls.Config).GetCertificate
for TLS reload if and only if server's (*tls.Config).Certificates
field is not empty, or (*tls.ClientHelloInfo).ServerName
is not empty with a valid SNI from the client. Previously, etcd always populates (*tls.Config).Certificates
on the initial client TLS handshake, as non-empty. Thus, client was always expected to supply a matching SNI in order to pass the TLS verification and to trigger (*tls.Config).GetCertificate
to reload TLS assets.*tls.ClientHelloInfo
with an empty ServerName
field, thus failing to trigger the TLS reload on initial TLS handshake; this becomes a problem when expired certificates need to be replaced online.(*tls.Config).Certificates
is created empty on initial TLS client handshake, first to trigger (*tls.Config).GetCertificate
, and then to populate rest of the certificates on every new TLS connection, even when client SNI is empty (e.g. cert only includes IPs).etcd --initial-election-tick-advance
flag to configure initial election tick fast-forward.
etcd --initial-election-tick-advance=true
, then local member fast-forwards election ticks to speed up "initial" leader election trigger.--initial-election-tick-advance=false
.--initial-election-tick-advance
at the cost of slow initial bootstrap.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_network_peer_sent_failures_total
count.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
curl -L http://localhost:2379/v3/election/proclaim -X POST -d '{"value":""}'
, curl -L http://localhost:2379/v3/election/resign -X POST -d '{"value":""}'
.TTL
values for Lease
Grant
.
TTL
parameter to Grant
request is unit of second.TTL
values exceeding math.MaxInt64
expire in unexpected ways.rpctypes.ErrLeaseTTLTooLarge
to client, when the requested TTL
is larger than 9,000,000,000 seconds (which is >285 years).Lease
is meant for short-periodic keepalives or sessions, in the range of seconds or minutes. Not for hours or days!raft.Config.CheckQuorum
when starting with ForceNewCluster
.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
mvcc
"unsynced" watcher restore operation.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
GracefulStop
TLS-enabled server.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
google.golang.org/grpc
from v1.7.4
to v1.7.5
.github.com/grpc-ecosystem/grpc-gateway
from v1.3
to v1.3.0
.Revision
compactor in server-side.MaxCallSendMsgSize
and MaxCallRecvMsgSize
fields to clientv3.Config
.
MaxCallSendMsgSize
default value is 2 MiB, if not configured.MaxCallRecvMsgSize
default value is math.MaxInt32
, if not configured.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
google.golang.org/grpc
from v1.7.3
to v1.7.4
.See security doc for more details.
WriteStatus
call to prevent TLS-enabled etcd server crash.--listen-metrics-urls
flag in monitoring document (non-released in v3.2.x
, planned for v3.3.x
).See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
google.golang.org/grpc
from v1.2.1
to v1.7.3
.github.com/grpc-ecosystem/grpc-gateway
from v1.2.0
to v1.3
.See security doc for more details.
ServerName
with *.{ROOT_DOMAIN}
to support non-wildcard subject alternative names in the certs (see issue #8445 for more contexts).
etcd --discovery-srv=etcd.local
will only authenticate peers/clients when the provided certs have root domain etcd.local
(not *.etcd.local
) as an entry in Subject Alternative Name (SAN) field.boltdb/bolt
with coreos/bbolt
to address backend database size issue.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See security doc for more details.
golang.org/x/crypto/bcrypt
(see golang/crypto@6c586e1).ServerName
with *.{ROOT_DOMAIN}
, in order to support sub-domain wildcard matching (see issue #8445 for more contexts).
etcd --discovery-srv=etcd.local
will only authenticate peers/clients when the provided certs have root domain *.etcd.local
as an entry in Subject Alternative Name (SAN) field.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
KeysOnly
flag.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
concurrency/stm
Put with serializable snapshot.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
--listen-peer-urls
flag.--enable-pprof
flag to etcd configuration file format.See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_debugging_mvcc_keys_total
inconsistency.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
endpoint health
.See security doc for more details.
SAN
. For instance, if peer cert contains only DNS names (no IP addresses) in Subject Alternative Name (SAN) field, server first reverse-lookups the remote IP address to get a list of names mapping to that address (e.g. nslookup IPADDR
). Then accepts the connection if those names have a matching name with peer cert's DNS names (either by exact or wildcard match). If none is matched, server forward-lookups each DNS entry in peer cert (e.g. look up example.default.svc
when the entry is *.example.default.svc
), and accepts connection only when the host's resolved addresses have the matching IP address with the peer's remote IP address. For example, peer B's CSR (with cfssl
) SAN field is ["*.example.default.svc", "*.example.default.svc.cluster.local"]
when peer B's remote IP address is 10.138.0.2
. When peer B tries to join the cluster, peer A reverse-lookup the IP 10.138.0.2
to get the list of host names. And either exact or wildcard match the host names with peer B's cert DNS names in Subject Alternative Name (SAN) field. If none of reverse/forward lookups worked, it returns an error "tls: "10.138.0.2" does not match any of DNSNames ["*.example.default.svc","*.example.default.svc.cluster.local"]
. See issue#8268 for more detail.See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
/metrics
endpoint when --enable-v2=false
.PrevKv
flag.gcr.io/etcd-development/etcd
.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
docker pull quay.io/coreos/etcd:v3.2
to fetch latest v3.2 versionsSee code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See security doc for more details.
cfssl
) SAN field is ["invalid.domain", "10.138.0.2"]
when peer B's remote IP address is 10.138.0.2
and invalid.domain
is a invalid host. When peer B tries to join the cluster, peer A successfully authenticates B, since Subject Alternative Name (SAN) field has a valid matching IP address. See issue#8206 for more detail.net.Listener
rewrites IPv4 0.0.0.0 to IPv6 [::], breaking IPv6 disabled hosts.See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
See code changes and v3.2 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.2 upgrade guide.
--snapshot-count
default value from 10,000 to 100,000.
--snapshot-count
value for lower memory usage.--snapshot-count
value for better availabilities of slow followers (less frequent snapshots from leader).clientv3.Lease.TimeToLive
returns LeaseTimeToLiveResponse.TTL == -1
on lease not found.clientv3.NewFromConfigFile
is moved to clientv3/yaml.NewConfig
.embed.Etcd.Peers
field is now []*peerListener
.--listen-peer-urls
and --listen-client-urls
(3.1 only prints out warnings), since domain name is invalid for network interface binding.google.golang.org/grpc
from v1.0.4
to v1.2.1
.github.com/grpc-ecosystem/grpc-gateway
to v1.2.0
.See List of metrics for all metrics per release.
Note that any etcd_debugging_*
metrics are experimental and subject to change.
etcd_disk_backend_snapshot_duration_seconds
etcd_debugging_server_lease_expired_total
metrics.See security doc for more details.
SAN
. For instance, if peer cert contains any IP addresses in Subject Alternative Name (SAN) field, server authenticates a peer only when the remote IP address matches one of those IP addresses. This is to prevent unauthorized endpoints from joining the cluster. For example, peer B's CSR (with cfssl
) SAN field is ["*.example.default.svc", "*.example.default.svc.cluster.local", "10.138.0.27"]
when peer B's actual IP address is 10.138.0.2
, not 10.138.0.27
. When peer B tries to join the cluster, peer A will reject B with the error x509: certificate is valid for 10.138.0.27, not 10.138.0.2
, because B's remote IP address does not match the one in Subject Alternative Name (SAN) field.DNSNames
when checking SAN
. For instance, if peer cert contains only DNS names (no IP addresses) in Subject Alternative Name (SAN) field, server authenticates a peer only when forward-lookups (dig b.com
) on those DNS names have matching IP with the remote IP address. For example, peer B's CSR (with cfssl
) SAN field is ["b.com"]
when peer B's remote IP address is 10.138.0.2
. When peer B tries to join the cluster, peer A looks up the incoming host b.com
to get the list of IP addresses (e.g. dig b.com
). And rejects B if the list does not contain the IP 10.138.0.2
, with the error tls: 10.138.0.2 does not match any of DNSNames ["b.com"]
.etcdserver/api/v3client
etcd --enable-v2
flag to enable v2 API server.
etcd --enable-v2=true
by default.etcd --auth-token
flag.--auto-compaction-retention=10
, v3.1 compacts revision 1000, 2000, and 3000 for every 10-hour, while v3.2 compacts revision 1000, 1100, and 1200 for every 1-hour.ErrOldCluster
with server version checking.WithPrefix()
into WithFromKey()
for empty key.check perf
command.etcdctl --from-key
flag to role grant-permission command.lock
command takes an optional command to execute.nsswitch.conf
to Docker container image.