etcd

Thank you for reading this post, don't forget to subscribe!

etcd — это высо­ко­на­дёж­ное рас­пре­де­лён­ное хра­ни­ли­ще для пар ключ-зна­че­ние.  etcd фоку­си­ру­ет­ся толь­ко на хра­не­нии и свя­зан­ны­ми с этим зада­ча­ми. Ну и «высо­ко­на­дёж­ный» и «рас­пре­де­лён­ный» под­ра­зу­ме­ва­ет, что если даже одна из кла­сте­ра машин с etcd упа­дёт, то дан­ны­ми и кла­сте­ром всё будет в порядке

 

etcd исполь­зу­ет­ся как база дан­ных для kubernetes. Даль­ше я опи­шу как запу­стить кла­стер и это будет пер­вый шаг к запус­ку kubernetes кластера

 

Для это нам нуж­но будет 3 сервера:

 

Hostname        IP
etcd1        10.242.144.133
etcd2        10.242.144.142
etcd3        10.242.144.143

 

в тер­ми­на­ле добав­ля­ем переменные(т.е. выпол­ня­ем в bash):

ETCD_VER=v3.1.12

GOOGLE_URL=https://storage.googleapis.com/etcd

DOWNLOAD_URL=${GOOGLE_URL}

 

кача­ем:

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz  --insecure

 

созда­ём дирек­то­рию в кото­рую будет рас­па­ко­ван архив:

mkdir -p /tmp/etcd-download-test

 

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

mv -f /tmp/etcd-download-test/etcd /sbin/

mv -f /tmp/etcd-download-test/etcdctl /sbin/

 

chmod +x /sbin/etcd /sbin/etcdctl

про­ве­ря­ем версию:

etcd --version

 

Так же мож­но про­из­ве­сти уста­нов­ку выполнив:
yum install etcd

 

Созда­ем поль­зо­ва­те­ля etcd с home дирек­то­ри­ей /var/lib/etcd

adduser etcd --home-dir /var/lib/etcd --shell /sbin/nologin

 

Так же созда­ем дерик­то­рию /etc/etcd :

mkdir /etc/etcd

 

Созда­ем файл с настрой­ка­ми кла­сте­ра etcd.conf

vim /etc/etcd/etcd.conf

Для сер­ве­ра etcd1:

 

ETCD_NAME="etcd1"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://10.242.144.133:2379"

ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.242.144.133:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcdKuberNeTesCluster"

ETCD_INITIAL_CLUSTER="etcd1=http://10.242.144.133:2380,etcd2=http://10.242.144.142:2380,etcd3=http://10.242.144.143:2380"

ETCD_INITIAL_CLUSTER_STATE="new"

ETCD_DATA_DIR="/var/lib/etcd"

ETCD_ELECTION_TIMEOUT="5000"

ETCD_HEARTBEAT_INTERVAL="1000"

 

Для сер­ве­ра etcd2:

 

ETCD_NAME="etcd2"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://10.242.144.142:2379"

ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.242.144.142:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcdKuberNeTesCluster"

ETCD_INITIAL_CLUSTER="etcd1=http://10.242.144.133:2380,etcd2=http://10.242.144.142:2380,etcd3=http://10.242.144.143:2380"

ETCD_INITIAL_CLUSTER_STATE="new"

ETCD_DATA_DIR="/var/lib/etcd"

ETCD_ELECTION_TIMEOUT="5000"

ETCD_HEARTBEAT_INTERVAL="1000"

 

Для сер­ве­ра etcd3:

 

ETCD_NAME="etcd3"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_ADVERTISE_CLIENT_URLS="http://10.242.144.143:2379"

ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.242.144.143:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcdKuberNeTesCluster"

ETCD_INITIAL_CLUSTER="etcd1=http://10.242.144.133:2380,etcd2=http://10.242.144.142:2380,etcd3=http://10.242.144.143:2380"

ETCD_INITIAL_CLUSTER_STATE="new"

ETCD_DATA_DIR="/var/lib/etcd"

ETCD_ELECTION_TIMEOUT="5000"

ETCD_HEARTBEAT_INTERVAL="1000"

 

----------------------------------------

Для всех сер­ве­ров созда­дим unit для systemd. Созда­ем файл etcd.service в дирек­то­рии /usr/lib/systemd/system:

vim /usr/lib/systemd/system/etcd.service

[Unit]

Description=Etcd Server

After=network.target

After=network-online.target

Wants=network-online.target

 

[Service]

Type=notify

WorkingDirectory=/var/lib/etcd/

EnvironmentFile=-/etc/etcd/etcd.conf

User=etcd

# set GOMAXPROCS to number of processors

ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /sbin/etcd"

Restart=on-failure

LimitNOFILE=65536

 

[Install]

WantedBy=multi-user.target

----------------------------------

 

Созда­дим рабо­чую директорию:
mkdir /var/lib/etcd/

поме­ня­ем владельца:

chown -R etcd:etcd /var/lib/etcd/
Доба­вим сер­вис в авто­старт и запу­стим его:

systemctl enable etcd

systemctl start etcd

 

Про­ве­ря­ем состо­я­ние кластера:

[root@centos7 ~]# etcdctl member list

b7f40c1f4cea05de: name=etcd3 peerURLs=http://10.242.144.143:2380 clientURLs=http://10.242.144.143:2379 isLeader=false

bf91245c8488cd19: name=etcd1 peerURLs=http://10.242.144.133:2380 clientURLs=http://10.242.144.133:2379 isLeader=true

f4cc32e2c28c35bf: name=etcd2 peerURLs=http://10.242.144.142:2380 clientURLs=http://10.242.144.142:2379 isLeader=false

 

[root@centos7 ~]# ETCDCTL_API=3 etcdctl member list

b7f40c1f4cea05de, started, etcd3, http://10.242.144.143:2380, http://10.242.144.143:2379

bf91245c8488cd19, started, etcd1, http://10.242.144.133:2380, http://10.242.144.133:2379

f4cc32e2c28c35bf, started, etcd2, http://10.242.144.142:2380, http://10.242.144.142:2379

 

при нали­чии ошибки:

client: etcd cluster is unavailable or misconfigured; error #0: client: etcd member

 

если исполь­зу­ет­ся прок­си, то необ­хо­ди­мо его исключить:

export no_proxy="10.242.144.133, 10.242.144.142, 10.242.144.143"

 

curl -L http://127.0.0.1:2379/health

{«health»: «true»}

 

Кла­стер etcd готов к использованию.