Чтобы использовать ContainerdV2 в качестве container runtime на узлах кластера, ОС на виртуальных машинах должны соответствовать следующим требованиям:
- ядро Linux версии 5.8 и новее;
- поддержка
CgroupsV2; - systemd версии
244и новее; - поддержка модуля ядра
erofs.
Подробнее — в документации.
На виртуальных машинах должен быть установлен пакет cloud-init.
После запуска виртуальной машины должны быть запущены следующие службы, связанные с этим пакетом:
cloud-config.service;cloud-final.service;cloud-init.service.
Провайдер поддерживает работу только с одним диском в шаблоне виртуальной машины. Убедитесь, что шаблон содержит только один диск.
Создание сервисного аккаунта
Чтобы Deckhouse Kubernetes Platform могла управлять ресурсами в облаке Yandex Cloud, необходимо создать сервисный аккаунт и выдать ему права на редактирование. Подробная инструкция по созданию сервисного аккаунта в Yandex Cloud доступна в документации провайдера. Далее представлена краткая последовательность необходимых действий:
-
Создайте пользователя с именем
deckhouse. В ответ вернутся параметры пользователя:yc iam service-account create --name deckhouse id: <userID> folder_id: <folderID> created_at: "YYYY-MM-DDTHH:MM:SSZ" name: deckhouse -
Назначьте необходимые роли вновь созданному пользователю для своего облака:
yc resource-manager folder add-access-binding --id <folderID> --role compute.editor --subject serviceAccount:<userID> yc resource-manager folder add-access-binding --id <folderID> --role vpc.admin --subject serviceAccount:<userID> yc resource-manager folder add-access-binding --id <folderID> --role load-balancer.editor --subject serviceAccount:<userID> -
Создайте JSON-файл с параметрами авторизации пользователя в облаке. В дальнейшем с помощью этих данных будет происходить авторизация в облаке:
yc iam key create --service-account-name deckhouse --output deckhouse-sa-key.json
Может потребоваться увеличение квот.
При необходимости зарезервируйте публичный IP-адрес.
Квоты
При заказе нового кластера необходимо увеличить квоты в консоли Yandex Cloud.
Рекомендованные значения квот при создании нового кластера:
- Количество виртуальных процессоров: 64.
- Общий объем SSD-дисков: 2000 ГБ.
- Количество виртуальных машин: 25.
- Общий объем RAM виртуальных машин: 256 ГБ.
Интеграция с Yandex Cloud
Настройка групп безопасности
При создании облачной сети, Yandex Cloud создаёт группу безопасности по умолчанию для всех подключенных сетей, включая сеть кластера Deckhouse Kubernetes Platform. Эта группа безопасности по умолчанию содержит правила разрешающие любой входящий и исходящий трафик и применяется для всех подсетей облачной сети, если на объект (интерфейс ВМ) явно не назначена другая группа безопасности.
Не удаляйте правила по умолчанию, разрешающие любой трафик, до того как закончите настройку правил группы безопасности. Это может нарушить работоспособность кластера.
Ниже приведены общие рекомендации по настройке группы безопасности. Некорректная настройка групп безопасности может сказаться на работоспособности кластера. Пожалуйста, ознакомьтесь с особенностями работы групп безопасности в Yandex Cloud перед использованием в продуктивных средах.
-
Определите облачную сеть, в которой работает кластер Deckhouse Kubernetes Platform.
Название сети совпадает с полем
prefixресурса ClusterConfiguration. Его можно узнать с помощью команды:d8 k get secrets -n kube-system d8-cluster-configuration -ojson | \ jq -r '.data."cluster-configuration.yaml"' | base64 -d | grep prefix | cut -d: -f2 -
В консоли Yandex Cloud выберите сервис Virtual Private Cloud и перейдите в раздел Группы безопасности. У вас должна отображаться одна группа безопасности с пометкой
Default.
-
Создайте правила согласно инструкции Yandex Cloud.

