Kube-vip#

Kube-vip — это решение для обеспечения высокой доступности и балансировки нагрузки в кластерах, работающее на основе управления виртуальными IP-адресами (VIP). Kube-vip не требует установки внешних компонентов — он работает внутри самого кластера, используя нативные механизмы Kubernetes, такие как leader election и сетевые протоколы ARP/NDP или BGP.

Основные задачи и возможности
  • Высокая доступность API-сервера Kubernetes: Kube-vip может обеспечить отказоустойчивость плоскости управления, назначая виртуальный IP-адрес на один из мастер узлов. При падении текущего владельца VIP автоматически перемещается на другой доступный узел, обеспечивая непрерывный доступ к API-серверу.

  • Реализация сервиса типа LoadBalancer: Kube-vip может автоматически выделять и управлять виртуальными IP-адресами для сервисов типа LoadBalancer, что устраняет необходимость во внешнем балансировщике нагрузки в bare-metal и on-premise окружениях.

  • Поддержка нескольких режимов работы:

    • Режим Layer 2 (ARP/NDP): Kube-vip назначает виртуальный IP-адрес на сетевой интерфейс активного узла и отвечает на ARP-запросы (для IPv4) или NDP-запросы (для IPv6). При сбое узла VIP перемещается на новый активный узел, который начинает отвечать на сетевые запросы.

    • Режим BGP: Kube-vip взаимодействует с внешними маршрутизаторами по протоколу BGP, анонсируя маршруты к виртуальному IP-адресу. Это обеспечивает балансировку трафика между узлами и более быстрое переключение при сбоях (ECMP).

    • Режим Control Plane Load Balancer: Kube-vip может также балансировать входящие соединения к API-серверу между несколькими мастер узлами с использованием встроенного TCP-балансировщика.

Основные компоненты Kube-vip:

  • kube-vip pod: разворачивается как static pod (для control plane) или как DaemonSet (для рабочих узлов). Отвечает за участие в выборах лидера, управление виртуальным IP-адресом на сетевом интерфейсе узла и взаимодействие по ARP/BGP.

  • Leader Election: встроенный механизм на основе Kubernetes Lease, который определяет, какой узел в данный момент является активным владельцем VIP. При потере связи с текущим лидером автоматически инициируются новые выборы.

  • Cloud Provider / IPAM: компонент, отвечающий за управление пулами IP-адресов и выдачу адресов сервисам типа LoadBalancer.

Конфигурация values#

Значения можно переопределить через редактирование инструмента с именем kube-vip и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».

image – параметры контейнерного образа#

Параметр

Описание

Значение по умолчанию

image.repository

Путь к Docker-образу

'{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-kube-vip/kube-vip'

image.pullPolicy

Политика загрузки образа.
Возможные значения: Always, IfNotPresent, Never

IfNotPresent

image.tag

Тег образа контейнера

"v1.2.2"

config – основная конфигурация инструмента#

Параметр

Описание

Значение по умолчанию

config.address

VIP-адрес для плоскости управления, требуется при включенном cp_enable

"192.168.1.100"

env – параметры переменных окружения контейнера#

Параметр

Описание

Значение по умолчанию

env.vip_interface

Сетевой интерфейс для VIP

""

env.vip_arp

Включение ARP-вещания для VIP

"true"

env.lb_enable

Включение режима балансировки нагрузки

"false"

env.lb_port

Порт балансировщика нагрузки

"6443"

env.vip_subnet

Маска подсети для VIP в формате CIDR

"32"

env.cp_enable

Включение режима плоскости управления

"true"

env.svc_enable

Включение режима обнаружения Service

"false"

env.svc_election

Включение leader-выбора для Service

"false"

env.vip_leaderelection

Включение leader-выбора для pod VIP

"true"

env.prometheus_server

Адрес и порт Prometheus-сервера для метрик

":2112"

extraArgs – дополнительные аргументы#

Параметр

Описание

Значение по умолчанию

extraArgs

Дополнительные аргументы для Kube-vip.
Пример конфигурации:

prometheusHTTPServer: "0.0.0.0:2112"

{}

envValueFrom – переменные окружения из источников#

Параметр

Описание

Значение по умолчанию

envValueFrom

Переменные окружения из источников EnvVarSource.
Пример конфигурации:

bgp_routerid:
  fieldRef:
    fieldPath: status.podIP

{}

envFrom – альтернативные источники переменных окружения#

Параметр

Описание

Значение по умолчанию

envFrom

Внешние Secret или ConfigMap для инъекции переменных окружения.
Пример конфигурации:

apiVersion: v1
data:
  bgp_peers: "<address:AS:password:multihop>"
kind: Secret
name: kube-vip
namespace: kube-system
type: Opaque
- secretKeyRef:
    name: kube-vip

[]

extraLabels – дополнительные метки#

Параметр

Описание

Значение по умолчанию

extraLabels

Дополнительные метки для DaemonSet и pod

{}

annotations – общие аннотации для всех создаваемых ресурсов#

Параметр

Описание

Значение по умолчанию

annotations

Аннотации, добавляемые ко всем создаваемым ресурсам

