Kubernetes the hard way etcd setup

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

ETCD

Вторая версия статьи, максимально подробная (первая версия тут - https://noname.com.ua/mediawiki/index.php/Etcd)


Требования к окружению

  • 3 ноды raspberry pi установленные и настроенные, имеющие коннективити друг с другом
  • для работы etcd выделен отдельный VLAN с отдельным адресным пространством
  • установленный и настроенный PKI на основе Hashicorp Vault (в примере - по адресу http://vault.home)
  • Настроенный DNS и созданы записи для всех доменов в примере (в моем случае DNS поднят на MikroTik)

DNS

Подчеркну что все взаимоджействие происходит исключительно по доменным именам
Создаем три записи DNS (для трех мастер-нод каждая из которых находится в своей "Availability Zone" (В кавычках по тому что в лабе это все очень условно)

/ip/dns/static/add name=etcd.master.az1.k8s.cluster.home address=10.0.11.1<br>
/ip/dns/static/add name=etcd.master.az2.k8s.cluster.home address=10.0.21.1<br>
/ip/dns/static/add name=etcd.master.az3.k8s.cluster.home address=10.0.31.1<br>

Установка из пакетов (на всех трех нодах)

Собирать код самой последней версии под архитектуру АРМ откровенно лениво

apt -y \
  install \
    etcd \
    etcd-client \
    etcd-server \
    etcd-discovery
dpkg -l | grep etcd
ii  etcd                            3.3.25+dfsg-7                           all          Transitional package for etcd-client and etcd-server
ii  etcd-client                     3.3.25+dfsg-7                           arm64        highly-available key value store -- client
ii  etcd-discovery                  2.0.0+git2019.04.19.git.78fb45d3c9-4    arm64        etcd discovery service
ii  etcd-server                     3.3.25+dfsg-7                           arm64        highly-available key value store -- daemon

Остановить сервис (запускается после установки)
systemctl stop etcd


Переместить юнит (свой вариант юнита создается ниже)
mv /usr/lib/systemd/system/etcd.service /root/etcd.service.original


Systemd unit

/etc/systemd/system/etcd.service
[Unit]
Description=etcd
Documentation=https://github.com/coreos

[Service]
Type=notify
LimitNOFILE=65536
Environment=ETCD_UNSUPPORTED_ARCH=arm64
EnvironmentFile=/etc/etcd/env
ExecStart=/usr/bin/etcd \
                --debug \
                --name=etcd-az-1 \
                --listen-peer-urls=https://10.240.1.2:2380 \
                --listen-client-urls=https://10.240.1.2:2379,https://127.0.0.1:2379 \
                --advertise-client-urls=https://etcd.az1.k8s.home:2379 \
                --initial-advertise-peer-urls=https://etcd.az1.k8s.home:2380 \
                --initial-cluster-token=etcd.az1.k8s.home \
                --initial-cluster etcd-az-1=https://etcd.az1.k8s.home:2380,etcd-az-2=https://etcd.az2.k8s.home:2380,etcd-az-3=https://etcd.az3.k8s.home:2380 \
                --initial-cluster-state=new \
                --data-dir=/var/lib/etcd \
                --peer-client-cert-auth \
                --peer-cert-file=/etc/etcd/certs/server/etcd.az1.k8s.home.pem \
                --peer-key-file=/etc/etcd/certs/server/etcd.az1.k8s.home.key \
                --peer-trusted-ca-file=/etc/etcd/certs/rootCA.pem \
                --trusted-ca-file=/etc/etcd/certs/rootCA.pem \
                --cert-file=/etc/etcd/certs/client/etcd.az1.k8s.home.pem \
                --key-file=/etc/etcd/certs/client/etcd.az1.k8s.home.key \
                --client-cert-auth

Restart=on-failure
RestartSec=60

[Install]
WantedBy=multi-user.target
Alias=etcd-server.service