KeepalivedInstance
Scope: Cluster
Version: v1alpha1
CustomResource для настройки keepalived-кластеров.
Один CR KeepalivedInstance
описывает один keepalived-кластер.
metadata.name
— имя кластера, используется в названиях подов.
- specобъект
Обязательный параметр
- spec.nodeSelectorобъект
Обязательный параметр
Определяет
nodeSelector
для Pod’ов с keepalived.Формат: стандартный список
nodeSelector
. Поды инстанса унаследуют это поле как есть. - spec.tolerationsмассив объектов
Определяет
tolerations
для Pod’ов с keepalived.Формат: стандартный список toleration. Поды инстанса унаследуют это поле как есть.
- spec.tolerations.effectстрока
Определяет какому effect’у taint’а соответствует описываемый toleration. Пустой подразумевает соответствие любому effect.
Допустимые значения:
NoSchedule
,PreferNoSchedule
,NoExecute
- spec.tolerations.keyстрока
Определяет какому ключу (key) taint’a соответствует описываемый toleration. Пустой подразумевает соответствие любому ключу.
Если ключ (key) не указан (пуст), то
operator
должен быть —Exists
, что подразумевает соответствие любымvalue
иkey
. - spec.tolerations.operatorстрока
Определяет отношение ключа (key) к значению (value) — должен ли ключ быть равен (
Equal
) значению, или допустимо существование ключа с любым значением.Указание
Exists
равносильно допуску любого значения (для value), чтобы Pod с указанным toleration удовлетворял соответствующему taint.По умолчанию:
"Equal"
Допустимые значения:
Exists
,Equal
- spec.tolerations.tolerationSecondsцелочисленный
Определяет период времени в секундах, в течении которого планировщик должен ждать, прежде чем выгнать (evict) Pod с узла, если toleration перестал удовлетворять taint (справедливо только для effect
NoExecute
, иначе игнорируется).Если не установлено, то Pod не будет выгнан с узла, если toleration перестал удовлетворять taint. Если установлен в ноль (или отрицателен), то Pod будет выгнан с узла немедленно, если toleration перестал удовлетворять taint.
По умолчанию: не установлено.
- spec.tolerations.valueстрока
Значение, которому должен удовлетворять toleration.
Должно быть пустым, если operator —
Exists
.
- spec.tolerations.effectстрока
- spec.vrrpInstancesмассив объектов
Обязательный параметр
Список инстансов VRRP внутри keepalived-кластера. По сути, — список групп адресов, которые мигрируют между серверами одновременно и не могут работать друг без друга.
Не нужно путать
vrrpInstance
иKeepalivedInstance
.vrrpInstance
— это составная частьKeepalivedInstance
.Модуль
keepalived
настраивает VRRP-инстансы таким образом, чтобы все адреса (все группы) не собирались одновременно на одном узле, а распределялись равномерно по всем серверам.- spec.vrrpInstances.idцелочисленный
Обязательный параметр
Уникальный в масштабах всего кластера идентификатор VRRP-группы.
Не нужно использовать одинаковый ID в разных инстансах
KeepalivedInstance
, если у вас на это нет особой причины.Допустимые значения:
1 <= X <= 255
- spec.vrrpInstances.interfaceобъект
Обязательный параметр
Определяет, как вычислить интерфейс для служебного VRRP-трафика на узле.
- spec.vrrpInstances.interface.detectionStrategyстрока
Одна из трёх возможных стратегий определения интерфейса для трафика VRRP:
Name
— задать имя интерфейса явно, с помощью параметраspec.vrrpInstances[].interface.name
. В этом случае все узлы должны иметь одинаковый интерфейс, который смотрит в нужную сеть (например, eth0).NetworkAddress
— найти на узле интерфейс с ip из этой подсети и использовать его.DefaultRoute
— использовать интерфейс, через который определен маршрут по умолчанию на узле (в таблице 254 “main”).
- spec.vrrpInstances.interface.nameстрока
Имя интерфейса для служебного VRRP-трафика в случае использования
detectionStrategy
=Name
.Обязательный параметр в случае использования
detectionStrategy
=Name
. - spec.vrrpInstances.interface.networkAddressстрока
Интерфейс узла с IP-адресом из этой подсети будет использован как служебный в случае использования
detectionStrategy
=NetworkAddress
.Обязательный параметр в случае использования
detectionStrategy
=NetworkAddress
.Шаблон:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$
Пример:
networkAddress: 192.168.42.0/24
- spec.vrrpInstances.interface.detectionStrategyстрока
- spec.vrrpInstances.preemptбулевый
Возвращать ли IP на узел, который восстановился после аварии.
Если у вас один
vrrpInstance
, то разумнее не перекидывать IP лишний раз, чтобы не трогать соединения. Если групп много и трафик большой — то лучше вернуть, чтобы не допустить скопления всех групп на одном узле.По умолчанию —
true
, то есть, IP вернётся на узел, в случае если он вернется в строй. - spec.vrrpInstances.virtualIPAddressesмассив объектов
Обязательный параметр
Список IP-адресов, которые одновременно будут “прыгать” между серверами
- spec.vrrpInstances.virtualIPAddresses.addressстрока
Обязательный параметр
Один из адресов в группе.
Шаблон:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$
Пример:
address: 192.168.42.15/32
- spec.vrrpInstances.virtualIPAddresses.interfaceобъект
Необязательный параметр.
Интерфейс для привязки виртуального IP-адреса на узле. Аналогичен
spec.vrrpInstances[].interface
.Если не указать — будет использован основной, служебный интерфейс, который определен в
spec.vrrpInstances[].interface
.- spec.vrrpInstances.virtualIPAddresses.interface.detectionStrategyстрока
Одна из трёх возможных стратегий определения интерфейса для привязки IP-адреса:
Name
— задать имя интерфейса явно, с помощью параметраspec.vrrpInstances[].virtualIPAddresses[].interface.name
. В этом случае все узлы должны иметь одинаковый интерфейс, который смотрит в нужную сеть (например, eth0).NetworkAddress
— найти на узле интерфейс с IP из этой подсети и использовать его.DefaultRoute
— использовать интерфейс, через который определен маршрут по умолчанию на узле (в таблице 254 “main”).
- spec.vrrpInstances.virtualIPAddresses.interface.nameстрока
Имя интерфейса для привязки виртуального IP-адреса в случае использования
virtualIPaddresses[].detectionStrategy
=Name
.Обязательный параметр в случае использования
virtualIPaddresses[].detectionStrategy
=Name
. - spec.vrrpInstances.virtualIPAddresses.interface.networkAddressстрока
Интерфейс узла с IP-адресом из этой подсети будет использован как служебный в случае использования
virtualIPaddresses[].detectionStrategy
=NetworkAddress
.Обязательный параметр в случае использования
virtualIPaddresses[].detectionStrategy
=NetworkAddress
.Шаблон:
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$
Пример:
networkAddress: 192.168.42.0/24
- spec.vrrpInstances.virtualIPAddresses.interface.detectionStrategyстрока
- spec.vrrpInstances.virtualIPAddresses.addressстрока
- spec.vrrpInstances.idцелочисленный
- spec.nodeSelectorобъект