Это критический этап для обеспечения отказоустойчивости (HA). Теперь мы работаем только на первых трех нодах (k8s-srv1, k8s-srv2, k8s-srv3), так как воркеры (srv4-5) не участвуют в балансировке API.
## Шаг 1: Установка пакетов (Пункт a)
Выполни на k8s-srv1, k8s-srv2, k8s-srv3:
sudo apt-get update
sudo apt-get install -y keepalived haproxy
------------------------------
## Шаг 2: Настройка Keepalived (Пункт c)
Создай файл /etc/keepalived/keepalived.conf. Внимание: приоритеты и роли различаются для каждой ноды.
Для k8s-srv1:
vrrp_instance VI_1 {
state MASTER
interface eth0 # проверь имя интерфейса через ip a, может быть ens18
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 42
}
virtual_ipaddress {
192.168.0.253/24
}
}
* Для k8s-srv2: измени state на BACKUP и priority на 105.
* Для k8s-srv3: измени state на BACKUP и priority на 100.
Запуск: sudo systemctl enable --now keepalived
------------------------------
## Шаг 3: Настройка HAProxy (Пункт d)
На всех трех control-plane нодах конфиг /etc/haproxy/haproxy.cfg должен быть одинаковым:
global
log /dev/log local0
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
timeout connect 5000
timeout client 50000
timeout server 50000
# d.i: Frontend на порту 7443
frontend k8s-api
bind *:7443
default_backend k8s-nodes
# d.ii: Backend с roundrobin по серверам на 6443
backend k8s-nodes
balance roundrobin
server k8s-srv1 192.168.0.201:6443 check
server k8s-srv2 192.168.0.202:6443 check
server k8s-srv3 192.168.0.203:6443 check
# d.iii: Статистика на порту 9000
listen stats
bind *:9000
mode http
stats enable
stats uri /haproxy_stats
stats refresh 10s
Запуск: sudo systemctl enable --now haproxy
------------------------------
## Шаг 4: Настройка доступа с adm-pc (Пункт e)
Чтобы adm-pc мог открыть статистику по доменному имени haproxy.au-team.cloud, нужно сопоставить это имя с нашим VIP.
1. На adm-pc (или на вашем DNS-сервере infra-srv1, если он уже настроен) добавьте запись в /etc/hosts:
192.168.0.253 haproxy.au-team.cloud
2. Теперь проверьте в браузере на adm-pc: http://haproxy.au-team.cloud:9000/haproxy_stats
------------------------------
## Как проверить работу HA?
1. Проверка VIP: На k8s-srv1 введи ip a. Ты должен увидеть адрес 192.168.0.253 на сетевом интерфейсе.
2. Тест отказа: Выключи k8s-srv1. Введи ip a на k8s-srv2 — VIP должен мгновенно "переехать" туда.
3. Порт: Убедись, что порт 7443 слушается: ss -tulpn | grep 7443.
Все настроено? Если да, то теперь мы готовы к самому главному — kubeadm init через виртуальный IP!
Если возникли ошибки при старте haproxy (например, "cannot bind socket"), дай знать, возможно нужно подправить параметры ядра для разрешения binding нелокальных IP.