Расширение хранилища Nexus

Nexus в LCM развёрнут как StatefulSet, а том с данными создаётся из шаблона spec.volumeClaimTemplates. Это поле у существующего StatefulSet неизменяемо, поэтому одного изменения параметра nexus_pv_size в lcm-config.yaml недостаточно — он применяется только при первоначальной установке (см. Предварительные требования). Чтобы увеличить том уже развёрнутого Nexus, вручную расширьте существующий PVC, а затем синхронизируйте с ним шаблон Helm-релиза.

Для расширения PVC Nexus выполните следующие действия:

  1. Откройте файл конфигурации инсталлятора lcm-config.yaml:

    $ cd lcm-k0s/
    $ vi lcm-config.yaml
    

    Увеличьте в нём размер тома Nexus, например:

    nexus_pv_size: "160Gi"
    
  2. Расширьте существующий PVC вручную:

    $ kubectl -n lcm-nexus patch pvc data-nexus3-0 \
        -p '{"spec":{"resources":{"requests":{"storage":"160Gi"}}}}'
    
  3. Проверьте, что PVC расширился:

    $ kubectl -n lcm-nexus get pvc data-nexus3-0
    

    Ожидаемый вывод:

    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
    data-nexus3-0   Bound    pvc-acb70049-d319-4706-a563-85f12e70e26f   160Gi      RWX            ceph-filesystem   <unset>                 12d
    
  4. Проверьте размер внутри пода:

    $ kubectl -n lcm-nexus exec nexus3-0 -c nexus3 -- df -h /nexus-data
    

    Примечание

    Эта проверка показательна только при хранении на Ceph (multi-node). При хранении на NFS (single-node) команда выводит размер всего экспортируемого NFS-каталога, а не тома конкретного пода, поэтому не отражает фактический размер PVC.

    Если под перешёл в CrashLoopBackOff или не стартовал после расширения PVC, удалите его — Kubernetes создаст его заново с уже расширенным томом. На Ceph (multi-node) под также нужно удалить, если внутри него не отображается новый размер. Удаление выполняется следующей командой:

    $ kubectl -n lcm-nexus delete pod nexus3-0
    

    На NFS (single-node) размер не отражает фактический PVC в принципе (см. примечание выше), поэтому при отсутствии ошибок удалять под не нужно.

  5. Для синхронизации Helm-релиза с фактическим размером тома удалите StatefulSet с флагом --cascade=orphan:

    $ kubectl -n lcm-nexus delete sts nexus3 --cascade=orphan
    

    А затем примените конфигурацию:

    $ cd lcm-k0s/
    $ task k8s-install-apps-multi-node
    

    Флаг --cascade=orphan удаляет только контроллер StatefulSet, оставляя под nexus3-0 и PVC data-nexus3-0 нетронутыми. Это нужно, чтобы Helm пересоздал StatefulSet с новым volumeClaimTemplates, не удаляя данные Nexus.

  6. Проверьте, что шаблон Helm-релиза тоже содержит новый размер:

    $ helm -n lcm-nexus get manifest nexus3 \
        | sed -n '/volumeClaimTemplates:/,/persistentVolumeClaimRetentionPolicy:/p'
    

    Ожидаемый результат:

    resources:
      requests:
        storage: "160Gi"