Distributed reliable key-value store for the most critical data of a distributed system

Overview

etcd

Go Report Card Coverage Tests asset-transparency codeql-analysis self-hosted-linux-arm64-graviton2-tests Docs Godoc Releases LICENSE

Note: The main branch may be in an unstable or even broken state during development. For stable versions, see releases.

etcd Logo

etcd is a distributed reliable key-value store for the most critical data of a distributed system, with a focus on being:

  • Simple: well-defined, user-facing API (gRPC)
  • Secure: automatic TLS with optional client cert authentication
  • Fast: benchmarked 10,000 writes/sec
  • Reliable: properly distributed using Raft

etcd is written in Go and uses the Raft consensus algorithm to manage a highly-available replicated log.

etcd is used in production by many companies, and the development team stands behind it in critical deployment scenarios, where etcd is frequently teamed with applications such as Kubernetes, locksmith, vulcand, Doorman, and many others. Reliability is further ensured by rigorous testing.

See etcdctl for a simple command line client.

Community meetings

etcd contributors and maintainers have monthly (every four weeks) meetings at 11:00 AM (USA Pacific) on Thursday.

An initial agenda will be posted to the shared Google docs a day before each meeting, and everyone is welcome to suggest additional topics or other agendas.

Time:

Join Hangouts Meet: meet.google.com/umg-nrxn-qvs

Join by phone: +1 405-792-0633‬ PIN: ‪299 906‬#

Maintainers

MAINTAINERS strive to shape an inclusive open source project culture where users are heard and contributors feel respected and empowered. MAINTAINERS maintain productive relationships across different companies and disciplines. Read more about MAINTAINERS role and responsibilities.

Getting started

Getting etcd

The easiest way to get etcd is to use one of the pre-built release binaries which are available for OSX, Linux, Windows, and Docker on the release page.

For more installation guides, please check out play.etcd.io and operating etcd.

For those wanting to try the very latest version, build the latest version of etcd from the main branch. This first needs Go installed (version 1.16+ is required). All development occurs on main, including new features and bug fixes. Bug fixes are first targeted at main and subsequently ported to release branches, as described in the branch management guide.

Running etcd

First start a single-member cluster of etcd.

If etcd is installed using the pre-built release binaries, run it from the installation location as below:

/tmp/etcd-download-test/etcd

The etcd command can be simply run as such if it is moved to the system path as below:

mv /tmp/etcd-download-test/etcd /usr/local/bin/
etcd

If etcd is built from the main branch, run it as below:

./bin/etcd

This will bring up etcd listening on port 2379 for client communication and on port 2380 for server-to-server communication.

Next, let's set a single key, and then retrieve it:

etcdctl put mykey "this is awesome"
etcdctl get mykey

etcd is now running and serving client requests. For more, please check out:

etcd TCP ports

The official etcd ports are 2379 for client requests, and 2380 for peer communication.

Running a local etcd cluster

First install goreman, which manages Procfile-based applications.

Our Procfile script will set up a local example cluster. Start it with:

goreman start

This will bring up 3 etcd members infra1, infra2 and infra3 and optionally etcd grpc-proxy, which runs locally and composes a cluster.

Every cluster member and proxy accepts key value reads and key value writes.

Follow the steps in Procfile.learner to add a learner node to the cluster. Start the learner node with:

goreman -f ./Procfile.learner start

Install etcd client v3

go get go.etcd.io/etcd/client/v3

Next steps

Now it's time to dig into the full etcd API and other guides.

Contact

Contributing

See CONTRIBUTING for details on submitting patches and the contribution workflow.

Reporting bugs

See reporting bugs for details about reporting any issues.

Reporting a security vulnerability

See security disclosure and release process for details on how to report a security vulnerability and how the etcd team manages it.

Issue and PR management

See issue triage guidelines for details on how issues are managed.

See PR management for guidelines on how pull requests are managed.

etcd Emeritus Maintainers

These emeritus maintainers dedicated a part of their career to etcd and reviewed code, triaged bugs, and pushed the project forward over a substantial period of time. Their contribution is greatly appreciated.

  • Fanmin Shi
  • Anthony Romano

License

etcd is under the Apache 2.0 license. See the LICENSE file for details.

