Настройка Kubernetes

Требования к кластеру

Для установки требуется Kubernetes-кластер со следующими характеристиками:

  • архитектура узлов linux/amd64;

  • все рабочие узлы находятся в состоянии Ready;

  • настроен StorageClass по умолчанию;

  • установлен Ingress Controller и зарегистрирован IngressClass; для ingress-nginx используйте приложенную к этой странице PDF-инструкцию (Helm chart 4.15.1, controller v1.15.1);

  • доступен container registry для загрузки образов дистрибутива;

  • настроены DNS и маршрутизация до внешних сервисов;

  • в кластере отсутствуют ограничения, запрещающие создание необходимых ресурсов в целевом namespace.

Рекомендуемый минимальный объём доступных ресурсов:

  • суммарно не менее 4 CPU;

  • суммарно не менее 16 GiB оперативной памяти;

  • не менее 8 GiB доступной памяти на одном рабочем узле.

Для продуктивной эксплуатации объём ресурсов определяется ожидаемой нагрузкой и количеством одновременно выполняемых задач.

Проверка кластера

Выполните:

kubectl cluster-info
kubectl get nodes -o wide
kubectl get storageclass
kubectl get ingressclass

Все используемые узлы должны иметь состояние Ready. Один StorageClass должен быть отмечен как используемый по умолчанию.

Создайте namespace или укажите существующий:

export NS=offline

kubectl create namespace "$NS" \
  --dry-run=client \
  -o yaml | kubectl apply -f -

Проверьте права текущего пользователя:

kubectl auth can-i create deployments -n "$NS"
kubectl auth can-i create statefulsets -n "$NS"
kubectl auth can-i create services -n "$NS"
kubectl auth can-i create secrets -n "$NS"
kubectl auth can-i create jobs -n "$NS"

Для каждой команды ожидается результат yes.

Container registry

Рабочая станция администратора и узлы Kubernetes должны иметь доступ к registry, указанному в конфигурации установки.

Если registry использует внутренний центр сертификации, его корневой сертификат необходимо добавить в доверенные сертификаты Docker или container runtime на всех Kubernetes-узлах.

Для registry без TLS необходимо заранее разрешить его использование в настройках container runtime и указать соответствующие параметры установки.

DNS и сетевой доступ

DNS-имя приложения должно разрешаться в адрес Ingress Controller или внешнего балансировщика.

Проверьте:

getent hosts <доменное-имя>
curl -kI https://<доменное-имя>

До начала установки ответ 404 или 503 допустим. Ошибка разрешения имени или сетевой timeout указывают на проблему DNS, маршрутизации или межсетевого экрана.

TLS

Если TLS завершается в Kubernetes, создайте Secret с сертификатом:

kubectl -n "$NS" create secret tls ml-apps-tls \
  --cert=./tls.crt \
  --key=./tls.key \
  --dry-run=client \
  -o yaml | kubectl apply -f -

Имя Secret указывается в конфигурации установки.

Если TLS завершается на внешнем балансировщике, Kubernetes Secret создавать не требуется.

Внешние PostgreSQL и S3

При использовании внешних PostgreSQL или S3 заранее проверьте:

  • разрешение DNS-имён;

  • доступность портов;

  • корректность учётных данных;

  • наличие базы данных и необходимых прав;

  • наличие S3 bucket или прав на его создание;

  • доверие к TLS-сертификатам внешних сервисов.

  • Нет меток