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

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

  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.

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

В начало