Доступно в редакциях:  CE, BE, SE, SE+, EE, CSE Lite (1.73), CSE Pro (1.73)

Стадия жизненного цикла модуля: General Availability

Некоторые параметры кластера, влияющие на управление control plane, также берутся из ресурса ClusterConfiguration.

В модуле реализовано 30 алертов.

Модуль включен по умолчанию в наборе модулей Default. Модуль выключен по умолчанию в наборах модулей: Managed, Minimal.

Как явно включить или отключить модуль...

Явно включить или выключить модуль можно одним из следующих способов:

  • С помощью веб-интерфейса Deckhouse. В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль control-plane-manager, включите (или выключите) переключатель «Модуль включен». Сохраните изменения.

    Пример:

    Интерфейс включения и выключения модуля

  • С помощью Deckhouse CLI (d8).

    Используйте команду d8 system module enable для включения модуля, или d8 system module disable для выключения модуля (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Пример включения модуля control-plane-manager:

    d8 system module enable control-plane-manager
    
  • С помощью ModuleConfig control-plane-manager.

    Установите spec.enabled в true или false в ModuleConfig control-plane-manager (создайте его, при необходимости).

    Пример манифеста для включения модуля control-plane-manager:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: control-plane-manager
    spec:
      enabled: true
    

Как настроить модуль...

Настроить модуль можно одним из следующих способов:

  • С помощью веб-интерфейса Deckhouse.

    В разделе «Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль control-plane-manager, включите переключатель «Дополнительные настройки». Заполните необходимые поля формы на вкладке «Конфигурация», или укажите настройки модуля в формате YAML на вкладке «YAML», не включая секцию settings. Сохраните изменения.

    Пример:

    Интерфейс настройки модуля

    Вы также можете отредактировать объект ModuleConfig control-plane-manager на вкладке «YAML» в окне настроек модуля («Система» → «Управление системой» → «Deckhouse» → «Модули», откройте модуль control-plane-manager), указав версию схемы в параметре spec.version и необходимые параметры модуля в секции spec.settings.

  • С помощью Deckhouse CLI (d8) (требуется Deckhouse CLI (d8), настроенный на работу с кластером).

    Отредактируйте существующий ModuleConfig control-plane-manager (подробнее о настройке Deckhouse читайте в документации), выполнив следующую команду:

    d8 k edit mc control-plane-manager
    

    Внесите необходимые изменения в секцию spec.settings. При необходимости укажите версию схемы в параметре spec.version. Сохраните изменения.

    Вы также можете создать файл манифеста ModuleConfig control-plane-manager, используя пример ниже. Заполните секцию spec.settings необходимыми параметрами модуля. При необходимости укажите версию схемы в параметре spec.version.

    Примените манифест с помощью следующей команды (укажите имя файла манифеста):

    d8 k apply -f <FILENAME>
    

    Пример файла манифеста ModuleConfig control-plane-manager:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: control-plane-manager
    spec:
      version: 3
      enabled: true
      settings: # Параметры модуля из раздела "Параметры" ниже.
    

Конверсии

Модуль настраивается с помощью ресурса ModuleConfig, схема которого содержит номер версии. При применении в кластере старой версии схемы ModuleConfig выполняются автоматические преобразования. Чтобы обновить версию схемы ModuleConfig вручную, необходимо последовательно для каждой версии выполнить следующие действия :

  • Обновление из версии 1 в 2:

    Удалите etcd.externalMembersNames

  • Обновление из версии 2 в 3:

    Замените .apiserver.loadBalancer на .apiserver.publishAPI.loadBalancer.

Параметры

Версия схемы: 3

Пример:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: control-plane-manager
spec:
  version: 3
  enabled: true
  settings:
    resourcesRequests:
      cpu: 1000m
      memory: 500Mi
    apiserver:
      bindToWildcard: true
      certSANs:
      - bakery.infra
      - devs.infra
      publishAPI: {}
  • settings
    объект
    • settings.apiserver
      объект

      Параметры kube-apiserver.

      • settings.apiserver.admissionPlugins
        массив строк

        Список включенных дополнительных admission-плагинов.

        Обратите внимание, что, помимо включенных по умолчанию в Kubernetes admission-плагинов, также всегда включены (без возможности отключения) следующие admission-плагины:

        • ExtendedResourceToleration;
        • PodNodeSelector;
        • PodTolerationRestriction;
        • EventRateLimit, который использует следующую конфигурацию:

          apiVersion: eventratelimit.admission.k8s.io/v1alpha1
          kind: Configuration
          limits:
          - type: Namespace
            qps: 50
            burst: 100
            cacheSize: 2000
          

        Admission-плагин PodNodeSelector не требует указания глобальной конфигурации, он использует только аннотации на пространстве имен (namespace’ах).

        Пример:

        admissionPlugins:
        - AlwaysPullImages
        - NamespaceAutoProvision
        
        • Элемент массива
          строка

          Допустимые значения: AlwaysPullImages, NamespaceAutoProvision, OwnerReferencesPermissionEnforcement, PodNodeSelector, PodTolerationRestriction

      • settings.apiserver.auditLog
        объект

        Параметры аудита.

        По умолчанию: {"output":"File"}

        • settings.apiserver.auditLog.output
          строка

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

          Тип потока для вывода журнала аудита.

          По умолчанию: File

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

          Пример:

          output: Stdout
          
        • settings.apiserver.auditLog.path
          строка

          Путь к директории. Действует только в случае output: "File".

          По умолчанию: /var/log/kube-audit

          Шаблон: ^[a-zA-Z0-9_/.-]+[a-zA-Z0-9_.-]$

      • settings.apiserver.auditPolicyEnabled
        булевый

        Применяет дополнительные политики аудита с конфигурацией из Secret’а kube-system/audit-policy.

        По умолчанию: false

      • settings.apiserver.authn
        объект

        Опциональные параметры аутентификации клиентов Kubernetes API.

        По умолчанию используются данные из ConfigMap, устанавливаемого модулем user-authn.

        • settings.apiserver.authn.oidcCA
          строка

          CA OIDC-провайдера.

        • settings.apiserver.authn.oidcIssuerAddress
          строка

          Сетевой адрес OIDC-провайдера.

          Примеры:

          oidcIssuerAddress: 1.2.3.4
          
          oidcIssuerAddress: ''
          
        • settings.apiserver.authn.oidcIssuerURL
          строка

          URL OIDC-провайдера.

          Пример:

          oidcIssuerURL: https://my-super-site.tech/
          
        • settings.apiserver.authn.webhookCA
          строка

          CA аутентификационного webhook’a.

        • settings.apiserver.authn.webhookCacheTTL
          строка

          Продолжительность кеширования ответов от аутентификационного webhook’a.

          Задается в виде строки с указанием часов и минут: 30m, 1h, 2h30m, 24h.

          Шаблон: ^([0-9]+h)?([0-9]+m)?([0-9]+s)?$

          Пример:

          webhookCacheTTL: 5m
          
        • settings.apiserver.authn.webhookURL
          строка

          URL аутентификационного webhook’а.

          Пример:

          webhookURL: https://127.0.0.1:40443/
          
      • settings.apiserver.authz
        объект

        Параметры авторизации клиентов Kubernetes API.

        По умолчанию используются данные из ConfigMap, устанавливаемого модулем user-authz.

        • settings.apiserver.authz.webhookCA
          строка

          CA webhook’а авторизации.

        • settings.apiserver.authz.webhookURL
          строка

          URL webhook’а авторизации.

          Пример:

          webhookURL: https://127.0.0.1:40443/
          
      • settings.apiserver.basicAuditPolicyEnabled
        булевый

        Применяет базовые политики аудита Deckhouse.

        По умолчанию: true

      • settings.apiserver.bindToWildcard
        булевый

        Прослушивание на 0.0.0.0.

        По умолчанию API-сервер слушает на hostIP, который обычно соответствует Internal-адресу узла, но это зависит от типа кластера (Static или Cloud) и выбранной схемы размещения (layout).

        По умолчанию: false

      • settings.apiserver.certSANs
        массив строк

        Массив строк, список дополнительных SANs, с которыми будет сгенерирован сертификат API-сервера.

        Кроме переданного списка, всегда используется и следующий список:

        • kubernetes;
        • kubernetes.default;
        • kubernetes.default.svc;
        • kubernetes.default.svc.cluster.local;
        • Адрес API-сервера кластера;
        • 127.0.0.1;
        • DNS-имя хоста (hostname);
        • IP-адрес хоста.

        Пример:

        certSANs:
        - my-site.com
        - 192.168.67.76
        
        • Элемент массива
          строка

          Шаблон: ^[0-9a-zA-Z\.-]+$

      • settings.apiserver.encryptionEnabled
        булевый

        Включает шифрование данных в etcd (Encrypting secret data at rest).

        При включении создаётся Secret kube-system/d8-secret-encryption-key с ключом шифрования.

        Поля кастомных ресурсов, помеченные маркером x-kubernetes-sensitive-data: true, защищаются feature gate CRDSensitiveData для kube-apiserver, который включён по умолчанию. Включение этого параметра добавляет шифрование в etcd к фильтрации полей через субресурс <resource>/sensitive на основе RBAC и маскировке значений в журнале аудита.

        Внимание. После включения этот параметр нельзя отключить.

        По умолчанию: false

      • settings.apiserver.publishAPI
        объект

        Настройки публикации доступа к API-серверу Kubernetes.

        • settings.apiserver.publishAPI.ingress
          объект

          Настройки для публикации API через Ingress.

          • settings.apiserver.publishAPI.ingress.addKubeconfigGeneratorEntry
            булевый

            Если указать false, будет удалена запись в kubeconfig-generator.

            По умолчанию: true

          • settings.apiserver.publishAPI.ingress.enabled
            булевый

            Если указать true, в namespace kube-system кластера будет создан Ingress-ресурс kubernetes-api, который откроет публичный доступ к API-серверу.

            По умолчанию: false

          • settings.apiserver.publishAPI.ingress.https
            объект

            Режим работы HTTPS для Ingress API-сервера.

            Примеры:

            https:
              mode: SelfSigned
            
            https:
              mode: Global
              global:
                kubeconfigGeneratorMasterCA: plainstring
            
            • settings.apiserver.publishAPI.ingress.https.global
              объект

              Дополнительный параметр для режима Global.

              • settings.apiserver.publishAPI.ingress.https.global.kubeconfigGeneratorMasterCA
                строка

                Если перед Ingress-контроллером есть внешний балансировщик, который терминирует HTTPS-трафик с использованием непубличного сертификата, укажите цепочку CA в этом параметре. Она будет добавлена в сгенерированные файлы конфигурации kubectl.

                Если вы используете в кластере сертификаты, выдаваемые c помощью модуля cert-manager и Let’s Encrypt, следует в качестве значения установить пустую строку "".

                В качестве CA допускается указать непосредственно сертификат внешнего балансировщика. В таком случае нужно помнить, что обновление сертификата на балансировщике сделает невалидными ранее сгенерированные файлы конфигурации kubectl.

            • settings.apiserver.publishAPI.ingress.https.mode
              строка

              Режим выдачи сертификатов для данного Ingress-ресурса.

              В случае использования режима SelfSigned, для Ingress-ресурса будет выпущен сертификат подписанный CA.

              Получить выпущенный сертификат можно следующей командой: d8 k -n kube-system get secrets kubernetes-api-ca-key-pair -oyaml.

              В случае использования режима Global будут применены политики из глобальной настройки global.modules.https.mode. То есть если в глобальной настройке стоит режим CertManager с ClusterIssuer letsencrypt, для Ingress-ресурса будет заказан сертификат Let’s Encrypt.

              По умолчанию: SelfSigned

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

          • settings.apiserver.publishAPI.ingress.ingressClass
            строка

            Ingress-класс, который будет использован для публикации API Kubernetes через Ingress.

            Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

          • settings.apiserver.publishAPI.ingress.whitelistSourceRanges
            массив строк

            Список адресов в формате CIDR, которым разрешено подключение к API-серверу.

            • Элемент массива
              строка

              Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))?$

        • settings.apiserver.publishAPI.loadBalancer
          объект

          Настройки для публикации API через service с типом LoadBalancer.

          • settings.apiserver.publishAPI.loadBalancer.annotations
            объект

            Аннотации, которые будут проставлены сервису для гибкой настройки балансировщика.

            Внимание. Модуль не учитывает особенности указания аннотаций в различных облаках. Если аннотации для заказа LoadBalancer’а применяются только при создании сервиса, для обновления подобных параметров вам необходимо будет удалить и добавить параметр apiserver.loadBalancer.

          • settings.apiserver.publishAPI.loadBalancer.enabled
            булевый

            Если указать true, будет создан сервис kube-system/d8-control-plane-apiserver с типом LoadBalancer.

            По умолчанию: false

          • settings.apiserver.publishAPI.loadBalancer.port
            целочисленный

            Внешний порт TCP-балансировщика.

            По умолчанию: 443

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

          • settings.apiserver.publishAPI.loadBalancer.sourceRanges
            массив строк

            Список CIDR, которым разрешен доступ к API.

            Облачный провайдер может не поддерживать данную опцию и игнорировать ее.

            • Элемент массива
              строка

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

      • settings.apiserver.serviceAccount
        объект

        Настройки выпуска ServiceAccount’ов.

        Примеры:

        serviceAccount: {}
        
        serviceAccount:
          additionalAPIAudiences:
          - istio-ca
        
        • settings.apiserver.serviceAccount.additionalAPIAudiences
          массив строк

          Список дополнительных API audience’ов, которые следует добавить при создании токенов ServiceAccount.

          Список audience’ов по умолчанию содержит:

          • serviceAccount.issuer, eсли указано
          • serviceAccount.additionalAPIIssuers, eсли указано
          • https://kubernetes.default.svc.${clusterDomain}, например, https://kubernetes.default.svc.cluster.local - этот audience добавляется всегда для обратной совместимости.

          Аутентификатор токенов ServiceAccount проверяет, что токены, использованные с API, привязаны как минимум к одной из этих audiences.

          Этот вариант полезен при переходе от одного издателя API к другому.

        • settings.apiserver.serviceAccount.additionalAPIIssuers
          массив строк

          Список дополнительных издателей API токенов ServiceAccount, которые нужно включить при их создании.

          Эти издатели (iss) используются для проверки источника токенов, чтобы гарантировать, что они поступают от доверенных сущностей.

          Когда указано несколько издателей, то первый используется для генерации токенов, а все указанные издатели принимаются для валидации токенов.

          Этот вариант полезен при переходе от одного API издателя к другому.

        • settings.apiserver.serviceAccount.issuer
          строка

          Издатель ServiceAccount’ов. Это URL API-сервера. Значения этого поля используются как iss claim токена и для проверки JWT-токенов ServiceAccount.

          Издатель по умолчанию автоматически генерируется по шаблону https://kubernetes.default.svc.${clusterDomain}, например, https://kubernetes.default.svc.cluster.local

          Обратите внимание, что все поды в кластере, использующие токены ServiceAccount, должны быть перезапущены при изменении этой опции.

          Пример:

          issuer: https://api.example.com
          
    • settings.enabledFeatureGates
      массив строк

      Список включенных в control plane экспериментальных функций (feature gates).

      Описание отдельных feature gates доступно в документации Kubernetes. Список поддерживаемых в DKP feature gates доступен на странице описания модуля.

      По умолчанию: []

      • Элемент массива
        строка

        Шаблон: ^[a-zA-Z]+$

    • settings.encryptionAlgorithm
      строка

      Алгоритм асимметричного шифрования, используемый при генерации ключей и сертификатов для следующих компонентов control-plane:

      • apiserver;
      • apiserver-kubelet-client;
      • apiserver-etcd-client;
      • front-proxy-client;
      • etcd-server;
      • etcd-peer;
      • etcd-healthcheck-client.

      Сертификаты для перечисленных выше компонентов будут перевыпущены с выбранным алгоритмом и длиной ключа.

      Если параметр не задан, используется значение из ClusterConfiguration.encryptionAlgorithm (по умолчанию RSA-2048).

      Внимание. При перевыпуске сертификатов корневой сертификат (CA) не ротируется. Корневой сертификат создаётся с выбранным алгоритмом только при первичном бутстрапе кластера.

      По умолчанию: RSA-2048

      Допустимые значения: RSA-2048, RSA-3072, RSA-4096, ECDSA-P256

      Пример:

      encryptionAlgorithm: ECDSA-P256
      
    • settings.etcd
      объект

      Параметры etcd.

      • settings.etcd.backup
        объект

        Параметры резервного копирования etcd.

        • settings.etcd.backup.cronSchedule
          строка

          Расписание резервного копирования etcd в формате cron. Используется локальный часовой пояс kube-controller-manager.

          По умолчанию: 0 0 * * *

          Пример:

          cronSchedule: 0 1 * * *
          
        • settings.etcd.backup.enabled
          булевый

          Включение резервного копирование etcd.

          По умолчанию: true

        • settings.etcd.backup.hostPath
          строка

          Путь для хранения резервных копий etcd на master-узлах.

          По умолчанию: /var/lib/etcd

      • settings.etcd.defrag
        объект

        Параметры дефрагментации etcd.

        По умолчанию: {"cronSchedule":"0 1 * * *"}

        • settings.etcd.defrag.cronSchedule
          строка

          Расписание дефрагментации etcd в формате cron (UTC).

          По умолчанию: 0 1 * * *

          Шаблон: ^(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)$

          Пример:

          cronSchedule: 0 1 * * *
          
        • settings.etcd.defrag.enabled
          булевый

          Включение периодической дефрагментации etcd.

          По умолчанию true, если в кластере три и более членов etcd (мастер-узлов ≥ 3 или мастер-узлов = 2 при наличии etcd-арбитра); в остальных случаях — false. Явно заданное значение всегда имеет приоритет над вычисленным по умолчанию.

          Внимание. Включение дефрагментации в кластере с одним master-узлом приведёт к кратковременной недоступности control plane на время выполнения дефрагментации.

      • settings.etcd.maxDbSize
        число

        quota-backend-bytes параметр. Deckhouse автоматически управляет quota-backend-bytes параметром. Если параметр maxDbSize установлен, Deckhouse будет использовать это значение для параметра quota-backend-bytes etcd.

        Минимальное значение: 512MB.

        Максимальное значение: 8GB.

        Экспериментальный. Может быть удален в будущем.

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

    • settings.failedNodePodEvictionTimeoutSeconds
      целочисленный

      Количество секунд, по прошествии которых с узла в статусе Unreachable будут удалены поды.

      Важно! При изменении этого параметра потребуется перезапуск подов.

      По умолчанию: 300

    • settings.nodeMonitorGracePeriodSeconds
      целочисленный

      Число секунд, через которое узел перейдет в состояние Unreachable при потере с ним связи.

      По умолчанию: 40

    • settings.resourcesRequests
      объект

      Количество ресурсов CPU и памяти, выделяемых компонентам control plane на каждом master-узле.

      Эти настройки не применяются, если control plane кластера управляется облачным провайдером, например Google Kubernetes Engine или Azure Kubernetes Service. Подробнее об единицах измерения ресурсов — в документации Kubernetes.

      Пример:

      resourcesRequests:
        cpu: 1000m
        memory: 500Mi
      
      • settings.resourcesRequests.cpu
        строка or число

        Суммарные запросы CPU для компонентов control plane на каждом master-узле.

        Шаблон: ^[0-9]+m?$

      • settings.resourcesRequests.memory
        строка

        Суммарные запросы памяти для компонентов control plane на каждом master-узле.

        Шаблон: ^[0-9]+(\.[0-9]+)?(E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki)?$

    • булевый

      Поддерживать ли символическую ссылку /root/.kube/config на /etc/kubernetes/admin.conf на узлах control-plane.

      Когда включён модуль user-authz и этот параметр равен false, символическая ссылка удаляется, в подах control-plane-manager выставляется переменная окружения NODE_ADMIN_KUBECONFIG соответствующим образом. Для доступа к API с узла используйте d8 k с --kubeconfig=/etc/kubernetes/admin.conf (или другие учётные данные).

      Если модуль user-authz выключен, control-plane-manager этот параметр не учитывает и сохраняет поведение по умолчанию (симлинк создаётся).

      Переключение обратно на true восстанавливает симлинк при следующем цикле согласования.

      По умолчанию: true

      Примеры:

      rootKubeconfigSymlink: true
      
      rootKubeconfigSymlink: false