etcd
This service deploys etcd, a distributed, reliable key-value store for the most critical data of a distributed system.
Services
etcd: The etcd key-value store service.
Environment Variables
| Variable Name | Description | Default Value |
|---|---|---|
| ETCD_VERSION | etcd image version | v3.6.0 |
| ETCD_CLIENT_PORT_OVERRIDE | Host port mapping for client connections (2379) | 2379 |
| ETCD_PEER_PORT_OVERRIDE | Host port mapping for peer connections (2380) | 2380 |
| ETCD_NAME | Human-readable name for this etcd member | etcd-node |
| ETCD_INITIAL_CLUSTER | Initial cluster configuration | etcd-node=http://localhost:2380 |
| ETCD_INITIAL_CLUSTER_STATE | Initial cluster state ('new' or 'existing') | new |
| ETCD_INITIAL_CLUSTER_TOKEN | Initial cluster token for bootstrap | etcd-cluster |
| ETCD_AUTO_COMPACTION_RETENTION | Auto compaction retention in hours | 1 |
| ETCD_QUOTA_BACKEND_BYTES | Storage size limit in bytes | 2147483648 (2GB) |
| ETCD_HEARTBEAT_INTERVAL | Heartbeat interval in milliseconds | 100 |
| ETCD_ELECTION_TIMEOUT | Election timeout in milliseconds | 1000 |
| ETCD_ENABLE_V2 | Enable etcd v2 API | false |
Please modify the .env file as needed for your use case.
Volumes
etcd_data: A volume for storing etcd data persistently.
Network Ports
2379: Client communication port2380: Peer communication port (for clustering)
Single Node Setup
The default configuration runs etcd as a single node, suitable for development and testing.
Cluster Setup
To set up a multi-node etcd cluster, you need to:
- Define multiple etcd services in your compose file
- Configure the
ETCD_INITIAL_CLUSTERvariable properly - Set unique names for each node
Example for a 3-node cluster:
services:
etcd1:
# ... base config
environment:
- ETCD_NAME=etcd1
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd1:2379
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd1:2380
etcd2:
# ... base config
environment:
- ETCD_NAME=etcd2
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd2:2379
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd2:2380
etcd3:
# ... base config
environment:
- ETCD_NAME=etcd3
- ETCD_INITIAL_CLUSTER=etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd3:2379
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd3:2380
Client Access
Using etcdctl
Connect to etcd using the etcdctl client:
# Set endpoint
export ETCDCTL_ENDPOINTS=http://localhost:2379
# Put a key-value pair
etcdctl put mykey myvalue
# Get a value
etcdctl get mykey
# List all keys
etcdctl get --prefix ""
Using HTTP API
etcd provides a RESTful HTTP API:
# Put a key-value pair
curl -X PUT http://localhost:2379/v3/kv/put \
-H 'Content-Type: application/json' \
-d '{"key":"bXlrZXk=","value":"bXl2YWx1ZQ=="}'
# Get a value
curl -X POST http://localhost:2379/v3/kv/range \
-H 'Content-Type: application/json' \
-d '{"key":"bXlrZXk="}'
Performance Tuning
- Adjust
ETCD_QUOTA_BACKEND_BYTESbased on your storage needs - Tune
ETCD_HEARTBEAT_INTERVALandETCD_ELECTION_TIMEOUTfor your network latency - Configure
ETCD_AUTO_COMPACTION_RETENTIONto manage data size
Security Notes
- The default configuration is for development/testing only
- For production, enable TLS encryption and authentication
- Consider network security and firewall rules
- Regular backups are recommended
Monitoring
etcd exposes metrics at http://localhost:2379/metrics in Prometheus format.
License
etcd is licensed under the Apache 2.0 license.