Стадия жизненного цикла модуля: Preview
Как сгенерировать passwordHash?
Для генерации bcrypt-хеша воспользуйтесь командой htpasswd:
$ echo -n '${PASSWORD}' | htpasswd -BinC 10 "" | cut -d: -f2 | tr -d '\n'; echo
Сгенерированный хеш необходимо указать в поле users.${USER_NAME}.passwordHash. Пример:
$ echo -n 'password123' | htpasswd -BinC 10 "" | cut -d: -f2 | tr -d '\n'; echo
$2y$10$CeP/hYvBJ05Ih2azafVyIuuMRpf60am4z6USm4jhHfUPsFDBAmn/u
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: payload-registry
spec:
version: 1
enabled: true
settings:
users:
user-1:
# bcrypt-хеш пароля `password123`
passwordHash: "$2y$10$CeP/hYvBJ05Ih2azafVyIuuMRpf60am4z6USm4jhHfUPsFDBAmn/u"
projects: []
Как добавить образ в проект?
-
Для добавления образа в проект, необходимо настроить пользователя с
FULLправами доступа к проекту. Пример:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: payload-registry spec: version: 1 enabled: true settings: users: user-1: # bcrypt-хеш пароля `password123` passwordHash: "$2y$10$CeP/hYvBJ05Ih2azafVyIuuMRpf60am4z6USm4jhHfUPsFDBAmn/u" projects: - name: "project-1" subPath: "*" access: FULL -
Для возможности отправки образа в проект необходимо, чтобы пространство имён с именем проекта существовало в кластере.
$ kubectl create namespace project-1 -
Авторизуйтесь на своей рабочей машине в payload registry:
$ docker login payload-registry.${PUBLIC_DOMAIN} -u user-1 -p password123 -
Создайте и выполните push образа в payload registry:
$ docker tag ubuntu:latest payload-registry.${PUBLIC_DOMAIN}/project-1/ubuntu:latest $ docker push payload-registry.${PUBLIC_DOMAIN}/project-1/ubuntu:latest -
Проверьте наличие образа в payload registry. Пример проверки с использованием команды
crane:$ crane auth login payload-registry.${PUBLIC_DOMAIN} -u user-1 -p password123 $ crane catalog payload-registry.${PUBLIC_DOMAIN}
Как настроить imagePullSecrets для доступа к проекту?
-
Для создания
imagePullSecretsнастройте пользователя с правами доступаREAD/FULLк проекту. Пример:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: payload-registry spec: version: 1 enabled: true settings: users: user-1: # bcrypt-хеш пароля `password123` passwordHash: "$2y$10$CeP/hYvBJ05Ih2azafVyIuuMRpf60am4z6USm4jhHfUPsFDBAmn/u" projects: - name: "project-1" subPath: "*" access: READ -
Создайте
imagePullSecretsв пространстве имен проектаproject-1, используя следующую команду:$ kubectl create secret docker-registry my-img-pull-secret \ --docker-server="https://payload-registry.${PUBLIC_DOMAIN}" \ --docker-username=user-1 \ --docker-password=password123 \ --namespace=project-1 -
Добавьте
imagePullSecretsк компоненту кластера и укажите образ:apiVersion: v1 kind: Pod metadata: name: ubuntu spec: containers: - name: ubuntu image: payload-registry.${PUBLIC_DOMAIN}/project-1/ubuntu:latest imagePullSecrets: - my-img-pull-secret
Как создать новый PVC?
- Данная процедура описывает создание нового PVC (
PersistentVolumeClaim), что может быть необходимо для смены неизменяемых параметров, таких какstorageClassиaccessModes. - Во время процедуры будет выполнено создание нового PVC без переноса данных из старого.
Изменение таких параметров, как size, можно выполнить без данной процедуры, если это поддерживается провайдером storageClass. Для увеличения size достаточно указать новое значение.
-
Отключите сборщик мусора (GC). Измените значение параметра
settings.gc.enabledнаfalse:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: payload-registry spec: version: 1 enabled: true settings: gc: enabled: false ... -
Дождитесь отключения GC. Убедитесь, что все завершенные задания удалены:
До отключения:
$ kubectl -n d8-payload-registry get jobs NAME STATUS COMPLETIONS DURATION AGE registry-gc-20251008-111705 Complete 1/1 12s 2m48s registry-gc-20251008-111805 Complete 1/1 3s 107s registry-gc-20251008-111905 Complete 1/1 3s 47s $ kubectl -n d8-payload-registry get pods -l "component=gc" NAME READY STATUS RESTARTS AGE registry-gc-20251008-111905-zv7hh 0/1 Completed 0 2m2s registry-gc-20251008-112006-zs69r 0/1 Completed 0 62s registry-gc-20251008-112105-bblpx 0/1 ContainerCreating 0 3sПосле отключения:
$ kubectl -n d8-payload-registry get jobs No resources found in d8-payload-registry namespace. $ kubectl -n d8-payload-registry get pods -l "component=gc" No resources found in d8-payload-registry namespace. -
Укажите новые параметры PVC в разделе
settings.persistence. Укажите новое имя в полеnameдля создания нового PVC:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: payload-registry spec: enabled: true settings: gc: enabled: false ... # Старые параметры PVC # Поле name по умолчанию имеет значение `registry` # persistence: # size: 10Gi # Новые параметры PVC с именем `registry-2` # Новый PVC инициализируется с новым storageClass persistence: name: registry-2 storageClass: network-ssd size: 10Gi ... -
Примените изменения. Дождитесь создания нового PVC и его подключения к реестру.
Проверка создания PVC:
$ kubectl -n d8-payload-registry get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE registry Bound pvc-09cb5d2e-6529-4759-adca-56aa20aead80 10Gi RWO network-hdd <unset> 92m registry-2 Bound pvc-b3f037d2-d3fa-4b2c-8ae1-e9af75ff14d5 10Gi RWO network-ssd <unset> 60sПроверка подключения PVC к реестру:
$ kubectl -n d8-payload-registry get deployment/registry -o yaml | grep 'registry-2' claimName: registry-2 -
Включите сборщик мусора (GC). Укажите значение
trueв полеsettings.gc.enabled:apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: payload-registry spec: version: 1 enabled: true settings: gc: enabled: true ... persistence: name: registry-2 storageClass: network-ssd size: 10Gi -
При необходимости удалите старый PVC. Старый PVC можно подключить обратно, выполнив аналогичную процедуру подключения.
Удаление PVC:
Этот шаг приведет к потере данных, хранящихся в старом PVC.
$ kubectl -n d8-payload-registry delete pvc/registry persistentvolumeclaim "registry" deleted