-
Удалите правило, разрешающее любой входящий трафик (на скриншоте выше оно уже удалено), и сохраните изменения.
Интеграция с Yandex Lockbox
С помощью инструмента External Secrets Operator вы можете настроить синхронизацию секретов Yandex Lockbox с секретами кластера Deckhouse Kubernetes Platform.
Приведенную инструкцию следует рассматривать как Быстрый старт. Для использования интеграции в продуктивных средах ознакомьтесь со следующими ресурсами:
Инструкция по развертыванию
-
Создайте сервисный аккаунт, необходимый для работы External Secrets Operator:
yc iam service-account create --name eso-service-account -
Создайте авторизованный ключ для сервисного аккаунта и сохраните его в файл:
yc iam key create --service-account-name eso-service-account --output authorized-key.json -
Назначьте сервисному аккаунту роли
lockbox.editor,lockbox.payloadViewerиkms.keys.encrypterDecrypterдля доступа ко всем секретам каталога:folder_id=<идентификатор каталога> yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role lockbox.editor yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role lockbox.payloadViewer yc resource-manager folder add-access-binding --id=${folder_id} --service-account-name eso-service-account --role kms.keys.encrypterDecrypterДля более тонкой настройки ознакомьтесь с управлением доступом в Yandex Lockbox.
-
Установите External Secrets Operator с помощью Helm-чарта согласно инструкции.
Обратите внимание, что вам может понадобиться задать
nodeSelector,tolerationsи другие параметры. Для этого используйте файл./external-secrets/values.yamlпосле распаковки Helm-чарта.Скачайте и распакуйте чарт:
helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/external-secrets/chart/external-secrets \ --version 0.5.5 \ --untarУстановите Helm-чарт:
helm install -n external-secrets --create-namespace \ --set-file auth.json=authorized-key.json \ external-secrets ./external-secrets/Где:
authorized-key.json— название файла с авторизованным ключом из шага 2.
-
Создайте хранилище секретов SecretStore, содержащее секрет
sa-creds:d8 k -n external-secrets apply -f - <<EOF apiVersion: external-secrets.io/v1alpha1 kind: SecretStore metadata: name: secret-store spec: provider: yandexlockbox: auth: authorizedKeySecretRef: name: sa-creds key: key EOFГде:
sa-creds— названиеSecret, содержащий авторизованный ключ. Этот секрет должен появиться после установки Helm-чарта.key— название ключа в поле.dataсекрета выше.
Проверка работоспособности
-
Проверьте статус External Secrets Operator и созданного хранилища секретов:
$ d8 k -n external-secrets get po NAME READY STATUS RESTARTS AGE external-secrets-55f78c44cf-dbf6q 1/1 Running 0 77m external-secrets-cert-controller-78cbc7d9c8-rszhx 1/1 Running 0 77m external-secrets-webhook-6d7b66758-s7v9c 1/1 Running 0 77m $ d8 k -n external-secrets get secretstores.external-secrets.io NAME AGE STATUS secret-store 69m Valid -
Создайте секрет Yandex Lockbox со следующими параметрами:
- Имя —
lockbox-secret. - Ключ — введите неконфиденциальный идентификатор
password. - Значение — введите конфиденциальные данные для хранения
p@$$w0rd.
- Имя —
-
Создайте объект ExternalSecret, указывающий на секрет
lockbox-secretв хранилищеsecret-store:d8 k -n external-secrets apply -f - <<EOF apiVersion: external-secrets.io/v1alpha1 kind: ExternalSecret metadata: name: external-secret spec: refreshInterval: 1h secretStoreRef: name: secret-store kind: SecretStore target: name: k8s-secret data: - secretKey: password remoteRef: key: <ИДЕНТИФИКАТОР_СЕКРЕТА> property: password EOFГде:
spec.target.name— имя нового секрета. External Secrets Operator создаст этот секрет в кластере Deckhouse Kubernetes Platform и поместит в него параметры секрета Yandex Lockboxlockbox-secret.spec.data[].secretKey— название ключа в поле.dataсекрета, который создаст External Secrets Operator.spec.data[].remoteRef.key— идентификатор созданного ранее секрета Yandex Lockboxlockbox-secret. Например,e6q28nvfmhu539******.spec.data[].remoteRef.property— ключ, указанный ранее, для секрета Yandex Lockboxlockbox-secret.
-
Убедитесь, что новый ключ
k8s-secretсодержит значение секретаlockbox-secret:d8 k -n external-secrets get secret k8s-secret -ojson | jq -r '.data.password' | base64 -dВ выводе команды будет содержаться значение ключа
passwordсекретаlockbox-secret, созданного ранее:p@$$w0rd
Интеграция с Yandex Managed Service for Prometheus
С помощью данной интеграции вы можете использовать Yandex Managed Service for Prometheus в качестве внешнего хранилища метрик, например, для долгосрочного хранения.
Запись метрик
- Создайте сервисный аккаунт с ролью
monitoring.editor. - Создайте API-ключ для сервисного аккаунта.
-
Создайте ресурс
PrometheusRemoteWrite:d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1 kind: PrometheusRemoteWrite metadata: name: yc-remote-write spec: url: <URL_ЗАПИСИ_МЕТРИК> bearerToken: <API_КЛЮЧ> EOFГде:
<URL_ЗАПИСИ_МЕТРИК>— URL со страницы Yandex Monitoring/Prometheus/Запись метрик.<API_КЛЮЧ>— API-ключ, созданный на предыдущем шаге. Например,AQVN1HHJReSrfo9jU3aopsXrJyfq_UHs********.
Также вы можете указать дополнительные параметры в соответствии с документацией.
Подробнее с данной функциональностью можно ознакомиться в документации Yandex Cloud.
Чтение метрик через Grafana
- Создайте сервисный аккаунт с ролью
monitoring.viewer. - Создайте API-ключ для сервисного аккаунта.
-
Создайте ресурс GrafanaAdditionalDatasource:
d8 k apply -f - <<EOF apiVersion: deckhouse.io/v1 kind: GrafanaAdditionalDatasource metadata: name: managed-prometheus spec: type: prometheus access: Proxy url: <URL_ЧТЕНИЕ_МЕТРИК_ЧЕРЕЗ_GRAFANA> basicAuth: false jsonData: timeInterval: 30s httpMethod: POST httpHeaderName1: Authorization secureJsonData: httpHeaderValue1: Bearer <API_КЛЮЧ> EOFГде:
<URL_ЧТЕНИЕ_МЕТРИК_ЧЕРЕЗ_GRAFANA>— URL со страницы Yandex Monitoring/Prometheus/Чтение метрик через Grafana.<API_КЛЮЧ>— API-ключ, созданный на предыдущем шаге. Например,AQVN1HHJReSrfo9jU3aopsXrJyfq_UHs********.
Также вы можете указать дополнительные параметры в соответствии с документацией.
Подробнее с данной функциональностью можно ознакомиться в документации Yandex Cloud.