Files
my-docs/Containerization-Orchestration/Kubernetes/etcd-external.md

3.7 KiB

🛠️ Setting Up a High Availability etcd Cluster for Kubernetes

This guide walks you through installing a 3-node etcd cluster and using it as an external HA datastore for Kubernetes.


📦 Step 1: Install etcd

Download the etcd binary:

wget https://github.com/etcd-io/etcd/releases/download/v3.6.2/etcd-v3.6.2-linux-amd64.tar.gz

Extract it:

tar -xzvf etcd-v3.6.2-linux-amd64.tar.gz

Move binaries to the system path:

cp etcd-v3.6.2-linux-amd64/etcd* /usr/local/bin

Create the data directory:

mkdir -p /var/lib/etcd

⚙️ Step 2: Configure etcd Systemd Services

Create a systemd service config at:

/etc/systemd/system/etcd.conf

🔹 Server 1 (192.168.6.170)

[Service]
ExecStart=/usr/local/bin/etcd \
  --name etcd-1 \
  --listen-client-urls http://192.168.6.170:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://192.168.6.170:2379 \
  --initial-advertise-peer-urls http://192.168.6.170:2380 \
  --listen-peer-urls http://192.168.6.170:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster etcd-1=http://192.168.6.170:2380,etcd-2=http://192.168.6.171:2380,etcd-3=http://192.168.6.172:2380 \
  --initial-cluster-state new \
  --data-dir /var/lib/etcd
Restart=always
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

🔹 Server 2 (192.168.6.171)

[Service]
ExecStart=/usr/local/bin/etcd \
  --name etcd-2 \
  --listen-client-urls http://192.168.6.171:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://192.168.6.171:2379 \
  --initial-advertise-peer-urls http://192.168.6.171:2380 \
  --listen-peer-urls http://192.168.6.171:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster etcd-1=http://192.168.6.170:2380,etcd-2=http://192.168.6.171:2380,etcd-3=http://192.168.6.172:2380 \
  --initial-cluster-state new \
  --data-dir /var/lib/etcd
Restart=always
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

🔹 Server 3 (192.168.6.172)

[Service]
ExecStart=/usr/local/bin/etcd \
  --name etcd-3 \
  --listen-client-urls http://192.168.6.172:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://192.168.6.172:2379 \
  --initial-advertise-peer-urls http://192.168.6.172:2380 \
  --listen-peer-urls http://192.168.6.172:2380 \
  --initial-cluster-token etcd-cluster-1 \
  --initial-cluster etcd-1=http://192.168.6.170:2380,etcd-2=http://192.168.6.171:2380,etcd-3=http://192.168.6.172:2380 \
  --initial-cluster-state new \
  --data-dir /var/lib/etcd
Restart=always
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

▶️ Step 3: Start etcd Service

Enable and start the etcd service on each server:

systemctl start etcd
systemctl enable etcd

Step 4: Verify etcd Cluster Health

Check endpoint health:

etcdctl --endpoints http://<IP>:2379 endpoint health

Check cluster membership:

etcdctl --endpoints http://<IP-SERVER-1>:2379 member list

If all members are healthy and visible, you're ready to move on.


☸️ Step 5: Install Kubernetes (Using External etcd)

Create a configuration file config.yaml on the master node:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
etcd:
  external:
    endpoints:
    - http://192.168.6.170:2379
    - http://192.168.6.171:2379
    - http://192.168.6.172:2379

networking:
  podSubnet: 10.244.0.0/16

Initialize Kubernetes:

kubeadm init --config config.yaml

🎉 Done!

You now have a Kubernetes cluster with external, high availability etcd. :)