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 готов к использованию.