KeepalivedInstance

Scope: Cluster
Version: v1alpha1

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

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

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

  • spec
    объект

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

    • spec.nodeSelector
      объект

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

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

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

    • spec.tolerations
      массив объектов

      Определяет tolerations для подов с 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, чтобы под с указанным toleration удовлетворял соответствующему taint.

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

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

      • spec.tolerations.tolerationSeconds
        целочисленный

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

        Если не установлено, тогда под не будет выгнан с узла, если toleration перестал удовлетворять taint’у. Если установлен в ноль (или отрицателен), под будет выгнан с узла немедленно, если 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