42 KiB
v3.3.0
See code changes and v3.3 upgrade guide for any breaking changes.
Improved
- Use
coreos/bboltto replaceboltdb/bolt. - Reduce memory allocation on Range operations.
- Rate limit and randomize lease revoke on restart or leader elections.
- Prevent spikes in Raft proposal rate.
- Support
clientv3balancer failover under network faults/partitions. - Better warning on mismatched
--initial-clusterflag.
Changed(Breaking Changes)
- Require Go 1.9+.
- Compile with Go 1.9.2.
- Deprecate
golang.org/x/net/context.
- Require
google.golang.org/grpcv1.7.4orv1.7.5+:- Deprecate
metadata.Incoming/OutgoingContext. - Deprecate
grpclog.Logger, upgrade togrpclog.LoggerV2. - Deprecate
grpc.ErrClientConnTimeouterrors inclientv3. - Use
MaxRecvMsgSizeandMaxSendMsgSizeto limit message size, in etcd server.
- Deprecate
- Upgrade
github.com/grpc-ecosystem/grpc-gatewayv1.2.2tov1.3.0. - Translate gRPC status error in v3 client
SnapshotAPI. - Upgrade
github.com/ugorji/go/codecfor v2client.- Regenerated v2
clientsource code with latestugorji/go/codec.
- Regenerated v2
- Fix
/healthendpoint JSON output. - v3
etcdctllease timetolive LEASE_IDon expired lease now printslease LEASE_ID already expired.- <=3.2 prints
lease LEASE_ID granted with TTL(0s), remaining(-1s).
- <=3.2 prints
Added(etcd)
- Add
--experimental-enable-v2v3flag to emulate v2 API with v3. - Add
--experimental-corrupt-check-timeflag to raise corrupt alarm monitoring. - Add
--experimental-initial-corrupt-checkflag to check database hash before serving client/peer traffic. - Add
--max-txn-opsflag to configure maximum number operations in transaction. - Add
--max-request-bytesflag to configure maximum client request size.- If not configured, it defaults to 1.5 MiB.
- Add
--client-crl-file,--peer-crl-fileflags for Certificate revocation list. - Add
--peer-require-cnflag to support CN-based auth for inter-peer connection. - Add
--listen-metrics-urlsflag for additional/metricsendpoints.- Support additional (non) TLS
/metricsendpoints for a TLS-enabled cluster. - e.g.
--listen-metrics-urls=https://localhost:2378,http://localhost:9379to serve/metricsin secure port 2378 and insecure port 9379. - Useful for bypassing critical APIs when monitoring etcd.
- Support additional (non) TLS
- Add
--auto-compaction-modeflag to support revision-based compaction. - Change
--auto-compaction-retentionflag to accept string values with finer granularity. - Add
--grpc-keepalive-min-time,--grpc-keepalive-interval,--grpc-keepalive-timeoutflags to configure server-side keepalive policies. - Serve
/healthendpoint as unhealthy when alarm is raised. - Provide error information in
/health.- e.g.
{"health":false,"errors":["NOSPACE"]}.
- e.g.
- Move logging setup to embed package
- Disable gRPC server log by default.
- Use monotonic time in Go 1.9 for
leasepackage. - Warn on empty hosts in advertise URLs.
- Address advertise client URLs accepts empty hosts.
- etcd
v3.4will exit on this error.- e.g.
--advertise-client-urls=http://:2379.
- e.g.
- Warn on shadowed environment variables.
- Address error on shadowed environment variables.
- etcd
v3.4will exit on this error.
Added(API)
- Support ranges in transaction comparisons for disconnected linearized reads.
- Add nested transactions to extend proxy use cases.
- Add lease comparison target in transaction.
- Add lease list.
- Add hash by revision for better corruption checking against boltdb.
Added(etcd/clientv3)
- Add health balancer to fix watch API hangs, improve endpoint switch under network faults.
- Refactor balancer and add client-side keepalive pings to handle network partitions.
- Add
MaxCallSendMsgSizeandMaxCallRecvMsgSizefields toclientv3.Config.- Fix exceeded response size limit error in client-side.
- Address kubernetes#51099.
MaxCallSendMsgSizedefault value is 2 MiB, if not configured.MaxCallRecvMsgSizedefault value ismath.MaxInt32, if not configured.
- Accept
Compare_LEASEinclientv3.Compare. - Add
LeaseValuehelper toCmpLeaseIDvalues inTxn. - Add
MoveLeadertoMaintenance. - Add
HashKVtoMaintenance. - Add
LeasestoLease. - Add
clientv3/orderingfor enforce ordering in serialized requests.
Added(v2 etcdctl)
- Add
backup --with-v3flag.
Added(v3 etcdctl)
- Add
--discovery-srvflag. - Add
--keepalive-time,--keepalive-timeoutflags. - Add
lease listcommand. - Add
lease keep-alive --onceflag. - Make
lease timetolive LEASE_IDon expired lease printlease LEASE_ID already expired.- <=3.2 prints
lease LEASE_ID granted with TTL(0s), remaining(-1s).
- <=3.2 prints
- Add
defrag --data-dirflag. - Add
move-leadercommand. - Add
endpoint hashkvcommand. - Add
endpoint --clusterflag, equivalent to v2etcdctl cluster-health. - Make
endpoint healthcommand terminate with non-zero exit code on unhealthy status. - Add
lock --ttlflag. - Support
watch [key] [range_end] -- [exec-command…], equivalent to v2etcdctl exec-watch. - Enable
clientv3.WithRequireLeader(context.Context)forwatchcommand. - Print
"del"instead of"delete"intxninteractive mode. - Print
ETCD_INITIAL_ADVERTISE_PEER_URLSinmember add.
Added(metrics)
- Add
etcd --listen-metrics-urlsflag for additional/metricsendpoints.- Useful for bypassing critical APIs when monitoring etcd.
- Add
etcd_server_versionPrometheus metric.- To replace Kubernetes
etcd-version-monitor.
- To replace Kubernetes
- Add
etcd_debugging_mvcc_db_compaction_keys_totalPrometheus metric. - Add
etcd_debugging_server_lease_expired_totalPrometheus metric.- To improve lease revoke monitoring.
- Document Prometheus 2.0 rules.
- Initialize gRPC server metrics with zero values.
Added(grpc-proxy)
- Add
grpc-proxy start --experimental-leasing-prefixflag:- For disconnected linearized reads.
- Based on V system leasing.
- See "Disconnected consistent reads with etcd" blog post.
- Add
grpc-proxy start --experimental-serializable-orderingflag.- To ensure serializable reads have monotonically increasing store revisions across endpoints.
- Add
grpc-proxy start --metrics-addrflag for an additional/metricsendpoint.- Set
--metrics-addr=http://[HOST]:9379to serve/metricsin insecure port 9379.
- Set
- Serve
/healthendpoint in grpc-proxy. - Add
grpc-proxy start --debugflag.
Added(gRPC gateway)
- Replace gRPC gateway endpoint with
/v3beta.- To deprecate
/v3alphainv3.4.
- To deprecate
- Support "authorization" token.
- Support websocket for bi-directional streams.
- Upgrade gRPC gateway to v1.3.0.
Added(etcd/raft)
- Add non-voting member.
- To implement Raft thesis 4.2.1 Catching up new servers.
Learnernode does not vote or promote itself.
Added/Fixed(Security/Auth)
- Add CRL based connection rejection to manage revoked certs.
- Document TLS authentication changes:
- Server accepts connections if IP matches, without checking DNS entries. For instance, if peer cert contains IP addresses and DNS names in Subject Alternative Name (SAN) field, and the remote IP address matches one of those IP addresses, server just accepts connection without further checking the DNS names.
- Server supports reverse-lookup on wildcard DNS
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 upexample.default.svcwhen 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.
- Add
etcd --peer-require-cnflag.- To support CommonName(CN) based auth for inter peer connection.
- Swap priority of cert CommonName(CN) and username + password.
- Protect lease revoke with auth.
- Provide user's role on auth permission error.
- Fix auth store panic with disabled token.
- Update
golang.org/x/crypto/bcrypt(see golang/crypto@6c586e1).
Fixed(v2)
- Fail-over v2 client to next endpoint on oneshot failure.
- Put back
/v2/machinesendpoint for python-etcd wrapper.
Fixed(v3)
- Fix range/put/delete operation metrics with transaction:
etcd_debugging_mvcc_range_totaletcd_debugging_mvcc_put_totaletcd_debugging_mvcc_delete_totaletcd_debugging_mvcc_txn_total
- Fix
etcd_debugging_mvcc_keys_totalon restore. - Fix
etcd_debugging_mvcc_db_total_size_in_byteson restore.- Also change to
prometheus.NewGaugeFunc.
- Also change to
- Fix backend database in-memory index corruption issue on restore (only 3.2.0 is affected).
- Fix watch restore from snapshot.
- Fix "put at-most-once" in
clientv3. - Handle empty key permission in
etcdctl. - Fix server crash on invalid transaction request from gRPC gateway.
- Fix
clientv3.WatchResponse.Canceledon compacted watch request. - Handle WAL renaming failure on Windows.
- Make peer dial timeout longer.
- See coreos/etcd-operator#1300 for more detail.
- Make server wait up to request time-out with pending RPCs.
- Fix
grpc.Serverpanic onGracefulStopwith TLS-enabled server. - Fix "multiple peer URLs cannot start" issue.
- Fix server-side auth so concurrent auth operations do not return old revision error.
- Fix
concurrency/stmPutwith serializable snapshot.- Use store revision from first fetch to resolve write conflicts instead of modified revision.
- Fix
grpc-proxySnapshot API error handling. - Fix
grpc-proxyKV APIPrevKvflag handling. - Fix
grpc-proxyKV APIKeysOnlyflag handling. - Upgrade
coreos/go-systemdtov15(see https://github.com/coreos/go-systemd/releases/tag/v15).
Other
- Support previous two minor versions (see our new release policy).
v3.3.xis the last release cycle that supportsACI:- AppC was officially suspended, as of late 2016.
acbuildis not maintained anymore.*.acifiles won't be available from etcdv3.4release.
- Add container registry
gcr.io/etcd-development/etcd.- quay.io/coreos/etcd is still supported as secondary.
v3.2.12 (2017-12-20)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Fix error message of
Revisioncompactor in server-side.
Added(etcd/clientv3,etcdctl/v3)
- Add
MaxCallSendMsgSizeandMaxCallRecvMsgSizefields toclientv3.Config.- Fix exceeded response size limit error in client-side.
- Address kubernetes#51099.
MaxCallSendMsgSizedefault value is 2 MiB, if not configured.MaxCallRecvMsgSizedefault value ismath.MaxInt32, if not configured.
Other
- Pin grpc v1.7.5, grpc-gateway v1.3.0.
- No code change, just to be explicit about recommended versions.
v3.2.11 (2017-12-05)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Fix racey grpc-go's server handler transport
WriteStatuscall to prevent TLS-enabled etcd server crash:- Upgrade
google.golang.org/grpcv1.7.3tov1.7.4. - Add gRPC RPC failure warnings to help debug such issues in the future.
- Upgrade
- Remove
--listen-metrics-urlsflag in monitoring document (non-released inv3.2.x, planned forv3.3.x).
Added
- Provide more cert details on TLS handshake failures.
v3.1.11 (2017-11-28)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
v3.2.10 (2017-11-16)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Replace backend key-value database
boltdb/boltwithcoreos/bboltto address backend database size issue. - Fix
clientv3balancer to handle network partitions:- Upgrade
google.golang.org/grpcv1.2.1tov1.7.3. - Upgrade
github.com/grpc-ecosystem/grpc-gatewayv1.2tov1.3.
- Upgrade
- Revert discovery SRV auth
ServerNamewith*.{ROOT_DOMAIN}to support non-wildcard subject alternative names in the certs (see issue #8445 for more contexts).- For instance,
etcd --discovery-srv=etcd.localwill only authenticate peers/clients when the provided certs have root domainetcd.local(not*.etcd.local) as an entry in Subject Alternative Name (SAN) field.
- For instance,
v3.2.9 (2017-10-06)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed(Security)
- Compile with Go 1.8.4.
- Update
golang.org/x/crypto/bcrypt(see golang/crypto@6c586e1). - Fix discovery SRV bootstrapping to authenticate
ServerNamewith*.{ROOT_DOMAIN}, in order to support sub-domain wildcard matching (see issue #8445 for more contexts).- For instance,
etcd --discovery-srv=etcd.localwill only authenticate peers/clients when the provided certs have root domain*.etcd.localas an entry in Subject Alternative Name (SAN) field.
- For instance,
v3.2.8 (2017-09-29)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Fix v2 client failover to next endpoint on mutable operation.
- Fix grpc-proxy to respect
KeysOnlyflag.
v3.2.7 (2017-09-01)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Fix server-side auth so concurrent auth operations do not return old revision error.
- Fix concurrency/stm Put with serializable snapshot
- Use store revision from first fetch to resolve write conflicts instead of modified revision.
v3.2.6 (2017-08-21)
See code changes.
Fixed
- Fix watch restore from snapshot.
- Fix
etcd_debugging_mvcc_keys_totalinconsistency. - Fix multiple URLs for
--listen-peer-urlsflag. - Add
--enable-pprofflag to etcd configuration file format.
v3.2.5 (2017-08-04)
See code changes and v3.2 upgrade guide for any breaking changes.
Changed
- Use reverse lookup to match wildcard DNS SAN.
- Return non-zero exit code on unhealthy
endpoint health.
Fixed
- Fix unreachable /metrics endpoint when
--enable-v2=false. - Fix grpc-proxy to respect
PrevKvflag.
Added
- Add container registry
gcr.io/etcd-development/etcd.
v3.2.4 (2017-07-19)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Do not block on active client stream when stopping server
- Fix gRPC proxy Snapshot RPC error handling
v3.2.3 (2017-07-14)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Let clients establish unlimited streams
Added
- Tag docker images with minor versions
- e.g.
docker pull quay.io/coreos/etcd:v3.2to fetch latest v3.2 versions
- e.g.
v3.1.10 (2017-07-14)
See code changes and v3.1 upgrade guide for any breaking changes.
Changed
- Compile with Go 1.8.3 to fix panic on
net/http.CloseNotify
Added
- Tag docker images with minor versions.
- e.g.
docker pull quay.io/coreos/etcd:v3.1to fetch latest v3.1 versions.
- e.g.
v3.2.2 (2017-07-07)
See code changes and v3.2 upgrade guide for any breaking changes.
Improved
- Rate-limit lease revoke on expiration.
- Extend leases on promote to avoid queueing effect on lease expiration.
Fixed
- Use user-provided listen address to connect to gRPC gateway:
net.Listenerrewrites IPv4 0.0.0.0 to IPv6 [::], breaking IPv6 disabled hosts.- Only v3.2.0, v3.2.1 are affected.
- Accept connection with matched IP SAN but no DNS match.
- Don't check DNS entries in certs if there's a matching IP.
- Fix 'tools/benchmark' watch command.
v3.2.1 (2017-06-23)
See code changes and v3.2 upgrade guide for any breaking changes.
Fixed
- Fix backend database in-memory index corruption issue on restore (only 3.2.0 is affected).
- Fix gRPC gateway Txn marshaling issue.
- Fix backend database size debugging metrics.
v3.2.0 (2017-06-09)
See code changes and v3.2 upgrade guide for any breaking changes.
Improved
- Improve backend read concurrency.
Added
- Embedded etcd
Etcd.Peersfield is now[]*peerListener.
- RPCs
- Add Election, Lock service.
- Native client etcdserver/api/v3client
- client "embedded" in the server.
- gRPC proxy
- Proxy endpoint discovery.
- Namespaces.
- Coalesce lease requests.
- v3 client
- STM prefetching.
- Add namespace feature.
- Add
ErrOldClusterwith server version checking. - Translate
WithPrefix()intoWithFromKey()for empty key.
- v3 etcdctl
- Add
check perfcommand. - Add
--from-keyflag to role grant-permission command. lockcommand takes an optional command to execute.
- Add
- etcd flags
- Add
--enable-v2flag to configure v2 backend (enabled by default). - Add
--auth-tokenflag.
- Add
etcd gateway- Support DNS SRV priority.
- Auth
- Support Watch API.
- JWT tokens.
- Logging, monitoring
- Server warns large snapshot operations.
- Add
etcd_debugging_server_lease_expired_totalmetrics.
- Security
- Deny incoming peer certs with wrong IP SAN.
- Resolve TLS
DNSNameswhen SAN checking. - Reload TLS certificates on every client connection.
- Release
- Annotate acbuild with supports-systemd-notify.
- Add
nsswitch.confto Docker container image. - Add ppc64le, arm64(experimental) builds.
- Compile with
Go 1.8.3.
Changed
- v3 client
LeaseTimeToLivereturns TTL=-1 resp on lease not found.clientv3.NewFromConfigFileis moved toclientv3/yaml.NewConfig.- concurrency package's elections updated to match RPC interfaces.
- let client dial endpoints not in the balancer.
- Dependencies
- Update
google.golang.org/grpctov1.2.1. - Update
github.com/grpc-ecosystem/grpc-gatewaytov1.2.0.
- Update
Fixed
- Allow v2 snapshot over 512MB.
v3.1.9 (2017-06-09)
See code changes and v3.1 upgrade guide for any breaking changes.
Fixed
- Allow v2 snapshot over 512MB.
v3.1.8 (2017-05-19)
See code changes and v3.1 upgrade guide for any breaking changes.
v3.1.7 (2017-04-28)
See code changes and v3.1 upgrade guide for any breaking changes.
v3.1.6 (2017-04-19)
See code changes and v3.1 upgrade guide for any breaking changes.
Changed
- Remove auth check in Status API.
Fixed
- Fill in Auth API response header.
v3.1.5 (2017-03-27)
See code changes and v3.1 upgrade guide for any breaking changes.
Added
- Add
/etc/nsswitch.conffile to alpine-based Docker image.
Fixed
- Fix raft memory leak issue.
- Fix Windows file path issues.
v3.1.4 (2017-03-22)
See code changes and v3.1 upgrade guide for any breaking changes.
v3.1.3 (2017-03-10)
See code changes and v3.1 upgrade guide for any breaking changes.
Changed
- Use machine default host when advertise URLs are default values(
localhost:2379,2380) AND if listen URL is0.0.0.0.
Fixed
- Fix
etcd gatewayschema handling in DNS discovery. - Fix sd_notify behaviors in
gateway,grpc-proxy.
v3.1.2 (2017-02-24)
See code changes and v3.1 upgrade guide for any breaking changes.
Changed
- Use IPv4 default host, by default (when IPv4 and IPv6 are available).
Fixed
- Fix
etcd gatewaywith multiple endpoints.
v3.1.1 (2017-02-17)
See code changes and v3.1 upgrade guide for any breaking changes.
Changed
- Compile with
Go 1.7.5.
v2.3.8 (2017-02-17)
See code changes.
Changed
- Compile with
Go 1.7.5.
v3.1.0 (2017-01-20)
See code changes and v3.1 upgrade guide for any breaking changes.
Improved
- Faster linearizable reads (implements Raft read-index).
- v3 authentication API is now stable.
Added
- Automatic leadership transfer when leader steps down.
- etcd flags
--strict-reconfig-checkflag is set by default.- Add
--log-outputflag. - Add
--metricsflag.
- v3 client
- Add
SetEndpointsmethod; update endpoints at runtime. - Add
Syncmethod; auto-update endpoints at runtime. - Add
Lease TimeToLiveAPI; fetch lease information. - replace Config.Logger field with global logger.
- Get API responses are sorted in ascending order by default.
- Add
- v3 etcdctl
- Add
lease timetolivecommand. - Add
--print-value-onlyflag to get command. - Add
--dest-prefixflag to make-mirror command. getcommand responses are sorted in ascending order by default.
- Add
recipesnow conform to sessions defined inclientv3/concurrency.- ACI has symlinks to
/usr/local/bin/etcd*. - Experimental gRPC proxy feature.
Changed
- Deprecated following gRPC metrics in favor of go-grpc-prometheus:
etcd_grpc_requests_totaletcd_grpc_requests_failed_totaletcd_grpc_active_streamsetcd_grpc_unary_requests_duration_seconds
- etcd uses default route IP if advertise URL is not given.
- Cluster rejects removing members if quorum will be lost.
- SRV records (e.g., infra1.example.com) must match the discovery domain (i.e., example.com) if no custom certificate authority is given.
TLSConfig.ServerNameis ignored with user-provided certificates for backwards compatibility; to be deprecated.- For example,
etcd --discovery-srv=example.comwill only authenticate peers/clients when the provided certs have root domainexample.comas an entry in Subject Alternative Name (SAN) field.
- Discovery now has upper limit for waiting on retries.
- Warn on binding listeners through domain names; to be deprecated.
v3.0.16 (2016-11-13)
See code changes and v3.0 upgrade guide for any breaking changes.
v3.0.15 (2016-11-11)
See code changes and v3.0 upgrade guide for any breaking changes.
Fixed
- Fix cancel watch request with wrong range end.
v3.0.14 (2016-11-04)
See code changes and v3.0 upgrade guide for any breaking changes.
Added
- v3
etcdctl migratecommand now supports--no-ttlflag to discard keys on transform.
v3.0.13 (2016-10-24)
See code changes and v3.0 upgrade guide for any breaking changes.
v3.0.12 (2016-10-07)
See code changes and v3.0 upgrade guide for any breaking changes.
v3.0.11 (2016-10-07)
See code changes and v3.0 upgrade guide for any breaking changes.
Added
- Server returns previous key-value (optional)
clientv3.WithPrevKVoption- v3 etcdctl
put,watch,del --prev-kvflag
v3.0.10 (2016-09-23)
See code changes and v3.0 upgrade guide for any breaking changes.
v3.0.9 (2016-09-15)
See code changes and v3.0 upgrade guide for any breaking changes.
Added
- Warn on domain names on listen URLs (v3.2 will reject domain names).
v3.0.8 (2016-09-09)
See code changes and v3.0 upgrade guide for any breaking changes.
Changed
- Allow only IP addresses in listen URLs (domain names are rejected).
v3.0.7 (2016-08-31)
See code changes and v3.0 upgrade guide for any breaking changes.
Changed
- SRV records only allow A records (RFC 2052).
v3.0.6 (2016-08-19)
See code changes and v3.0 upgrade guide for any breaking changes.
v3.0.5 (2016-08-19)
See code changes and v3.0 upgrade guide for any breaking changes.
Changed
- SRV records (e.g., infra1.example.com) must match the discovery domain (i.e., example.com) if no custom certificate authority is given.
v3.0.4 (2016-07-27)
See code changes and v3.0 upgrade guide for any breaking changes.
Changed
- v2 auth can now use common name from TLS certificate when
--client-cert-authis enabled.
Added
- v2
etcdctl lscommand now supports--output=json. - Add /var/lib/etcd directory to etcd official Docker image.
v3.0.3 (2016-07-15)
See code changes and v3.0 upgrade guide for any breaking changes.
Changed
- Revert Dockerfile to use
CMD, instead ofENTRYPOINT, to supportetcdctlrun.- Docker commands for v3.0.2 won't work without specifying executable binary paths.
- v3 etcdctl default endpoints are now
127.0.0.1:2379.
v3.0.2 (2016-07-08)
See code changes and v3.0 upgrade guide for any breaking changes.
Changed
- Dockerfile uses
ENTRYPOINT, instead ofCMD, to run etcd without binary path specified.
v3.0.1 (2016-07-01)
See code changes and v3.0 upgrade guide for any breaking changes.
v3.0.0 (2016-06-30)
See code changes and v3.0 upgrade guide for any breaking changes.