Deckhouse Kubernetes Platform устанавливает CRD, но не удаляет их при отключении модуля. Если вам больше не нужны созданные CRD, удалите их.
Стадия жизненного цикла модуля: General Availability
ServiceWithHealthchecks
Scope: Namespaced
Version: v1alpha1
Модуль ServiceWithHealthchecks
- строкаapiVersion
- строкаkind
- объектmetadata
- объектspec
Описывает желаемое состояние ServiceWithHealthchecks.
Чтобы создаваемые балансировщики ServiceWithHealthchecks работали, необходимо выполнение следующих условий:
-
В сетевой политике пользовательского проекта, в котором будет создаваться ServiceWithHealthchecks, должно присутствовать правило, разрешающее входящий трафик из всех подов неймспейса
d8-service-with-healthchecks:ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: d8-service-with-healthchecksПодробнее о сетевых политиках — в разделе «Настройка сетевых политик».
-
Кластерная роль, которая используется в ClusterRoleBinding и RoleBinding при назначении прав пользователям и сервисным аккаунтам, для ресурса ServiceWithHealthchecks должна быть расширена следующими правилами:
getlistwatchcreateupdatepatchdelete.
Подробнее — в разделе «Выдача прав пользователям и сервисным аккаунтам».
- булевыйspec.allocateLoadBalancerNodePorts
Определяет, следует ли автоматически выделять NodePort для сервисов типа LoadBalancer. Значение по умолчанию —
true. Значение можно установить вfalse, если балансировщик нагрузки кластера не зависит от NodePorts.Если запрашивающая сторона указывает конкретные значения NodePort, эти запросы будут выполнены независимо от значения этого параметра. Данный параметр может быть установлен только для сервисов типа LoadBalancer и автоматически сбрасывается при изменении типа на другой.
- строкаspec.clusterIP
IP-адрес сервиса.
Обычно, IP-адрес назначается сервису случайным образом. Если IP-адрес указывается вручную, он должен находиться в допустимом диапазоне (заданном конфигурацией системы) и быть свободным для назначения; в противном случае создание сервиса завершится ошибкой.
Поле не подлежит изменению при обновлении, за исключением случаев, когда тип сервиса также изменяется на
ExternalName(в этом случае поле должно быть пустым), или когда тип меняется сExternalName, позволяя задать это поле дополнительно, как указано выше.Допустимые значения:
None, пустая строка (“”), или действительный IP-адрес. Установка этого значения вNoneсоздает сервис без виртуального IP, что полезно, когда предпочтительнее прямое подключение к конечным точкам, и проксирование не требуется. Применимо только к типам ClusterIP, NodePort и LoadBalancer. Если это поле указано при создании сервиса типаExternalName, создание завершится неудачей. Подробнее. - массив строкspec.externalIPs
Список IP-адресов, по которым узлы в кластере также будут принимать трафик для этого сервиса. Эти IP-адреса не управляются Kubernetes. Пользователь несет ответственность за обеспечение доставки трафика на узел с этим IP-адресом.
Общий пример — внешние балансировщики нагрузки, которые не являются частью системы Kubernetes.
- строкаspec.externalName
Внешняя ссылка, которую механизмы обнаружения будут возвращать в качестве псевдонима для этого сервиса (например, DNS-запись CNAME). Проксирование не будет использоваться. Имя должно быть в нижнем регистре и соответствовать стандарту RFC-1123 и требует, чтобы поле
typeбыло установлено вExternalName. - строкаspec.externalTrafficPolicy
Описывает, как узлы распределяют трафик сервиса, который они получают через один из его “внешне направленных” адресов (NodePorts, ExternalIPs и LoadBalancer IPs). Если установлено значение
Local, прокси настроит сервис таким образом, что внешние балансировщики нагрузки будут управлять распределением трафика между узлами, и каждый узел будет передавать трафик только локальным конечным точкам сервиса, не маскируя исходный IP-адрес клиента. Трафик, ошибочно отправленный на узел без конечных точек, будет отброшен.Значение по умолчанию —
Cluster, при котором используется стандартное поведение равномерной маршрутизации ко всем конечным точкам (возможно, с модификациями на основе топологии и других особенностей).Обратите внимание, что трафик, отправленный на External IP или LoadBalancer IP изнутри кластера, всегда будет использовать семантику
Cluster, но клиенты, отправляющие трафик на NodePort внутри кластера, могут учитывать политику трафика при выборе узла. - целочисленныйspec.healthCheckNodePort
Указывает NodePort для проверки состояния сервиса. Это применимо только тогда, когда тип сервиса установлен на LoadBalancer, а параметр
externalTrafficPolicyустановлен наLocal. Если указано значение, оно находится в допустимом диапазоне и не используется, то оно будет применено.Если не указано, значение будет назначено автоматически. Внешние системы (например, балансировщики нагрузки) могут использовать этот порт, чтобы определить, содержит ли узел конечные точки для этого сервиса.
Если это поле указано при создании сервиса, который в этом не нуждается, создание завершится ошибкой. Это поле будет очищено при изменении параметров сервиса, например, при изменении типа.
Это поле не может быть обновлено после установки.
- объектspec.healthcheck
Обязательный параметр
- целочисленныйspec.healthcheck.initialDelaySeconds
Время в секундах после страта пода, по истечении которого запускаются пробы.
По умолчанию:
10Допустимые значения:
0 <= X <= 108000 - целочисленныйspec.healthcheck.periodSeconds
Период в секундах для повторных запусков проб.
По умолчанию:
10Допустимые значения:
1 <= X <= 108000 - массив объектовspec.healthcheck.probes
- целочисленныйspec.healthcheck.probes.failureThreshold
Минимальное количество последовательных неудач, после которых проба будет считаться неудачной.
По умолчанию:
3Допустимые значения:
1 <= X - объектspec.healthcheck.probes.http
- строкаspec.healthcheck.probes.http.caCert
CA-сертификат для HTTPS соединения.
- строкаspec.healthcheck.probes.http.host
Имя хоста для подключения, по умолчанию используется IP-адрес пода.
- массив объектовspec.healthcheck.probes.http.httpHeaders
Пользовательские заголовки, которые будут добавлены к HTTP-запросу и использованы при выполнении пробы. Разрешены повторяющиеся заголовки.
- строкаspec.healthcheck.probes.http.httpHeaders.name
Обязательный параметр
Имя заголовка.
При выводе будет приведено к стандартному виду (lowercase), так что заголовки с разным регистром будут распознаваться как одинаковые.
- строкаspec.healthcheck.probes.http.httpHeaders.value
Обязательный параметр
Значение заголовка.
- булевыйspec.healthcheck.probes.http.insecureSkipTLSVerify
Указывает, следует ли клиенту пропустить проверку цепочки сертификатов TLS сервера и имени хоста.
По умолчанию:
false - строкаspec.healthcheck.probes.http.method
Метод, который будет использоваться для запроса.
По умолчанию:
GETДопустимые значения:
GET,HEAD - строкаspec.healthcheck.probes.http.path
Путь для доступа к HTTP-серверу.
- строкаspec.healthcheck.probes.http.scheme
Схема, используемая для подключения к хосту.
По умолчанию:
HTTPДопустимые значения:
HTTP,HTTPS - целочисленныйspec.healthcheck.probes.http.targetPort
Обязательный параметр
Номер порта для доступа к контейнеру.
Допустимые значения:
1 <= X <= 65535
- строкаspec.healthcheck.probes.mode
Режим для проверки.
Допустимые значения:
HTTP,TCP,PostgreSQL - объектspec.healthcheck.probes.postgreSQL
- строкаspec.healthcheck.probes.postgreSQL.authSecretName
Имя секрета (Secret), расположенного в том же пространстве имен, что и этот ресурс. Секрет может содержать следующие поля аутентификации:
tlsMode,clientCert,clientKey,aCert,password,user.Внимание. Тип секрета должен быть
network.deckhouse.io/postgresql-credentials. - строкаspec.healthcheck.probes.postgreSQL.dbName
Имя базы данных, используемое при подключении. Если не указать, то будет использовано имя пользователя.
- строкаspec.healthcheck.probes.postgreSQL.query
Запрос к PostgreSQL для тестирования.
Чтобы считаться успешным, запрос должен возвращать одно из следующих значений:
TRUE,t,true,y,yes,1.Внимание. Привилегии для пользователя, под которым выполняются запросы, должны быть минимальными.
По умолчанию:
select 1 - целочисленныйspec.healthcheck.probes.postgreSQL.targetPort
Обязательный параметр
Номер порта для доступа к контейнеру.
Допустимые значения:
1 <= X <= 65535
- целочисленныйspec.healthcheck.probes.successThreshold
Минимальное количество последовательных успешных проверок, после которых проверка считается успешной после предыдущих неудач.
По умолчанию:
1Допустимые значения:
1 <= X - объектspec.healthcheck.probes.tcp
- целочисленныйspec.healthcheck.probes.tcp.targetPort
Обязательный параметр
Номер порта для доступа к контейнеру.
Допустимые значения:
1 <= X <= 65535
- целочисленныйspec.healthcheck.probes.timeoutSeconds
Число секунд, по истечении которых проверка завершится по таймауту.
По умолчанию:
1Допустимые значения:
1 <= X
- строкаspec.internalTrafficPolicy
Описывает, как узлы распределяют трафик сервиса, который они получают через ClusterIP.
Если параметр установлен на
Local, прокси предполагает, что поды взаимодействуют только с конечными точками сервиса, находящимися на том же узле, что и под. Трафик будет отброшен, если на узле нет локальных конечных точек.Значение по умолчанию —
Cluster, при котором используется стандартное поведение маршрутизации ко всем конечным точкам равномерно (возможны изменения в зависимости от топологии и других функций). - массив строкspec.ipFamilies
Семейство IP-адресов (например, IPv4, IPv6), назначенных сервису. Это поле обычно назначается автоматически на основе конфигурации кластера и поля
ipFamilyPolicy.Если поле указано вручную и запрашиваемое семейство доступно в кластере, а
ipFamilyPolicyэто позволяет, оно будет использовано; в противном случае создание сервиса завершится ошибкой. Это поле можно изменять условно: допускается добавление или удаление вторичного IP-семейства, но нельзя изменить основное семейство IP-адресов сервиса.Допустимые значения —
IPv4иIPv6. Это поле применяется только к сервисам типов ClusterIP, NodePort и LoadBalancer.Это поле будет удалено при обновлении сервиса до типа
ExternalName.Эти семейства должны соответствовать значениям поля
clusterIPs, если оно указано. ПоляclusterIPsиipFamiliesуправляются полемipFamilyPolicy. Поле может содержать максимум два значения.- строкаЭлемент массива
IPFamilyпредставляет семейство IP-адресов (IPv4 или IPv6).Этот тип используется для указания семейства IP-адресов, выраженного типом, например
service.spec.ipFamilies.
- строкаspec.ipFamilyPolicy
Требуемая или запрашиваемая поддержка двух стеков для сервиса.
Если значение не указано, это поле будет установлено в
SingleStack. Сервисы могут бытьSingleStack(одно IP-семейство),PreferDualStack(два IP-семейства на кластерах с двойным стеком или одно IP-семейство на кластерах с одним стеком) илиRequireDualStack(два семейства IP-адресов на кластерах с двойным стеком, в противном случае возникнет ошибка).Поля
ipFamiliesиclusterIPsзависят от значения этого поля. Это поле будет очищено при обновлении сервиса до типаExternalName. - строкаspec.loadBalancerClass
Класс реализации балансировщика нагрузки, к которому принадлежит этот сервис. Если указано, значение этого поля должно быть идентификатором в стиле лейбла с необязательным префиксом, например,
internal-vipилиexample.com/internal-vip. Имена без префикса зарезервированы для конечных пользователей.Это поле может быть установлено только тогда, когда тип сервиса —
LoadBalancer.Если тип не указан, используется реализация балансировщика нагрузки по умолчанию, которая обычно осуществляется через интеграцию с облачным провайдером, но должна применяться для любой реализации по умолчанию.
Если тип указан, предполагается, что реализация балансировщика нагрузки отслеживает сервисы с соответствующим классом. Любая реализация балансировщика нагрузки по умолчанию (например, облачные провайдеры) должна игнорировать сервисы, устанавливающие это поле. Это поле может быть установлено только при создании или обновлении сервиса до типа
LoadBalancer.После установки его нельзя изменить. Это поле будет очищено, когда сервис будет обновлен до типа, отличного от
LoadBalancer. - строкаspec.loadBalancerIP
Применяется только для типа сервиса LoadBalancer. Эта функция зависит от того, поддерживает ли облачный провайдер возможность указания
loadBalancerIPпри создании балансировщика нагрузки.Это поле будет игнорироваться, если облачный провайдер не поддерживает данную функцию.
- массив строкspec.loadBalancerSourceRanges
Если указано и поддерживается платформой, это ограничит трафик через облачный балансировщик нагрузки только для указанных клиентских IP-адресов.
Это поле будет игнорироваться, если облачный провайдер не поддерживает данную функцию. Подробнее.
- массив объектовspec.ports
Список портов, которые открыты этим сервисом. Подробнее.
ServicePort содержит информацию о порте сервиса.
- строкаspec.ports.appProtocol
Протокол приложения для данного порта. Служит подсказкой для реализаций, позволяя предложить более расширенное поведение для поддерживаемых протоколов. Это поле следует стандартному синтаксису лейблов Kubernetes. Допустимые значения:
- Именования протоколов без префиксов — зарезервированы для стандартных имён служб IANA, в соответствии с RFC-6335.
- Именования с префиксом, определенные Kubernetes:
- Другие протоколы должны использовать имена с определенными реализациями, например с такими как
mycompany.com/my-custom-protocol.
- строкаspec.ports.name
Имя этого порта внутри службы соответствует стандарту
DNS_LABEL.Все порты внутри ServiceSpec должны иметь уникальные имена. При рассмотрении конечных точек для службы имя должно совпадать с полем
nameвEndpointPort. Имя не должно совпадать с полемname, если в этой службе определен только одинServicePort. - целочисленныйspec.ports.nodePort
Порт на каждом узле, на котором эта служба открыта, когда тип равен NodePort или LoadBalancer. Обычно назначается системой. Если указано значение, оно должно быть в диапазоне и не должно использоваться, иначе операция завершится с ошибкой.
Если не указано, порт будет выделен, если этой службе это требуется.
Если это поле указано при создании службы, которая в этом не нуждается, создание завершится с ошибкой.
Это поле будет очищено при обновлении службы, например, при изменении типа с NodePort на ClusterIP. Подробнее.
- целочисленныйspec.ports.port
Обязательный параметр
Порт, который будет открыт этой службой.
- строкаspec.ports.protocol
IP-протокол для этого порта. Поддерживает
TCP,UDPиSCTP.По умолчанию:
TCP - целочисленныйspec.ports.targetPort
Номер порта для доступа к подам, на которые нацелен сервис.
Это поле игнорируется для сервисов с
clusterIP=Noneи должно быть установлено равным полюport. Подробнее.
- булевыйspec.publishNotReadyAddresses
Указывает, что любые агенты, занимающиеся обработкой конечных точек данного сервиса, должны игнорировать статусы готовности или неготовности. Основное применение этого поля заключается в том, чтобы сервисы
StatefulSetмогли распространять записи SRV DNS для своих подов с целью обнаружения пиров.Контроллеры Kubernetes, которые генерируют ресурсы
EndpointsиEndpointSliceдля сервисов, трактуют это как указание, что все конечные точки следует считать “готовыми”, даже если поды не прошли пробы и не готовы. - объектspec.selector
Маршрутизирует трафик сервиса к подам, у которых ключи и значения лейблов соответствуют этому селектору. Если параметр не определен, предполагается, что у сервиса есть внешний процесс, управляющий его конечными точками, которые Kubernetes не будет изменять.
Применимо только к типам ClusterIP, NodePort и LoadBalancer.
Игнорируется, если тип — ExternalName. Подробнее.
- строкаspec.sessionAffinity
Используется для поддержания сессий с привязкой к клиенту. Должно быть указано значение либо
ClientIP, либоNone. Подробнее. - объектspec.sessionAffinityConfig
Содержит конфигурацию привязки сессий.
- объектspec.sessionAffinityConfig.clientIP
Содержит конфигурацию привязки сессий на основе IP-адреса клиента.
- целочисленныйspec.sessionAffinityConfig.clientIP.timeoutSeconds
Указывает время удержания сессии для типа
ClientIPв секундах.Значение должно быть
>0 && <=86400(для 1 дня), еслиServiceAffinity == ClientIP.
- строкаspec.trafficDistribution
Позволяет задать предпочтения по распределению трафика между конечными точками сервиса. Реализации могут учитывать это поле как рекомендацию, но не обязаны строго его соблюдать.
Если поле не задано, реализация применяет стратегию маршрутизации по умолчанию. Если установлено значение
PreferClose, реализации должны приоритизировать конечные точки, которые топологически близки (например, в той же зоне). - строкаspec.type
Определяет доступность сервиса.
По умолчанию используется ClusterIP. Допустимые варианты: ExternalName, ClusterIP, NodePort и LoadBalancer.
ClusterIP выделяет внутренний IP-адрес для балансировки нагрузки между конечными точками. Конечные точки определяются
selectorили, если он не указан, вручную с помощью объектовEndpointsилиEndpointSlice.Если значение
clusterIPустановлено наNone, виртуальный IP не выделяется, и конечные точки публикуются как набор конечных точек, а не как виртуальный IP.NodePort расширяет ClusterIP и выделяет порт на каждом узле, который маршрутизируется к тем же конечным точкам, что и
clusterIP.LoadBalancer расширяет NodePort и создает внешний балансировщик нагрузки (если поддерживается текущим облаком), который маршрутизируется к тем же конечным точкам, что и
clusterIP.ExternalName создает алиас этому сервису на указанный
externalName. Некоторые другие поля не применяются к сервисам типа ExternalName.
-
- объектstatus
Определяет наблюдаемое состояние
ServiceWithHealthchecks.- массив объектовstatus.conditions
Текущее состояние сервиса
Condition contains details for one aspect of the current state of this API Resource. This struct is intended for direct use as an array at the field path
.status.conditions.- строкаstatus.conditions.lastTransitionTime
Обязательный параметр
Последнее время изменения, когда условие перешло из одного состояния в другое. Это должно соответствовать времени изменения основного условия.
Если время неизвестно, можно использовать время изменения поля API.
- строкаstatus.conditions.message
Обязательный параметр
Понятное человеку сообщение, указывающее детали перехода.
Это может быть пустая строка.
Максимальная длина:
32768 - целочисленныйstatus.conditions.observedGeneration
Значение
.metadata.generation, на основе которого было установлено состояние.Например, если
.metadata.generationравно 12, а.status.conditions[x].observedGenerationравно 9, то состояние устарело по отношению к текущему состоянию экземпляра.Допустимые значения:
0 <= X - строкаstatus.conditions.reason
Обязательный параметр
Программный идентификатор, указывающий причину последнего перехода состояния. Производители конкретных типов состояний могут определить ожидаемые значения и их значения для этого поля, а также то, считаются ли эти значения гарантированным API.
Значение должно быть строкой в
CamelCase.Это поле не может быть пустым.
Шаблон:
^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$Длина:
1..1024 - строкаstatus.conditions.status
Обязательный параметр
Состояние условия, одно из значений
True,False,Unknown.Допустимые значения:
True,False,Unknown - строкаstatus.conditions.type
Обязательный параметр
Тип условия в формате
CamelCaseили в видеfoo.example.com/CamelCase.Многие значения
.condition.typeпоследовательны для различных ресурсов, таких какAvailable, но поскольку произвольные условия могут быть полезными (см..node.status.conditions), важна возможность разрешения конфликтов. Регулярное выражение, которому оно соответствует: (dns1123SubdomainFmt/)?(qualifiedNameFmt)Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Максимальная длина:
316
- массив объектовstatus.endpointStatuses
Текущие состояние службы
- массив строкstatus.endpointStatuses.failedProbes
- строкаstatus.endpointStatuses.lastProbeTime
- строкаstatus.endpointStatuses.nodeName
- строкаstatus.endpointStatuses.podName
Обязательный параметр
- булевыйstatus.endpointStatuses.probesSuccessful
- булевыйstatus.endpointStatuses.ready
- объектstatus.healthcheckCondition
- строкаstatus.healthcheckCondition.activeNodeName
- целочисленныйstatus.healthcheckCondition.endpoints
- целочисленныйstatus.healthcheckCondition.observedGeneration
- целочисленныйstatus.healthcheckCondition.readyEndpoints
- объектstatus.loadBalancer
Содержит текущее состояние балансировщика нагрузки, если он присутствует.
- массив объектовstatus.loadBalancer.ingress
Список, содержащий точки входа для балансировщика нагрузки. Трафик, предназначенный для сервиса, должен направляться на эти точки входа.
Представляет состояние точки входа балансировщика нагрузки: трафик, предназначенный для сервиса, должен направляться на эту точку входа.
- строкаstatus.loadBalancer.ingress.hostname
Устанавливается для точек входа балансировщика нагрузки, которые основаны на DNS (обычно балансировщики нагрузки AWS).
- строкаstatus.loadBalancer.ingress.ip
Устанавливается для точек входа балансировщика нагрузки, которые основаны на IP-адресах (обычно балансировщики нагрузки GCE или OpenStack).
- строкаstatus.loadBalancer.ingress.ipMode
Указывает, как ведет себя IP-адрес балансировщика нагрузки и может быть указан только при указании поля
ip. Установка значенияVIPозначает, что трафик доставляется на узел с назначением, установленным на IP-адрес и порт балансировщика нагрузки. Установка значенияProxyуказывает, что трафик доставляется на узел или под с назначением, установленным на IP-адрес узла и порт узла или IP-адрес пода и порт.Реализации сервиса могут использовать эту информацию для настройки маршрутизации трафика.
- массив объектовstatus.loadBalancer.ingress.ports
Список записей портов сервиса.
Если используется, каждый порт, определенный в сервисе, должен иметь соответствующую запись в этом списке.
- строкаstatus.loadBalancer.ingress.ports.error
Запись проблемы с портом сервиса.
Формат ошибки должен соответствовать следующим правилам:
- Встроенные значения ошибок должны быть указаны в этом файле и использовать имена в формате CamelCase.
- Специфические для облачного провайдера значения ошибок должны иметь имена,
соответствующие формату
foo.example.com/CamelCase.
Регулярное выражение, с которым это соответствует: (dns1123SubdomainFmt/)?(qualifiedNameFmt)
Шаблон:
^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$Максимальная длина:
316 - целочисленныйstatus.loadBalancer.ingress.ports.port
Обязательный параметр
Номер порта сервиса, статус которого указан.
- строкаstatus.loadBalancer.ingress.ports.protocol
Обязательный параметр
Протокол порта сервиса, статус которого здесь записан. Поддерживаемые значения:
TCP,UDP,SCTP.По умолчанию:
TCP