How to Install etcd on Ubuntu 22.04|20.04|18.04|16.04

Posted on 69 views

Etcd is a simple, reliable, fast and secure open source key-value store written in Go. It uses the Raft consensus algorithm to manage a highly-available replicated log. In this guide, we will install a single node (one member) etcd on Ubuntu 22.04|20.04|18.04|16.04.

Note: This is a single node cluster setup, for three node cluster, refer to the guide below.

Install etcd on Ubuntu 22.04|20.04|18.04|16.04

Etcd is distributed as a binary package though you can build it from source. In this guide, we’re going to download a pre-built binary package.

Check the pre-built release binaries before you proceed to get the latest release tag. Install curl and wget packages on your Ubuntu system

sudo apt update
sudo apt install vim wget curl

Download the latest release of etcd on Ubuntu:

export RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d '"' -f 4)
wget https://github.com/etcd-io/etcd/releases/download/$RELEASE/etcd-$RELEASE-linux-amd64.tar.gz

Extract downloaded archive file.

tar xvf etcd-$RELEASE-linux-amd64.tar.gz

Change to new file directory

cd etcd-$RELEASE-linux-amd64

Move etcd and etcdctl binary files to /usr/local/bin directory.

sudo mv etcd etcdctl etcdutl /usr/local/bin 

Confirm version:

$ etcd --version
etcd Version: 3.5.2
Git SHA: 99018a77b
Go Version: go1.16.3
Go OS/Arch: linux/amd64

$ etcdctl version
etcdctl version: 3.5.2
API version: 3.5

$ etcdutl version
etcdutl version: 3.5.2
API version: 3.5

Create Etcd configuration file and data directory.

sudo mkdir -p /var/lib/etcd/
sudo mkdir /etc/etcd

Create etcd system user

sudo groupadd --system etcd
sudo useradd -s /sbin/nologin --system -g etcd etcd

Set /var/lib/etcd/ directory ownership to etcd user.

sudo chown -R etcd:etcd /var/lib/etcd/

Configure Systemd and start etcd service

Create a new systemd service file for etcd.

 sudo vim /etc/systemd/system/etcd.service

Paste below data into the file.

[Unit]
Description=etcd key-value store
Documentation=https://github.com/etcd-io/etcd
After=network.target

[Service]
User=etcd
Type=notify
Environment=ETCD_DATA_DIR=/var/lib/etcd
Environment=ETCD_NAME=%m
ExecStart=/usr/local/bin/etcd
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

Reload systemd service and start etcd on Ubuntu 18,04 / Ubuntu 16,04

sudo systemctl  daemon-reload
sudo systemctl  start etcd.service

Enable the service to start at system boot:

$ sudo systemctl enable etcd.service
Created symlink /etc/systemd/system/multi-user.target.wants/etcd.service → /etc/systemd/system/etcd.service.

Check service status:

$ systemctl status etcd.service
● etcd.service - etcd key-value store
     Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2022-02-04 07:40:01 UTC; 46s ago
       Docs: https://github.com/etcd-io/etcd
   Main PID: 63132 (etcd)
      Tasks: 7 (limit: 4677)
     Memory: 6.9M
     CGroup: /system.slice/etcd.service
             └─63132 /usr/local/bin/etcd

Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: {"level":"info","ts":"2022-02-04T07:40:01.132Z","caller":"etcdserver/server.go:2031","msg":"published local member to cluster through raft","local-mem>
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: {"level":"info","ts":"2022-02-04T07:40:01.132Z","caller":"etcdserver/server.go:2480","msg":"setting up initial cluster version using v2 API","cluster->
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: "level":"info","ts":"2022-02-04T07:40:01.132Z","caller":"embed/serve.go:98","msg":"ready to serve client requests"
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: {"level":"info","ts":"2022-02-04T07:40:01.133Z","caller":"membership/cluster.go:584","msg":"set initial cluster version","cluster-id":"cdf818194e3a8c3>
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: "level":"info","ts":"2022-02-04T07:40:01.133Z","caller":"api/capability.go:75","msg":"enabled capabilities for version","cluster-version":"3.5"
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: "level":"info","ts":"2022-02-04T07:40:01.133Z","caller":"etcdserver/server.go:2504","msg":"cluster version is updated","cluster-version":"3.5"
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: {"level":"info","ts":"2022-02-04T07:40:01.133Z","caller":"embed/serve.go:140","msg":"serving client traffic insecurely; this is strongly discouraged!">
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: "level":"info","ts":"2022-02-04T07:40:01.134Z","caller":"etcdmain/main.go:47","msg":"notifying init daemon"
Feb 04 07:40:01 ubuntu-20-04-01 etcd[63132]: "level":"info","ts":"2022-02-04T07:40:01.134Z","caller":"etcdmain/main.go:53","msg":"successfully notified init daemon"
Feb 04 07:40:01 ubuntu-20-04-01 systemd[1]: Started etcd key-value store.

The service will start on localhost address port 2379

$ ss -tunelp | grep 2379
 tcp   LISTEN 0 128 127.0.0.1:2379 0.0.0.0:*  uid:998 ino:72981 sk:45c <-> 

$ etcdctl member list
 8e9e05c52164694d: name=5fbf3d068d6c491eb687a7a427fc2263 peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true

Checking health status:

$ etcdctl  endpoint health
127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.871483ms

In our next tutorial, I’ll cover setting up Etcd cluster on Ubuntu Linux system.

Related: How to Install etcd on RHEL / CentOS 8

coffee

Gravatar Image
A systems engineer with excellent skills in systems administration, cloud computing, systems deployment, virtualization, containers, and a certified ethical hacker.