etcd
| etcd | |
|---|---|
| Initial release | January 28, 2015[1] |
| Repository |
|
| Written in | Go |
| Engine | |
| Service name | etcd |
| Type | Key–value database |
| License | Apache License 2.0 |
etcd is a key-value database commonly deployed with distributed systems.[2] The software is used by Kubernetes.[3] It is written in the Go programming language and published under the Apache License 2.0.
History
[edit | edit source]etcd was originally developed as part of the CoreOS project, it was first announced in June of 2013.[4] It was later donated the project to the Cloud Native Computing Foundation (CNCF).[5] It became a CNCF incubating project in December 2018, and graduated in November of 2020.[3][6] At the time, the maintainer team consisted of 10 members, including: Amazon, Google Cloud, IBM, Alibaba, and Red Hat.[6] As of 2018[update], all 32 of the CFNFs Kubernetes compliant distributions and platforms used etcd as their datastore.[4]
According to a 2024 report by the CNCF, the project had over 3300 contributers and at least 450 contributing companies.[7]
The first stable version of etcd, v2.0.0, was released on January 28, 2015.[1][4] v3.0.0 was released on June 30, 2016.[8]
Name
[edit | edit source]The name "etcd" is derived from the Unix convention of storing system configuration files in the /etc directory, which applies to a single system, etcd stores configurations for a distributed system, hence the appended "d" standing for "distributed".[9][10]
Architecture
[edit | edit source]The software consists of three executables:[5]
etcdetcdctletcdutl
On particular database entries, locks can be set to prevent writing by other entities while it is being used.[5] It uses the raft consensus algorithm.[6][3]
Etcd was initially inspired by Chubby, a distributed lock manager developed Google in 2006, as well as Apache ZooKeeper.[11][12][13][14]
Features
[edit | edit source]It supports TLS/SSL encryption, exposes a client-facing gRPC API,[6] and supports multiversion concurrency control,[15] and runtime cluster membership reconfiguration.[15][16]
The official IANA assigned ports for etcd are TCP 2379/2380.[1][17]
Users
[edit | edit source]Etcd is used to store cluster data by default for most Kubernetes implementations,[4][3] like AWS EKS.[18] One notable exception being Google Kubernetes Engine, whose control-plane datastore was migrated from etcd to a Spanner-based store in 2024, while preserving etcd compatibility.[19]
Kubernetes also depends on the etcd API to communicate with its datastore, meaning that all storage backends used by it are required to support the etcd API.[19][20]
See also
[edit | edit source]References
[edit | edit source]- ^ a b c Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b c d Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b c d Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b c Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b c d Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ a b Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).