Эти возможности доступны только в Enterprise Edition. Их функциональность может существенно измениться. В настоящий момент не рекомендуется для самостоятельного использования.

KeepalivedInstance

Scope: Cluster
Version: v1alpha1

CustomResource для настройки keepalived-кластеров.

Один CR KeepalivedInstance описывает один keepalived-кластер.

metadata.name — имя кластера, используется в названиях подов.

  • spec (объект)

    Обязательный параметр.

    • nodeSelector (объект)

      Определяет nodeSelector для подов с keepalived.

      Формат: стандартный список nodeSelector. Поды инстанса унаследуют это поле как есть.

      Обязательный параметр.

    • tolerations (массив объектов)

      Определяет tolerations для подов с keepalived.

      Формат: стандартный список toleration. Поды инстанса унаследуют это поле как есть.

      • effect (строка)

        Определяет какому effect’у taint’а соответствует описываемый toleration. Пустой подразумевает соответствие любому effect.

        Допустимые значения: NoSchedule, PreferNoSchedule, NoExecute

      • key (строка)

        Определяет какому ключу (key) taint’a соответствует описываемый toleration. Пустой подразумевает соответствие любому ключу.

        Если ключ (key) не указан (пуст), то operator должен быть — Exists, что подразумевает соответствие любым value и key.

      • operator (строка)

        Определяет отношение ключа (key) к значению (value) — должен ли ключ быть равен (Equal) значению, или допустимо существование ключа с любым значением.

        Указание Exists равносильно допуску любого значения (для value), чтобы под с указанным toleration удовлетворял соответствующему taint.

        По умолчанию: "Equal"

        Допустимые значения: Exists, Equal

      • tolerationSeconds (целочисленный)

        Определяет период времени в секундах, в течении которого планировщик должен ждать, прежде чем выгнать (evict) Pod с узла, если toleration перестал удовлетворять taint (справедливо только для effect NoExecute, иначе игнорируется).

        Если не установлено, то Pod не будет выгнан с узла, если toleration перестал удовлетворять taint. Если установлен в ноль (или отрицателен), то Pod будет выгнан с узла немедленно, если toleration перестал удовлетворять taint.

        По умолчанию: не установлено.

      • value (строка)

        Значение, которому должен удовлетворять toleration.

        Должно быть пустым, если operator — Exists.

    • vrrpInstances (массив объектов)

      Cписок инстансов VRRP внутри keepalived-кластера. По сути, — список групп адресов, которые мигрируют между серверами одновременно и не могут работать друг без друга.

      Не нужно путать vrrpInstance и KeepalivedInstance. vrrpInstance — это составная часть KeepalivedInstance.

      Модуль keepalived настраивает VRRP-инстансы таким образом, чтобы все адреса (все группы) не собирались одновременно на одной ноде, а распределялись равномерно по всем серверам.

      Обязательный параметр.

      • id (целочисленный)

        Уникальный в масштабах всего кластера идентификатор VRRP-группы.

        Не нужно использовать одинаковый ID в разных инстансах KeepalivedInstance, если у вас на это нет особой причины.

        Допустимые значения: 1 <= X <= 255

        Обязательный параметр.

      • interface (объект)

        Определяет, как вычислить интерфейс для служебного VRRP-трафика на узле.

        Обязательный параметр.

        • detectionStrategy (строка)

          Одна из трёх возможных стратегий определения интерфейса для трафика VRRP:

          • Name — задать имя интерфейса явно, с помощью параметра spec.vrrpInstances[].interface.name. В этом случае все узлы должны иметь одинаковый интерфейс, который смотрит в нужную сеть (например, eth0).
          • NetworkAddress — найти на узле интерфейс с ip из этой подсети и использовать его.
          • DefaultRoute — использовать интерфейс, через который определен маршрут по умолчанию на узле (в таблице 254 “main”).
        • name (строка)

          Имя интерфейса для служебного VRRP-трафика в случае использования detectionStrategy = Name.

          Обязательный параметр в случае использования detectionStrategy = Name.

          Длина: 1..∞

        • 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}$

          Пример: "192.168.42.0/24"

      • preempt (булевый)

        Возвращать ли IP на узел, который восстановился после аварии.

        Если у вас один vrrpInstance, то разумнее не перекидывать IP лишний раз, чтобы не трогать соединения. Если групп много и трафик большой — то лучше вернуть, чтобы не допустить скопления всех групп на одном узле.

        По умолчаниюtrue, то есть, IP вернётся на узел, в случае если он вернется в строй.

      • virtualIPAddresses (массив объектов)

        Список IP-адресов, которые одновременно будут “прыгать” между серверами

        Обязательный параметр.

        • address (строка)

          Один из адресов в группе.

          Шаблон: ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}$

          Пример: "192.168.42.15/32"

          Обязательный параметр.

        • interface (объект)

          Интерфейс для привязки виртуального IP-адреса на узле. Аналогичен spec.vrrpInstances[].interface.

          Если не указать — будет использован основной, служебный интерфейс, который определен в spec.vrrpInstances[].interface.

          Необязательный параметр.

          • detectionStrategy (строка)

            Одна из трёх возможных стратегий определения интерфейса для привязки IP-адреса:

            • Name — задать имя интерфейса явно, с помощью параметра spec.vrrpInstances[].virtualIPAddresses[].interface.name. В этом случае все узлы должны иметь одинаковый интерфейс, который смотрит в нужную сеть (например, eth0).
            • NetworkAddress — найти на узле интерфейс с IP из этой подсети и использовать его.
            • DefaultRoute — использовать интерфейс, через который определен маршрут по умолчанию на узле (в таблице 254 “main”).
          • name (строка)

            Имя интерфейса для привязки виртуального IP-адреса в случае использования virtualIPaddresses[].detectionStrategy = Name.

            Обязательный параметр в случае использования virtualIPaddresses[].detectionStrategy = Name.

            Длина: 1..∞

          • 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}$

            Пример: "192.168.42.0/24"