ALT Container OS подветка K8S. Создание HA кластера: различия между версиями

Материал из ALT Linux Wiki
Строка 23: Строка 23:


Проверьте в sysctl настройку переменных ядра :
Проверьте в sysctl настройку переменных ядра :
  # sysctl -a | grep net.bridge.bridge-nf-call
  sysctl -a | grep net.bridge.bridge-nf-call
  net.bridge.bridge-nf-call-arptables = 0
  net.bridge.bridge-nf-call-arptables = 0
  net.bridge.bridge-nf-call-ip6tables = 0
  net.bridge.bridge-nf-call-ip6tables = 0
Строка 29: Строка 29:


Перечисленные переменные должны иметь нулевое значение, иначе связь между виртуальными машинами не поддерживается.
Перечисленные переменные должны иметь нулевое значение, иначе связь между виртуальными машинами не поддерживается.
Если вывод команду пустой, подключите модуль ''br_netfilter'':
modprobe br_netfilter
Если часть переменных имеет ненулевые значения, сформируйте файл ''/etc/sysctl.d/99-sysctl.conf'':
Если часть переменных имеет ненулевые значения, сформируйте файл ''/etc/sysctl.d/99-sysctl.conf'':
  #
  #
Строка 38: Строка 42:
  net.bridge.bridge-nf-call-arptables = 0
  net.bridge.bridge-nf-call-arptables = 0
и запустите команду:
и запустите команду:
  # sysctl -f /etc/sysctl.d/99-sysctl.conf
  sysctl -f /etc/sysctl.d/99-sysctl.conf


=== Конфигурирование балансировшика ===
=== Конфигурирование балансировшика ===

Версия от 07:07, 17 декабря 2021

Создание высоко-доступного (Highly Available) kubernetes-кластера с несколькими мастерами (control plane) в среде libvirt

K8s cluster.png

Создание ethernet-моста (bridge)

Для выделения IP-адресов узлов кластера в рамках IP-адресов локальной сети необходимо в интерфейсе создания сетевых интерфейсов создать в HOST-системе создать мост (например br0) и связать с ним основной ethernet-интерфейс локальной сети. Ifaceconfig.png

В нашем примере примем IP-адрес HOST-системы - 10.150.0.4/24 в подсети 10.150.0.0/24.

В дальнейшем при создании виртуальных машин в пункте конфигурирования сетевого интерфейса укажите:

  • Создать на базе: Устройство моста
  • Название устройства: br0
  • Состояние связи: активно

Vmnetconfig.png

При развертывания виртуальных машин им будут присваиваться статические адреса из подсети 10.150.0.0/24.

Конфигурирование параметров ядра

Проверьте в sysctl настройку переменных ядра :

sysctl -a | grep net.bridge.bridge-nf-call
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0

Перечисленные переменные должны иметь нулевое значение, иначе связь между виртуальными машинами не поддерживается.

Если вывод команду пустой, подключите модуль br_netfilter:

modprobe br_netfilter

Если часть переменных имеет ненулевые значения, сформируйте файл /etc/sysctl.d/99-sysctl.conf:

#
# Configure kernel parameters at boot.
# See sysctl.d(5) for more details.
#
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

и запустите команду:

sysctl -f /etc/sysctl.d/99-sysctl.conf

Конфигурирование балансировшика

Для работы высоко-доступного (Highly Available) kubernetes-кластера необходимо в HOST-системе поднять балансировщик, распределяющий входящие запросы между мастер-узлами кластера. Для поддержки отказоустойчивости самого балансировщика создают несколько HOST-систем на которых запускают балансировщики разделяющий один общий виртуальный адрес. В данном примере мы будем использовать один балансировщик, располагающийся в HOST-системе.

Для создания балансировщика установите пакеты:

apt-get install haproxy keepalived

Конфигурирование haproxy

Создайте файл конфигурации haproxy /etc/haproxy/haproxy.cfg:

# /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
    log /dev/log local0
    log /dev/log local1 notice
    daemon

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 1
    timeout http-request    10s
    timeout queue           20s
    timeout connect         5s
    timeout client          20s
    timeout server          20s
    timeout http-keep-alive 10s
    timeout check           10s

#---------------------------------------------------------------------
# apiserver frontend which proxys to the control plane nodes
#---------------------------------------------------------------------
frontend apiserver
    bind *:8443
    mode tcp
    option tcplog
    default_backend apiserver
    
#---------------------------------------------------------------------
# round robin balancing for apiserver
#---------------------------------------------------------------------
backend apiserver
    option httpchk GET /healthz
    http-check expect status 200
    mode tcp
    option ssl-hello-chk
    balance     roundrobin
        server master01 10.150.0.159:6443 check
        server master02 10.150.0.158:6443 check


В секции balance roundrobin укажите список имен, IP-адресов и портов 6443 API-интерфейсов мастер-узлов.

Конфигурирование keepalived

Создайте файл конфигурации 'keepalived' /etc/keepalived/keepalived.conf:

! /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}
vrrp_script check_apiserver {
  script "/etc/keepalived/check_apiserver.sh"
  interval 3
  weight -2
  fall 10
  rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface br0
    virtual_router_id  51
    priority 101
    authentication {
        auth_type PASS
        auth_pass 42
    }
    virtual_ipaddress {
        10.150.0.170 
    }
    track_script {
        check_apiserver
    }
}

Скрипт /etc/keepalived/check_apiserver.sh проверят доступность балансировщика 'haproxy':

#!/bin/sh

errorExit() {
    echo "*** $*" 1>&2
    exit 1
}

APISERVER_DEST_PORT=8443
APISERVER_VIP=10.150.0.4
curl --silent --max-time 2 --insecure https://localhost:${APISERVER_DEST_PORT}/ -o /dev/null || errorExit "Error GET https://localhost:${APISERVER_DEST_PORT}/"
if ip addr | grep -q ${APISERVER_VIP}; then
    curl --silent --max-time 2 --insecure https://${APISERVER_VIP}:${APISERVER_DEST_PORT}/ -o /dev/null || errorExit "Error GET https://${APISERVER_VIP}:${APISERVER_DEST_PORT}/"
fi

Добавьте флаг на выполнение скрипта:

chmod a+x /etc/keepalived/check_apiserver.sh

При работающем балансировщики скрипт должен заерщаться с кодом 0.

Запуск сервисов

Для запуска сервисов наберите команды:

systemctl enable haproxy --now


systemctl enable keepalived --now

Проверьте доступность haproxy:

/etc/keepalived/check_apiserver.sh; echo $?

Должен отобразиться код завершения 0.

Конфигурирование и запуск кластера

Конфигурирование и запуск мастер-узлов

Конфигурирование и запуск рабочих (worker) узлов