Как сгенерировать 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: []

Как добавить образ в проект?

  1. Для добавления образа в проект, необходимо настроить пользователя с 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
    
  2. Для возможности отправки образа в проект необходимо, чтобы пространство имён с именем проекта существовало в кластере.

    $ kubectl create namespace project-1
    
  3. Авторизуйтесь на своей рабочей машине в payload registry:

    $ docker login payload-registry.${PUBLIC_DOMAIN} -u user-1 -p password123
    
  4. Создайте и выполните 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
    
  5. Проверьте наличие образа в payload registry. Пример проверки с использованием команды crane:

    $ crane auth login payload-registry.${PUBLIC_DOMAIN} -u user-1 -p password123
    $ crane catalog payload-registry.${PUBLIC_DOMAIN}
    

Как настроить imagePullSecrets для доступа к проекту?

  1. Для создания 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
    
  2. Создайте 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
    
  3. Добавьте 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 достаточно указать новое значение.

  1. Отключите сборщик мусора (GC). Измените значение параметра settings.gc.enabled на false:

    apiVersion: deckhouse.io/v1alpha1
    kind: ModuleConfig
    metadata:
      name: payload-registry
    spec:
      version: 1
      enabled: true
      settings:
        gc:
          enabled: false
        ...
    
  2. Дождитесь отключения 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.
    
  3. Укажите новые параметры 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
      ...
    
  4. Примените изменения. Дождитесь создания нового 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
    
  5. Включите сборщик мусора (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
    
  6. При необходимости удалите старый PVC. Старый PVC можно подключить обратно, выполнив аналогичную процедуру подключения.

    Удаление PVC:

    Этот шаг приведет к потере данных, хранящихся в старом PVC.

    $ kubectl -n d8-payload-registry delete pvc/registry
    persistentvolumeclaim "registry" deleted