Comments
  • Random performance issue on etcd 3.4

    Random performance issue on etcd 3.4

    Hello,

    We are running a 5 node etcd cluster:

    $ etcdctl endpoint status 
    etcd01, 507905ef22a349ce, 3.4.7, 3.1 GB, true, false, 785, 17694912855, 17694912855, 
    etcd02, 96622104eaa8652d, 3.4.7, 3.1 GB, false, false, 785, 17694912881, 17694912880, 
    ectd03, e91fce12ee84c080, 3.4.7, 3.1 GB, false, false, 785, 17694912903, 17694912903, 
    etcd04, 400fc14411f50272, 3.4.7, 3.1 GB, false, false, 785, 17694912989, 17694912985, 
    etcd05, 87c46f0b178dc777, 3.4.7, 3.1 GB, false, false, 785, 17694913043, 17694913028, 
    

    And we're having some weird performance issue eg:

    # etcdctl endpoint health
    etcd01 is healthy: successfully committed proposal: took = 12.462058ms
    etcd03 is healthy: successfully committed proposal: took = 18.826686ms
    etcd02 is healthy: successfully committed proposal: took = 19.418745ms
    etcd04 is healthy: successfully committed proposal: took = 24.314474ms
    etcd05 is healthy: successfully committed proposal: took = 244.761598ms
    
    # etcdctl endpoint health
    etcd01 is healthy: successfully committed proposal: took = 13.505405ms
    etcd03 is healthy: successfully committed proposal: took = 21.905048ms
    etcd04 is healthy: successfully committed proposal: took = 22.569332ms
    etcd02 is healthy: successfully committed proposal: took = 23.10597ms
    etcd05 is healthy: successfully committed proposal: took = 24.182998ms
    
    # etcdctl endpoint health
    etcd05is healthy: successfully committed proposal: took = 24.854541ms
    etcd01 is healthy: successfully committed proposal: took = 86.045049ms
    etcd03 is healthy: successfully committed proposal: took = 171.771975ms
    etcd04 is healthy: successfully committed proposal: took = 576.218846ms
    etcd02 is healthy: successfully committed proposal: took = 1.06666032s
    

    Not sure how to debug it, it looks pretty random. Feel free to ask for more info!

    stale 
    opened by Sh4d1 76
  • Data inconsistency in etcd version 3.3.11

    Data inconsistency in etcd version 3.3.11

    etcdctl get command returns values sometimes and sometimes it does not return a value even if key value is present in etcd. You can see following command output executed immediately one by one.

    bash-4.4$ etcdctl put /test thisistestvalue OK bash-4.4$ etcdctl get /test bash-4.4$ bash-4.4$ etcdctl get /test bash-4.4$ etcdctl get /test /test thisistestvalue bash-4.4$ etcdctl get /test /test thisistestvalue

    From below command, we can see that the inconsistence happens. We can see each time we query using etcdctl get and create_revision is different sometimes giving different values.

    bash-4.4$ ETCDCTL_API=3 etcdctl get /test --write-out json --consistency="s" {"header":{"cluster_id":10661059405016682411,"member_id":7511149175418186860,"revision":36793,"raft_term":16}} bash-4.4$ ETCDCTL_API=3 etcdctl get /test --write-out json --consistency="s"

    {"header":{"cluster_id":10661059405016682411,"member_id":14491470182485552592,"revision":10495,"raft_term":16} ,"kvs":[{"key":"L3Rlc3Q=","create_revision":6830,"mod_revision":6830,"version":1,"value":"dGVzdHZhbHVl"}],"count":1} bash-4.4$ ETCDCTL_API=3 etcdctl get /test --write-out json --consistency="s" {"header":{"cluster_id":10661059405016682411,"member_id":12240595110633392601,"revision":36802,"raft_term":16}} bash-4.4$

    bash-4.4$ ETCDCTL_API=3 etcdctl get /test1 --prefix=true --write-out json

    {"header":{"cluster_id":10661059405016682411,"member_id":12240595110633392601,"revision":36818,"raft_term":16} ,"kvs":[{"key":"L2VyaWMtY2Nlcy1leHRlbnNpb24tbWFuYWdlci90ZXN0","create_revision":33064,"mod_revision":33064,"version":1,"value":"dmFsdWV0ZXN0"}],"count":1} bash-4.4$ bash-4.4$ ETCDCTL_API=3 etcdctl get /test1 --prefix=true --write-out json

    {"header":{"cluster_id":10661059405016682411,"member_id":14491470182485552592,"revision":10511,"raft_term":16} ,"kvs":[{"key":"L2VyaWMtY2Nlcy1leHRlbnNpb24tbWFuYWdlci90ZXN0","create_revision":3641,"mod_revision":3641,"version":1,"value":"bXl0ZXN0dmFsdWU="}],"count":1} bash-4.4$ ETCDCTL_API=3 etcdctl get /test1 --prefix=true --write-out json

    {"header":{"cluster_id":10661059405016682411,"member_id":7511149175418186860,"revision":36819,"raft_term":16} ,"kvs":[{"key":"L2VyaWMtY2Nlcy1leHRlbnNpb24tbWFuYWdlci90ZXN0","create_revision":33064,"mod_revision":33064,"version":1,"value":"dmFsdWV0ZXN0"}],"count":1}

    Check the operation test as below: After performing Delete operation also we are able to get value for the deleted key.

    bash-4.4$ etcdctl put /temp/test mytestvalue OK bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue bash-4.4$ bash-4.4$ etcdctl del /temp/test 1 bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue bash-4.4$ etcdctl del /temp/test 0 bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue bash-4.4$ etcdctl del /temp/test 0 bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test bash-4.4$ etcdctl get /temp/test /temp/test mytestvalue

    These kind of data inconsistency is seen in etcd . ETCD guarantees Data consistency. Could you please help understanding the issue here.? whats happening exactly?

    opened by rahulbapumore 73
  • 3.5 release next steps: Code freeze Monday 5/17

    3.5 release next steps: Code freeze Monday 5/17

    etcd 3.5 has seen a tremendous amount of new features bug fixes and performance and stability improvements. At this time I would like to thank everyone for the hard work and dedication. As per the community meeting on May 6th we have outlined Monday, May 17th as code freeze for the 3.5 release. Below are the proposed series of events for input.

    Steps:

    • [x] cut release-3.5 branch from master (now main). All future merges to main will be 3.6 moving forward (Monday AM 5/17).
    • [x] cut new v3.5.0-beta.3
    • [x] cut new modularized release v3.5.0-beta.3 (Monday AM 5/17).
    • [x] begin correctness and performance/stress testing (ideas, ownership?)

    After testing and validation of the beta, we can consider a sequential beta release or move towards a v3.5 release candidate.

    Your input is greatly appreciated.

    cc @xiang90 @wenjiaswe @ptabor @gyuho @jingyih @lilic @jpbetz @spzala

    area/community 
    opened by hexfusion 73
  • Bad latency (>100ms) of storage

    Bad latency (>100ms) of storage

    https://github.com/coreos/etcd/pull/4070 added a new benchmark for stressing etcd storage. It found a very high latency of put process.

    When a number of written keys is not so large (e.g. 1000), the result will be like this:

    total: 2.686489ms
    average: 2.686µs
    minimum latency: 1.545µs
    maximum latency: 18.209µs
    

    When the number of keys is larger (e.g. 10000), the result will be like this:

    total: 184.821125ms
    average: 18.482µs
    rate: 54106.3691
    minimum latency: 1.719µs
    maximum latency: 142.160798ms
    

    The high latency is also confirmed by @xiang90 : https://github.com/coreos/etcd/pull/4070#issuecomment-168287088

    The result can be easily reproduced with the benchmark e.g. ./benchmark storage put --total 10000.

    opened by mitake 62
  • client: file and environment variables based configuration

    client: file and environment variables based configuration

    Current etcd client library doesn't provide a mechanism for creating client.Client object based on file or env vars. Therefore users must write their own feature for the purpose in their applications.

    For avoiding the duplicated implementations, this PR adds new functions for creating client with file and environment variables based on viper.

    NewWithFile(client.Config, configPath string): create a new Client with a file. Any file formats supported by viper will be accepted.

    NewWithEnv(client.Config): create a new Client with values in environment variables.

    Like the existing New(), application must pass a client.Config object because there are some fields which isn't related to configuration (e.g. Transport).

    Fixes https://github.com/coreos/etcd/issues/4008

    opened by mitake 60
  • Move etcd to github.com/etcd-io/etcd*

    Move etcd to github.com/etcd-io/etcd*

    We are moving etcd and other sub-projects to its own GitHub organization.

    The new org will be https://github.com/etcd-io.

    Many popular Go projects have done this, for better project management:

    • https://github.com/google/protobuf/issues/4796
    • https://github.com/kubernetes/kubernetes/issues/12211, https://github.com/kubernetes/kubernetes/issues/29014
    • https://github.com/vitessio/vitess/pull/3702, https://github.com/vitessio/vitess/pull/3725

    Some of our motivations are:

    • Better team management.
    • Better CI resource utilization; currently, etcd relies on free-tier public CI service, and sharing all resources with other github.com/coreos projects slows down development process.
    • More visibilities to sub-projects and adopt more community projects under etcd organization.

    Move github.com/coreos/etcd and github.com/coreos/bbolt:

    • [x] Decide which namespace we will be using (1 ~ 2 weeks)
    • [x] Announce to etcd and Kubernetes communities (Mon, August 6, 2018)
    • [x] Update all internal github.com/coreos/etcd import paths in all branches (5PM PST, Mon, August 27, 2018)
    • [x] Disable CI integration with current org (5PM PST, Mon, August 27, 2018)
    • [x] Transfer ownership (5PM PST, Mon, August 27, 2018)
    • [x] Set up new CIs (5PM PST, Mon, August 27, 2018)
      • Add environmental variable ETCD_ELECTION_TIMEOUT_TICKS=600
    • [x] Make sure old URL redirects to new URL (5PM PST, Mon, August 27, 2018)
    • [x] Set up vanity import paths to go.etcd.io/$proj

    Sub-projects that do not have downstream projects can be transferred right away:

    • [x] https://github.com/coreos/cetcd (9PM PST, Tue, August 7, 2018)
    • [x] https://github.com/coreos/zetcd (9PM PST, Tue, August 7, 2018)
    • [x] https://github.com/coreos/gofail (9PM PST, Tue, August 7, 2018)
    • [x] https://github.com/coreos/dbtester (Mon, August 6, 2018)
    • [x] https://github.com/coreos/etcdlabs (Mon, August 6, 2018)
    • [x] https://github.com/coreos/etcd-play (Mon, August 6, 2018)
    • [x] https://github.com/coreos/protodoc (Mon, August 6, 2018)
    • [x] https://github.com/coreos/jetcd (9PM PST, Tue, August 7, 2018)

    Projects that won't be moved:

    • https://github.com/coreos/etcd-operator
    • https://github.com/coreos/discovery.etcd.io

    Note: GitHub will redirect all requests to new URL.

    /cc @xiang90 @jpbetz @lburgazzoli @philips @jberkus

    opened by gyuho 59
  • Durability API guarantee broken in single node cluster

    Durability API guarantee broken in single node cluster

    I observed the possibility of data loss and I would like the community to comment / correct me otherwise.

    Before explaining that, I would like to explain the happy path when user does a PUT <key, value>. I have tried to only necessary steps to focus this issue. And considered a single etcd instance.

    ==================================================================================== ----------api thread --------------

    User calls etcdctl PUT k v

    It lands in v3_server.go::put function with the message about k,v

    Call delegates to series of function calls and enters v3_server.go::processInternalRaftRequestOnce

    It registers for a signal with wait utility against this keyid

    Call delegates further to series of function calls and enters raft/node.go::stepWithWaitOption(..message..)

    It wraps this message in a msgResult channel and updates its result channel; then sends this message to propc channel.

    After sending it waits on msgResult.channel ----------api thread waiting --------------

    On seeing a message in propc channel, raft/node.go::run(), it wakes up and sequence of calls adds the message.Entries to raftLog

    Notifies the msgResult.channel

    ----------api thread wakes-------------- 10. Upon seeing the msgResult.channel, api thread wakes and returns down the stack back to v3_server.go::processInternalRaftRequestOnce and waits for signal that it registered at step#4 ----------api thread waiting --------------

    In next iteration of raft/node.go::run(), it gets the entry from raftLog and add it to readyc etcdserver/raft.go::start wakes up on seeing this entry in readyc and adds this entry to applyc channel and synchronously writes to wal log ---------------------> wal log etcdserver/server.go wakes up on seeing entry in applyc channel (added in step https://github.com/etcd-io/etcd/pull/12) From step#14, the call goes through series of calls and lands in server.go::applyEntryNormal applyEntryNormal calls applyV3.apply which will eventually puts the KV to mvcc kvstore txn kvindex applyEntryNormal now sends the signal for this key which is basically to wake up api thread that is waiting in 7 ----------api thread wakes-------------- 18. User thread here wakes and sends back acknowledgement ----------user sees ok--------------

    Batcher flushes the entries added to kvstore txn kvindex to database file. (also this can happen before 18 based on its timer)

    Here if step https://github.com/etcd-io/etcd/pull/13 thread is pre-empted and rescheduled by the underlying operating system after completing step https://github.com/etcd-io/etcd/pull/18 and when there is a power failure at the end of step 18 where after user sees error, then the kv is neither written to wal nor to database file

    I think this is not seen today because it is a small window where the server has to restart immediately after step 18 (and immediately after step 12 the underlying os must have pre-empted the etcdserver/raft.go::start and added to end of the runnable Q.). Given these multiple conditions, it appears that we dont see data loss.

    But it appears from the code that it is possible. To simulate, added sleep after step 12 (also added exit) and 19. I was able to see ok but the data is not in both wal and db.

    If I am not correct, my apology and also please correct my understanding.

    Before repro please do the changes:

    1. Do the code changes in raft.go image

    2.Do the code changes in tx.go image

    1. Rebuild etcd server

    Now follow the steps to repro //1. Start etcd server with changes

    //2. Add a key value. Allow etcdserver to acknowledge and exit immediately (with just sleep and exit to simulate the explanation) $ touch /tmp/exitnow; ./bin/etcdctl put /k1 v1 OK

    //3. Remove this control flag file and restart the etcd server $ rm /tmp/exitnow

    //4. Check if key present $ ./bin/etcdctl get /k --prefix $

    // We can see no key-value

    type/bug priority/important 
    opened by hasethuraman 58
  • etcd not compatible with grpc v1.30.0

    etcd not compatible with grpc v1.30.0

    To reproduce:

    $ go get google.golang.org/[email protected]
    go: google.golang.org/grpc latest => v1.30.0
    $ go mod tidy
    ...
    go.etcd.io/etcd/v3/clientv3/naming imports
            google.golang.org/grpc/naming: module google.golang.org/[email protected] found (v1.30.0), but does not contain package google.golang.org/grpc/naming
    

    This is a problem for dependents of etcd who want to use the latest grpc.

    The naming package was removed at https://github.com/grpc/grpc-go/pull/3314 and was deprecated in favour of resolver.

    I can work on a pull request if that's helpful.

    area/clientv3 
    opened by xiegeo 55
  • clientv3: grpc-go (v1.27.0) made API changes to balancer / resolver.

    clientv3: grpc-go (v1.27.0) made API changes to balancer / resolver.

    After the release of grpc-go v1.27.0, an error occurred while pulling etcd / clientv3. The steps to reproduce it are as follows:

    1. go.mod:
    go 1.13
    
    require (
    	github.com/coreos/etcd v3.3.18+incompatible // indirect
    	github.com/coreos/go-systemd v0.0.0-00010101000000-000000000000 // indirect
    	github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
    	github.com/gogo/protobuf v1.3.1 // indirect
    	github.com/google/uuid v1.1.1 // indirect
    	go.etcd.io/etcd v3.3.18+incompatible // indirect
    	go.uber.org/zap v1.13.0 // indirect
    	google.golang.org/grpc v1.27.0 // indirect
    )
    
    replace github.com/coreos/go-systemd => github.com/coreos/go-systemd/v22 v22.0.0
    
    1. command:
    $ go get go.etcd.io/etcd/clientv3
    # github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
    ../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption
    ../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption
    # github.com/coreos/etcd/clientv3/balancer/picker
    ../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
    ../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
    
    1. PR:https://github.com/etcd-io/etcd/pull/11564
    area/clientv3 
    opened by eddycjy 54
  • Proxies & Config API

    Proxies & Config API

    Overview

    This pull request adds the ability for nodes to join as proxies when the cluster size limit is reached.

    Changes

    • Peer & Proxy Management added to Registry.
    • Mode added to PeerServer. This can be either PeerMode or ProxyMode.
    • JoinCommand sets overflow nodes as proxies.
    • RemoveCommand removes proxies in addition to peers.
    • Leader responses return X-Leader-Peer-URL & X-Leader-Client-URL headers.
    • New Error (402): Proxy Internal Error

    Questions

    How should we update the proxy urls?

    I would like to minimize the internal state that proxies have to hold and make them as dumb as possible. Currently it retrieves the proxy url via the initial join command. It can also update the proxy urls if the leader changes but the original leader is still available. However, it doesn't handle a leader failure.

    My thought is to simply have a new leader continually ping the proxies after leader change until all proxies have been notified.

    The other option would be to maintain a cluster configuration within the proxies but that means that we're maintaining more state.

    /cc @philips @xiangli-cmu

    opened by benbjohnson 54
  • Etcd size sometimes starts growing and grows until

    Etcd size sometimes starts growing and grows until "mvcc: database space exceeded"

    We have observed already few cases, where suddenly (after days of running a GKE cluster), the size of database starts growing.

    As an example, we have a cluster, that was running without any issues for ~2 weeks (size of database was ~16MB), and then its database started growing. The growth wasn't immediate - it took ~2days, before it reached 4GB limit and there were steps of growing. For the reference we have backups (snapshots) (done via etcdctl snapshot) that reflect the growth speed (the name contains the time when it was made)

      ... // all snapshots are roughly 16MB
      2017-05-24T04:57:24-07:00_snapshot.db 16,27 MB
      2017-05-24T05:57:26-07:00_snapshot.db 29,06 MB
      2017-05-24T06:57:30-07:00_snapshot.db 108,98 MB
      2017-05-24T07:57:36-07:00_snapshot.db 177,57 MB
      2017-05-24T08:57:51-07:00_snapshot.db 308,4 MB        
      2017-05-24T09:58:32-07:00_snapshot.db 534,54 MB
      2017-05-24T11:00:16-07:00_snapshot.db 655,73 MB
      2017-05-24T12:00:55-07:00_snapshot.db 764,22 MB
      ... // all snapshots of the same size
      2017-05-25T15:15:10-07:00_snapshot.db 764,22 MB
      2017-05-25T16:16:25-07:00_snapshot.db 818,14 MB
      2017-05-25T17:26:35-07:00_snapshot.db 963,93 MB
      ... // all snapshots of the same size
      2017-05-25T22:25:08-07:00_snapshot.db 963,93 MB
      2017-05-25T23:27:03-07:00_snapshot.db 1,56 GB
      2017-05-26T00:30:13-07:00_snapshot.db 1,56 GB
      2017-05-26T01:05:24-07:00_snapshot.db 1,56 GB
      2017-05-26T02:24:21-07:00_snapshot.db 2,18 GB
      ... // all snapshots of the same size
      2017-05-26T08:43:07-07:00_snapshot.db 2,18 GB
      2017-05-26T09:46:47-07:00_snapshot.db 2,19 GB
      ... // all snapshots of the same size
      2017-05-26T16:11:31-07:00_snapshot.db 2,19 GB
      2017-05-26T17:16:47-07:00_snapshot.db 2,65 GB
      2017-05-26T18:22:37-07:00_snapshot.db 3,12 GB
      2017-05-26T19:29:07-07:00_snapshot.db 3,86 GB
      2017-05-26T20:33:24-07:00_snapshot.db 4,6 GB
      <boom>
    

    We've checked that we were doing compaction very regularly every 5m for the whole time - so it doesn't seem to be the same as: https://github.com/coreos/etcd/issues/7944 I'm attaching the interested lines from etcd logs in etcd-compaction.txt

    [Note time in that logs are in UTC, and time in snapshot names is PST, so 7 hours difference]

    To summarize, the compaction was always at most few thousands of transactions (so it's not that we did a lot during some 5m period), though there were some longer compactions, up to ~7s.

    I started digging into individual snapshots and found some strange thing (I was using bolt)

    1. 16MB snapshot:
    Aggregate statistics for 10 buckets
    
    Page count statistics
            Number of logical branch pages: 10
            Number of physical branch overflow pages: 0
            Number of logical leaf pages: 789
            Number of physical leaf overflow pages: 518
    Tree statistics
            Number of keys/value pairs: 1667
            Number of levels in B+tree: 3
    Page size utilization
            Bytes allocated for physical branch pages: 40960
            Bytes actually used for branch data: 26494 (64%)
            Bytes allocated for physical leaf pages: 5353472
            Bytes actually used for leaf data: 3411680 (63%)
    Bucket statistics
            Total number of buckets: 10
            Total number on inlined buckets: 9 (90%)
            Bytes used for inlined buckets: 536 (0%)
    
    1. 534MB snapshot (5 hours later):
    Aggregate statistics for 10 buckets
    
    Page count statistics
            Number of logical branch pages: 65
            Number of physical branch overflow pages: 0
            Number of logical leaf pages: 5559
            Number of physical leaf overflow pages: 107743
    Tree statistics
            Number of keys/value pairs: 13073
            Number of levels in B+tree: 3
    Page size utilization
            Bytes allocated for physical branch pages: 266240
            Bytes actually used for branch data: 186912 (70%)
            Bytes allocated for physical leaf pages: 464084992
            Bytes actually used for leaf data: 451590110 (97%)
    Bucket statistics
            Total number of buckets: 10
            Total number on inlined buckets: 9 (90%)
            Bytes used for inlined buckets: 536 (0%)
    
    1. 1.56GB snapshot (another ~36 hours later):
    Aggregate statistics for 10 buckets
    
    Page count statistics
            Number of logical branch pages: 70
            Number of physical branch overflow pages: 0
            Number of logical leaf pages: 4525
            Number of physical leaf overflow pages: 115179
    Tree statistics
            Number of keys/value pairs: 10978
            Number of levels in B+tree: 3
    Page size utilization
            Bytes allocated for physical branch pages: 286720
            Bytes actually used for branch data: 152723 (53%)
            Bytes allocated for physical leaf pages: 490307584
            Bytes actually used for leaf data: 478196884 (97%)
    Bucket statistics
            Total number of buckets: 10
            Total number on inlined buckets: 9 (90%)
            Bytes used for inlined buckets: 536 (0%)
    
    1. 3.86GB snapshot (another ~18 hours later)
    Aggregate statistics for 10 buckets
    
    Page count statistics
            Number of logical branch pages: 90
            Number of physical branch overflow pages: 0
            Number of logical leaf pages: 6219
            Number of physical leaf overflow pages: 6791
    Tree statistics
            Number of keys/value pairs: 15478
            Number of levels in B+tree: 3
    Page size utilization
            Bytes allocated for physical branch pages: 368640
            Bytes actually used for branch data: 209621 (56%)
            Bytes allocated for physical leaf pages: 53288960
            Bytes actually used for leaf data: 36704465 (68%)
    Bucket statistics
            Total number of buckets: 10
            Total number on inlined buckets: 9 (90%)
            Bytes used for inlined buckets: 536 (0%)
    
    1. 4.6GB snapshot (1hour later, right before exceeding space):
    Aggregate statistics for 10 buckets
    
    Page count statistics
            Number of logical branch pages: 89
            Number of physical branch overflow pages: 0
            Number of logical leaf pages: 6074
            Number of physical leaf overflow pages: 6713
    Tree statistics
            Number of keys/value pairs: 15173
            Number of levels in B+tree: 3
    Page size utilization
            Bytes allocated for physical branch pages: 364544
            Bytes actually used for branch data: 204788 (56%)
            Bytes allocated for physical leaf pages: 52375552
            Bytes actually used for leaf data: 36092789 (68%)
    Bucket statistics
            Total number of buckets: 10
            Total number on inlined buckets: 9 (90%)
            Bytes used for inlined buckets: 564 (0%)
    

    What is extremely interesting to me is that both:

    • Number of physical leaf overflow pages
    • Bytes allocated for physical leaf pages dropped by order of magnitude in this 3.86GB snapshot, but the total size of database didn't drop

    Unfortunately I can't provide any of those snapshots due to privacy reasons, but maybe you can see anything that we can investigate (or share results of some commands) that can help with debugging?

    @xiang90 @hongchaodeng @mml @lavalamp

    opened by wojtek-t 53
  • [3.5] add more debug info for opening WAL files failure

    [3.5] add more debug info for opening WAL files failure

    Backport https://github.com/etcd-io/etcd/pull/14862 to 3.5.

    Related issue: https://github.com/etcd-io/etcd/issues/14851

    Signed-off-by: Benjamin Wang [email protected]

    Please read https://github.com/etcd-io/etcd/blob/main/CONTRIBUTING.md#contribution-flow.

    opened by ahrtr 3
  • add more debug info for opening WAL files failure

    add more debug info for opening WAL files failure

    Add more debug info for debugging issue something like https://github.com/etcd-io/etcd/issues/14851 .

    It's hard to tell where is the error coming from. So added more context in the error log.

    Signed-off-by: Benjamin Wang [email protected]

    Please read https://github.com/etcd-io/etcd/blob/main/CONTRIBUTING.md#contribution-flow.

    opened by ahrtr 1
  • Enforce minimum TTL for lease.

    Enforce minimum TTL for lease.

    What would you like to be added?

    I tried to create a lease with TTL = 1. Like so: etcdClient.Grant(context.TODO(), 1)

    But when I check the TTL value using etcdctl lease timetolive <lease-id>. I found that the actual TTL is 2 seconds.

    Moreover, here the comment suggests that the minimum TTL should be 5-seconds.

    So it would be nice to enforce that the TTL should be > 1s or > 5s. Whichever is more correct/accurate.

    Why is this needed?

    For clarity and to maintain a standard.

    type/feature 
    opened by shreemaan-abhishek 1
  • WAL permission denied error when restoring etcd on different storage

    WAL permission denied error when restoring etcd on different storage

    What happened?

    For many months we have been able to restore etcd snapshots and start etcd using a data dir on NFS. Now we need to change the storage where we place etcd-data and etcd-wal. We basically restore the snapshot and bring up etcd from the new storage. Even though the file system permissions are exactly the same ones on the new storage server as in the old NFS one we are now facing this error:

    failed to open WAL","error":"permission denied"

    More detailed message:

    {"level":"info","ts":"2022-11-24T16:19:22.380Z","caller":"embed/etcd.go:308","msg":"starting an etcd server","etcd-version":"3.5.2","git-sha":"99018a77b","go-version":"go1.16.3","go-os":"linux","go-arch":"amd64","max-cpu-set":4,"max-cpu-available":4,"member-initialized":true,"name":"olk8-m1","data-dir":"/var/lib/etcd","wal-dir":"","wal-dir-dedicated":"","member-dir":"/var/lib/etcd/member","force-new-cluster":false,"heartbeat-interval":"100ms","election-timeout":"1s","initial-election-tick-advance":true,"snapshot-count":10000,"snapshot-catchup-entries":5000,"initial-advertise-peer-urls":["https://10.11.0.16:2380"],"listen-peer-urls":["https://10.11.0.16:2380"],"advertise-client-urls":["https://10.11.0.16:2379"],"listen-client-urls":["https://10.11.0.16:2379","https://127.0.0.1:2379"],"listen-metrics-urls":["http://127.0.0.1:2381"],"cors":["*"],"host-whitelist":["*"],"initial-cluster":"","initial-cluster-state":"new","initial-cluster-token":"","quota-size-bytes":2147483648,"pre-vote":true,"initial-corrupt-check":false,"corrupt-check-time-interval":"0s","auto-compaction-mode":"periodic","auto-compaction-retention":"0s","auto-compaction-interval":"0s","discovery-url":"","discovery-proxy":"","downgrade-check-interval":"5s"}
    {"level":"warn","ts":1669306762.381188,"caller":"fileutil/fileutil.go:57","msg":"check file permission","error":"directory \"/var/lib/etcd\" exist, but the permission is \"drwxrwxrwx\". The recommended permission is \"-rwx------\" to prevent possible unprivileged access to the data"}
    {"level":"warn","ts":1669306762.4027245,"caller":"fileutil/fileutil.go:57","msg":"check file permission","error":"directory \"/var/lib/etcd/member/snap\" exist, but the permission is \"drwxrwxrwx\". The recommended permission is \"-rwx------\" to prevent possible unprivileged access to the data"}
    {"level":"info","ts":"2022-11-24T16:19:22.436Z","caller":"etcdserver/backend.go:81","msg":"opened backend db","path":"/var/lib/etcd/member/snap/db","took":"9.905917ms"}
    {"level":"info","ts":"2022-11-24T16:19:22.486Z","caller":"etcdserver/server.go:508","msg":"recovered v2 store from snapshot","snapshot-index":3,"snapshot-size":"7.5 kB"}
    {"level":"info","ts":"2022-11-24T16:19:22.487Z","caller":"etcdserver/server.go:521","msg":"recovered v3 backend from snapshot","backend-size-bytes":44806144,"backend-size":"45 MB","backend-size-in-use-bytes":4636672,"backend-size-in-use":"4.6 MB"}
    {"level":"fatal","ts":"2022-11-24T16:19:22.495Z","caller":"etcdserver/storage.go:95","msg":"failed to open WAL","error":"permission denied","stacktrace":"go.etcd.io/etcd/server/v3/etcdserver.readWAL\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdserver/storage.go:95\ngo.etcd.io/etcd/server/v3/etcdserver.restartNode\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdserver/raft.go:481\ngo.etcd.io/etcd/server/v3/etcdserver.NewServer\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdserver/server.go:533\ngo.etcd.io/etcd/server/v3/embed.StartEtcd\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/embed/etcd.go:245\ngo.etcd.io/etcd/server/v3/etcdmain.startEtcd\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdmain/etcd.go:227\ngo.etcd.io/etcd/server/v3/etcdmain.startEtcdOrProxyV2\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdmain/etcd.go:122\ngo.etcd.io/etcd/server/v3/etcdmain.Main\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdmain/main.go:40\nmain.main\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/main.go:32\nruntime.main\n\t/usr/local/google/home/siarkowicz/.gvm/gos/go1.16.3/src/runtime/proc.go:225"}
    

    i.e etcd seems to be failing in the permissions for the wal dir. Just for the sake of checking if there was really some error with the permissions, before bringing up etcd we are changing permissions on wal and the entire etcd dirs (data and wal):

    [[email protected] ~]# ls -lart /u02/data/dbfs_root/dbfsdir/olk8-m1/member/
    total 0
    drwxrwxrwx. 3 root root 0 Nov 24 16:24 ..
    drwxrwxrwx. 2 root root 0 Nov 24 16:24 snap
    drwxrwxrwx. 4 root root 0 Nov 24 16:24 .
    drwxrwxrwx. 2 root root 0 Nov 24 16:24 wal
    

    But it makes no difference, we keep getting back the "failed to open WAL","error":"permission denied","stacktrace":"go.etcd.io/etcd/server/v3/etcdserver.readWAL error

    If this is failing it looks clear it should not be because of file permissions

    What did you expect to happen?

    etcd comes up correctly

    How can we reproduce it (as minimally and precisely as possible)?

    We are not sure this can be reproduced in ANY storage, but here are the steps we are taking 1.-Take etcd snapshot

    $etcdctlhome/etcdctl --endpoints $host:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/server.key --cert /etc/kubernetes/pki/etcd/server.crt snapshot save $host_dir/etcd-snapshot-$host.db
    

    2.-Stop etcd 3.-Restore snapshot

    $etcdctlhome/etcdctl snapshot restore ${backup_dir}/${mnode1}/etcd-snapshot-${mnode1}.db --name $host  --initial-cluster $initialclusteretcd  --initial-cluster-token etcd-cluster-1  --initial-advertise-peer-urls https://$host:2380 --cacert /etc/kubernetes/pki/etcd/ca.crt --key /etc/kubernetes/pki/etcd/server.key --cert /etc/kubernetes/pki/etcd/server.crt
    

    4.-Copy snapshot to new etcd storage

    rsync -avxHAX ${backup_dir}/restore_attempted_${dt}/$host/$host.etcd/member $new_etcd_dir"
    
    5.-Bring up etcd pointing to this new dir/storage (i.e. pointing to $new_etcd_dir)
    
    
    
    
    ### Anything else we need to know?
    
    The new file system is DBFS (https://docs.oracle.com/database/121/VLDBG/GUID-6B5634D3-D539-4D1F-ABA3-0C903AC28639.htm#VLDBG14099) but to all extents this is a totally standard file system mounted with fuse
    
    ### Etcd version (please run commands below)
    
    <details>
    
    ```console
    $ etcd --version
    # paste output here
    etcd Version: 3.5.2
    Git SHA: 99018a77b
    Go Version: go1.16.3
    Go OS/Arch: linux/amd64
    
    $ etcdctl version
    # paste output here
    

    etcdctl version: 3.5.2 API version: 3.5

    Etcd configuration (command line flags or environment variables)

    etcd --advertise-client-urls=https://10.11.0.16:2379 --cert-file=/etc/kubernetes/pki/etcd/server.crt --client-cert-auth=true --data-dir=/var/lib/etcd --initial-advertise-peer-urls=https://10.11.0.16:2380 --initial-cluster=olk8-m1=https://10.11.0.16:2380 --key-file=/etc/kubernetes/pki/etcd/server.key --listen-client-urls=https://127.0.0.1:2379,https://10.11.0.16:2379 --listen-metrics-urls=http://127.0.0.1:2381 --listen-peer-urls=https://10.11.0.16:2380 --name=olk8-m1 --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt --peer-client-cert-auth=true --peer-key-file=/etc/kubernetes/pki/etcd/peer.key --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt --snapshot-count=10000 --t

    Etcd debug information (please run commands blow, feel free to obfuscate the IP address or FQDN in the output)

    Etcd is failing to even come up so we cant get member list etc

    Relevant log output

    {"level":"info","ts":"2022-11-24T16:19:22.370Z","caller":"etcdmain/etcd.go:72","msg":"Running: ","args":["etcd","--advertise-client-urls=https://10.11.0.16:2379","--cert-file=/etc/kubernetes/pki/etcd/server.crt","--client-cert-auth=true","--data-dir=/var/lib/etcd","--initial-advertise-peer-urls=https://10.11.0.16:2380","--initial-cluster=olk8-m1=https://10.11.0.16:2380","--key-file=/etc/kubernetes/pki/etcd/server.key","--listen-client-urls=https://127.0.0.1:2379,https://10.11.0.16:2379","--listen-metrics-urls=http://127.0.0.1:2381","--listen-peer-urls=https://10.11.0.16:2380","--name=olk8-m1","--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt","--peer-client-cert-auth=true","--peer-key-file=/etc/kubernetes/pki/etcd/peer.key","--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt","--snapshot-count=10000","--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt"]}
    {"level":"info","ts":"2022-11-24T16:19:22.375Z","caller":"etcdmain/etcd.go:115","msg":"server has been already initialized","data-dir":"/var/lib/etcd","dir-type":"member"}
    {"level":"info","ts":"2022-11-24T16:19:22.375Z","caller":"embed/etcd.go:131","msg":"configuring peer listeners","listen-peer-urls":["https://10.11.0.16:2380"]}
    {"level":"info","ts":"2022-11-24T16:19:22.375Z","caller":"embed/etcd.go:479","msg":"starting with peer TLS","tls-info":"cert = /etc/kubernetes/pki/etcd/peer.crt, key = /etc/kubernetes/pki/etcd/peer.key, client-cert=, client-key=, trusted-ca = /etc/kubernetes/pki/etcd/ca.crt, client-cert-auth = true, crl-file = ","cipher-suites":[]}
    {"level":"info","ts":"2022-11-24T16:19:22.376Z","caller":"embed/etcd.go:139","msg":"configuring client listeners","listen-client-urls":["https://10.11.0.16:2379","https://127.0.0.1:2379"]}
    {"level":"info","ts":"2022-11-24T16:19:22.380Z","caller":"embed/etcd.go:308","msg":"starting an etcd server","etcd-version":"3.5.2","git-sha":"99018a77b","go-version":"go1.16.3","go-os":"linux","go-arch":"amd64","max-cpu-set":4,"max-cpu-available":4,"member-initialized":true,"name":"olk8-m1","data-dir":"/var/lib/etcd","wal-dir":"","wal-dir-dedicated":"","member-dir":"/var/lib/etcd/member","force-new-cluster":false,"heartbeat-interval":"100ms","election-timeout":"1s","initial-election-tick-advance":true,"snapshot-count":10000,"snapshot-catchup-entries":5000,"initial-advertise-peer-urls":["https://10.11.0.16:2380"],"listen-peer-urls":["https://10.11.0.16:2380"],"advertise-client-urls":["https://10.11.0.16:2379"],"listen-client-urls":["https://10.11.0.16:2379","https://127.0.0.1:2379"],"listen-metrics-urls":["http://127.0.0.1:2381"],"cors":["*"],"host-whitelist":["*"],"initial-cluster":"","initial-cluster-state":"new","initial-cluster-token":"","quota-size-bytes":2147483648,"pre-vote":true,"initial-corrupt-check":false,"corrupt-check-time-interval":"0s","auto-compaction-mode":"periodic","auto-compaction-retention":"0s","auto-compaction-interval":"0s","discovery-url":"","discovery-proxy":"","downgrade-check-interval":"5s"}
    {"level":"warn","ts":1669306762.381188,"caller":"fileutil/fileutil.go:57","msg":"check file permission","error":"directory \"/var/lib/etcd\" exist, but the permission is \"drwxrwxrwx\". The recommended permission is \"-rwx------\" to prevent possible unprivileged access to the data"}
    {"level":"warn","ts":1669306762.4027245,"caller":"fileutil/fileutil.go:57","msg":"check file permission","error":"directory \"/var/lib/etcd/member/snap\" exist, but the permission is \"drwxrwxrwx\". The recommended permission is \"-rwx------\" to prevent possible unprivileged access to the data"}
    {"level":"info","ts":"2022-11-24T16:19:22.436Z","caller":"etcdserver/backend.go:81","msg":"opened backend db","path":"/var/lib/etcd/member/snap/db","took":"9.905917ms"}
    {"level":"info","ts":"2022-11-24T16:19:22.486Z","caller":"etcdserver/server.go:508","msg":"recovered v2 store from snapshot","snapshot-index":3,"snapshot-size":"7.5 kB"}
    {"level":"info","ts":"2022-11-24T16:19:22.487Z","caller":"etcdserver/server.go:521","msg":"recovered v3 backend from snapshot","backend-size-bytes":44806144,"backend-size":"45 MB","backend-size-in-use-bytes":4636672,"backend-size-in-use":"4.6 MB"}
    {"level":"fatal","ts":"2022-11-24T16:19:22.495Z","caller":"etcdserver/storage.go:95","msg":"failed to open WAL","error":"permission denied","stacktrace":"go.etcd.io/etcd/server/v3/etcdserver.readWAL\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdserver/storage.go:95\ngo.etcd.io/etcd/server/v3/etcdserver.restartNode\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdserver/raft.go:481\ngo.etcd.io/etcd/server/v3/etcdserver.NewServer\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdserver/server.go:533\ngo.etcd.io/etcd/server/v3/embed.StartEtcd\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/embed/etcd.go:245\ngo.etcd.io/etcd/server/v3/etcdmain.startEtcd\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdmain/etcd.go:227\ngo.etcd.io/etcd/server/v3/etcdmain.startEtcdOrProxyV2\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdmain/etcd.go:122\ngo.etcd.io/etcd/server/v3/etcdmain.Main\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/etcdmain/main.go:40\nmain.main\n\t/tmp/etcd-release-3.5.2/etcd/release/etcd/server/main.go:32\nruntime.main\n\t/usr/local/google/home/siarkowicz/.gvm/gos/go1.16.3/src/runtime/proc.go:225"}
    
    opened by FerminCastro 11
  • Lock Permission denied

    Lock Permission denied

    What happened?

    I have 2 instances of the same service with the following simply logic Instance A: create lease => leaseA lock("someName", leaseA)

    Instance B: create lease => leaseB lock("someName", leaseB)

    Expected behavior: Instance B wait, until unlock or lease expired

    Real behavior: Instance B sometimes receive error permission denied on client side, on server side: "auth: user name is empty"

    We use tls auth and in wireshark i see that all request use tls without auth error. We use long live certificates

    What did you expect to happen?

    I expect lock without error: "permission denied"

    How can we reproduce it (as minimally and precisely as possible)?

    https://github.com/careless6666/etcd-cluster-issue

    my example project on dotnet with one endpoint for test,

    you need set you credentials for certificate and address endpoint

    Anything else we need to know?

    No response

    Etcd version (please run commands below)

    $ etcd --version
    3.5.5
    $ etcdctl version
    # paste output here
    

    Etcd configuration (command line flags or environment variables)

    Managed by ansible

    #[member] ETCD_NAME="stgetcd1z1.h.companyName" ETCD_DATA_DIR="/var/lib/etcd/default" ETCD_SNAPSHOT_COUNT=5000 ETCD_HEARTBEAT_INTERVAL=150 ETCD_ELECTION_TIMEOUT=3000 ETCD_QUOTA_BACKEND_BYTES=0 ETCD_LISTEN_CLIENT_URLS="https://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="https://stgetcd1z1.h.companyName:2379" ETCD_MAX_SNAPSHOTS=5 ETCD_MAX_WALS=5 ETCD_ENABLE_V2=false

    #[proxy] ETCD_PROXY="off" ETCD_PROXY_FAILURE_WAIT=5000 ETCD_PROXY_REFRESH_INTERVAL=30000 ETCD_PROXY_DIAL_TIMEOUT=1000 ETCD_PROXY_WRITE_TIMEOUT=5000 ETCD_PROXY_READ_TIMEOUT=0

    #[cluster] ETCD_LISTEN_PEER_URLS="https://0.0.0.0:2380" ETCD_INITIAL_ADVERTISE_PEER_URLS="https://stgetcd1z1.h.companyName:2380" ETCD_INITIAL_CLUSTER_STATE="new" ETCD_INITIAL_CLUSTER="stgetcd1z1.h.companyName=https://stgetcd1z1.h.companyName:2380,stgetcd2z1.h.companyName=https://stgetcd2z1.h.companyName:2380,stgetcd3z1.h.companyName=https://stgetcd3z1.h.companyName:2380,stgetcd4z1.h.companyName=https://stgetcd4z1.h.companyName:2380,stgetcd5z1.h.companyName=https://stgetcd5z1.h.companyName:2380," ETCD_INITIAL_CLUSTER_TOKEN="eiphohCipoowe9OnaiPhiefu" ETCD_DISCOVERY_FALLBACK="proxy" ETCD_STRICT_RECONFIG_CHECK=true ETCD_FORCE_NEW_CLUSTER=false

    #[security] ETCD_CERT_FILE="/etc/etcd/ssl/stgetcd1z1_server_cert.pem" ETCD_KEY_FILE="/etc/etcd/ssl/stgetcd1z1_server_key.pem" ETCD_CLIENT_CERT_AUTH=true ETCD_TRUSTED_CA_FILE="/etc/etcd/ssl/ca.pem" ETCD_PEER_CERT_FILE="/etc/etcd/ssl/stgetcd1z1_peer_cert.pem" ETCD_PEER_KEY_FILE="/etc/etcd/ssl/stgetcd1z1_peer_key.pem" ETCD_PEER_CLIENT_CERT_AUTH=true ETCD_PEER_TRUSTED_CA_FILE="/etc/etcd/ssl/peer_ca.pem" ETCD_PEER_CERT_ALLOWED_CN="stg-etcd-common"

    #[logging] ETCD_DEBUG=False ETCD_LOG_LEVEL=info

    #ExecStart=/bin/sh -c "GOMAXPROCS=$(nproc) /usr/local/bin/etcd $DAEMON_ARGS"

    DAEMON_ARGS: --listen-metrics-urls http://0.0.0.0:2385/ --auto-compaction-mode=periodic --auto-compaction-retention=1h

    Etcd debug information (please run commands blow, feel free to obfuscate the IP address or FQDN in the output)

    No response

    Relevant log output

    Nov 24 10:36:25 stgetcd1z1 etcd[2346324]:{"level":"debug","ts":"2022-11-24T10:36:25.260Z","caller":"etcdserver/server.go:2223","msg":"applyEntryNormal","raftReq":"header:<ID:8276354600774544359 username:\"ic-me-daemon-global-sync\" auth_revision:379 > txn:<compare:<target:CREATE key:\"/ic-me-daemon-global-sync/election/19b9a0c219036fc5\" create_revision:0 > success:<request_put:<key:\"/ic-me-daemon-global-sync/election/19b9a0c219036fc5\" lease:1853689477143424965 > > success:<request_range:<key:\"/ic-me-daemon-global-sync/election/\" range_end:\"/ic-me-daemon-global-sync/election0\" limit:1 sort_order:ASCEND sort_target:CREATE > > failure:<request_range:<key:\"/ic-me-daemon-global-sync/election/19b9a0c219036fc5\" > > failure:<request_range:<key:\"/ic-me-daemon-global-sync/election/\" range_end:\"/ic-me-daemon-global-sync/election0\" limit:1 sort_order:ASCEND sort_target:CREATE > > > "}
    
    Nov 24 10:36:35 stgetcd1z1 etcd[2346324]:{"level":"debug","ts":"2022-11-24T10:36:35.260Z","caller":"etcdserver/server.go:2223","msg":"applyEntryNormal","raftReq":"header:<ID:8276354600774544365 > delete_range:<key:\"/ic-me-daemon-global-sync/election/19b9a0c219036fc5\" > "}
    
    Nov 24 10:36:35 stgetcd1z1 etcd[2346324]:{"level":"warn","ts":"2022-11-24T10:36:35.260Z","caller":"etcdserver/util.go:123","msg":"failed to apply request","took":"6.668µs","request":"header:<ID:8276354600774544365 > delete_range:<key:\"/ic-me-daemon-global-sync/election/19b9a0c219036fc5\" > ","response":"","error":"auth: user name is empty"}
    
    Nov 24 10:36:39 stgetcd1z1 etcd[2346324]:{"level":"debug","ts":"2022-11-24T10:36:39.076Z","caller":"etcdserver/server.go:2223","msg":"applyEntryNormal","raftReq":"header:<ID:4893025380725243977 username:\"ic-me-daemon-global-sync\" auth_revision:379 > txn:<compare:<target:CREATE key:\"/ic-me-daemon-global-sync/election/7f43cbd37d75d95d\" create_revision:0 > success:<request_put:<key:\"/ic-me-daemon-global-sync/election/7f43cbd37d75d95d\" lease:9170397375459875165 > > success:<request_range:<key:\"/ic-me-daemon-global-sync/election/\" range_end:\"/ic-me-daemon-global-sync/election0\" limit:1 sort_order:ASCEND sort_target:CREATE > > failure:<request_range:<key:\"/ic-me-daemon-global-sync/election/7f43cbd37d75d95d\" > > failure:<request_range:<key:\"/ic-me-daemon-global-sync/election/\" range_end:\"/ic-me-daemon-global-sync/election0\" limit:1 sort_order:ASCEND sort_target:CREATE > > > "}
    
    Nov 24 10:36:39 stgetcd1z1 etcd[2346324]:{"level":"debug","ts":"2022-11-24T10:36:39.078Z","caller":"etcdserver/server.go:2223","msg":"applyEntryNormal","raftReq":"header:<ID:4893025380725243979 > delete_range:<key:\"/ic-me-daemon-global-sync/election/7f43cbd37d75d95d\" > "}
    
    Nov 24 10:36:39 stgetcd1z1 etcd[2346324]:{"level":"warn","ts":"2022-11-24T10:36:39.078Z","caller":"etcdserver/util.go:123","msg":"failed to apply request","took":"3.834µs","request":"header:<ID:4893025380725243979 > delete_range:<key:\"/ic-me-daemon-global-sync/election/7f43cbd37d75d95d\" > ","response":"","error":"auth: user name is empty"}
    
    Nov 24 10:37:27 stgetcd1z1 etcd[2346324]:{"level":"debug","ts":"2022-11-24T10:37:27.978Z","caller":"etcdserver/server.go:2223","msg":"applyEntryNormal","raftReq":"header:<ID:296257536087590380 username:\"ic-me-daemon-global-sync\" auth_revision:379 > txn:<compare:<target:CREATE key:\"/ic-me-daemon-global-sync/election/11834de92c2c011d\" create_revision:0 > success:<request_put:<key:\"/ic-me-daemon-global-sync/election/11834de92c2c011d\" lease:1261937984457670941 > > success:<request_range:<key:\"/ic-me-daemon-global-sync/election/\" range_end:\"/ic-me-daemon-global-sync/election0\" limit:1 sort_order:ASCEND sort_target:CREATE > > failure:<request_range:<key:\"/ic-me-daemon-global-sync/election/11834de92c2c011d\" > > failure:<request_range:<key:\"/ic-me-daemon-global-sync/election/\" range_end:\"/ic-me-daemon-global-sync/election0\" limit:1 sort_order:ASCEND sort_target:CREATE > > > "}
    
    release/v3.5 
    opened by careless6666 5
Releases(v3.5.6)
  • v3.5.6(Nov 21, 2022)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.6
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.6
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.6 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.6 \
      gcr.io/etcd-development/etcd:v3.5.6 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.6 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.6 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.6 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.6 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.6 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.6-darwin-amd64.zip(19.49 MB)
    etcd-v3.5.6-darwin-arm64.zip(18.94 MB)
    etcd-v3.5.6-linux-amd64.tar.gz(18.58 MB)
    etcd-v3.5.6-linux-arm64.tar.gz(16.70 MB)
    etcd-v3.5.6-linux-ppc64le.tar.gz(16.11 MB)
    etcd-v3.5.6-linux-s390x.tar.gz(17.87 MB)
    etcd-v3.5.6-windows-amd64.zip(18.81 MB)
    SHA256SUMS(676 bytes)
  • v3.4.22(Nov 2, 2022)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.22
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.22
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.22 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.22 \
      gcr.io/etcd-development/etcd:v3.4.22 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.22 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.22 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.22 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.22 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.22 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.22-darwin-amd64.zip(24.37 MB)
    etcd-v3.4.22-linux-amd64.tar.gz(14.50 MB)
    etcd-v3.4.22-linux-arm64.tar.gz(13.29 MB)
    etcd-v3.4.22-linux-ppc64le.tar.gz(12.93 MB)
    etcd-v3.4.22-windows-amd64.zip(14.84 MB)
    SHA256SUMS(489 bytes)
  • v3.5.5(Sep 15, 2022)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.5
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.5
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.5 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.5 \
      gcr.io/etcd-development/etcd:v3.5.5 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.5 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.5-darwin-amd64.zip(34.04 MB)
    etcd-v3.5.5-darwin-arm64.zip(33.33 MB)
    etcd-v3.5.5-linux-amd64.tar.gz(18.58 MB)
    etcd-v3.5.5-linux-arm64.tar.gz(16.70 MB)
    etcd-v3.5.5-linux-ppc64le.tar.gz(16.10 MB)
    etcd-v3.5.5-linux-s390x.tar.gz(17.87 MB)
    etcd-v3.5.5-windows-amd64.zip(18.80 MB)
    SHA256SUMS(676 bytes)
  • v3.4.21(Sep 15, 2022)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.21
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.21
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.21 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.21 \
      gcr.io/etcd-development/etcd:v3.4.21 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.21 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.21 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.21 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.21 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.21 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.21-darwin-amd64.zip(24.35 MB)
    etcd-v3.4.21-linux-amd64.tar.gz(14.49 MB)
    etcd-v3.4.21-linux-arm64.tar.gz(13.28 MB)
    etcd-v3.4.21-linux-ppc64le.tar.gz(12.93 MB)
    etcd-v3.4.21-windows-amd64.zip(14.83 MB)
    SHA256SUMS(489 bytes)
  • v3.4.20(Aug 5, 2022)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.20
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.20
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.20 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.20 \
      gcr.io/etcd-development/etcd:v3.4.20 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.20 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.20 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.20 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.20 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.20 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.20-darwin-amd64.zip(24.35 MB)
    etcd-v3.4.20-linux-amd64.tar.gz(14.49 MB)
    etcd-v3.4.20-linux-arm64.tar.gz(13.28 MB)
    etcd-v3.4.20-linux-ppc64le.tar.gz(12.92 MB)
    etcd-v3.4.20-windows-amd64.zip(14.83 MB)
    SHA256SUMS(489 bytes)
  • v3.4.19(Jul 12, 2022)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.19
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.19
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.19 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.19 \
      gcr.io/etcd-development/etcd:v3.4.19 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.19 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.19 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.19 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.19 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.19 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.19-darwin-amd64.zip(24.23 MB)
    etcd-v3.4.19-linux-amd64.tar.gz(14.42 MB)
    etcd-v3.4.19-linux-arm64.tar.gz(13.22 MB)
    etcd-v3.4.19-linux-ppc64le.tar.gz(12.86 MB)
    etcd-v3.4.19-windows-amd64.zip(14.76 MB)
    SHA256SUMS(489 bytes)
  • v3.5.4(Apr 24, 2022)

    Please see Announcing etcd 3.5 blog post.

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.4
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.4
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.4 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.4 \
      gcr.io/etcd-development/etcd:v3.5.4 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.4 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.4 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.4 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.4 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.4 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.4 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.4-darwin-amd64.zip(33.82 MB)
    etcd-v3.5.4-linux-amd64.tar.gz(18.53 MB)
    etcd-v3.5.4-linux-arm64.tar.gz(16.66 MB)
    etcd-v3.5.4-linux-ppc64le.tar.gz(16.06 MB)
    etcd-v3.5.4-linux-s390x.tar.gz(17.82 MB)
    etcd-v3.5.4-windows-amd64.zip(18.75 MB)
    SHA256SUMS(581 bytes)
  • v3.5.3(Apr 13, 2022)

    Highlights:

    • Version 3.5.3 is fixing critical correctness issues (https://github.com/etcd-io/etcd/issues/13766, https://github.com/etcd-io/etcd/issues/13514) introduced in the 3.5 branch that could lead to not applying a committed transaction across all replicas in case of a server crash.
    • It's likely 3.5.4 will be releases soon that reverts SRV change added to 3.5.3. Please see the discussion (https://github.com/etcd-io/etcd/issues/13948)

    Please see Announcing etcd 3.5 blog post.

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.3
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.3
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.3 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.3 \
      gcr.io/etcd-development/etcd:v3.5.3 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.3 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.3 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.3 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.3 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.3 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.3 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.3-darwin-amd64.zip(33.84 MB)
    etcd-v3.5.3-linux-amd64.tar.gz(18.54 MB)
    etcd-v3.5.3-linux-arm64.tar.gz(16.67 MB)
    etcd-v3.5.3-linux-ppc64le.tar.gz(16.08 MB)
    etcd-v3.5.3-linux-s390x.tar.gz(17.84 MB)
    etcd-v3.5.3-windows-amd64.zip(18.77 MB)
    SHA256SUMS(581 bytes)
  • v3.5.2(Feb 1, 2022)

    This release is no longer recommended for production. Please use v3.4 minor until v3.5.3 is released. Read more in https://github.com/etcd-io/etcd/tree/main/CHANGELOG.

    Please see Announcing etcd 3.5 blog post.

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.2
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.2
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.2 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.2 \
      gcr.io/etcd-development/etcd:v3.5.2 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.2 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.2 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.2 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.2 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.2 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.2 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.2-darwin-amd64.zip(33.80 MB)
    etcd-v3.5.2-linux-amd64.tar.gz(18.50 MB)
    etcd-v3.5.2-linux-arm64.tar.gz(16.63 MB)
    etcd-v3.5.2-linux-ppc64le.tar.gz(16.03 MB)
    etcd-v3.5.2-linux-s390x.tar.gz(17.79 MB)
    etcd-v3.5.2-windows-amd64.zip(18.72 MB)
    SHA256SUMS(581 bytes)
  • v3.5.1(Oct 15, 2021)

    This release is no longer recommended for production. Please use v3.4 minor until v3.5.3 is released. Read more in https://github.com/etcd-io/etcd/tree/main/CHANGELOG.

    Please see Announcing etcd 3.5 blog post.

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.1
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.1
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    

    ####### Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.1 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.1 \
      gcr.io/etcd-development/etcd:v3.5.1 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.1 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.1-darwin-amd64.zip(33.79 MB)
    etcd-v3.5.1-linux-amd64.tar.gz(18.50 MB)
    etcd-v3.5.1-linux-arm64.tar.gz(16.62 MB)
    etcd-v3.5.1-linux-ppc64le.tar.gz(16.03 MB)
    etcd-v3.5.1-linux-s390x.tar.gz(17.79 MB)
    etcd-v3.5.1-windows-amd64.zip(18.72 MB)
    SHA256SUMS(581 bytes)
  • v3.4.18(Oct 15, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.18
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.18
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.18 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.18 \
      gcr.io/etcd-development/etcd:v3.4.18 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.18 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.18 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.18 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.18 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.18 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.18-darwin-amd64.zip(26.86 MB)
    etcd-v3.4.18-linux-amd64.tar.gz(16.60 MB)
    etcd-v3.4.18-linux-arm64.tar.gz(15.39 MB)
    etcd-v3.4.18-linux-ppc64le.tar.gz(15.20 MB)
    etcd-v3.4.18-windows-amd64.zip(16.57 MB)
    SHA256SUMS(489 bytes)
  • v3.3.27(Oct 15, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.3.27
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.3.27
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.3.27 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.3.27 \
      gcr.io/etcd-development/etcd:v3.3.27 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.3.27 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.3.27 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.3.27 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.3.27 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.3.27 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.3.27-darwin-amd64.zip(23.50 MB)
    etcd-v3.3.27-linux-amd64.tar.gz(13.61 MB)
    etcd-v3.3.27-linux-arm64.tar.gz(12.49 MB)
    etcd-v3.3.27-linux-ppc64le.tar.gz(12.29 MB)
    etcd-v3.3.27-windows-amd64.zip(13.55 MB)
    SHA256SUMS(489 bytes)
  • v3.4.17(Oct 4, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.17
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.17
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.17 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.17 \
      gcr.io/etcd-development/etcd:v3.4.17 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.17 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.17 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.17 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.17 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.17 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.17-darwin-amd64.zip(26.86 MB)
    etcd-v3.4.17-linux-amd64.tar.gz(16.60 MB)
    etcd-v3.4.17-linux-arm64.tar.gz(15.39 MB)
    etcd-v3.4.17-linux-ppc64le.tar.gz(15.20 MB)
    etcd-v3.4.17-windows-amd64.zip(16.58 MB)
    SHA256SUMS(489 bytes)
  • v3.3.26(Oct 4, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.3.26
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.3.26
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.3.26 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.3.26 \
      gcr.io/etcd-development/etcd:v3.3.26 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.3.26 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.3.26 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.3.26 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.3.26 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.3.26 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.3.26-darwin-amd64.zip(23.50 MB)
    etcd-v3.3.26-linux-amd64.tar.gz(13.61 MB)
    etcd-v3.3.26-linux-arm64.tar.gz(12.49 MB)
    etcd-v3.3.26-linux-ppc64le.tar.gz(12.29 MB)
    etcd-v3.3.26-windows-amd64.zip(13.55 MB)
    SHA256SUMS(489 bytes)
  • v3.5.0(Jun 15, 2021)

    This release is no longer recommended for production. Please use v3.4 minor until v3.5.3 is released. Read more in https://github.com/etcd-io/etcd/tree/main/CHANGELOG.

    Please see Announcing etcd 3.5 blog post.

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.0
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.0
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    

    ####### Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.0 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.0 \
      gcr.io/etcd-development/etcd:v3.5.0 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.0 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.0 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.0 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.0 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.0 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.0 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-darwin-amd64.zip(33.77 MB)
    etcd-v3.5.0-linux-amd64.tar.gz(18.49 MB)
    etcd-v3.5.0-linux-arm64.tar.gz(16.61 MB)
    etcd-v3.5.0-linux-ppc64le.tar.gz(16.02 MB)
    etcd-v3.5.0-linux-s390x.tar.gz(17.78 MB)
    etcd-v3.5.0-windows-amd64.zip(18.71 MB)
    SHA256SUMS(581 bytes)
  • v3.5.0-rc.1(Jun 9, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.0-rc.1
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.0-rc.1
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.0-rc.1 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.0-rc.1 \
      gcr.io/etcd-development/etcd:v3.5.0-rc.1 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.0-rc.1 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.0-rc.1 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.0-rc.1 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.0-rc.1 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.0-rc.1 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.0-rc.1 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-rc.1-darwin-amd64.zip(33.77 MB)
    etcd-v3.5.0-rc.1-linux-amd64.tar.gz(18.49 MB)
    etcd-v3.5.0-rc.1-linux-arm64.tar.gz(16.61 MB)
    etcd-v3.5.0-rc.1-linux-ppc64le.tar.gz(16.02 MB)
    etcd-v3.5.0-rc.1-linux-s390x.tar.gz(17.78 MB)
    etcd-v3.5.0-rc.1-windows-amd64.zip(18.71 MB)
    SHA256SUMS(611 bytes)
  • v3.5.0-rc.0(Jun 4, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.0-rc.0
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.0-rc.0
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.0-rc.0 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.0-rc.0 \
      gcr.io/etcd-development/etcd:v3.5.0-rc.0 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.0-rc.0 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.0-rc.0 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.0-rc.0 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.0-rc.0 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.0-rc.0 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.0-rc.0 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-rc.0-darwin-amd64.zip(33.77 MB)
    etcd-v3.5.0-rc.0-linux-amd64.tar.gz(18.48 MB)
    etcd-v3.5.0-rc.0-linux-arm64.tar.gz(16.61 MB)
    etcd-v3.5.0-rc.0-linux-ppc64le.tar.gz(16.02 MB)
    etcd-v3.5.0-rc.0-linux-s390x.tar.gz(17.78 MB)
    etcd-v3.5.0-rc.0-windows-amd64.zip(18.71 MB)
    SHA256SUMS(611 bytes)
  • v3.5.0-beta.4(May 26, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.0-beta.4
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.0-beta.4
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.0-beta.4 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.0-beta.4 \
      gcr.io/etcd-development/etcd:v3.5.0-beta.4 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.0-beta.4 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.0-beta.4 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.0-beta.4 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.0-beta.4 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.0-beta.4 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.0-beta.4 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-beta.4-darwin-amd64.zip(33.76 MB)
    etcd-v3.5.0-beta.4-linux-amd64.tar.gz(18.47 MB)
    etcd-v3.5.0-beta.4-linux-arm64.tar.gz(16.60 MB)
    etcd-v3.5.0-beta.4-linux-ppc64le.tar.gz(16.01 MB)
    etcd-v3.5.0-beta.4-linux-s390x.tar.gz(17.78 MB)
    etcd-v3.5.0-beta.4-windows-amd64.zip(18.70 MB)
    SHA256SUMS(623 bytes)
  • v3.5.0-beta.3(May 18, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.0-beta.3
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.0-beta.3
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.0-beta.3 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.0-beta.3 \
      gcr.io/etcd-development/etcd:v3.5.0-beta.3 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.0-beta.3 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.0-beta.3 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.0-beta.3 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.0-beta.3 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.0-beta.3 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.0-beta.3 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-beta.3-darwin-amd64.zip(33.74 MB)
    etcd-v3.5.0-beta.3-linux-amd64.tar.gz(18.47 MB)
    etcd-v3.5.0-beta.3-linux-arm64.tar.gz(16.60 MB)
    etcd-v3.5.0-beta.3-linux-ppc64le.tar.gz(16.01 MB)
    etcd-v3.5.0-beta.3-linux-s390x.tar.gz(17.77 MB)
    etcd-v3.5.0-beta.3-windows-amd64.zip(18.69 MB)
    SHA256SUMS(623 bytes)
  • v3.5.0-beta.1(May 18, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.5.0-beta.1
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.5.0-beta.1
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    /tmp/etcd-download-test/etcdutl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.5.0-beta.1 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.5.0-beta.1 \
      gcr.io/etcd-development/etcd:v3.5.0-beta.1 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.5.0-beta.1 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.5.0-beta.1 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.5.0-beta.1 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.5.0-beta.1 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.5.0-beta.1 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    docker exec etcd-gcr-v3.5.0-beta.1 /bin/sh -c "/usr/local/bin/etcdutl version"
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-beta.1-darwin-amd64.zip(33.75 MB)
    etcd-v3.5.0-beta.1-linux-amd64.tar.gz(18.47 MB)
    etcd-v3.5.0-beta.1-linux-arm64.tar.gz(16.60 MB)
    etcd-v3.5.0-beta.1-linux-ppc64le.tar.gz(16.01 MB)
    etcd-v3.5.0-beta.1-linux-s390x.tar.gz(17.77 MB)
    etcd-v3.5.0-beta.1-windows-amd64.zip(18.69 MB)
    SHA256SUMS(623 bytes)
  • v3.4.16(May 12, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.16
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.16
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.16 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.16 \
      gcr.io/etcd-development/etcd:v3.4.16 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.16 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.16 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.16 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.16 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.16 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.16-darwin-amd64.zip(26.85 MB)
    etcd-v3.4.16-linux-amd64.tar.gz(16.60 MB)
    etcd-v3.4.16-linux-arm64.tar.gz(15.39 MB)
    etcd-v3.4.16-linux-ppc64le.tar.gz(15.19 MB)
    etcd-v3.4.16-windows-amd64.zip(16.57 MB)
    SHA256SUMS(489 bytes)
  • v3.2.32(Mar 28, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.2.32
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GITHUB_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.2.32
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.2.32 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.2.32 \
      gcr.io/etcd-development/etcd:v3.2.32 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new
    
    docker exec etcd-gcr-v3.2.32 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.2.32 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.2.32 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.2.32 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.2.32 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.2.32-darwin-amd64.zip(22.63 MB)
    etcd-v3.2.32-linux-amd64.tar.gz(12.92 MB)
    etcd-v3.2.32-linux-arm64.tar.gz(11.84 MB)
    etcd-v3.2.32-linux-ppc64le.tar.gz(11.68 MB)
    etcd-v3.2.32-windows-amd64.zip(12.86 MB)
    SHA256SUMS(489 bytes)
  • v3.4.15(Feb 26, 2021)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Note

    Initially the tarballs were pushed without *.tar.gz artifacts (see https://github.com/etcd-io/etcd/issues/12734#issuecomment-804006322). The new version of gziped artifacts were added on 2021-03-22, but (most-likely) due to different gzip version, the SHA256 checksum changed. The original SHA256SUMS was renamed to SHA256SUMS.old and the new version of SHA256SUMS file was pushed.

    Linux
    ETCD_VER=v3.4.15
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.15
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.15 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.15 \
      gcr.io/etcd-development/etcd:v3.4.15 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.15 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.15-darwin-amd64.zip(26.84 MB)
    etcd-v3.4.15-linux-amd64.tar(44.74 MB)
    etcd-v3.4.15-linux-amd64.tar.gz(16.59 MB)
    etcd-v3.4.15-linux-arm64.tar(43.03 MB)
    etcd-v3.4.15-linux-arm64.tar.gz(15.38 MB)
    etcd-v3.4.15-linux-ppc64le.tar(43.73 MB)
    etcd-v3.4.15-linux-ppc64le.tar.gz(15.19 MB)
    etcd-v3.4.15-windows-amd64.zip(16.56 MB)
    SHA256SUMS(487 bytes)
    SHA256SUMS.old(489 bytes)
  • v3.5.0-alpha.0(Feb 25, 2021)

    v3.5.0-alpha.0 is an experimental release in order to:

    • test the "modularized" release process
    • enable integration testing with the modularized code of 3.5.x.

    See https://github.com/etcd-io/etcd/issues/12498 for more context.

    Source code(tar.gz)
    Source code(zip)
    etcd-v3.5.0-alpha.0-darwin-amd64.zip(22.97 MB)
    etcd-v3.5.0-alpha.0-linux-amd64.tar.gz(12.57 MB)
    etcd-v3.5.0-alpha.0-linux-arm64.tar.gz(11.33 MB)
    etcd-v3.5.0-alpha.0-linux-ppc64le.tar.gz(10.99 MB)
    etcd-v3.5.0-alpha.0-linux-s390x.tar.gz(12.14 MB)
    etcd-v3.5.0-alpha.0-windows-amd64.zip(12.63 MB)
  • v3.4.14(Nov 25, 2020)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.14
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.14
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.14 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.14 \
      gcr.io/etcd-development/etcd:v3.4.14 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.14 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.14 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.14 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.14 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.14 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.14-darwin-amd64.zip(26.80 MB)
    etcd-v3.4.14-linux-amd64.tar.gz(16.56 MB)
    etcd-v3.4.14-linux-arm64.tar.gz(15.36 MB)
    etcd-v3.4.14-linux-ppc64le.tar.gz(15.16 MB)
    etcd-v3.4.14-windows-amd64.zip(16.54 MB)
    SHA256SUMS(489 bytes)
  • v3.4.13(Aug 24, 2020)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.13
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.13
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.13 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.13 \
      gcr.io/etcd-development/etcd:v3.4.13 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.13 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.13 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.13 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.13 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.13 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.13-darwin-amd64.zip(26.80 MB)
    etcd-v3.4.13-linux-amd64.tar.gz(16.56 MB)
    etcd-v3.4.13-linux-arm64.tar.gz(15.36 MB)
    etcd-v3.4.13-linux-ppc64le.tar.gz(15.16 MB)
    etcd-v3.4.13-windows-amd64.zip(16.54 MB)
    SHA256SUMS(489 bytes)
  • v3.3.25(Aug 24, 2020)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.3.25
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.3.25
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    ETCDCTL_API=3 /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.3.25 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.3.25 \
      gcr.io/etcd-development/etcd:v3.3.25 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.3.25 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.3.25 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.3.25 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.3.25 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.3.25 /bin/sh -c "ETCDCTL_API=3 /usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.3.25-darwin-amd64.zip(23.49 MB)
    etcd-v3.3.25-linux-amd64.tar.gz(13.60 MB)
    etcd-v3.3.25-linux-arm64.tar.gz(12.48 MB)
    etcd-v3.3.25-linux-ppc64le.tar.gz(12.29 MB)
    etcd-v3.3.25-windows-amd64.zip(13.55 MB)
    SHA256SUMS(489 bytes)
  • v3.4.12(Aug 19, 2020)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.12
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.12
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.12 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.12 \
      gcr.io/etcd-development/etcd:v3.4.12 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.12 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.12 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.12 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.12 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.12 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.12-darwin-amd64.zip(26.80 MB)
    etcd-v3.4.12-linux-amd64.tar.gz(16.56 MB)
    etcd-v3.4.12-linux-arm64.tar.gz(15.36 MB)
    etcd-v3.4.12-linux-ppc64le.tar.gz(15.16 MB)
    etcd-v3.4.12-windows-amd64.zip(16.54 MB)
    SHA256SUMS(489 bytes)
  • v3.4.11(Aug 18, 2020)

    Please check out CHANGELOG for a full list of changes. And make sure to read upgrade guide before upgrading etcd (there may be breaking changes).

    For installation guides, please check out play.etcd.io and operating etcd. Latest support status for common architectures and operating systems can be found at supported platforms.

    Linux
    ETCD_VER=v3.4.11
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
    rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    # start a local etcd server
    /tmp/etcd-download-test/etcd
    
    # write,read to etcd
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 put foo bar
    /tmp/etcd-download-test/etcdctl --endpoints=localhost:2379 get foo
    
    macOS (Darwin)
    ETCD_VER=v3.4.11
    
    # choose either URL
    GOOGLE_URL=https://storage.googleapis.com/etcd
    GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
    DOWNLOAD_URL=${GOOGLE_URL}
    
    rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test
    
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-darwin-amd64.zip -o /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    unzip /tmp/etcd-${ETCD_VER}-darwin-amd64.zip -d /tmp && rm -f /tmp/etcd-${ETCD_VER}-darwin-amd64.zip
    mv /tmp/etcd-${ETCD_VER}-darwin-amd64/* /tmp/etcd-download-test && rm -rf mv /tmp/etcd-${ETCD_VER}-darwin-amd64
    
    /tmp/etcd-download-test/etcd --version
    /tmp/etcd-download-test/etcdctl version
    
    Docker

    etcd uses gcr.io/etcd-development/etcd as a primary container registry, and quay.io/coreos/etcd as secondary.

    rm -rf /tmp/etcd-data.tmp && mkdir -p /tmp/etcd-data.tmp && \
      docker rmi gcr.io/etcd-development/etcd:v3.4.11 || true && \
      docker run \
      -p 2379:2379 \
      -p 2380:2380 \
      --mount type=bind,source=/tmp/etcd-data.tmp,destination=/etcd-data \
      --name etcd-gcr-v3.4.11 \
      gcr.io/etcd-development/etcd:v3.4.11 \
      /usr/local/bin/etcd \
      --name s1 \
      --data-dir /etcd-data \
      --listen-client-urls http://0.0.0.0:2379 \
      --advertise-client-urls http://0.0.0.0:2379 \
      --listen-peer-urls http://0.0.0.0:2380 \
      --initial-advertise-peer-urls http://0.0.0.0:2380 \
      --initial-cluster s1=http://0.0.0.0:2380 \
      --initial-cluster-token tkn \
      --initial-cluster-state new \
      --log-level info \
      --logger zap \
      --log-outputs stderr
    
    docker exec etcd-gcr-v3.4.11 /bin/sh -c "/usr/local/bin/etcd --version"
    docker exec etcd-gcr-v3.4.11 /bin/sh -c "/usr/local/bin/etcdctl version"
    docker exec etcd-gcr-v3.4.11 /bin/sh -c "/usr/local/bin/etcdctl endpoint health"
    docker exec etcd-gcr-v3.4.11 /bin/sh -c "/usr/local/bin/etcdctl put foo bar"
    docker exec etcd-gcr-v3.4.11 /bin/sh -c "/usr/local/bin/etcdctl get foo"
    
    Source code(tar.gz)
    Source code(zip)
    etcd-v3.4.11-darwin-amd64.zip(26.80 MB)
    etcd-v3.4.11-linux-amd64.tar.gz(16.56 MB)
    etcd-v3.4.11-linux-arm64.tar.gz(15.36 MB)
    etcd-v3.4.11-linux-ppc64le.tar.gz(15.16 MB)
    etcd-v3.4.11-windows-amd64.zip(16.53 MB)
    SHA256SUMS(489 bytes)
Owner
etcd-io
etcd Development and Communities
etcd-io
A distributed key-value storage system developed by Alibaba Group

Product Overview Tair is fast-access memory (MDB)/persistent (LDB) storage service. Using a high-performance and high-availability distributed cluster

Alibaba 2k Nov 21, 2022
BlobStore is a highly reliable,highly available and ultra-large scale distributed storage system

BlobStore Overview Documents Build BlobStore Deploy BlobStore Manage BlobStore License Overview BlobStore is a highly reliable,highly available and ul

CubeFS 14 Oct 10, 2022
The TinyKV course builds a key-value storage system with the Raft consensus algorithm.

The TinyKV Course The TinyKV course builds a key-value storage system with the Raft consensus algorithm. It is inspired by MIT 6.824 and TiKV Project.

jaegerwang 1 Nov 19, 2021
gathering distributed key-value datastores to become a cluster

go-ds-cluster gathering distributed key-value datastores to become a cluster About The Project This project is going to implement go-datastore in a fo

FileDrive Team 16 Aug 19, 2022
Asynq: simple, reliable, and efficient distributed task queue in Go

Asynq: simple, reliable, and efficient distributed task queue in Go

Ken Hibino 4.7k Nov 21, 2022
Elastic Key-Value Storage With Strong Consistency and Reliability

What is Elasticell? Elasticell is a distributed NoSQL database with strong consistency and reliability. Compatible with Redis protocol Use Elasticell

Deep Fabric 511 Nov 7, 2022
Distributed-Services - Distributed Systems with Golang to consequently build a fully-fletched distributed service

Distributed-Services This project is essentially a result of my attempt to under

Hamza Yusuff 6 Jun 1, 2022
An implementation of a distributed KV store backed by Raft tolerant of node failures and network partitions 🚣

barge A simple implementation of a consistent, distributed Key:Value store which uses the Raft Concensus Algorithm. This project launches a cluster of

Shehjad Khan 0 Nov 24, 2021
Fast, efficient, and scalable distributed map/reduce system, DAG execution, in memory or on disk, written in pure Go, runs standalone or distributedly.

Gleam Gleam is a high performance and efficient distributed execution system, and also simple, generic, flexible and easy to customize. Gleam is built

Chris Lu 3.1k Nov 27, 2022
A distributed system for embedding-based retrieval

Overview Vearch is a scalable distributed system for efficient similarity search of deep learning vectors. Architecture Data Model space, documents, v

vector search infrastructure for AI applications 1.5k Nov 18, 2022
💡 A Distributed and High-Performance Monitoring System. The next generation of Open-Falcon

夜莺简介 夜莺是一套分布式高可用的运维监控系统,最大的特点是混合云支持,既可以支持传统物理机虚拟机的场景,也可以支持K8S容器的场景。同时,夜莺也不只是监控,还有一部分CMDB的能力、自动化运维的能力,很多公司都基于夜莺开发自己公司的运维平台。开源的这部分功能模块也是商业版本的一部分,所以可靠性有保

DiDi 5.6k Nov 24, 2022
a dynamic configuration framework used in distributed system

go-archaius This is a light weight configuration management framework which helps to manage configurations in distributed system The main objective of

null 203 Nov 1, 2022
Verifiable credential system on Cosmos with IBC for Distributed Identities

CertX This is a project designed to demonstrate the use of IBC between different zones in the Cosmos ecosystem for privacy preserving credential manag

bwty 6 Mar 29, 2022
A distributed and coördination-free log management system

OK Log is archived I hoped to find the opportunity to continue developing OK Log after the spike of its creation. Unfortunately, despite effort, no su

OK Log 3k Nov 18, 2022
A distributed MySQL binlog storage system built on Raft

What is kingbus? 中文 Kingbus is a distributed MySQL binlog store based on raft. Kingbus can act as a slave to the real master and as a master to the sl

Fei Chen 854 Oct 30, 2022
Dkron - Distributed, fault tolerant job scheduling system https://dkron.io

Dkron - Distributed, fault tolerant job scheduling system for cloud native environments Website: http://dkron.io/ Dkron is a distributed cron service,

Distributed Works 3.4k Nov 25, 2022
JuiceFS is a distributed POSIX file system built on top of Redis and S3.

JuiceFS is a high-performance POSIX file system released under GNU Affero General Public License v3.0. It is specially optimized for the cloud-native

Juicedata, Inc 7k Nov 23, 2022
implementation of some distributed system techniques

Distributed Systems These applications were built with the objective of studding a distributed systems using the most recent technics. The main ideia

Rafael A. C 6 Feb 18, 2022