Уменьшение размера тома сервиса Метрики без потери данных

01 октября 2026

ID 308398

Чтобы уменьшить размер тома сервиса Метрики без потери данных:

  1. Отмонтируйте том сервиса Метрики:
    1. Получите имя тома, используемого сервисом Метрики. В дальнейшем имя тома понадобится для поиска данных тома и реплик тома. Имена реплик начинаются с имени тома.

      sudo k0s kubectl get pvc metrics -n kuma -o json | jq '.spec.volumeName'

    2. Останавите сервис Метрики.

      sudo k0s kubectl scale deployment/metrics -n kuma --replicas=0

    3. Убедитесь, что под сервиса Метрики metrics-<UID> пропал (отсутствует в выводе команды).

      sudo k0s kubectl get pods -n kuma

    4. Если под не пропадает в течение нескольких минут, выполните принудительное удаление. Имя пода нужно взять из вывода предыдущей команды.

      sudo k0s kubectl delete pod metrics-<UID> -n kuma --force

    5. Убедитесь, что том сервиса Метрики перешел в состояние detached.

      sudo k0s kubectl get volume <имя_тома> -n longhorn-system -o json | jq '.status.state'

  2. Создайте временную задачу:
    1. Создайте временную задачу с именем tmp-metrics-job в пространстве имен kuma и подключите том сервиса Метрики.

      sudo k0s kubectl apply -f - <<EOF

      ---

      apiVersion: batch/v1

      kind: Job

      metadata:

      name: tmp-metrics-job

      namespace: kuma

      spec:

      ttlSecondsAfterFinished: 300

      backoffLimit: 0

      parallelism: 1

      completions: 1

      template:

      spec:

      containers:

      - name: tmp-container

      image: docker.io/library/busybox:1.35.0

      imagePullPolicy: IfNotPresent

      command: ["/bin/sh"]

      args:

      - -c

      - >-

      sleep 36000

      volumeMounts:

      - mountPath: /metrics

      name: metrics

      restartPolicy: Never

      volumes:

      - name: metrics

      persistentVolumeClaim:

      claimName: metrics

      EOF

    2. Определите имя рабочего узла, на котором запущена временная задача.

      sudo k0s kubectl get pods -n kuma -o wide | grep tmp-metrics

    3. На этом рабочем узле определите точку монтирования.

      sudo lsblk | grep "<имя_тома>"

    4. Перейдите в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount. Содержимое выглядит примерно следующим образом:

      ls -al

      total 48

      drwxrwsr-x 9 root 65532 4096 Aug 26 10:36 .

      drwxr-x--- 3 root root 4096 Aug 26 11:08 ..

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 certificates

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 dashboards

      drwxrwsr-x 8 root 65532 4096 Aug 26 10:34 data

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 log

      drwxrws--- 2 root 65532 16384 Aug 26 10:34 lost+found

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 rules

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 tmp

  3. Копируйте данные:
    1. Копируйте из директории вида /var/lib/k0s/kubelet/pods/....../mount все данные, кроме каталогов lost+found и tmp во временную директорию с сохранением прав доступа на каталоги и файлы.
    2. После копирования перейдите из точки монтирования в / или /home, чтобы не блокировать последующее демонтирование тома.
  4. Удалите временную задачу, под, PVC и том сервиса Метрики:
    1. Удалите временную задачу с помощью следующей команды:

      sudo k0s kubectl delete job tmp-metrics-job -n kuma

    2. Убедитесь, что под временной задачи metrics-<UID> отсутствует в выводе команды.

      sudo k0s kubectl get pods -n kuma

    3. Если под не пропадает в течение нескольких минут, выполните принудительное удаление. Имя пода нужно взять из вывода предыдущей команды.

      sudo k0s kubectl delete pod tmp-metrics-job-<UID> -n kuma --force

    4. Убедитесь, что том сервиса Метрики перешел в состояние detached.

      sudo k0s kubectl get volume <имя_тома> -n longhorn-system -o json | jq '.status.state'

    5. Удалите PVC сервиса Метрики.

      sudo k0s kubectl delete pvc metrics -n kuma

    6. Убедитесь, что том сервиса Метрики отсутствует в выводе команды.

      sudo k0s kubectl get volume <имя_тома> -n longhorn-system

      На всех рабочих узлах при этом в директории /opt/longhorn/replicas должны пропасть директории, имя которых начинается с имени удаленного тома. Если этого не произошло, то их нужно удалить вручную. Важно не удалить по ошибке реплики, относящиеся к другим томам.

  5. Создайте новый том:
    1. Создайте PVC для сервиса Метрики, предварительно исправив размер в строке storage на нужное значение.

      sudo k0s kubectl apply -f - <<EOF

      ---

      apiVersion: v1

      kind: PersistentVolumeClaim

      metadata:

      name: metrics

      namespace: kuma

      spec:

      accessModes:

      - ReadWriteOnce

      storageClassName: kuma-network-storage

      resources:

      requests:

      storage: 30Gi

      EOF

    2. Заново получите имя тома, используемого сервисом Метрики.

      sudo k0s kubectl get pvc metrics -n kuma -o json | jq '.spec.volumeName'

    3. Снова создайте временную задачу с именем tmp-metrics-job в пространстве имен kuma и подключите новый том сервиса Метрики.

      sudo k0s kubectl apply -f - <<EOF

      ---

      apiVersion: batch/v1

      kind: Job

      metadata:

      name: tmp-metrics-job

      namespace: kuma

      spec:

      ttlSecondsAfterFinished: 300

      backoffLimit: 0

      parallelism: 1

      completions: 1

      template:

      spec:

      containers:

      - name: tmp-container

      image: docker.io/library/busybox:1.35.0

      imagePullPolicy: IfNotPresent

      command: ["/bin/sh"]

      args:

      - -c

      - >-

      sleep 36000

      volumeMounts:

      - mountPath: /metrics

      name: metrics

      restartPolicy: Never

      volumes:

      - name: metrics

      persistentVolumeClaim:

      claimName: metrics

      EOF

    4. Определите имя рабочего узла, на котором запущена временная задача.

      sudo k0s kubectl get pods -n kuma -o wide | grep tmp-metrics

    5. На этом рабочем узле определите точку монтирования.

      sudo lsblk | grep "<имя_тома>"

    6. Перейдите в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount.
  6. Копируйте данные:
    1. Копируйте в найденную директорию вида /var/lib/k0s/kubelet/pods/....../mount ранее сохраненные во временной директории данные сервиса Метрики с сохранением владельцев и прав файлов. В результате содержимое директории будет примерно следующим.

      ls -al

      total 48

      drwxrwsr-x 9 root 65532 4096 Aug 26 10:36 .

      drwxr-x--- 3 root root 4096 Aug 26 11:08 ..

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 certificates

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 dashboards

      drwxrwsr-x 8 root 65532 4096 Aug 26 10:34 data

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 log

      drwxrws--- 2 root 65532 16384 Aug 26 10:34 lost+found

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 rules

      drwx--S--- 2 65532 65532 4096 Aug 26 10:36 tmp

    2. После копирования перейдите из точки монтирования в / или /home, чтобы не блокировать последующее демонтирование тома.
  7. Удалите временную задачу, под, PVC и том сервиса Метрики:
    1. Удалите временную задачу с помощью следующей команды.

      sudo k0s kubectl delete job tmp-metrics-job -n kuma

    2. Убедитесь, что под временной задачи metrics-<UID> отсутствует в выводе команды.

      sudo k0s kubectl get pods -n kuma

    3. Если под не пропадает в течение нескольких минут, выполните форсированное удаление. Имя пода нужно взять из вывода предыдущей команды.

      sudo k0s kubectl delete pod tmp-metrics-job-<UID> -n kuma --force

    4. Убедитесь, что том сервиса Метрики перешел в состояние detached.

      sudo k0s kubectl get volume <имя_тома> -n longhorn-system -o json | jq '.status.state'

  8. Запустите сервис Метрики:
    1. Запустите сервис Метрики с помощью следующей команды, увеличив число реплик до 1.

      sudo k0s kubectl scale deployment/metrics -n kuma --replicas=1

    2. Убедитесь, что под сервиса Метрики запущен и метрики доступны в веб-интерфейсе KUMA.

Уменьшение размера тома сервиса Метрики без потери данных выполнено.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!