{}

imagePullSecrets – Secret для загрузки образов#

Параметр

Описание

Значение по умолчанию

imagePullSecrets

Список Secret для загрузки образа контейнера из приватных реестров

[]

nameOverride – переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

nameOverride

Переопределение базового имени ресурсов чарта для генерации имен

""

fullnameOverride – полное переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

fullnameOverride

Полное переопределение имени для всех создаваемых ресурсов чарта

""

namespaceOverride – переопределение пространства имен#

Параметр

Описание

Значение по умолчанию

namespaceOverride

Переопределение пространства имен вместо значения по умолчанию

""

serviceAccount – настройки сервисного аккаунта#

Параметр

Описание

Значение по умолчанию

serviceAccount.create

Включение создания ServiceAccount

true

serviceAccount.annotations

Аннотации, добавляемые ко всем создаваемым ресурсам

{}

serviceAccount.name

Имя ServiceAccount; при пустом значении и create: true генерируется из шаблона fullname

""

podAnnotations – аннотации pod#

Параметр

Описание

Значение по умолчанию

podAnnotations

Аннотации для pod

{}

podSecurityContext – параметры контекста безопасности pod#

Параметр

Описание

Значение по умолчанию

podSecurityContext

Параметры контекста безопасности pod.
Пример конфигурации:

fsGroup: 2000

{}

securityContext – параметры контекста безопасности контейнера#

Параметр

Описание

Значение по умолчанию

securityContext.readOnlyRootFilesystem

Монтирование корневой файловой системы в режиме «только для чтения»

true

securityContext.allowPrivilegeEscalation

Активация разрешения на эскалацию привилегий в контейнере

false

securityContext.capabilities.add

Список добавляемых возможностей

- NET_ADMIN
- NET_RAW

securityContext.capabilities.drop

Список возможностей (capabilities), отзываемых у контейнера

- ALL

securityContext.seccompProfile

Профиль Seccomp для контейнера

type: RuntimeDefault

securityContext.seccompProfile.type

Тип профиля Seccomp

RuntimeDefault

updateStrategy – стратегия обновления ресурсов#

Параметр

Описание

Значение по умолчанию

updateStrategy.type

Стратегия обновления ресурса

RollingUpdate

updateStrategy.rollingUpdate

Параметры постепенного обновления

maxUnavailable: 1

updateStrategy.rollingUpdate.maxUnavailable

Максимальное количество недоступных pod при обновлении

1

resources – запросы и ограничения ресурсов контейнера#

Параметр

Описание

Значение по умолчанию

resources.requests.cpu

Запрашиваемые ресурсы CPU для контейнера

100m

resources.requests.memory

Запрашиваемые ресурсы памяти для контейнера

128Mi

resources.limits.cpu

Ограничение ресурсов CPU для контейнера

500m

resources.limits.memory

Ограничение ресурсов памяти для контейнера

512Mi

volumes – дополнительные тома (Volume)#

Параметр

Описание

Значение по умолчанию

volumes

Дополнительные тома (Volume) для pod.
Пример конфигурации:

- hostPath:
    path: /etc/rancher/k3s/k3s.yaml
    type: File
  name: kubeconfig

[]

volumeMounts – дополнительные точки монтирования томов (VolumeMounts)#

Параметр

Описание

Значение по умолчанию

volumeMounts

Дополнительные точки монтирования томов (VolumeMount).
Пример конфигурации:

- mountPath: /etc/kubernetes/admin.conf
  name: kubeconfig

[]

hostAliases – псевдонимы хостов#

Параметр

Описание

Значение по умолчанию

hostAliases

Список псевдонимов хостов для добавления в /etc/hosts.
Пример конфигурации:

- hostnames:
    - kubernetes
  ip: 127.0.0.1

[]

nodeSelector – селектор узлов для планирования pod#

Параметр

Описание

Значение по умолчанию

nodeSelector

Селектор узлов для планирования pod

{}

tolerations – параметры Toleration для pod#

Параметр

Описание

Значение по умолчанию

tolerations

Toleration для размещения pod на узлах с ограничениями (taints)

- effect: NoSchedule
  key: node-role.kubernetes.io/control-plane
  operator: Exists

affinity – правила привязки (affinity и anti-affinity) pod к узлам#

Параметр

Описание

Значение по умолчанию

affinity

Настройки правила привязки (affinity и anti-affinity) pod к узлам

nodeAffinity:
  requiredDuringSchedulingIgnoredDuringExecution:
    nodeSelectorTerms:
      - matchExpressions:
          - key: node-role.kubernetes.io/control-plane
            operator: Exists

podMonitor – настройки PodMonitor#

Параметр

Описание

Значение по умолчанию

podMonitor.enabled

Включение создания PodMonitor для сбора метрик

true

podMonitor.labels

Метки для PodMonitor

{}

podMonitor.annotations

Аннотации, добавляемые ко всем создаваемым ресурсам

{}

priorityClassName – имя класса приоритета pod#

Параметр

Описание

Значение по умолчанию

priorityClassName

Имя PriorityClass для pod

""