Доступно только в Enterprise Edition.

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.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.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